1 SUBROUTINE pcunmtr( SIDE, UPLO, TRANS, M, N, A, IA, JA, DESCA,
2 $ TAU, C, IC, JC, DESCC, WORK, LWORK, INFO )
10 CHARACTER SIDE, TRANS, UPLO
11 INTEGER IA, IC, INFO, JA, JC, LWORK, M, N
14 INTEGER DESCA( * ), DESCC( * )
15 COMPLEX A( * ), C( * ), TAU( * ), WORK( * )
235 INTEGER BLOCK_CYCLIC_2D, , CTXT_, DLEN_, DTYPE_,
236 $ lld_, mb_, m_, nb_, n_, rsrc_
237 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
238 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
239 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
242 LOGICAL LEFT, LQUERY, , UPPER
243 INTEGER IAA, IAROW, ICC, ICCOL, ICOFFC, ICROW, ICTXT,
244 $ iinfo, iroffa, iroffc, jaa, jcc, lcm, lcmq,
245 $ lwmin, mi, mpc0, mycol, myrow, ni, npa0, npcol,
249 INTEGER IDUM1( 4 ), IDUM2( 4 )
257 INTEGER ILCM, INDXG2P,
258 EXTERNAL ilcm, indxg2p, lsame,
numroc
261 INTRINSIC cmplx, ichar,
max, mod, real
267 ictxt = desca( ctxt_ )
273 IF( nprow.EQ.-1 )
THEN
276 left = lsame( side, 'l
' )
277 NOTRAN = LSAME( TRANS, 'n
' )
278 UPPER = LSAME( UPLO, 'u
' )
303 CALL CHK1MAT( MI, 4, NQ-1, 4, IAA, JAA, DESCA, 9, INFO )
308 CALL CHK1MAT( NI, 5, NQ-1, 5, IAA, JAA, DESCA, 9, INFO )
310 CALL CHK1MAT( MI, 4, NI, 5, ICC, JCC, DESCC, 14, INFO )
312 IROFFA = MOD( IAA-1, DESCA( MB_ ) )
313 IROFFC = MOD( ICC-1, DESCC( MB_ ) )
314 ICOFFC = MOD( JCC-1, DESCC( NB_ ) )
315 IAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),
317 ICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ),
319 ICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ),
321 MPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,
323 NQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,
327 LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ) / 2,
328 $ ( MPC0 + NQC0 ) * DESCA( NB_ ) ) +
329 $ DESCA( NB_ ) * DESCA( NB_ )
331 NPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,
333 LCM = ILCM( NPROW, NPCOL )
335 LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) )
336 $ / 2, ( NQC0 + MAX( NPA0 + NUMROC( NUMROC(
337 $ NI+ICOFFC, DESCA( NB_ ), 0, 0, NPCOL ),
338 $ DESCA( NB_ ), 0, 0, LCMQ ), MPC0 ) ) *
339 $ DESCA( NB_ ) ) + DESCA( NB_ ) * DESCA( NB_ )
342 WORK( 1 ) = CMPLX( REAL( LWMIN ) )
343.EQ.
LQUERY = ( LWORK-1 )
344.NOT..AND..NOT.
IF( LEFT LSAME( SIDE, 'r
' ) ) THEN
346.NOT..AND..NOT.
ELSE IF( UPPER LSAME( UPLO, 'l
' ) ) THEN
348.NOT.
ELSE IF( LSAME( TRANS, 'n.AND.
' )
349.NOT.
$ LSAME( TRANS, 'c
' ) ) THEN
351.NOT..AND..NE.
ELSE IF( LEFT DESCA( MB_ )DESCC( NB_ ) ) THEN
353.AND..NE.
ELSE IF( LEFT IROFFAIROFFC ) THEN
355.AND..NE.
ELSE IF( LEFT IAROWICROW ) THEN
357.NOT..AND..NE.
ELSE IF( LEFT IROFFAICOFFC ) THEN
359.AND..NE.
ELSE IF( LEFT DESCA( MB_ )DESCC( MB_ ) ) THEN
361.NE.
ELSE IF( ICTXTDESCC( CTXT_ ) ) THEN
363.LT..AND..NOT.
ELSE IF( LWORKLWMIN LQUERY ) THEN
369 IDUM1( 1 ) = ICHAR( 'l
' )
371 IDUM1( 1 ) = ICHAR( 'r
' )
375 IDUM1( 2 ) = ICHAR( 'u
' )
377 IDUM1( 2 ) = ICHAR( 'l
' )
381 IDUM1( 3 ) = ICHAR( 'n
' )
383 IDUM1( 3 ) = ICHAR( 'c
' )
386.EQ.
IF( LWORK-1 ) THEN
393 CALL PCHK2MAT( MI, 4, NQ-1, 4, IAA, JAA, DESCA, 9, MI, 4,
394 $ NI, 5, ICC, JCC, DESCC, 14, 4, IDUM1, IDUM2,
397 CALL PCHK2MAT( NI, 5, NQ-1, 5, IAA, JAA, DESCA, 9, MI, 4,
398 $ NI, 5, ICC, JCC, DESCC, 14, 4, IDUM1, IDUM2,
404 CALL PXERBLA( ICTXT, 'pcunmtr', -INFO )
406 ELSE IF( LQUERY ) THEN
412.EQ..OR..EQ..OR..EQ.
IF( M0 N0 NQ1 )
419 CALL PCUNMQL( SIDE, TRANS, MI, NI, NQ-1, A, IA, JAA, DESCA,
420 $ TAU, C, ICC, JCC, DESCC, WORK, LWORK, IINFO )
426 CALL PCUNMQR( SIDE, TRANS, MI, NI, NQ-1, A, IAA, JAA, DESCA,
427 $ TAU, C, ICC, JCC, DESCC, WORK, LWORK, IINFO )
431 WORK( 1 ) = CMPLX( REAL( LWMIN ) )
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pxerbla(contxt, srname, info)
subroutine pchk2mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, mb, mbpos0, nb, nbpos0, ib, jb, descb, descbpos0, nextra, ex, expos, info)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
subroutine pcunmqr(side, trans, m, n, k, a, ia, ja, desca, tau, c, ic, jc, descc, work, lwork, info)
integer function numroc(n, nb, iproc, isrcproc, nprocs)
subroutine pcunmql(side, trans, m, n, k, a, ia, ja, desca, tau, c, ic, jc, descc, work, lwork, info)
subroutine pcunmtr(side, uplo, trans, m, n, a, ia, ja, desca, tau, c, ic, jc, descc, work, lwork, info)