166 SUBROUTINE chfrk( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA, BETA,
179 COMPLEX A( LDA, * ), C( * )
188 parameter( one = 1.0e+0, zero = 0.0e+0 )
189 parameter( czero = ( 0.0e+0, 0.0e+0 ) )
192 LOGICAL LOWER, NORMALTRANSR, NISODD, NOTRANS
193 INTEGER INFO, NROWA, J, NK, N1, N2
194 COMPLEX CALPHA, CBETA
212 normaltransr = lsame( transr,
'N' )
213 lower = lsame( uplo,
'L' )
214 notrans = lsame( trans,
'N' )
222 IF( .NOT.normaltransr .AND. .NOT.lsame( transr,
'C' ) )
THEN
224 ELSE IF( .NOT.lower .AND. .NOT.lsame( uplo,
'U' ) )
THEN
226 ELSE IF( .NOT.notrans .AND. .NOT.lsame( trans,
'C' ) )
THEN
228 ELSE IF( n.LT.0 )
THEN
230 ELSE IF( k.LT.0 )
THEN
232 ELSE IF( lda.LT.
max( 1, nrowa ) )
THEN
236 CALL xerbla(
'CHFRK ', -info )
245 IF( ( n.EQ.0 ) .OR. ( ( ( alpha.EQ.zero ) .OR. ( k.EQ.0 ) ) .AND.
246 $ ( beta.EQ.one ) ) )
RETURN
248 IF( ( alpha.EQ.zero ) .AND. ( beta.EQ.zero ) )
THEN
249 DO j = 1, ( ( n*( n+1 ) ) / 2 )
255 calpha =
cmplx( alpha, zero )
256 cbeta =
cmplx( beta, zero )
262 IF( mod( n, 2 ).EQ.0 )
THEN
280 IF( normaltransr )
THEN
292 CALL cherk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
294 CALL cherk(
'U',
'N', n2, k, alpha, a( n1+1, 1 ), lda,
295 $ beta, c( n+1 ), n )
296 CALL cgemm(
'N',
'C', n2, n1, k, calpha, a( n1+1, 1 ),
297 $ lda, a( 1, 1 ), lda, cbeta, c( n1+1 ), n )
303 CALL cherk(
'L',
'C', n1, k, alpha, a( 1, 1 ), lda,
305 CALL cherk(
'U',
'C', n2, k, alpha, a( 1, n1+1 ), lda,
306 $ beta, c( n+1 ), n )
307 CALL cgemm(
'C',
'N', n2, n1, k, calpha, a( 1, n1+1 ),
308 $ lda, a( 1, 1 ), lda, cbeta, c( n1+1 ), n )
320 CALL cherk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
321 $ beta, c( n2+1 ), n )
322 CALL cherk(
'U',
'N', n2, k, alpha, a( n2, 1 ), lda,
323 $ beta, c( n1+1 ), n )
324 CALL cgemm(
'N',
'C', n1, n2, k, calpha, a( 1, 1 ),
325 $ lda, a( n2, 1 ), lda, cbeta, c( 1 ), n )
331 CALL cherk(
'L',
'C', n1, k, alpha, a( 1, 1 ), lda,
332 $ beta, c( n2+1 ), n )
333 CALL cherk(
'U',
'C', n2, k, alpha, a( 1, n2 ), lda,
334 $ beta, c( n1+1 ), n )
335 CALL cgemm(
'C', 'n
', N1, N2, K, CALPHA, A( 1, 1 ),
336 $ LDA, A( 1, N2 ), LDA, CBETA, C( 1 ), N )
354 CALL CHERK( 'u
', 'n
', N1, K, ALPHA, A( 1, 1 ), LDA,
356 CALL CHERK( 'l
', 'n
', N2, K, ALPHA, A( N1+1, 1 ), LDA,
358 CALL CGEMM( 'n
', 'c
', N1, N2, K, CALPHA, A( 1, 1 ),
359 $ LDA, A( N1+1, 1 ), LDA, CBETA,
366 CALL CHERK( 'u
', 'c
', N1, K, ALPHA, A( 1, 1 ), LDA,
368 CALL CHERK( 'l
', 'c
', N2, K, ALPHA, A( 1, N1+1 ), LDA,
370 CALL CGEMM( 'c
', 'n
', N1, N2, K, CALPHA, A( 1, 1 ),
371 $ LDA, A( 1, N1+1 ), LDA, CBETA,
384 CALL CHERK( 'u
', 'n
', N1, K, ALPHA, A( 1, 1 ), LDA,
385 $ BETA, C( N2*N2+1 ), N2 )
386 CALL CHERK( 'l
', 'n
', N2, K, ALPHA, A( N1+1, 1 ), LDA,
387 $ BETA, C( N1*N2+1 ), N2 )
388 CALL CGEMM( 'n
', 'c
', N2, N1, K, CALPHA, A( N1+1, 1 ),
389 $ LDA, A( 1, 1 ), LDA, CBETA, C( 1 ), N2 )
395 CALL CHERK( 'u
', 'c
', N1, K, ALPHA, A( 1, 1 ), LDA,
396 $ BETA, C( N2*N2+1 ), N2 )
397 CALL CHERK( 'l
', 'c
', N2, K, ALPHA, A( 1, N1+1 ), LDA,
398 $ BETA, C( N1*N2+1 ), N2 )
399 CALL CGEMM( 'c
', 'n
', N2, N1, K, CALPHA, A( 1, N1+1 ),
400 $ LDA, A( 1, 1 ), LDA, CBETA, C( 1 ), N2 )
412 IF( NORMALTRANSR ) THEN
424 CALL CHERK( 'l
', 'n
', NK, K, ALPHA, A( 1, 1 ), LDA,
425 $ BETA, C( 2 ), N+1 )
426 CALL CHERK( 'u
', 'n
', NK, K, ALPHA, A( NK+1, 1 ), LDA,
427 $ BETA, C( 1 ), N+1 )
428 CALL CGEMM( 'n
', 'c
', NK, NK, K, CALPHA, A( NK+1, 1 ),
429 $ LDA, A( 1, 1 ), LDA, CBETA, C( NK+2 ),
436 CALL CHERK( 'l
', 'c
', NK, K, ALPHA, A( 1, 1 ), LDA,
437 $ BETA, C( 2 ), N+1 )
438 CALL CHERK( 'u
', 'c
', NK, K, ALPHA, A( 1, NK+1 ), LDA,
439 $ BETA, C( 1 ), N+1 )
440 CALL CGEMM( 'c
', 'n
', NK, NK, K, CALPHA, A( 1, NK+1 ),
441 $ LDA, A( 1, 1 ), LDA, CBETA, C( NK+2 ),
454 CALL CHERK( 'l
', 'n
', NK, K, ALPHA, A( 1, 1 ), LDA,
455 $ BETA, C( NK+2 ), N+1 )
456 CALL CHERK( 'u
', 'n
', NK, K, ALPHA, A( NK+1, 1 ), LDA,
457 $ BETA, C( NK+1 ), N+1 )
458 CALL CGEMM( 'n
', 'c
', NK, NK, K, CALPHA, A( 1, 1 ),
459 $ LDA, A( NK+1, 1 ), LDA, CBETA, C( 1 ),
466 CALL CHERK( 'l
', 'c
', NK, K, ALPHA, A( 1, 1 ), LDA,
467 $ BETA, C( NK+2 ), N+1 )
468 CALL CHERK( 'u
', 'c
', NK, K, ALPHA, A( 1, NK+1 ), LDA,
469 $ BETA, C( NK+1 ), N+1 )
470 CALL CGEMM( 'c
', 'n', nk, nk, k, calpha, a( 1, 1 ),
471 $ lda, a( 1, nk+1 ), lda, cbeta, c( 1 ),
490 CALL cherk(
'U',
'N', nk, k, alpha, a( 1, 1 ), lda,
491 $ beta, c( nk+1 ), nk )
492 CALL cherk(
'L',
'N', nk, k, alpha, a( nk+1, 1 ), lda,
494 CALL cgemm(
'N',
'C', nk, nk, k, calpha, a( 1, 1 ),
495 $ lda, a( nk+1, 1 ), lda, cbeta,
496 $ c( ( ( nk+1 )*nk )+1 ), nk )
502 CALL cherk(
'U',
'C', nk, k, alpha, a( 1, 1 ), lda,
503 $ beta, c( nk+1 ), nk )
504 CALL cherk(
'L',
'C', nk, k, alpha, a( 1, nk+1 ), lda,
506 CALL cgemm(
'C',
'N', nk, nk, k, calpha, a( 1, 1 ),
507 $ lda, a( 1, nk+1 ), lda, cbeta,
520 CALL cherk(
'U',
'N', nk, k, alpha, a( 1, 1 ), lda,
521 $ beta, c( nk*( nk+1 )+1 ), nk )
522 CALL cherk(
'L',
'N', nk, k, alpha, a( nk+1, 1 ), lda,
523 $ beta, c( nk*nk+1 ), nk )
524 CALL cgemm(
'N',
'C', nk, nk, k, calpha, a( nk+1, 1 ),
525 $ lda, a( 1, 1 ), lda, cbeta, c( 1 ), nk )
531 CALL cherk(
'U',
'C', nk, k, alpha, a( 1, 1 ), lda,
532 $ beta, c( nk*( nk+1 )+1 ), nk )
533 CALL cherk(
'L',
'C', nk, k, alpha, a( 1, nk+1 ), lda,
534 $ beta, c( nk*nk+1 ), nk )
535 CALL cgemm(
'C',
'N', nk, nk, k, calpha, a( 1, nk+1 ),
536 $ lda, a( 1, 1 ), lda, cbeta, c( 1 ), nk )