2
3
4
5
6
7
8
9 CHARACTER UPLO
10 INTEGER IA, JA, N
11
12
13 INTEGER DESCA( * )
14 DOUBLE PRECISION 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 DOUBLE PRECISION ONE
128 parameter( one = 1.0d+0 )
129
130
131 INTEGER IACOL, IAROW, ICURR, IDIAG, IIA, IOFFA, JJA,
132 $ LDA, MYCOL, , NA, NPCOL, NPROW
133 DOUBLE PRECISION AII
134
135
137
138
139 LOGICAL LSAME
140 DOUBLE PRECISION DDOT
142
143
144
145
146
147 IF( n.EQ.0 )
148 $ RETURN
149
150
151
153 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
154 $ iarow, iacol )
155
156 IF( myrow.EQ.iarow .AND. mycol.EQ.iacol ) THEN
157
158 lda = desca( lld_ )
159 idiag = iia + ( jja - 1 ) * lda
160
161
162 IF(
lsame'U' ) )
THEN
163
164
165
166 DO 10 na = n-1, 1, -1
167 aii = a( idiag )
168 icurr = idiag + lda
169 a( idiag ) = aii*aii +
ddot( na, a( icurr ), lda
170 $ a( icurr ), lda )
171 CALL dgemv(
'No transpose', n-na-1, na, one,
172 $
173 $ a( ioffa ), 1 )
174 idiag = idiag + lda + 1
175 ioffa = ioffa + lda
176 10 CONTINUE
177 aii = a( idiag )
178 CALL dscal( n, aii, a( ioffa ), 1 )
179
180 ELSE
181
182
183
184 DO 20 na = 1, n-1
185 aii = a( idiag )
186 icurr = idiag + 1
187 a(idiag) = aii*aii +
ddot( n-na, a( icurr ), 1,
188 $ a( icurr ), 1 )
189 CALL dgemv(
'Transpose', n-na, na-1, one, a( ioffa+1 ),
190 $ lda, a( icurr ), 1, aii, a( ioffa ), lda )
191 idiag = idiag + lda + 1
192 ioffa = ioffa + 1
193 20 CONTINUE
194 aii = a( idiag )
195 CALL dscal( n, aii, a( ioffa ), lda )
196
197 END IF
198
199 END IF
200
201 RETURN
202
203
204
logical function lsame(ca, cb)
LSAME
subroutine dscal(n, da, dx, incx)
DSCAL
double precision function ddot(n, dx, incx, dy, incy)
DDOT
subroutine dgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
DGEMV
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)