164 SUBROUTINE chfrk( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA,
175 CHARACTER TRANS, TRANSR, UPLO
178 COMPLEX A( LDA, * ), C( * )
187 parameter( one = 1.0e+0, zero = 0.0e+0 )
188 parameter( czero = ( 0.0e+0, 0.0e+0 ) )
191 LOGICAL LOWER, NORMALTRANSR, NISODD, NOTRANS
192 INTEGER INFO, NROWA, J, NK, N1, N2
193 COMPLEX CALPHA, CBETA
211 normaltransr = lsame( transr,
'N' )
212 lower = lsame( uplo,
'L' )
213 notrans = lsame( trans,
'N' )
221 IF( .NOT.normaltransr .AND. .NOT.lsame( transr,
'C' ) )
THEN
223 ELSE IF( .NOT.lower .AND. .NOT.lsame( uplo,
'U' ) )
THEN
225 ELSE IF( .NOT.notrans .AND. .NOT.lsame( trans,
'C' ) )
THEN
227 ELSE IF( n.LT.0 )
THEN
229 ELSE IF( k.LT.0 )
THEN
231 ELSE IF( lda.LT.max( 1, nrowa ) )
THEN
235 CALL xerbla(
'CHFRK ', -info )
244 IF( ( n.EQ.0 ) .OR. ( ( ( alpha.EQ.zero ) .OR. ( k.EQ.0 ) ) .AND.
245 $ ( beta.EQ.one ) ) )
RETURN
247 IF( ( alpha.EQ.zero ) .AND. ( beta.EQ.zero ) )
THEN
248 DO j = 1, ( ( n*( n+1 ) ) / 2 )
254 calpha = cmplx( alpha, zero )
255 cbeta = cmplx( beta, zero )
261 IF( mod( n, 2 ).EQ.0 )
THEN
279 IF( normaltransr )
THEN
291 CALL cherk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
293 CALL cherk(
'U',
'N', n2, k, alpha, a( n1+1, 1 ),
295 $ beta, c( n+1 ), n )
296 CALL cgemm(
'N',
'C', n2, n1, k, calpha, a( n1+1,
298 $ lda, a( 1, 1 ), lda, cbeta, c( n1+1 ), n )
304 CALL cherk(
'L',
'C', n1, k, alpha, a( 1, 1 ), lda,
306 CALL cherk(
'U',
'C', n2, k, alpha, a( 1, n1+1 ),
308 $ beta, c( n+1 ), n )
309 CALL cgemm(
'C',
'N', n2, n1, k, calpha, a( 1,
311 $ lda, a( 1, 1 ), lda, cbeta, c( n1+1 ), n )
323 CALL cherk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
324 $ beta, c( n2+1 ), n )
325 CALL cherk(
'U',
'N', n2, k, alpha, a( n2, 1 ),
327 $ beta, c( n1+1 ), n )
328 CALL cgemm(
'N',
'C', n1, n2, k, calpha, a( 1, 1 ),
329 $ lda, a( n2, 1 ), lda, cbeta, c( 1 ), n )
335 CALL cherk(
'L',
'C', n1, k, alpha, a( 1, 1 ), lda,
336 $ beta, c( n2+1 ), n )
337 CALL cherk(
'U',
'C', n2, k, alpha, a( 1, n2 ),
339 $ beta, c( n1+1 ), n )
340 CALL cgemm(
'C',
'N', n1, n2, k, calpha, a( 1, 1 ),
341 $ lda, a( 1, n2 ), lda, cbeta, c( 1 ), n )
359 CALL cherk(
'U',
'N', n1, k, alpha, a( 1, 1 ), lda,
361 CALL cherk(
'L',
'N', n2, k, alpha, a( n1+1, 1 ),
364 CALL cgemm(
'N',
'C', n1, n2, k, calpha, a( 1, 1 ),
365 $ lda, a( n1+1, 1 ), lda, cbeta,
372 CALL cherk(
'U',
'C', n1, k, alpha, a( 1, 1 ), lda,
374 CALL cherk(
'L',
'C', n2, k, alpha, a( 1, n1+1 ),
377 CALL cgemm(
'C',
'N', n1, n2, k, calpha, a( 1, 1 ),
378 $ lda, a( 1, n1+1 ), lda, cbeta,
391 CALL cherk(
'U',
'N', n1, k, alpha, a( 1, 1 ), lda,
392 $ beta, c( n2*n2+1 ), n2 )
393 CALL cherk(
'L',
'N', n2, k, alpha, a( n1+1, 1 ),
395 $ beta, c( n1*n2+1 ), n2 )
396 CALL cgemm(
'N',
'C', n2, n1, k, calpha, a( n1+1,
398 $ lda, a( 1, 1 ), lda, cbeta, c( 1 ), n2 )
404 CALL cherk(
'U',
'C', n1, k, alpha, a( 1, 1 ), lda,
405 $ beta, c( n2*n2+1 ), n2 )
406 CALL cherk(
'L',
'C', n2, k, alpha, a( 1, n1+1 ),
408 $ beta, c( n1*n2+1 ), n2 )
409 CALL cgemm(
'C',
'N', n2, n1, k, calpha, a( 1,
411 $ lda, a( 1, 1 ), lda, cbeta, c( 1 ), n2 )
423 IF( normaltransr )
THEN
435 CALL cherk(
'L',
'N', nk, k, alpha, a( 1, 1 ), lda,
436 $ beta, c( 2 ), n+1 )
437 CALL cherk(
'U',
'N', nk, k, alpha, a( nk+1, 1 ),
439 $ beta, c( 1 ), n+1 )
440 CALL cgemm(
'N',
'C', nk, nk, k, calpha, a( nk+1,
442 $ lda, a( 1, 1 ), lda, cbeta, c( nk+2 ),
449 CALL cherk(
'L',
'C', nk, k, alpha, a( 1, 1 ), lda,
450 $ beta, c( 2 ), n+1 )
451 CALL cherk(
'U',
'C', nk, k, alpha, a( 1, nk+1 ),
453 $ beta, c( 1 ), n+1 )
454 CALL cgemm(
'C',
'N', nk, nk, k, calpha, a( 1,
456 $ lda, a( 1, 1 ), lda, cbeta, c( nk+2 ),
469 CALL cherk(
'L',
'N', nk, k, alpha, a( 1, 1 ), lda,
470 $ beta, c( nk+2 ), n+1 )
471 CALL cherk(
'U',
'N', nk, k, alpha, a( nk+1, 1 ),
473 $ beta, c( nk+1 ), n+1 )
474 CALL cgemm(
'N',
'C', nk, nk, k, calpha, a( 1, 1 ),
475 $ lda, a( nk+1, 1 ), lda, cbeta, c( 1 ),
482 CALL cherk(
'L',
'C', nk, k, alpha, a( 1, 1 ), lda,
483 $ beta, c( nk+2 ), n+1 )
484 CALL cherk(
'U',
'C', nk, k, alpha, a( 1, nk+1 ),
486 $ beta, c( nk+1 ), n+1 )
487 CALL cgemm(
'C',
'N', nk, nk, k, calpha, a( 1, 1 ),
488 $ lda, a( 1, nk+1 ), lda, cbeta, c( 1 ),
507 CALL cherk(
'U',
'N', nk, k, alpha, a( 1, 1 ), lda,
508 $ beta, c( nk+1 ), nk )
509 CALL cherk(
'L',
'N', nk, k, alpha, a( nk+1, 1 ),
512 CALL cgemm(
'N',
'C', nk, nk, k, calpha, a( 1, 1 ),
513 $ lda, a( nk+1, 1 ), lda, cbeta,
514 $ c( ( ( nk+1 )*nk )+1 ), nk )
520 CALL cherk(
'U',
'C', nk, k, alpha, a( 1, 1 ), lda,
521 $ beta, c( nk+1 ), nk )
522 CALL cherk(
'L',
'C', nk, k, alpha, a( 1, nk+1 ),
525 CALL cgemm(
'C',
'N', nk, nk, k, calpha, a( 1, 1 ),
526 $ lda, a( 1, nk+1 ), lda, cbeta,
527 $ c( ( ( nk+1 )*nk )+1 ), nk )
539 CALL cherk(
'U',
'N', nk, k, alpha, a( 1, 1 ), lda,
540 $ beta, c( nk*( nk+1 )+1 ), nk )
541 CALL cherk(
'L',
'N', nk, k, alpha, a( nk+1, 1 ),
543 $ beta, c( nk*nk+1 ), nk )
544 CALL cgemm(
'N',
'C', nk, nk, k, calpha, a( nk+1,
546 $ lda, a( 1, 1 ), lda, cbeta, c( 1 ), nk )
552 CALL cherk(
'U',
'C', nk, k, alpha, a( 1, 1 ), lda,
553 $ beta, c( nk*( nk+1 )+1 ), nk )
554 CALL cherk(
'L',
'C', nk, k, alpha, a( 1, nk+1 ),
556 $ beta, c( nk*nk+1 ), nk )
557 CALL cgemm(
'C',
'N', nk, nk, k, calpha, a( 1,
559 $ lda, a( 1, 1 ), lda, cbeta, c( 1 ), nk )