2
3
4
5
6
7
8
9 CHARACTER UPLO
10 INTEGER IA, JA, N
11
12
13 INTEGER DESCA( * )
14 COMPLEX A( * )
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
123 $ LLD_, MB_, M_, NB_, N_, RSRC_
124 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
125 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
126 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
127 COMPLEX ONE
128 parameter( one = ( 1.0e+0, 0.0e+0 ) )
129
130
131 INTEGER IACOL, IAROW, ICURR, IDIAG, IIA, IOFFA, JJA,
132 $ LDA, MYCOL, MYROW, NA, NPCOL, NPROW
133 REAL AII
134 COMPLEX DOTC
135
136
137 EXTERNAL blacs_gridinfo,
ccdotc, cgemv, clacgv,
139
140
141 LOGICAL LSAME
143
144
145 INTRINSIC cmplx, real
146
147
148
149
150
151 IF( n.EQ.0 )
152 $ RETURN
153
154
155
156 CALL blacs_gridinfo( desca( ctxt_ ), nprow, npcol, myrow, mycol )
157 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
158 $ iarow, iacol )
159
160 IF( myrow.EQ.iarow .AND. mycol.EQ.iacol ) THEN
161
162 lda = desca( lld_ )
163 idiag = iia + ( jja - 1 ) * lda
164 ioffa = idiag
165
166 IF(
lsame( uplo,
'U' ) )
THEN
167
168
169
170 DO 10 na = n-1, 1, -1
171 aii = a( idiag )
172 icurr = idiag + lda
173 CALL ccdotc( na, dotc, a( icurr ), lda, a( icurr ), lda )
174 a( idiag ) = aii*aii + real( dotc )
175 CALL clacgv( na, a( icurr ), lda )
176 CALL cgemv( 'No transpose', n-na-1, na, one,
177 $ a( ioffa+lda ), lda, a( icurr ), lda,
178 $
cmplx( aii ), a( ioffa ), 1 )
179 CALL clacgv( na, a( icurr ), lda )
180 idiag = idiag + lda + 1
181 ioffa = ioffa + lda
182 10 CONTINUE
183 aii = a( idiag )
184 CALL csscal( n, aii, a( ioffa ), 1 )
185
186 ELSE
187
188
189
190 DO 20 na = 1, n-1
191 aii = a( idiag )
192 icurr = idiag + 1
193 a(idiag) = aii*aii + real( cdotc( n-na, a( icurr ), 1,
194 $ a( icurr ), 1 ) )
195 CALL clacgv( na-1, a( ioffa ), lda )
196 CALL cgemv( 'Conjugate transpose', n-na, na-1, one,
197 $ a( ioffa+1 ), lda, a( icurr ), 1,
198 $
cmplx( aii ), a( ioffa ), lda )
199 CALL clacgv( na-1, a( ioffa ), lda )
200 idiag = idiag + lda + 1
201 ioffa = ioffa + 1
202 20 CONTINUE
203 aii = a( idiag )
204 CALL csscal( n, aii, a( ioffa ), lda )
205
206 END IF
207
208 END IF
209
210 RETURN
211
212
213
subroutine ccdotc(n, dotc, x, incx, y, incy)
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)