3
    4
    5
    6
    7
    8
    9
   10      CHARACTER          UPLO
   11      INTEGER            IA, IB, INFO, JA, JB, N, NRHS
   12
   13
   14      INTEGER            DESCA( * ), DESCB( * )
   15      COMPLEX*16         A( * ), B( * )
   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
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
  146      INTEGER            BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
  147     $                   LLD_, MB_, M_, NB_, N_, RSRC_
  148      parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
  149     $                     ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
  150     $                     rsrc_ = 7, csrc_ = 8, lld_ = 9 )
  151      COMPLEX*16         ONE
  152      parameter( one = 1.0d+0 )
  153
  154
  155      LOGICAL            UPPER
  156      INTEGER            IAROW, IBROW, ICTXT, IROFFA, IROFFB, ICOFFA,
  157     $                   MYCOL, MYROW, NPCOL, NPROW
  158
  159
  160      INTEGER            IDUM1( 1 ), IDUM2( 1 )
  161
  162
  164     $                   pztrsm
  165
  166
  167      LOGICAL            LSAME
  168      INTEGER            INDXG2P
  170
  171
  172      INTRINSIC          ichar, mod
  173
  174
  175
  176
  177
  178      ictxt = desca( ctxt_ )
  179      CALL blacs_gridinfo( ictxt, nprow, npcol, myrow, mycol )
  180
  181
  182
  183      info = 0
  184      IF( nprow.EQ.-1 ) THEN
  185         info = -(700+ctxt_)
  186      ELSE
  187         CALL chk1mat( n, 2, n, 2, ia, ja, desca, 7, info )
 
  188         CALL chk1mat( n, 2, nrhs, 3, ib, jb, descb, 11, info )
 
  189         upper = 
lsame( uplo, 
'U' )
 
  190         IF( info.EQ.0 ) THEN
  191            iarow = 
indxg2p( ia, desca( mb_ ), myrow, desca( rsrc_ ),
 
  192     $                       nprow )
  193            ibrow = 
indxg2p( ib, descb( mb_ ), myrow, descb( rsrc_ ),
 
  194     $                       nprow )
  195            iroffa = mod( ia-1, desca( mb_ ) )
  196            iroffb = mod( ib-1, descb( mb_ ) )
  197            icoffa = mod( ja-1, desca( nb_ ) )
  198            IF ( .NOT.upper .AND. .NOT.
lsame( uplo, 
'L' ) ) 
THEN 
  199               info = -1
  200            ELSE IF( iroffa.NE.0 ) THEN
  201               info = -5
  202            ELSE IF( icoffa.NE.0 ) THEN
  203               info = -6
  204            ELSE IF( desca( mb_ ).NE.desca( nb_ ) ) THEN
  205               info = -(700+nb_)
  206            ELSE IF( iroffb.NE.0 .OR. ibrow.NE.iarow ) THEN
  207               info = -9
  208            ELSE IF( descb( mb_ ).NE.desca( nb_ ) ) THEN
  209               info = -(1100+nb_)
  210            END IF
  211         END IF
  212         IF( upper ) THEN
  213            idum1( 1 ) = ichar( 'U' )
  214         ELSE
  215            idum1( 1 ) = ichar( 'L' )
  216         END IF
  217         idum2( 1 ) = 1
  218         CALL pchk2mat( n, 2, n, 2, ia, ja, desca, 7, n, 2, nrhs,
 
  219     $                  3, ib, jb, descb, 11, 1, idum1, idum2, info )
  220      END IF
  221
  222      IF( info.NE.0 ) THEN
  223         CALL pxerbla( ictxt, 
'PZPOTRS', -info )
 
  224         RETURN
  225      END IF
  226
  227
  228
  229      IF( n.EQ.0 .OR. nrhs.EQ.0 )
  230     $   RETURN
  231
  232      IF( upper ) THEN
  233
  234
  235
  236
  237
  238         CALL pztrsm( 'Left', 'Upper', 'Conjugate transpose',
  239     $              'Non-unit', n, nrhs, one, a, ia, ja, desca, b, ib,
  240     $              jb, descb )
  241
  242
  243
  244         CALL pztrsm( 'Left', 'Upper', 'No transpose', 'Non-unit', n,
  245     $              nrhs, one, a, ia, ja, desca, b, ib, jb, descb )
  246      ELSE
  247
  248
  249
  250
  251
  252         CALL pztrsm( 'Left', 'Lower', 'No transpose', 'Non-unit', n,
  253     $              nrhs, one, a, ia, ja, desca, b, ib, jb, descb )
  254
  255
  256
  257         CALL pztrsm( 'Left', 'Lower', 'Conjugate transpose',
  258     $              'Non-unit', n, nrhs, one, a, ia, ja, desca, b, ib,
  259     $              jb, descb )
  260      END IF
  261
  262      RETURN
  263
  264
  265
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
 
integer function indxg2p(indxglob, nb, iproc, isrcproc, nprocs)
 
subroutine pchk2mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, mb, mbpos0, nb, nbpos0, ib, jb, descb, descbpos0, nextra, ex, expos, info)
 
subroutine pxerbla(ictxt, srname, info)