1 SUBROUTINE pznepfchk( N, A, IA, JA, DESCA, IASEED, Z, IZ, JZ,
2 $ DESCZ, ANORM, FRESID, WORK )
10 INTEGER IA, IASEED, IZ, JA, JZ, N
11 DOUBLE PRECISION ANORM, FRESID
14 INTEGER DESCA( * ), DESCZ( * )
15 COMPLEX*16 A( * ), WORK( * ), Z( * )
154 INTEGER BLOCK_CYCLIC_2D, CSRC_, CTXT_, DLEN_, DTYPE_,
155 $ lld_, mb_, m_, nb_, n_, rsrc_
156 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
157 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
158 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
160 parameter( one = ( 1.0d+0, 0.0d+0 ),
161 $ zero = ( 0.0d+0, 0.0d+0 ) )
164 INTEGER I, IACOL, IAROW, IB, ICTXT, IIA, IOFFA, IROFF,
165 $ iw, j, jb, jja, jn, lda, ldw, mycol, myrow, np,
170 INTEGER DESCW( DLEN_ )
177 INTEGER ICEIL, NUMROC
178 DOUBLE PRECISION PDLAMCH, PZLANGE
179 EXTERNAL iceil, numroc, pdlamch, pzlange
186 ictxt = desca( ctxt_ )
188 eps = pdlamch( ictxt,
'eps' )
190 CALL infog2l( ia, ja, desca, nprow, npcol, myrow, mycol, iia, jja,
192 iroff = mod( ia-1, desca( mb_ ) )
193 np = numroc( n+iroff, desca( mb_ ), myrow, iarow, nprow )
200 CALL descset( descw, desca( mb_ ), n, desca( mb_ ), desca( nb_ ),
201 $ iarow, iacol, ictxt, desca( mb_ ) )
203 DO 10 i = ia, ia + n - 1, desca( mb_ )
204 ib =
min( ia+n-i, desca( mb_ ) )
206 CALL pzlacpy(
'All', ib, n, a, i, ja, desca, work, 1, 1,
208 CALL pzgemm(
'No transpose',
'Cong Tran', ib, n, n, one, work,
209 $ 1, 1, descw, z, iz, jz, descz, zero, a, i, ja,
212 descw( rsrc_ ) = mod( descw( rsrc_ )+1, nprow )
218 CALL descset( descw, n, desca( nb_ ), desca( mb_ ), desca( nb_ ),
219 $ iarow, iacol, ictxt, ldw )
221 DO 20 j = ja, ja + n - 1, desca( nb_ )
222 jb =
min( ja+n-j, desca( nb_ ) )
224 CALL pzlacpy( 'all
', N, JB, A, IA, J, DESCA, WORK, 1, 1,
226 CALL PZGEMM( 'no transpose
', 'no transpose
', N, JB, N, ONE, Z,
227 $ IZ, JZ, DESCZ, WORK, 1, 1, DESCW, ZERO, A, IA, J,
230 DESCW( CSRC_ ) = MOD( DESCW( CSRC_ )+1, NPCOL )
236 JN = MIN( ICEIL( JA, DESCA( NB_ ) )*DESCA( NB_ ), JA+N-1 )
238 IOFFA = IIA + ( JJA-1 )*LDA
241 DESCW( CSRC_ ) = IACOL
245.EQ.
IF( MYCOLDESCW( CSRC_ ) ) THEN
246 CALL PZMATGEN( ICTXT, 'n
', 'n
', DESCA( M_ ), DESCA( N_ ),
247 $ DESCA( MB_ ), DESCA( NB_ ), WORK, LDW,
248 $ DESCA( RSRC_ ), DESCA( CSRC_ ), IASEED, IIA-1,
249 $ NP, JJA-1, JB, MYROW, MYCOL, NPROW, NPCOL )
250 CALL PZLASET( 'lower
', MAX( 0, N-2 ), JB, ZERO, ZERO, WORK,
251 $ MIN( IW+2, N ), 1, DESCW )
252 CALL ZMATADD( NP, JB, -ONE, WORK, LDW, ONE, A( IOFFA ), LDA )
254 IOFFA = IOFFA + JB*LDA
257 IW = IW + DESCA( MB_ )
258 DESCW( CSRC_ ) = MOD( DESCW( CSRC_ )+1, NPCOL )
260 DO 30 J = JN + 1, JA + N - 1, DESCA( NB_ )
261 JB = MIN( JA+N-J, DESCA( NB_ ) )
263.EQ.
IF( MYCOLDESCW( CSRC_ ) ) THEN
264 CALL PZMATGEN( ICTXT, 'n
', 'n
', DESCA( M_ ), DESCA( N_ ),
265 $ DESCA( MB_ ), DESCA( NB_ ), WORK, LDW,
266 $ DESCA( RSRC_ ), DESCA( CSRC_ ), IASEED,
267 $ IIA-1, NP, JJA-1, JB, MYROW, MYCOL, NPROW,
269 CALL PZLASET( 'lower
', MAX( 0, N-IW-1 ), JB, ZERO, ZERO,
270 $ WORK, MIN( N, IW+2 ), 1, DESCW )
271 CALL ZMATADD( NP, JB, -ONE, WORK, LDW, ONE, A( IOFFA ),
274 IOFFA = IOFFA + JB*LDA
276 IW = IW + DESCA( MB_ )
277 DESCW( CSRC_ ) = MOD( DESCW( CSRC_ )+1, NPCOL )
282 FRESID = PZLANGE( 'i
', N, N, A, IA, JA, DESCA, WORK ) /
subroutine pzmatgen(ictxt, aform, diag, m, n, mb, nb, a, lda, iarow, iacol, iseed, iroff, irnum, icoff, icnum, myrow, mycol, nprow, npcol)