125 SUBROUTINE zhegs2( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
133 INTEGER INFO, ITYPE, LDA, LDB, N
136 COMPLEX*16 A( LDA, * ), B( LDB, * )
142 DOUBLE PRECISION ONE, HALF
143 parameter( one = 1.0d+0, half = 0.5d+0 )
145 parameter( cone = ( 1.0d+0, 0.0d+0 ) )
150 DOUBLE PRECISION AKK, BKK
170 upper = lsame( uplo,
'U' )
171 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
173 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
175 ELSE IF( n.LT.0 )
THEN
177 ELSE IF( lda.LT.max( 1, n ) )
THEN
179 ELSE IF( ldb.LT.max( 1, n ) )
THEN
183 CALL xerbla(
'ZHEGS2', -info )
187 IF( itype.EQ.1 )
THEN
196 akk = dble( a( k, k ) )
197 bkk = dble( b( k, k ) )
201 CALL zdscal( n-k, one / bkk, a( k, k+1 ), lda )
203 CALL zlacgv( n-k, a( k, k+1 ), lda )
204 CALL zlacgv( n-k, b( k, k+1 ), ldb )
205 CALL zaxpy( n-k, ct, b( k, k+1 ), ldb, a( k, k+1 ),
207 CALL zher2( uplo, n-k, -cone, a( k, k+1 ), lda,
208 $ b( k, k+1 ), ldb, a( k+1, k+1 ), lda )
209 CALL zaxpy( n-k, ct, b( k, k+1 ), ldb, a( k, k+1 ),
211 CALL zlacgv( n-k, b( k, k+1 ), ldb )
212 CALL ztrsv( uplo,
'Conjugate transpose',
214 $ n-k, b( k+1, k+1 ), ldb, a( k, k+1 ),
216 CALL zlacgv( n-k, a( k, k+1 ), lda )
227 akk = dble( a( k, k ) )
228 bkk = dble( b( k, k ) )
232 CALL zdscal( n-k, one / bkk, a( k+1, k ), 1 )
234 CALL zaxpy( n-k, ct, b( k+1, k ), 1, a( k+1, k ),
236 CALL zher2( uplo, n-k, -cone, a( k+1, k ), 1,
237 $ b( k+1, k ), 1, a( k+1, k+1 ), lda )
238 CALL zaxpy( n-k, ct, b( k+1, k ), 1, a( k+1, k ),
240 CALL ztrsv( uplo,
'No transpose',
'Non-unit', n-k,
241 $ b( k+1, k+1 ), ldb, a( k+1, k ), 1 )
254 akk = dble( a( k, k ) )
255 bkk = dble( b( k, k ) )
256 CALL ztrmv( uplo,
'No transpose',
'Non-unit', k-1, b,
257 $ ldb, a( 1, k ), 1 )
259 CALL zaxpy( k-1, ct, b( 1, k ), 1, a( 1, k ), 1 )
260 CALL zher2( uplo, k-1, cone, a( 1, k ), 1, b( 1, k ),
263 CALL zaxpy( k-1, ct, b( 1, k ), 1, a( 1, k ), 1 )
264 CALL zdscal( k-1, bkk, a( 1, k ), 1 )
265 a( k, k ) = akk*bkk**2
275 akk = dble( a( k, k ) )
276 bkk = dble( b( k, k ) )
277 CALL zlacgv( k-1, a( k, 1 ), lda )
278 CALL ztrmv( uplo,
'Conjugate transpose',
'Non-unit',
280 $ b, ldb, a( k, 1 ), lda )
282 CALL zlacgv( k-1, b( k, 1 ), ldb )
283 CALL zaxpy( k-1, ct, b( k, 1 ), ldb, a( k, 1 ), lda )
284 CALL zher2( uplo, k-1, cone, a( k, 1 ), lda, b( k,
287 CALL zaxpy( k-1, ct, b( k, 1 ), ldb, a( k, 1 ), lda )
288 CALL zlacgv( k-1, b( k, 1 ), ldb )
289 CALL zdscal( k-1, bkk, a( k, 1 ), lda )
290 CALL zlacgv( k-1, a( k, 1 ), lda )
291 a( k, k ) = akk*bkk**2