2
    3
    4
    5
    6
    7
    8
    9      CHARACTER          UPLO
   10      INTEGER            IA, JA, N
   11
   12
   13      INTEGER            DESCA( * )
   14      COMPLEX*16         A( * )
   15
   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      INTEGER            BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
  121     $                   LLD_, MB_, M_, NB_, N_, RSRC_
  122      parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
  123     $                     ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
  124     $                     rsrc_ = 7, csrc_ = 8, lld_ = 9 )
  125      DOUBLE PRECISION   ONE
  126      parameter( one = 1.0d+0 )
  127      COMPLEX*16         CONE
  128      parameter( cone = 1.0d+0 )
  129
  130
  131      INTEGER            I, J, JB, JN
  132
  133
  134      EXTERNAL           pzgemm, pzherk, 
pzlauu2, pztrmm
 
  135
  136
  137      LOGICAL            LSAME
  138      INTEGER            ICEIL
  140
  141
  143
  144
  145
  146
  147
  148      IF( n.EQ.0 )
  149     $   RETURN
  150
  151      jn = 
min( 
iceil( ja, desca( nb_ ) ) * desca( nb_ ), ja+n-1 )
 
  152      IF(  
lsame( uplo, 
'U' ) ) 
THEN 
  153
  154
  155
  156
  157
  158         jb = jn-ja+1
  159         CALL pzlauu2( 
'Upper', jb, a, ia, ja, desca )
 
  160         IF( jb.LE.n-1 ) THEN
  161            CALL pzherk( 'Upper', 'No transpose', jb, n-jb, one, a, ia,
  162     $                   ja+jb, desca, one, a, ia, ja, desca )
  163         END IF
  164
  165
  166
  167         DO 10 j = jn+1, ja+n-1, desca( nb_ )
  168            jb = 
min( n-j+ja, desca( nb_ ) )
 
  169            i = ia + j - ja
  170            CALL pztrmm( 'Right', 'Upper', 'Conjugate transpose',
  171     $                   'Non-unit', j-ja, jb, cone, a, i, j, desca,
  172     $                   a, ia, j, desca )
  173            CALL pzlauu2( 
'Upper', jb, a, i, j, desca )
 
  174            IF( j+jb.LE.ja+n-1 ) THEN
  175               CALL pzgemm( 'No transpose', 'Conjugate transpose',
  176     $                      j-ja, jb, n-j-jb+ja, cone, a, ia, j+jb,
  177     $                      desca, a, i, j+jb, desca, cone, a, ia,
  178     $                      j, desca )
  179               CALL pzherk( 'Upper', 'No transpose', jb, n-j-jb+ja, one,
  180     $                      a, i, j+jb, desca, one, a, i, j, desca )
  181            END IF
  182   10    CONTINUE
  183      ELSE
  184
  185
  186
  187
  188
  189         jb = jn-ja+1
  190         CALL pzlauu2( 
'Lower', jb, a, ia, ja, desca )
 
  191         IF( jb.LE.n-1 ) THEN
  192            CALL pzherk( 'Lower', 'Conjugate transpose', jb, n-jb, one,
  193     $                   a, ia+jb, ja, desca, one, a, ia, ja, desca )
  194         END IF
  195
  196
  197
  198         DO 20 j = jn+1, ja+n-1, desca( nb_ )
  199            jb = 
min( n-j+ja, desca( nb_ ) )
 
  200            i = ia + j - ja
  201            CALL pztrmm( 'Left', 'Lower', 'Conjugate Transpose',
  202     $                   'Non-unit', jb, j-ja, cone, a, i, j, desca, a,
  203     $                   i, ja, desca )
  204            CALL pzlauu2( 
'Lower', jb, a, i, j, desca )
 
  205            IF( j+jb.LE.ja+n-1 ) THEN
  206               CALL pzgemm( 'Conjugate transpose', 'No transpose', jb,
  207     $                      j-ja, n-j-jb+ja, cone, a, i+jb, j, desca,
  208     $                      a, i+jb, ja, desca, cone, a, i, ja, desca )
  209               CALL pzherk( 'Lower', 'Conjugate transpose', jb,
  210     $                      n-j-jb+ja, one, a, i+jb, j, desca, one,
  211     $                      a, i, j, desca )
  212            END IF
  213   20    CONTINUE
  214      END IF
  215
  216      RETURN
  217
  218
  219
integer function iceil(inum, idenom)
 
subroutine pzlauu2(uplo, n, a, ia, ja, desca)