1 SUBROUTINE pclahrd( N, K, NB, A, IA, JA, DESCA, TAU, T, Y, IY, JY,
10 INTEGER IA, IY, JA, JY, K, N,
13 INTEGER DESCA( * ), DESCY( * )
14 COMPLEX A( * ), T( * ), TAU( * ), WORK( * ), Y( * )
132 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, ,
133 $ lld_, mb_, m_, nb_, n_, rsrc_
134 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
135 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
138 parameter( one = ( 1.0e+0, 0.0e+0 ),
139 $ zero = ( 0.0e+0, 0.0e+0 ) )
143 INTEGER I, IACOL, IAROW, ICTXT, IOFF, II, J, JJ, ,
144 $ jt, jw, l, myrow, mycol, npcol, nprow, nq
148 INTEGER DESCW( DLEN_ )
169 ictxt = desca( ctxt_ )
172 ioff = mod( ja-1, desca( nb_ ) )
173 CALL infog2l( ia+k, ja, desca, nprow, npcol, myrow, mycol, ii,
176 iproc = ( myrow.EQ.iarow .AND. mycol.EQ.iacol )
177 nq = numroc( n+ja-1, desca( nb_ ), mycol, iacol, npcol )
184 CALL descset( descw, 1, desca( mb_ ), 1, desca( mb_ ), iarow,
197 CALL pclacgv( l-1, a, i, ja, desca, desca( m_ ) )
198 CALL pcgemv(
'No transpose', n, l-1, -one, y, iy, jy, descy,
199 $ a, i, ja, desca, desca( m_ ), one, a, ia
201 CALL pclacgv( l-1, a, i, ja, desca, desca( m_ ) )
214 CALL ccopy( l-1, a( (jj+l-2)*desca( lld_ )+ii ), 1,
216 CALL ctrmv(
'Lower',
'Conjugate transpose', 'unit
', L-1,
217 $ A( (JJ-1)*DESCA( LLD_ )+II ), DESCA( LLD_ ),
223 CALL PCGEMV( 'conjugate transpose
', N-K-L+1, L-1, ONE, A,
224 $ I+1, JA, DESCA, A, I+1, J, DESCA, 1, ONE, WORK,
225 $ 1, JW, DESCW, DESCW( M_ ) )
230 $ CALL CTRMV( 'upper
', 'conjugate transpose
', 'non-unit
',
231 $ L-1, T, DESCA( NB_ ), WORK( JW ), 1 )
235 CALL PCGEMV( 'no transpose
', N-K-L+1, L-1, -ONE, A, I+1, JA,
236 $ DESCA, WORK, 1, JW, DESCW, DESCW( M_ ), ONE,
237 $ A, I+1, J, DESCA, 1 )
242 CALL CTRMV( 'lower
', 'no transpose
', 'unit
', L-1,
243 $ A( (JJ-1)*DESCA( LLD_ )+II ), DESCA( LLD_ ),
245 CALL CAXPY( L-1, -ONE, WORK( JW ), 1,
246 $ A( ( JJ+L-2 )*DESCA( LLD_ )+II ), 1 )
248 CALL PCELSET( A, I, J-1, DESCA, EI )
254 CALL PCLARFG( N-K-L+1, EI, I+1, J, A, MIN( I+2, N+IA-1 ), J,
256 CALL PCELSET( A, I+1, J, DESCA, ONE )
260 CALL PCGEMV( 'no transpose
', N, N-K-L+1, ONE, A, IA, J+1,
261 $ DESCA, A, I+1, J, DESCA, 1, ZERO, Y, IY, JY+L-1,
263 CALL PCGEMV( 'conjugate transpose
', N-K-L+1, L-1, ONE, A, I+1,
264 $ JA, DESCA, A, I+1, J, DESCA, 1, ZERO, WORK, 1, JW,
265 $ DESCW, DESCW( M_ ) )
266 CALL PCGEMV( 'no transpose
', N, L-1, -ONE, Y, IY, JY, DESCY,
267 $ WORK, 1, JW, DESCW, DESCW( M_ ), ONE, Y, IY,
269 JL = MIN( JJ+L-1, JA+NQ-1 )
270 CALL PCSCAL( N, TAU( JL ), Y, IY, JY+L-1, DESCY, 1 )
275 JT = ( L-1 ) * DESCA( NB_ )
276 CALL CSCAL( L-1, -TAU( JL ), WORK( JW ), 1 )
277 CALL CCOPY( L-1, WORK( JW ), 1, T( JT+1 ), 1 )
278 CALL CTRMV( 'upper
', 'no transpose
', 'non-unit
', L-1, T,
279 $ DESCA( NB_ ), T( JT+1 ), 1 )
280 T( JT+L ) = TAU( JL )
284 CALL PCELSET( A, K+NB+IA-1, J, DESCA, EI )
subroutine pclahrd(n, k, nb, a, ia, ja, desca, tau, t, y, iy, jy, descy, work)