2
    3
    4
    5
    6
    7
    8
    9      CHARACTER          UPLO
   10      INTEGER            IA, JA, N
   11
   12
   13      INTEGER            DESCA( * )
   14      DOUBLE PRECISION   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
  128
  129      INTEGER            I, J, JB, JN
  130
  131
  132      EXTERNAL           pdgemm, 
pdlauu2, pdtrmm, pdsyrk
 
  133
  134
  135      LOGICAL            LSAME
  136      INTEGER            ICEIL
  138
  139
  141
  142
  143
  144
  145
  146      IF( n.EQ.0 )
  147     $   RETURN
  148
  149      jn = 
min( 
iceil( ja, desca( nb_ ) ) * desca( nb_ ), ja+n-1 )
 
  150      IF(  
lsame( uplo, 
'U' ) ) 
THEN 
  151
  152
  153
  154
  155
  156         jb = jn-ja+1
  157         CALL pdlauu2( 
'Upper', jb, a, ia, ja, desca )
 
  158         IF( jb.LE.n-1 ) THEN
  159            CALL pdsyrk( 'Upper', 'No transpose', jb, n-jb, one, a, ia,
  160     $                   ja+jb, desca, one, a, ia, ja, desca )
  161         END IF
  162
  163
  164
  165         DO 10 j = jn+1, ja+n-1, desca( nb_ )
  166            jb = 
min( n-j+ja, desca( nb_ ) )
 
  167            i = ia + j - ja
  168            CALL pdtrmm( 'Right', 'Upper', 'Transpose',  'Non-unit',
  169     $                   j-ja, jb, one, a, i, j, desca, a, ia, j,
  170     $                   desca )
  171            CALL pdlauu2( 
'Upper', jb, a, i, j, desca )
 
  172            IF( j+jb.LE.ja+n-1 ) THEN
  173               CALL pdgemm( 'No transpose', 'Transpose', j-ja, jb,
  174     $                      n-j-jb+ja, one, a, ia, j+jb, desca, a, i,
  175     $                      j+jb, desca, one, a, ia, j, desca )
  176               CALL pdsyrk( 'Upper', 'No transpose', jb, n-j-jb+ja, one,
  177     $                      a, i, j+jb, desca, one, a, i, j, desca )
  178            END IF
  179   10    CONTINUE
  180      ELSE
  181
  182
  183
  184
  185
  186         jb = jn-ja+1
  187         CALL pdlauu2( 
'Lower', jb, a, ia, ja, desca )
 
  188         IF( jb.LE.n-1 ) THEN
  189            CALL pdsyrk( 'Lower', 'Transpose', jb, n-jb, one, a, ia+jb,
  190     $                   ja, desca, one, a, ia, ja, desca )
  191         END IF
  192
  193
  194
  195         DO 20 j = jn+1, ja+n-1, desca( nb_ )
  196            jb = 
min( n-j+ja, desca( nb_ ) )
 
  197            i = ia + j - ja
  198            CALL pdtrmm( 'Left', 'Lower', 'Transpose', 'Non-unit', jb,
  199     $                   j-ja, one, a, i, j, desca, a, i, ja, desca )
  200            CALL pdlauu2( 
'Lower', jb, a, i, j, desca )
 
  201            IF( j+jb.LE.ja+n-1 ) THEN
  202               CALL pdgemm( 'Transpose', 'No transpose', jb, j-ja,
  203     $                      n-j-jb+ja, one, a, i+jb, j, desca, a, i+jb,
  204     $                      ja, desca, one, a, i, ja, desca )
  205               CALL pdsyrk( 'Lower', 'Transpose', jb, n-j-jb+ja, one,
  206     $                      a, i+jb, j, desca, one, a, i, j, desca )
  207            END IF
  208   20    CONTINUE
  209      END IF
  210
  211      RETURN
  212
  213
  214
integer function iceil(inum, idenom)
 
subroutine pdlauu2(uplo, n, a, ia, ja, desca)