|
|
| |
| # lines: |
437 | | # code: |
437 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 58 |
| # Callers: | 3 |
| # Callings: | 2 |
| # Words: | 195 |
| # Keywords: | 133 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PDORMTR overwrites the general real M-by-N distributed matrix
sub( C ) = C(IC:IC+M-1,JC:JC+N-1) with
SIDE = 'L' SIDE = 'R'
TRANS = 'N': Q * sub( C ) sub( C ) * Q
TRANS = 'T': Q**T * sub( C ) sub( C ) * Q**T
where Q is a real orthogonal distributed matrix of order nq, with
nq = m if SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the
product of nq-1 elementary reflectors, as returned by PDSYTRD:
if UPLO = 'U', Q = H(nq-1) . . . H(2) H(1);
if UPLO = 'L', Q = H(1) H(2) . . . H(nq-1).
Notes
=====
Each global data object is described by an associated description
vector. This vector stores the information required to establish
the mapping between an object element and its corresponding process
and memory location.
Let A be a generic term for any 2D block cyclicly distributed array.
Such a global array has an associated description vector DESCA.
In the following comments, the character _ should be read as
"of the global array".
NOTATION STORED IN EXPLANATION
--------------- -------------- --------------------------------------
DTYPE_A(global) DESCA( DTYPE_ )The descriptor type. In this case,
DTYPE_A = 1.
CTXT_A (global) DESCA( CTXT_ ) The BLACS context handle, indicating
the BLACS process grid A is distribu-
ted over. The context itself is glo-
bal, but the handle (the integer
value) may vary.
M_A (global) DESCA( M_ ) The number of rows in the global
array A.
N_A (global) DESCA( N_ ) The number of columns in the global
array A.
MB_A (global) DESCA( MB_ ) The blocking factor used to distribute
the rows of the array.
NB_A (global) DESCA( NB_ ) The blocking factor used to distribute
the columns of the array.
RSRC_A (global) DESCA( RSRC_ ) The process row over which the first
row of the array A is distributed.
CSRC_A (global) DESCA( CSRC_ ) The process column over which the
first column of the array A is
distributed.
LLD_A (local) DESCA( LLD_ ) The leading dimension of the local
array. LLD_A >= MAX(1,LOCr(M_A)).
Let K be the number of rows or columns of a distributed matrix,
and assume that its process grid has dimension p x q.
LOCr( K ) denotes the number of elements of K that a process
would receive if K were distributed over the p processes of its
process column.
Similarly, LOCc( K ) denotes the number of elements of K that a
process would receive if K were distributed over the q processes of
its process row.
The values of LOCr() and LOCc() may be determined via a call to the
ScaLAPACK tool function, NUMROC:
LOCr( M ) = NUMROC( M, MB_A, MYROW, RSRC_A, NPROW ),
LOCc( N ) = NUMROC( N, NB_A, MYCOL, CSRC_A, NPCOL ).
An upper bound for these quantities may be computed by:
LOCr( M ) <= ceil( ceil(M/MB_A)/NPROW )*MB_A
LOCc( N ) <= ceil( ceil(N/NB_A)/NPCOL )*NB_A
Arguments
=========
SIDE (global input) CHARACTER
= 'L': apply Q or Q**T from the Left;
= 'R': apply Q or Q**T from the Right.
UPLO (global input) CHARACTER
= 'U': Upper triangle of A(IA:*,JA:*) contains elementary
reflectors from PDSYTRD;
= 'L': Lower triangle of A(IA:*,JA:*) contains elementary
reflectors from PDSYTRD.
TRANS (global input) CHARACTER
= 'N': No transpose, apply Q;
= 'T': Transpose, apply Q**T.
M (global input) INTEGER
The number of rows to be operated on i.e the number of rows
of the distributed submatrix sub( C ). M >= 0.
N (global input) INTEGER
The number of columns to be operated on i.e the number of
columns of the distributed submatrix sub( C ). N >= 0.
A (local input) DOUBLE PRECISION pointer into the local memory
to an array of dimension (LLD_A,LOCc(JA+M-1)) if SIDE='L',
or (LLD_A,LOCc(JA+N-1)) if SIDE = 'R'. The vectors which
define the elementary reflectors, as returned by PDSYTRD.
If SIDE = 'L', LLD_A >= max(1,LOCr(IA+M-1));
if SIDE = 'R', LLD_A >= max(1,LOCr(IA+N-1)).
IA (global input) INTEGER
The row index in the global array A indicating the first
row of sub( A ).
JA (global input) INTEGER
The column index in the global array A indicating the
first column of sub( A ).
DESCA (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix A.
TAU (local input) DOUBLE PRECISION array, dimension LTAU, where
if SIDE = 'L' and UPLO = 'U', LTAU = LOCc(M_A),
if SIDE = 'L' and UPLO = 'L', LTAU = LOCc(JA+M-2),
if SIDE = 'R' and UPLO = 'U', LTAU = LOCc(N_A),
if SIDE = 'R' and UPLO = 'L', LTAU = LOCc(JA+N-2).
TAU(i) must contain the scalar factor of the elementary
reflector H(i), as returned by PDSYTRD. TAU is tied to the
distributed matrix A.
C (local input/local output) DOUBLE PRECISION pointer into the
local memory to an array of dimension (LLD_C,LOCc(JC+N-1)).
On entry, the local pieces of the distributed matrix sub(C).
On exit, sub( C ) is overwritten by Q*sub( C ) or Q'*sub( C )
or sub( C )*Q' or sub( C )*Q.
IC (global input) INTEGER
The row index in the global array C indicating the first
row of sub( C ).
JC (global input) INTEGER
The column index in the global array C indicating the
first column of sub( C ).
DESCC (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix C.
WORK (local workspace/local output) DOUBLE PRECISION array,
dimension (LWORK)
On exit, WORK(1) returns the minimal and optimal LWORK.
LWORK (local or global input) INTEGER
The dimension of the array WORK.
LWORK is local input and must be at least
If UPLO = 'U',
IAA = IA, JAA = JA+1, ICC = IC, JCC = JC;
else UPLO = 'L',
IAA = IA+1, JAA = JA;
if SIDE = 'L',
ICC = IC+1; JCC = JC;
else
ICC = IC; JCC = JC+1;
end if
end if
If SIDE = 'L',
MI = M-1; NI = N;
LWORK >= MAX( (NB_A*(NB_A-1))/2, (NqC0 + MpC0)*NB_A ) +
NB_A * NB_A
else if SIDE = 'R',
MI = M; MI = N-1;
LWORK >= MAX( (NB_A*(NB_A-1))/2, ( NqC0 + MAX( NpA0 +
NUMROC( NUMROC( NI+ICOFFC, NB_A, 0, 0, NPCOL ),
NB_A, 0, 0, LCMQ ), MpC0 ) )*NB_A ) +
NB_A * NB_A
end if
where LCMQ = LCM / NPCOL with LCM = ICLM( NPROW, NPCOL ),
IROFFA = MOD( IAA-1, MB_A ), ICOFFA = MOD( JAA-1, NB_A ),
IAROW = INDXG2P( IAA, MB_A, MYROW, RSRC_A, NPROW ),
NpA0 = NUMROC( NI+IROFFA, MB_A, MYROW, IAROW, NPROW ),
IROFFC = MOD( ICC-1, MB_C ), ICOFFC = MOD( JCC-1, NB_C ),
ICROW = INDXG2P( ICC, MB_C, MYROW, RSRC_C, NPROW ),
ICCOL = INDXG2P( JCC, NB_C, MYCOL, CSRC_C, NPCOL ),
MpC0 = NUMROC( MI+IROFFC, MB_C, MYROW, ICROW, NPROW ),
NqC0 = NUMROC( NI+ICOFFC, NB_C, MYCOL, ICCOL, NPCOL ),
ILCM, INDXG2P and NUMROC are ScaLAPACK tool functions;
MYROW, MYCOL, NPROW and NPCOL can be determined by calling
the subroutine BLACS_GRIDINFO.
If LWORK = -1, then LWORK is global input and a workspace
query is assumed; the routine only calculates the minimum
and optimal size for all work arrays. Each of these
values is returned in the first entry of the corresponding
work array, and no error message is issued by PXERBLA.
INFO (global output) INTEGER
= 0: successful exit
< 0: If the i-th argument is an array and the j-entry had
an illegal value, then INFO = -(i*100+j), if the i-th
argument is a scalar and had an illegal value, then
INFO = -i.
Alignment requirements
======================
The distributed submatrices A(IA:*, JA:*) and C(IC:IC+M-1,JC:JC+N-1)
must verify some alignment properties, namely the following
expressions should be true:
If SIDE = 'L',
( MB_A.EQ.MB_C .AND. IROFFA.EQ.IROFFC .AND. IAROW.EQ.ICROW )
If SIDE = 'R',
( MB_A.EQ.NB_C .AND. IROFFA.EQ.ICOFFC )
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE PDORMTR( SIDE , UPLO , TRANS , M , N , A , IA , JA , DESCA ,
002 $TAU , C , IC , JC , DESCC , WORK , LWORK , INFO )
003
004 * -- ScaLAPACK routine(version 1.7) --
005 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
006 * and University of California , Berkeley.
007 * May 1 , 1997
008
009 * .. Scalar Arguments ..
010 CHARACTER SIDE , TRANS , UPLO
011 INTEGER IA , IC , INFO , JA , JC , LWORK , M , N
012 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
013 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
014 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
015 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
016 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
017 * ..
018 * .. Local Scalars ..
019 LOGICAL LEFT , LQUERY , NOTRAN , UPPER
020 INTEGER IAA , IAROW , ICC , ICCOL , ICOFFC , ICROW , ICTXT ,
021 $IINFO , IROFFA , IROFFC , JAA , JCC , LCM , LCMQ ,
022 $LWMIN , MI , MPC0 , MYCOL , MYROW , NI , NPA0 , NPCOL ,
023 $NPROW , NQ , NQC0
024 * ..
025 * .. Local Arrays ..
026 INTEGER IDUM1( 4 ) , IDUM2( 4 )
027 * ..
028 * .. External Subroutines ..
029 EXTERNAL BLACS_GRIDINFO , CHK1MAT , PCHK2MAT , PDORMQL ,
030 $PDORMQR , PXERBLA
031 * ..
032 * .. External Functions ..
033 LOGICAL LSAME
034 INTEGER ILCM , INDXG2P , NUMROC
035 EXTERNAL ILCM , INDXG2P , LSAME , NUMROC
036 * ..
037 * .. Intrinsic Functions ..
038 INTRINSIC DBLE , ICHAR , MAX , MOD
039 * ..
040 * .. Executable Statements ..
041
042 * Get grid parameters
043
044 ICTXT = DESCA( CTXT_ )
045 CALL BLACS_GRIDINFO( ICTXT , NPROW , NPCOL , MYROW , MYCOL )
046
047 * Test the input parameters
048
049 INFO = 0
050 IF( NPROW.EQ. - 1 ) THEN
050
051 INFO = - (900 + CTXT_)
052 ELSE
052
053 LEFT = LSAME( SIDE , 'L' )
054 NOTRAN = LSAME( TRANS , 'N' )
055 UPPER = LSAME( UPLO , 'U' )
056
057 IF( UPPER ) THEN
057
058 IAA = IA
059 JAA = JA + 1
060 ICC = IC
061 JCC = JC
062 ELSE
062
063 IAA = IA + 1
064 JAA = JA
065 IF( LEFT ) THEN
065
066 ICC = IC + 1
067 JCC = JC
068 ELSE
068
069 ICC = IC
070 JCC = JC + 1
071 END IF
072 END IF
073
074 * NQ is the order of Q
075
076 IF( LEFT ) THEN
076
077 NQ = M
078 MI = M - 1
079 NI = N
080 CALL CHK1MAT( MI , 4 , NQ - 1 , 4 , IAA , JAA , DESCA , 9 , INFO )
081 ELSE
081
082 NQ = N
083 MI = M
084 NI = N - 1
085 CALL CHK1MAT( NI , 5 , NQ - 1 , 5 , IAA , JAA , DESCA , 9 , INFO )
086 END IF
087 CALL CHK1MAT( MI , 4 , NI , 5 , ICC , JCC , DESCC , 14 , INFO )
088 IF( INFO.EQ.0 ) THEN
088
089 IROFFA = MOD( IAA - 1 , DESCA( MB_ ) )
090 IROFFC = MOD( ICC - 1 , DESCC( MB_ ) )
091 ICOFFC = MOD( JCC - 1 , DESCC( NB_ ) )
092 IAROW = INDXG2P( IAA , DESCA( MB_ ) , MYROW , DESCA( RSRC_ ) ,
093 $ NPROW )
094 ICROW = INDXG2P( ICC , DESCC( MB_ ) , MYROW , DESCC( RSRC_ ) ,
095 $ NPROW )
096 ICCOL = INDXG2P( JCC , DESCC( NB_ ) , MYCOL , DESCC( CSRC_ ) ,
097 $ NPCOL )
098 MPC0 = NUMROC( MI + IROFFC , DESCC( MB_ ) , MYROW , ICROW ,
099 $ NPROW )
100 NQC0 = NUMROC( NI + ICOFFC , DESCC( NB_ ) , MYCOL , ICCOL ,
101 $ NPCOL )
102
103 IF( LEFT ) THEN
103
104 LWMIN = MAX(( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ) / 2 ,
105 $( MPC0 + NQC0 ) * DESCA( NB_ ) ) +
105
106 $ DESCA( NB_ ) * DESCA( NB_ )
107 ELSE
107
108 NPA0 = NUMROC( NI + IROFFA , DESCA( MB_ ) , MYROW , IAROW ,
109 $ NPROW )
110 LCM = ILCM( NPROW , NPCOL )
111 LCMQ = LCM / NPCOL
112 LWMIN = MAX(( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) )
113 $ / 2 ,( NQC0 + MAX( NPA0 + NUMROC( NUMROC(
114 $ NI + ICOFFC , DESCA( NB_ ) , 0 , 0 , NPCOL ) ,
115 $ DESCA( NB_ ) , 0 , 0 , LCMQ ) , MPC0 ) ) *
116 $ DESCA( NB_ ) ) + DESCA( NB_ ) * DESCA( NB_ )
117 END IF
118
119 WORK( 1 ) = DBLE( LWMIN )
120 LQUERY =( LWORK.EQ. - 1 )
121 IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE , 'R' ) ) THEN
121
122 INFO = - 1
123 ELSE IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO , 'L' ) ) THEN
123
124 INFO = - 2
125 ELSE IF( .NOT.LSAME( TRANS , 'N' ) .AND.
125
126 $ .NOT.LSAME( TRANS , 'T' ) ) THEN
127 INFO = - 3
128 ELSE IF( .NOT.LEFT .AND. DESCA( MB_ ).NE.DESCC( NB_ ) ) THEN
128
129 INFO = - (900 + NB_)
130 ELSE IF( LEFT .AND. IROFFA.NE.IROFFC ) THEN
130
131 INFO = - 12
132 ELSE IF( LEFT .AND. IAROW.NE.ICROW ) THEN
132
133 INFO = - 12
134 ELSE IF( .NOT.LEFT .AND. IROFFA.NE.ICOFFC ) THEN
134
135 INFO = - 13
136 ELSE IF( LEFT .AND. DESCA( MB_ ).NE.DESCC( MB_ ) ) THEN
136
137 INFO = - (1400 + MB_)
138 ELSE IF( ICTXT.NE.DESCC( CTXT_ ) ) THEN
138
139 INFO = - (1400 + CTXT_)
140 ELSE IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN
140
141 INFO = - 16
142 END IF
143 END IF
144
145 IF( LEFT ) THEN
145
146 IDUM1( 1 ) = ICHAR( 'L' )
147 ELSE
147
148 IDUM1( 1 ) = ICHAR( 'R' )
149 END IF
150 IDUM2( 1 ) = 1
151 IF( UPPER ) THEN
151
152 IDUM1( 2 ) = ICHAR( 'U' )
153 ELSE
153
154 IDUM1( 2 ) = ICHAR( 'L' )
155 END IF
156 IDUM2( 2 ) = 2
157 IF( NOTRAN ) THEN
157
158 IDUM1( 3 ) = ICHAR( 'N' )
159 ELSE
159
160 IDUM1( 3 ) = ICHAR( 'T' )
161 END IF
162 IDUM2( 3 ) = 3
163 IF( LWORK.EQ. - 1 ) THEN
163
164 IDUM1( 4 ) = - 1
165 ELSE
165
166 IDUM1( 4 ) = 1
167 END IF
168 IDUM2( 4 ) = 16
169 IF( LEFT ) THEN
169
170 CALL PCHK2MAT( MI , 4 , NQ - 1 , 4 , IAA , JAA , DESCA , 9 , MI , 4 ,
171 $ NI , 5 , ICC , JCC , DESCC , 14 , 4 , IDUM1 , IDUM2 ,
172 $ INFO )
173 ELSE
173
174 CALL PCHK2MAT( NI , 5 , NQ - 1 , 5 , IAA , JAA , DESCA , 9 , MI , 4 ,
175 $ NI , 5 , ICC , JCC , DESCC , 14 , 4 , IDUM1 , IDUM2 ,
176 $ INFO )
177 END IF
178 END IF
179
180 IF( INFO.NE.0 ) THEN
180
181 CALL PXERBLA( ICTXT , 'PDORMTR' , - INFO )
182 RETURN
183 ELSE IF( LQUERY ) THEN
183
184 RETURN
185 END IF
186
187 * Quick return if possible
188
189 IF( M.EQ.0 .OR. N.EQ.0 .OR. NQ.EQ.1 )
189
190 $ RETURN
191
192 IF( UPPER ) THEN
193
194 * Q was determined by a call to PDSYTRD with UPLO = 'U'
195
195
196 CALL PDORMQL ( SIDE , TRANS , MI , NI , NQ - 1 , A , IAA , JAA , DESCA ,
197 $ TAU , C , ICC , JCC , DESCC , WORK , LWORK , IINFO )
198
199 ELSE
200
201 * Q was determined by a call to PDSYTRD with UPLO = 'L'
202
202
203 CALL PDORMQR ( SIDE , TRANS , MI , NI , NQ - 1 , A , IAA , JAA , DESCA ,
204 $ TAU , C , ICC , JCC , DESCC , WORK , LWORK , IINFO )
205
206 END IF
207
208 WORK( 1 ) = DBLE( LWMIN )
209
210 RETURN
211
212 * End of PDORMTR
213
214 END26
37
|
|
Variables in Routine PDORMTR()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| CHARACTER | 3 | 3 |
| INTEGER | 49 | 224 |
| LOGICAL | 5 | 5 |
| REAL | 1 | 4 |
| TOTAL | 58 | 236 |
List of Variables
CHARACTER
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DLEN_ | DTYPE_ |
| IA | IAA | IAROW | IC | ICC |
| ICCOL | ICOFFC | ICROW | ICTXT | IDUM1( 4 ) |
| IDUM2( 4 ) | IINFO | ILCM | INDXG2P | INFO |
| IROFFA | IROFFC | JA | JAA | JC |
| JCC | LCM | LCMQ | LLD_ | LWMIN |
| LWORK | M | M_ | MB_ | MI |
| MPC0 | MYCOL | MYROW | N | N_ |
| NB_ | NI | NPA0 | NPCOL | NPROW |
| NQ | NQC0 | NUMROC | RSRC_ | |
LOGICAL
| LEFT | LQUERY | LSAME | NOTRAN | UPPER |
REAL
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | IAA | <--- | IAIAA = IA{2IAA = IA+1} |
| IAROW | <--- | INDXG2PIAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, MB_IAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, MYROWIAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, NPROWIAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, RSRC_IAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),, IAAIAROW = INDXG2P( IAA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ), |
| ICC | <--- | ICICC = IC{2ICC = IC + 1, 3ICC = IC} |
| ICCOL | <--- | INDXG2PICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ),, CSRC_ICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ),, JCCICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ),, MYCOLICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ),, NB_ICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ),, NPCOLICCOL = INDXG2P( JCC, DESCC( NB_ ), MYCOL, DESCC( CSRC_ ), |
| ICOFFC | <--- | JCCICOFFC = MOD( JCC-1, DESCC( NB_ ) ), NB_ICOFFC = MOD( JCC-1, DESCC( NB_ ) ) |
| ICROW | <--- | ICCICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ),, INDXG2PICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ),, MB_ICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ),, MYROWICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ),, NPROWICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ),, RSRC_ICROW = INDXG2P( ICC, DESCC( MB_ ), MYROW, DESCC( RSRC_ ), |
| ICTXT | <--- | CTXT_ICTXT = DESCA( CTXT_ ) |
| IDUM1 | <--- | NIDUM1( 3 ) = ICHAR( 'N' ) |
| INFO | <--- | CTXT_INFO = -(1400+CTXT_){2INFO = -(900+CTXT_)}, MB_INFO = -(1400+MB_), NB_INFO = -(900+NB_) |
| IROFFA | <--- | MB_IROFFA = MOD( IAA-1, DESCA( MB_ ) ), IAAIROFFA = MOD( IAA-1, DESCA( MB_ ) ) |
| IROFFC | <--- | ICCIROFFC = MOD( ICC-1, DESCC( MB_ ) ), MB_IROFFC = MOD( ICC-1, DESCC( MB_ ) ) |
| JAA | <--- | JAJAA = JA+1{2JAA = JA} |
| JCC | <--- | JCJCC = JC{2JCC = JC, 3JCC = JC + 1} |
| LCM | <--- | ILCMLCM = ILCM( NPROW, NPCOL ), NPCOLLCM = ILCM( NPROW, NPCOL ), NPROWLCM = ILCM( NPROW, NPCOL ) |
| LCMQ | <--- | LCMLCMQ = LCM / NPCOL, NPCOLLCMQ = LCM / NPCOL |
| LEFT | <--- | LSAMELEFT = LSAME( SIDE, 'L' ), SIDELEFT = LSAME( SIDE, 'L' ) |
| LWMIN | <--- | ICOFFCLWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ), LCMQLWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ), MPC0LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ) / 2,{2LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) )}, NB_LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ) / 2,{2LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) )}, NILWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ), NPA0LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ), NPCOLLWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ), NQC0LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ) / 2,{2LWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) )}, NUMROCLWMIN = MAX( ( DESCA( NB_ ) * ( DESCA( NB_ ) - 1 ) ) |
| MI | <--- | MMI = M - 1{2MI = M} |
| MPC0 | <--- | ICROWMPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,, IROFFCMPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,, MB_MPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,, MIMPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,, MYROWMPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,, NPROWMPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW,, NUMROCMPC0 = NUMROC( MI+IROFFC, DESCC( MB_ ), MYROW, ICROW, |
| NI | <--- | NNI = N{2NI = N - 1} |
| NOTRAN | <--- | LSAMENOTRAN = LSAME( TRANS, 'N' ), NNOTRAN = LSAME( TRANS, 'N' ), TRANSNOTRAN = LSAME( TRANS, 'N' ) |
| NPA0 | <--- | IROFFANPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,, MB_NPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,, MYROWNPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,, NINPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,, NPROWNPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,, NUMROCNPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW,, IAROWNPA0 = NUMROC( NI+IROFFA, DESCA( MB_ ), MYROW, IAROW, |
| NQ | <--- | MNQ = M, NNQ = N |
| NQC0 | <--- | ICCOLNQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,, ICOFFCNQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,, MYCOLNQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,, NB_NQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,, NINQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,, NPCOLNQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL,, NUMROCNQC0 = NUMROC( NI+ICOFFC, DESCC( NB_ ), MYCOL, ICCOL, |
| UPPER | <--- | LSAMEUPPER = LSAME( UPLO, 'U' ), UPLOUPPER = LSAME( UPLO, 'U' ) |
| WORK | <--- | LWMINWORK( 1 ) = DBLE( LWMIN ){2WORK( 1 ) = DBLE( LWMIN )} |
|
|
Analysis elements of the routine PDORMTR() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , IAA , IAROW , ICC , ICCOL , ICOFFC , ICROW , ICTXT , IDUM1 , IDUM2 , INFO , IROFFA , IROFFC , JAA , JCC , LCM , LCMQ , LEFT , LLD_ , LQUERY , LWMIN , M_ , MB_ , MI , MPC0 , N_ , NB_ , NI , NOTRAN , NPA0 , NQ , NQC0 , RSRC_ , UPLO , UPPER , WORK |
|
Active variables |
| | | A , BLOCK_CYCLIC_2D , C , CSRC_ , CTXT_ , DESCA , DESCC , DLEN_ , DTYPE_ , IA , IAA , IAROW , IC , ICC , ICCOL , ICOFFC , ICROW , ICTXT , IDUM1 , IDUM2 , IINFO , ILCM , INDXG2P , INFO , IROFFA , IROFFC , JA , JAA , JC , JCC , LCM , LCMQ , LEFT , LLD_ , LQUERY , LSAME , LWMIN , LWORK , M , M_ , MB_ , MI , MPC0 , MYCOL , MYROW , N , N_ , NB_ , NI , NOTRAN , NPA0 , NPCOL , NPROW , NQ , NQC0 , NUMROC , RSRC_ , SIDE , TAU , TRANS , UPLO , UPPER , WORK |
|
Accessed arrays [ array name : associated index ] |
| | DESCA | : CTXT_ , MB_ , MB_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , NB_ , NB_ , NB_ , NB_ , RSRC_ |
| | DESCC | : CSRC_ , CTXT_ , MB_ , MB_ , MB_ , MB_ , NB_ , NB_ , NB_ , NB_ , RSRC_ |
| | IDUM1 | : 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 4 |
| | IDUM2 | : 1 , 2 , 3 , 4 , 4 |
| | ILCM | : NPROW, NPCOL |
| | LSAME | : SIDE, 'L' , SIDE, 'R' , TRANS, 'N' , TRANS, 'N' , TRANS, 'T' , UPLO, 'L' , UPLO, 'U' |
| | WORK | : 1 , 1 |
|
Conditional statements [ statement : associated predicate ] |
| | if | : ( NPROW.EQ. - 1 ) , ( UPPER ) , ( LEFT ) , ( LEFT ) , ( INFO.EQ.0 ) , ( LEFT ) , ( (.NOT.LEFT .AND. .NOT.LSAME( SIDE , 'R' ) ) ) , ( (.NOT.UPPER .AND. .NOT.LSAME( UPLO , 'L' ) ) ) , ( (.NOT.LSAME( TRANS , 'N' ) .AND. ) , ( (.NOT.LEFT .AND. DESCA( MB_ ).NE.DESCC( NB_ ) ) ) , ( LEFT .AND. IROFFA.NE.IROFFC ) , ( LEFT .AND. IAROW.NE.ICROW ) , ( .NOT.LEFT .AND. IROFFA.NE.ICOFFC ) , ( (LEFT .AND. DESCA( MB_ ).NE.DESCC( MB_ ) ) ) , ( (ICTXT.NE.DESCC( CTXT_ ) ) ) , ( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) , ( LEFT ) , ( UPPER ) , ( NOTRAN ) , ( LWORK.EQ. - 1 ) , ( LEFT ) , ( INFO.NE.0 ) , ( LQUERY ) , ( possible ) , ( M.EQ.0 .OR. N.EQ.0 .OR. NQ.EQ.1 ) , ( UPPER ) |
|
| List of variables | BLOCK_CYCLIC_2D CSRC_ CTXT_ DLEN_ DTYPE_ IA IAA
| IAROW IC ICC ICCOL ICOFFC ICROW ICTXT IDUM1( 4 )
| IDUM2( 4 ) IINFO ILCM INDXG2P INFO IROFFA IROFFC JA
| JAA JC JCC LCM LCMQ LEFT LLD_ LQUERY
| LSAME LWMIN LWORK M M_ MB_ MI MPC0
| MYCOL MYROW N N_ NB_ NI NOTRAN NPA0
| NPCOL NPROW NQ NQC0 NUMROC RSRC_ SIDE TRANS
| UPLO UPPER WORK | | close
| |
BLOCK_CYCLIC_2D
CSRC_
CTXT_
DLEN_
DTYPE_
IA
IAA
IAROW
IC
ICC
ICCOL
ICOFFC
ICROW
ICTXT
IDUM1( 4 )
IDUM2( 4 )
IINFO
ILCM
INDXG2P
INFO
IROFFA
IROFFC
JA
JAA
JC
JCC
LCM
LCMQ
LEFT
LLD_
LQUERY
LSAME
LWMIN
LWORK
M
M_
MB_
MI
MPC0
MYCOL
MYROW
N
N_
NB_
NI
NOTRAN
NPA0
NPCOL
NPROW
NQ
NQC0
NUMROC
RSRC_
SIDE
TRANS
UPLO
UPPER
WORK
267#268
| |