129 SUBROUTINE chegst( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
138 INTEGER INFO, ITYPE, LDA, LDB, N
141 COMPLEX A( LDA, * ), B( LDB, * )
148 parameter( one = 1.0e+0 )
150 parameter( cone = ( 1.0e+0, 0.0e+0 ),
151 $ half = ( 0.5e+0, 0.0e+0 ) )
166 EXTERNAL lsame, ilaenv
173 upper = lsame( uplo,
'U' )
174 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
176 ELSE IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
178 ELSE IF( n.LT.0 )
THEN
180 ELSE IF( lda.LT.max( 1, n ) )
THEN
182 ELSE IF( ldb.LT.max( 1, n ) )
THEN
186 CALL xerbla(
'CHEGST', -info )
197 nb = ilaenv( 1,
'CHEGST', uplo, n, -1, -1, -1 )
199 IF( nb.LE.1 .OR. nb.GE.n )
THEN
203 CALL chegs2( itype, uplo, n, a, lda, b, ldb, info )
208 IF( itype.EQ.1 )
THEN
214 kb = min( n-k+1, nb )
218 CALL chegs2( itype, uplo, kb, a( k, k ), lda,
219 $ b( k, k ), ldb, info )
221 CALL ctrsm(
'Left', uplo,
'Conjugate transpose',
222 $
'Non-unit', kb, n-k-kb+1, cone,
223 $ b( k, k ), ldb, a( k, k+kb ), lda )
224 CALL chemm(
'Left', uplo, kb, n-k-kb+1, -half,
225 $ a( k, k ), lda, b( k, k+kb ), ldb,
226 $ cone, a( k, k+kb ), lda )
227 CALL cher2k( uplo,
'Conjugate transpose', n-k-kb+1,
228 $ kb, -cone, a( k, k+kb ), lda,
229 $ b( k, k+kb ), ldb, one,
230 $ a( k+kb, k+kb ), lda )
231 CALL chemm(
'Left', uplo, kb, n-k-kb+1, -half,
232 $ a( k, k ), lda, b( k, k+kb ), ldb,
233 $ cone, a( k, k+kb ), lda )
234 CALL ctrsm(
'Right', uplo,
'No transpose',
235 $
'Non-unit', kb, n-k-kb+1, cone,
236 $ b( k+kb, k+kb ), ldb, a( k, k+kb ),
245 kb = min( n-k+1, nb )
249 CALL chegs2( itype, uplo, kb, a( k, k ), lda,
250 $ b( k, k ), ldb, info )
252 CALL ctrsm(
'Right', uplo,
'Conjugate transpose',
253 $
'Non-unit', n-k-kb+1, kb, cone,
254 $ b( k, k ), ldb, a( k+kb, k ), lda )
255 CALL chemm(
'Right', uplo, n-k-kb+1, kb, -half,
256 $ a( k, k ), lda, b( k+kb, k ), ldb,
257 $ cone, a( k+kb, k ), lda )
258 CALL cher2k( uplo,
'No transpose', n-k-kb+1, kb,
259 $ -cone, a( k+kb, k ), lda,
260 $ b( k+kb, k ), ldb, one,
261 $ a( k+kb, k+kb ), lda )
262 CALL chemm(
'Right', uplo, n-k-kb+1, kb, -half,
263 $ a( k, k ), lda, b( k+kb, k ), ldb,
264 $ cone, a( k+kb, k ), lda )
265 CALL ctrsm(
'Left', uplo,
'No transpose',
266 $
'Non-unit', n-k-kb+1, kb, cone,
267 $ b( k+kb, k+kb ), ldb, a( k+kb, k ),
278 kb = min( n-k+1, nb )
282 CALL ctrmm(
'Left', uplo,
'No transpose',
'Non-unit',
283 $ k-1, kb, cone, b, ldb, a( 1, k ), lda )
284 CALL chemm(
'Right', uplo, k-1, kb, half, a( k, k ),
285 $ lda, b( 1, k ), ldb, cone, a( 1, k ),
287 CALL cher2k( uplo,
'No transpose', k-1, kb, cone,
288 $ a( 1, k ), lda, b( 1, k ), ldb, one, a,
290 CALL chemm(
'Right', uplo, k-1, kb, half, a( k, k ),
291 $ lda, b( 1, k ), ldb, cone, a( 1, k ),
293 CALL ctrmm(
'Right', uplo,
'Conjugate transpose',
294 $
'Non-unit', k-1, kb, cone, b( k, k ), ldb,
296 CALL chegs2( itype, uplo, kb, a( k, k ), lda,
297 $ b( k, k ), ldb, info )
304 kb = min( n-k+1, nb )
308 CALL ctrmm(
'Right', uplo,
'No transpose',
'Non-unit',
309 $ kb, k-1, cone, b, ldb, a( k, 1 ), lda )
310 CALL chemm(
'Left', uplo, kb, k-1, half, a( k, k ),
311 $ lda, b( k, 1 ), ldb, cone, a( k, 1 ),
313 CALL cher2k( uplo,
'Conjugate transpose', k-1, kb,
314 $ cone, a( k, 1 ), lda, b( k, 1 ), ldb,
316 CALL chemm(
'Left', uplo, kb, k-1, half, a( k, k ),
317 $ lda, b( k, 1 ), ldb, cone, a( k, 1 ),
319 CALL ctrmm(
'Left', uplo,
'Conjugate transpose',
320 $
'Non-unit', kb, k-1, cone, b( k, k ), ldb,
322 CALL chegs2( itype, uplo, kb, a( k, k ), lda,
323 $ b( k, k ), ldb, info )