1 SUBROUTINE pcgehd2( N, ILO, IHI, A, IA, JA, DESCA, TAU, WORK,
10 INTEGER IA, IHI, ILO, INFO, JA, LWORK, N
14 COMPLEX A( * ), TAU( * ), WORK( * )
192 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
195 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
198 parameter( one = ( 1.0e+0, 0.0e+0 ) )
202 INTEGER I, IAROW, ICOFFA, ICTXT, IROFFA, J, K, LWMIN,
212EXTERNAL indxg2p, numroc
221 ictxt = desca( ctxt_ )
227 IF( nprow.EQ.-1 )
THEN
230 CALL chk1mat( n, 1, n, 1, ia, ja, desca, 7, info )
232 iroffa = mod( ia-1, desca( mb_ ) )
233 icoffa = mod( ja-1, desca( nb_ ) )
236 npa0 = numroc( ihi+iroffa, desca( mb_ ), myrow, iarow,
238 lwmin = desca( nb_ ) +
max( npa0, desca( nb_ )
240 work( 1 ) =
cmplx( real( lwmin ) )
242 IF( ilo.LT.1 .OR. ilo.GT.
max( 1, n ) )
THEN
244 ELSE IF( ihi.LT.
min( ilo, n ) .OR. ihi.GT.n )
THEN
246 ELSE IF( iroffa.NE.icoffa )
THEN
248 ELSE IF( desca( mb_ ).NE.desca( nb_ ) )
THEN
250 ELSE IF( lwork.LT.lwmin .AND. .NOT.lquery
THEN
257 CALL pxerbla( ictxt,
'PCGEHD2', -info )
258CALL blacs_abort( ictxt, 1 )
260 ELSE IF( lquery )
THEN
271 CALL pclarfg( ihi-k, aii, i+1, j, a,
min( i+2, n+ia-1 ), j,
273 CALL pcelset( a, i+1, j, desca, one )
277 CALL pclarf(
'Right', ihi, ihi-k, a, i+1, j, desca, 1, tau, a,
278 $ ia, j+1, desca, work )
282 CALL pclarfc(
'Left', ihi-k, n-k, a, i+1, j, desca, 1, tau, a,
283 $ i+1, j+1, desca, work )
285 CALL pcelset( a, i+1, j, desca, aii )
288 work( 1 ) =
cmplx( real( lwmin ) )
subroutine pcgehd2(n, ilo, ihi, a, ia, ja, desca, tau, work, lwork, info)
subroutine pclarf(side, m, n, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
subroutine pclarfc(side, m, n, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)