2
3
4
5
6
7
8
9 CHARACTER*1 UPLO
10 INTEGER IOFFD, LDA, M, N
11 COMPLEX*16 ALPHA
12
13
14 COMPLEX*16 A( LDA, * )
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106 COMPLEX*16 ONE, ZERO
107 parameter( one = ( 1.0d+0, 0.0d+0 ),
108 $ zero = ( 0.0d+0, 0.0d+0 ) )
109
110
111 INTEGER J, JTMP, MN
112
113
115
116
117 LOGICAL LSAME
119
120
122
123
124
125
126
127 IF( ( m.LE.0 ).OR.( n.LE.0 ).OR.(
alpha.EQ.one ) )
128 $ RETURN
129
130
131
132 IF(
alpha.EQ.zero )
THEN
133 CALL ztzpad( uplo,
'N', m, n, ioffd, zero, zero, a, lda )
134 RETURN
135 END IF
136
137 IF(
lsame( uplo,
'L' ) )
THEN
138
139
140
141 mn =
max( 0, -ioffd )
142 DO 10 j = 1,
min( mn, n )
144 10 CONTINUE
145 DO 20 j = mn + 1,
min( m - ioffd, n )
146 jtmp = j + ioffd
147 IF( m.GE.jtmp )
148 $
CALL zscal( m-jtmp+1,
alpha, a( jtmp, j ), 1 )
149 20 CONTINUE
150
151 ELSE IF(
lsame( uplo,
'U' ) )
THEN
152
153
154
155 mn =
min( m - ioffd, n )
156 DO 30 j =
max( 0, -ioffd ) + 1, mn
158 30 CONTINUE
159 DO 40 j =
max( 0, mn ) + 1, n
161 40 CONTINUE
162
163 ELSE IF(
lsame( uplo,
'D' ) )
THEN
164
165
166
167 DO 50 j =
max( 0, -ioffd ) + 1,
min( m - ioffd, n )
168 jtmp = j + ioffd
169 a( jtmp, j ) =
alpha * a( jtmp, j )
170 50 CONTINUE
171
172 ELSE
173
174
175
176 DO 60 j = 1, n
178 60 CONTINUE
179
180 END IF
181
182 RETURN
183
184
185
logical function lsame(ca, cb)
LSAME
subroutine zscal(n, za, zx, incx)
ZSCAL
subroutine ztzpad(uplo, herm, m, n, ioffd, alpha, beta, a, lda)