1 SUBROUTINE pcgelqrv( M, N, A, IA, JA, DESCA, TAU, WORK )
13 COMPLEX A( * ), TAU( * ), WORK( * )
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 )
128 parameter( one = ( 1.0e+0, 0.0e+0 ),
129 $ zero = ( 0.0e+0, 0.0e+0 ) )
132 CHARACTER COLBTOP, ROWBTOP
133 INTEGER I, IACOL, IAROW, IB, ICOFF, ICTXT, IIA, IL, IN,
134 $ IPT, IPV, IPW, J, JJA, JV, K, MYCOL, MYROW,
138 INTEGER DESCV( DLEN_ )
145 INTEGER ICEIL, NUMROC
155 ictxt = desca( ctxt_ )
159 in =
min( iceil( ia, desca( mb_ ) ) * desca( mb_ ), ia+k-1 )
160 il =
max( ( (ia+k-2) / desca( mb_ ) ) * desca( mb_ ) + 1, ia )
162 icoff = mod( ja-1, desca( nb_ ) )
163 CALL infog2l( il, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
165 nq = numroc( n+icoff, desca( nb_ ), mycol, iacol, npcol )
167 ipt = ipv + nq * desca( mb_ )
168 ipw = ipt + desca( mb_ ) * desca( mb_ )
169 CALL pb_topget( ictxt,
'Broadcast', 'rowwise
', ROWBTOP )
170 CALL PB_TOPGET( ICTXT, 'broadcast
', 'columnwise
', COLBTOP )
171 CALL PB_TOPSET( ICTXT, 'broadcast
', 'rowwise
', ' ' )
172 CALL PB_TOPSET( ICTXT, 'broadcast
', 'columnwise
', 'd-ring
' )
174 CALL DESCSET( DESCV, DESCA( MB_ ), N + ICOFF, DESCA( MB_ ),
175 $ DESCA( NB_ ), IAROW, IACOL, ICTXT, DESCA( MB_ ) )
177 DO 10 I = IL, IN+1, -DESCA( MB_ )
178 IB = MIN( IA+K-I, DESCA( MB_ ) )
180 JV = 1 + I - IA + ICOFF
184 CALL PCLARFT( 'forward
', 'rowwise
', N-J+JA, IB, A, I, J, DESCA,
185 $ TAU, WORK( IPT ), WORK( IPW ) )
189 CALL PCLACPY( 'upper
', IB, N-J+JA, A, I, J, DESCA, WORK( IPV ),
191 CALL PCLASET( 'lower
', IB, N-J+JA, ZERO, ONE, WORK( IPV ), 1,
197 CALL PCLASET( 'upper
', IB, N-J+JA-1, ZERO, ZERO, A, I, J+1,
202 CALL PCLARFB( 'right
', 'conjugate transpose
', 'forward
',
203 $ 'rowwise
', M-I+IA, N-J+JA, IB, WORK( IPV ), 1,
204 $ JV, DESCV, WORK( IPT ), A, I, J, DESCA,
207 DESCV( RSRC_ ) = MOD( DESCV( RSRC_ ) + NPROW - 1, NPROW )
217 CALL PCLARFT( 'forward
', 'rowwise
', N, IB, A, IA, JA, DESCA, TAU,
218 $ WORK( IPT ), WORK( IPW ) )
222 CALL PCLACPY( 'upper
', IB, N, A, IA, JA, DESCA, WORK( IPV ), 1,
224 CALL PCLASET( 'lower', ib, n, zero, one, work, 1, icoff+1, descv )
229 CALL pclaset(
'Upper', ib, n-1, zero, zero, a, ia, ja+1, desca )
233 CALL pclarfb(
'Right',
'Conjugate transpose',
'Forward',
234 $
'Rowwise', m, n, ib, work( ipv ), 1, icoff+1, descv,
235 $ work( ipt ), a, ia, ja, desca, work( ipw ) )
237 CALL pb_topset( ictxt,
'Broadcast',
'Rowwise', rowbtop )
238 CALL pb_topset( ictxt,
'Broadcast',
'Columnwise', colbtop )
subroutine pclarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc, work)