2
3
4
5
6
7
8
9 CHARACTER UPLO
10 INTEGER IA, JA, N
11
12
13 INTEGER DESCA( * )
14 REAL 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_, ,
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 REAL ONE
128 parameter( one = 1.0e+0 )
129
130
131 INTEGER , IAROW, , IDIAG, IIA, IOFFA, JJA,
132 $ LDA, MYCOL, MYROW, NA, , NPROW
133 REAL AII
134
135
137
138
139 LOGICAL LSAME
140 REAL SDOT
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 ioffa = idiag
161
162 IF(
lsame( uplo,
'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 +
sdot( na, a( icurr ), lda,
170 $ a( icurr ), lda )
171 CALL sgemv(
'No transpose', n-na-1, na, one,
172 $ a( ioffa+lda ), lda, a( icurr ), lda, aii,
173 $ a( ioffa ), 1 )
174 idiag = idiag + lda + 1
175 ioffa = ioffa + lda
176 10 CONTINUE
177 aii = a( idiag )
178 CALL sscal( 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 +
sdot( n-na, a( icurr ), 1,
188 $ a( icurr ), 1 )
189 CALL sgemv(
'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 sscal( 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 sscal(n, sa, sx, incx)
SSCAL
real function sdot(n, sx, incx, sy, incy)
SDOT
subroutine sgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
SGEMV
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)