3 SUBROUTINE pzhegs2( IBTYPE, UPLO, N, A, IA, JA, DESCA, B, IB, JB,
16 INTEGER DESCA( * ), DESCB( * )
17 COMPLEX*16 A( * ), B( * )
163 INTEGER BLOCK_CYCLIC_2D, DLEN_, DTYPE_, CTXT_, M_, N_,
165 parameter( block_cyclic_2d = 1, dlen_ = 9, dtype_ = 1,
166 $ ctxt_ = 2, m_ = 3, n_ = 4, mb_ = 5, nb_ = 6,
167 $ rsrc_ = 7, csrc_ = 8, lld_ = 9 )
168 DOUBLE PRECISION ONE, HALF
169 parameter( one = 1.0d+0, half = 0.5d+0 )
171 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
175 INTEGER IACOL, IAROW, IBCOL, IBROW, ICOFFA, ICOFFB,
176 $ ictxt, iia, iib, ioffa, ioffb, iroffa, iroffb,
177 $ jja, jjb, k, lda, ldb, mycol, myrow, npcol,
179 DOUBLE PRECISION AKK, BKK
193 EXTERNAL lsame, indxg2p
197 IF( block_cyclic_2d*csrc_*ctxt_*dlen_*dtype_*lld_*mb_*m_*nb_*n_*
202 ictxt = desca( ctxt_ )
208 IF( nprow.EQ.-1 )
THEN
209 info = -( 700+ctxt_ )
211 upper = lsame( uplo, 'u
' )
212 CALL CHK1MAT( N, 3, N, 3, IA, JA, DESCA, 7, INFO )
213 CALL CHK1MAT( N, 3, N, 3, IB, JB, DESCB, 11, INFO )
215 IAROW = INDXG2P( IA, DESCA( MB_ ), MYROW, DESCA( RSRC_ ),
217 IBROW = INDXG2P( IB, DESCB( MB_ ), MYROW, DESCB( RSRC_ ),
219 IACOL = INDXG2P( JA, DESCA( NB_ ), MYCOL, DESCA( CSRC_ ),
221 IBCOL = INDXG2P( JB, DESCB( NB_ ), MYCOL, DESCB( CSRC_ ),
223 IROFFA = MOD( IA-1, DESCA( MB_ ) )
224 ICOFFA = MOD( JA-1, DESCA( NB_ ) )
225 IROFFB = MOD( IB-1, DESCB( MB_ ) )
226 ICOFFB = MOD( JB-1, DESCB( NB_ ) )
227.LT..OR..GT.
IF( IBTYPE1 IBTYPE3 ) THEN
229.NOT..AND..NOT.
ELSE IF( UPPER LSAME( UPLO, 'l
' ) ) THEN
231.LT.
ELSE IF( N0 ) THEN
233.GT.
ELSE IF( N+ICOFFADESCA( NB_ ) ) THEN
235.NE.
ELSE IF( IROFFA0 ) THEN
237.NE.
ELSE IF( ICOFFA0 ) THEN
239.NE.
ELSE IF( DESCA( MB_ )DESCA( NB_ ) ) THEN
241.NE..OR..NE.
ELSE IF( IROFFB0 IBROWIAROW ) THEN
243.NE..OR..NE.
ELSE IF( ICOFFB0 IBCOLIACOL ) THEN
245.NE.
ELSE IF( DESCB( MB_ )DESCA( MB_ ) ) THEN
247.NE.
ELSE IF( DESCB( NB_ )DESCA( NB_ ) ) THEN
249.NE.
ELSE IF( ICTXTDESCB( CTXT_ ) ) THEN
250 INFO = -( 1100+CTXT_ )
256 CALL PXERBLA( ICTXT, 'pzhegs2', -INFO )
257 CALL BLACS_EXIT( ICTXT )
263.EQ..OR..NE..OR..NE.
IF( N0 ( MYROWIAROW MYCOLIACOL ) )
270 CALL INFOG2L( IA, JA, DESCA, NPROW, NPCOL, MYROW, MYCOL, IIA, JJA,
272 CALL INFOG2L( IA, JA, DESCA, NPROW, NPCOL, MYROW, MYCOL, IIB, JJB,
275.EQ.
IF( IBTYPE1 ) THEN
279 IOFFA = IIA + JJA*LDA
280 IOFFB = IIB + JJB*LDB
289 AKK = DBLE( A( IOFFA-LDA ) )
290 BKK = DBLE( B( IOFFB-LDB ) )
294 CALL ZDSCAL( N-K, ONE / BKK, A( IOFFA ), LDA )
296 CALL ZLACGV( N-K, A( IOFFA ), LDA )
297 CALL ZLACGV( N-K, B( IOFFB ), LDB )
298 CALL ZAXPY( N-K, CT, B( IOFFB ), LDB, A( IOFFA ),
300 CALL ZHER2( UPLO, N-K, -CONE, A( IOFFA ), LDA,
301 $ B( IOFFB ), LDB, A( IOFFA+1 ), LDA )
302 CALL ZAXPY( N-K, CT, B( IOFFB ), LDB, A( IOFFA ),
304 CALL ZLACGV( N-K, B( IOFFB ), LDB )
305 CALL ZTRSV( UPLO, 'conjugate transpose
', 'non-unit
',
306 $ N-K, B( IOFFB+1 ), LDB, A( IOFFA ), LDA )
307 CALL ZLACGV( N-K, A( IOFFA ), LDA )
313 IOFFA = IOFFA + LDA + 1
314 IOFFB = IOFFB + LDB + 1
320 IOFFA = IIA + 1 + ( JJA-1 )*LDA
321 IOFFB = IIB + 1 + ( JJB-1 )*LDB
330 AKK = DBLE( A( IOFFA-1 ) )
331 BKK = DBLE( B( IOFFB-1 ) )
336 CALL ZDSCAL( N-K, ONE / BKK, A( IOFFA ), 1 )
338 CALL ZAXPY( N-K, CT, B( IOFFB ), 1, A( IOFFA ), 1 )
339 CALL ZHER2( UPLO, N-K, -CONE, A( IOFFA ), 1,
340 $ B( IOFFB ), 1, A( IOFFA+LDA ), LDA )
341 CALL ZAXPY( N-K, CT, B( IOFFB ), 1, A( IOFFA ), 1 )
342 CALL ZTRSV( UPLO, 'no transpose
', 'non-unit
', N-K,
343 $ B( IOFFB+LDB ), LDB, A( IOFFA ), 1 )
349 IOFFA = IOFFA + LDA + 1
350 IOFFB = IOFFB + LDB + 1
360 IOFFA = IIA + ( JJA-1 )*LDA
361 IOFFB = IIB + ( JJB-1 )*LDB
369 AKK = DBLE( A( IOFFA+K-1 ) )
370 BKK = DBLE( B( IOFFB+K-1 ) )
371 CALL ZTRMV( UPLO, 'no transpose
', 'non-unit
', K-1,
372 $ B( IIB+( JJB-1 )*LDB ), LDB, A( IOFFA ), 1 )
374 CALL ZAXPY( K-1, CT, B( IOFFB ), 1, A( IOFFA ), 1 )
375 CALL ZHER2( UPLO, K-1, CONE, A( IOFFA ), 1, B( IOFFB ),
376 $ 1, A( IIA+( JJA-1 )*LDA ), LDA )
377 CALL ZAXPY( K-1, CT, B( IOFFB ), 1, A( IOFFA ), 1 )
378 CALL ZDSCAL( K-1, BKK, A( IOFFA ), 1 )
379 A( IOFFA+K-1 ) = AKK*BKK**2
391 IOFFA = IIA + ( JJA-1 )*LDA
392 IOFFB = IIB + ( JJB-1 )*LDB
400 AKK = DBLE( A( IOFFA+( K-1 )*LDA ) )
401 BKK = DBLE( B( IOFFB+( K-1 )*LDB ) )
402 CALL ZLACGV( K-1, A( IOFFA ), LDA )
403 CALL ZTRMV( UPLO, 'conjugate transpose
', 'non-unit
', K-1,
404 $ B( IIB+( JJB-1 )*LDB ), LDB, A( IOFFA ),
407 CALL ZLACGV( K-1, B( IOFFB ), LDB )
408 CALL ZAXPY( K-1, CT, B( IOFFB ), LDB, A( IOFFA ), LDA )
409 CALL ZHER2( UPLO, K-1, CONE, A( IOFFA ), LDA, B( IOFFB ),
410 $ LDB, A( IIA+( JJA-1 )*LDA ), LDA )
411 CALL ZAXPY( K-1, CT, B( IOFFB ), LDB, A( IOFFA ), LDA )
412 CALL ZLACGV( K-1, B( IOFFB ), LDB )
413 CALL ZDSCAL( K-1, BKK, A( IOFFA ), LDA )
414 CALL ZLACGV( K-1, A( IOFFA ), LDA )
415 A( IOFFA+( K-1 )*LDA ) = AKK*BKK**2
subroutine zlacgv(n, x, incx)
ZLACGV conjugates a complex vector.
subroutine zdscal(n, da, zx, incx)
ZDSCAL
subroutine zaxpy(n, za, zx, incx, zy, incy)
ZAXPY
subroutine ztrmv(uplo, trans, diag, n, a, lda, x, incx)
ZTRMV
subroutine zher2(uplo, n, alpha, x, incx, y, incy, a, lda)
ZHER2
subroutine ztrsv(uplo, trans, diag, n, a, lda, x, incx)
ZTRSV
subroutine chk1mat(ma, mapos0, na, napos0, ia, ja, desca, descapos0, info)
subroutine pxerbla(contxt, srname, info)
subroutine infog2l(grindx, gcindx, desc, nprow, npcol, myrow, mycol, lrindx, lcindx, rsrc, csrc)
subroutine blacs_gridinfo(cntxt, nprow, npcol, myrow, mycol)
subroutine pzhegs2(ibtype, uplo, n, a, ia, ja, desca, b, ib, jb, descb, info)