3 SUBROUTINE pzhegst( IBTYPE, UPLO, N, A, IA, JA, DESCA, B, IB, JB,
13 INTEGER IA, IB, IBTYPE, INFO, JA, JB, N
14 DOUBLE PRECISION SCALE
17 INTEGER DESCA( * ), DESCB( * )
18 COMPLEX*16 A( * ), B( * )
170 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
171 $ mb_, nb_, rsrc_, csrc_, lld_
172 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
173 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
174 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
176 parameter( one = 1.0d+0 )
177 COMPLEX*16 CONE, HALF
178 parameter( cone = ( 1.0d+0, 0.0d+0 ),
179 $ half = ( 0.5d+0, 0.0d+0 ) )
183 INTEGER IACOL, IAROW, IBCOL, IBROW, ICOFFA, ICOFFB,
184 $ ictxt, iroffa, iroffb, k, kb, mycol, myrow, nb,
188 INTEGER IDUM1( 2 ), IDUM2( 2 )
195 INTRINSIC ichar,
min, mod
199 INTEGER ICEIL, INDXG2P
200 EXTERNAL lsame, iceil, indxg2p
204 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
211 ictxt = desca( ctxt_ )
217 IF( nprow.EQ.-1 )
THEN
218 info = -( 700+ctxt_ )
220 upper = lsame( uplo, 'u
' )
221 CALL CHK1MAT( N, 3, N, 3, IA, JA, DESCA, 7, INFO )
222 CALL CHK1MAT( N, 3, N, 3, IB, JB, DESCB, 11, INFO )
224 IAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),
226 IBROW = INDXG2P( IB, DESCB( MB_ ), MYROW, DESCB( RSRC_ ),
228 IACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),
230 IBCOL = INDXG2P( JB, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),
232 IROFFA = MOD( IA-1, DESCA( MB_ ) )
233 ICOFFA = MOD( JA-1, DESCA( NB_ ) )
234 IROFFB = MOD( IB-1, DESCB( MB_ ) )
235 ICOFFB = MOD( JB-1, DESCB( NB_ ) )
236.LT..OR..GT.
IF( IBTYPE1 IBTYPE3 ) THEN
238.NOT..AND..NOT.
ELSE IF( UPPER LSAME( UPLO, 'l
' ) ) THEN
240.LT.
ELSE IF( N0 ) THEN
242.NE.
ELSE IF( IROFFA0 ) THEN
244.NE.
ELSE IF( ICOFFA0 ) THEN
246.NE.
ELSE IF( DESCA( MB_ )DESCA( NB_ ) ) THEN
248.NE..OR..NE.
ELSE IF( IROFFB0 IBROWIAROW ) THEN
250.NE..OR..NE.
ELSE IF( ICOFFB0 IBCOLIACOL ) THEN
252.NE.
ELSE IF( DESCB( MB_ )DESCA( MB_ ) ) THEN
254.NE.
ELSE IF( DESCB( NB_ )DESCA( NB_ ) ) THEN
256.NE.
ELSE IF( ICTXTDESCB( CTXT_ ) ) THEN
257 INFO = -( 1100+CTXT_ )
263 IDUM1( 2 ) = ICHAR( 'u
' )
265 IDUM1( 2 ) = ICHAR( 'l
' )
268 CALL PCHK2MAT( N, 3, N, 3, IA, JA, DESCA, 7, N, 3, N, 3, IB,
269 $ JB, DESCB, 11, 2, IDUM1, IDUM2, INFO )
273 CALL PXERBLA( ICTXT, 'pzhegst', -INFO )
282.EQ.
IF( IBTYPE1 ) THEN
289 KB = MIN( ICEIL( JA, NB )*NB, JA+N-1 ) - JA + 1
295 CALL PZHEGS2( IBTYPE, UPLO, KB, A, IA+K-1, JA+K-1, DESCA, B,
296 $ IB+K-1, IB+K-1, DESCB, INFO )
298 CALL PZTRSM( 'left
', UPLO, 'conjugate transpose
',
299 $ 'non-unit
', KB, N-K-KB+1, CONE, B, IB+K-1,
300 $ JB+K-1, DESCB, A, IA+K-1, JA+K+KB-1, DESCA )
301 CALL PZHEMM( 'left
', UPLO, KB, N-K-KB+1, -HALF, A,
302 $ IA+K-1, JA+K-1, DESCA, B, IB+K-1, JB+K+KB-1,
303 $ DESCB, CONE, A, IA+K-1, JA+K+KB-1, DESCA )
304 CALL PZHER2K( UPLO, 'conjugate transpose
', N-K-KB+1, KB,
305 $ -CONE, A, IA+K-1, JA+K+KB-1, DESCA, B,
306 $ IB+K-1, JB+K+KB-1, DESCB, ONE, A,
307 $ IA+K+KB-1, JA+K+KB-1, DESCA )
308 CALL PZHEMM( 'left
', UPLO, KB, N-K-KB+1, -HALF, A,
309 $ IA+K-1, JA+K-1, DESCA, B, IB+K-1, JB+K+KB-1,
310 $ DESCB, CONE, A, IA+K-1, JA+K+KB-1, DESCA )
311 CALL PZTRSM( 'right
', UPLO, 'no transpose
', 'non-unit
',
312 $ KB, N-K-KB+1, CONE, B, IB+K+KB-1, JB+K+KB-1,
313 $ DESCB, A, IA+K-1, JA+K+KB-1, DESCA )
316 KB = MIN( N-K+1, NB )
327 KB = MIN( ICEIL( IA, NB )*NB, IA+N-1 ) - IA + 1
333 CALL PZHEGS2( IBTYPE, UPLO, KB, A, IA+K-1, JA+K-1, DESCA, B,
334 $ IB+K-1, JB+K-1, DESCB, INFO )
336 CALL PZTRSM( 'right
', UPLO, 'conjugate transpose
',
337 $ 'non-unit
', N-K-KB+1, KB, CONE, B, IB+K-1,
338 $ JB+K-1, DESCB, A, IA+K+KB-1, JA+K-1, DESCA )
339 CALL PZHEMM( 'right
', UPLO, N-K-KB+1, KB, -HALF, A,
340 $ IA+K-1, JA+K-1, DESCA, B, IB+K+KB-1, JB+K-1,
341 $ DESCB, CONE, A, IA+K+KB-1, JA+K-1, DESCA )
342 CALL PZHER2K( UPLO, 'no transpose
', N-K-KB+1, KB, -CONE,
343 $ A, IA+K+KB-1, JA+K-1, DESCA, B, IB+K+KB-1,
344 $ JB+K-1, DESCB, ONE, A, IA+K+KB-1,
346 CALL PZHEMM( 'right
', UPLO, N-K-KB+1, KB, -HALF, A,
347 $ IA+K-1, JA+K-1, DESCA, B, IB+K+KB-1, JB+K-1,
348 $ DESCB, CONE, A, IA+K+KB-1, JA+K-1, DESCA )
349 CALL PZTRSM( 'left
', UPLO, 'no transpose
', 'non-unit
',
350 $ N-K-KB+1, KB, CONE, B, IB+K+KB-1, JB+K+KB-1,
351 $ DESCB, A, IA+K+KB-1, JA+K-1, DESCA )
354 KB = MIN( N-K+1, NB )
369 KB = MIN( ICEIL( JA, NB )*NB, JA+N-1 ) - JA + 1
375 CALL PZTRMM( 'left
', UPLO, 'no transpose
', 'non-unit
', K-1,
376 $ KB, CONE, B, IB, JB, DESCB, A, IA, JA+K-1,
378 CALL PZHEMM( 'right
', UPLO, K-1, KB, HALF, A, IA+K-1,
379 $ JA+K-1, DESCA, B, IB, JB+K-1, DESCB, CONE, A,
380 $ IA, JA+K-1, DESCA )
381 CALL PZHER2K( UPLO, 'no transpose
', K-1, KB, CONE, A, IA,
382 $ JA+K-1, DESCA, B, IB, JB+K-1, DESCB, ONE, A,
384 CALL PZHEMM( 'right
', UPLO, K-1, KB, HALF, A, IA+K-1,
385 $ JA+K-1, DESCA, B, IB, JB+K-1, DESCB, CONE, A,
386 $ IA, JA+K-1, DESCA )
387 CALL PZTRMM( 'right
', UPLO, 'conjugate transpose
',
388 $ 'non-unit
', K-1, KB, CONE, B, IB+K-1, JB+K-1,
389 $ DESCB, A, IA, JA+K-1, DESCA )
390 CALL PZHEGS2( IBTYPE, UPLO, KB, A, IA+K-1, JA+K-1, DESCA, B,
391 $ IB+K-1, JB+K-1, DESCB, INFO )
394 KB = MIN( N-K+1, NB )
405 KB = MIN( ICEIL( IA, NB )*NB, IA+N-1 ) - IA + 1
411 CALL PZTRMM( 'right
', UPLO, 'no transpose
', 'non-unit
', KB,
412 $ K-1, CONE, B, IB, JB, DESCB, A, IA+K-1, JA,
414 CALL PZHEMM( 'left
', UPLO, KB, K-1, HALF, A, IA+K-1, JA+K-1,
415 $ DESCA, B, IB+K-1, JB, DESCB, CONE, A, IA+K-1,
417 CALL PZHER2K( UPLO, 'conjugate transpose', k-1, kb, cone, a,
418 $ ia+k-1, ja, desca, b, ib+k-1, jb, descb, one,
420 CALL pzhemm(
'Left', uplo, kb, k-1, half, a, ia+k-1, ja+k-1,
421 $ desca, b, ib+k-1, jb, descb, cone, a, ia+k-1,
423 CALL pztrmm(
'Left', uplo,
'Conjugate transpose',
424 $
'Non-unit', kb, k-1, cone, b, ib+k-1, jb+k-1,
425 $ descb, a, ia+k-1, ja, desca )
426 CALL pzhegs2( ibtype, uplo, kb, a, ia+k-1, ja+k-1, desca, b,
427 $ ib+k-1, jb+k-1, descb, info )
430 kb =
min( n-k+1, nb )
subroutine pztrsm(side, uplo, transa, diag, m, n, alpha, a, ia, ja, desca, b, ib, jb, descb)
subroutine pchk2mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, mb, mbpos0, nb, nbpos0, ib, jb, descb, descbpos0, nextra, ex, expos, info)