164 SUBROUTINE dsfrk( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA, BETA,
172 DOUBLE PRECISION ALPHA, BETA
174 CHARACTER TRANS, TRANSR, UPLO
177 DOUBLE PRECISION A( LDA, * ), C( * )
184 DOUBLE PRECISION ONE,
185 parameter( one = 1.0d+0, zero = 0.0d+0 )
188 LOGICAL LOWER, NORMALTRANSR, NISODD, NOTRANS
189 INTEGER INFO, NROWA, J, NK, N1,
206 normaltransr = lsame( transr,
'N' )
207 lower = lsame( uplo,
'L' )
208 notrans = lsame( trans,
'N' )
216 IF( .NOT.normaltransr .AND. .NOT.lsame( transr,
'T' ) )
THEN
218 ELSE IF( .NOT.lower .AND. .NOT.lsame( uplo,
'U' ) )
THEN
220 ELSE IF( .NOT.notrans .AND. .NOT.lsame( trans,
'T' ) )
THEN
222 ELSE IF( n.LT.0 )
THEN
224 ELSE IF( k.LT.0 )
THEN
226 ELSE IF( lda.LT.
max( 1, nrowa ) )
THEN
230 CALL xerbla(
'DSFRK ', -info )
239 IF( ( n.EQ.0 ) .OR. ( ( ( alpha.EQ.zero ) .OR. ( k.EQ.0 ) ) .AND.
240 $ ( beta.EQ.one ) ) )
RETURN
242 IF( ( alpha.EQ.zero ) .AND. ( beta.EQ.zero ) )
THEN
243 DO j = 1, ( ( n*( n+1 ) ) / 2 )
253 IF( mod( n, 2 ).EQ.0 )
THEN
271 IF( normaltransr )
THEN
283 CALL dsyrk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
285 CALL dsyrk(
'U',
'N', n2, k, alpha, a( n1+1, 1 ), lda,
286 $ beta, c( n+1 ), n )
287 CALL dgemm(
'N',
'T', n2, n1, k, alpha, a( n1+1, 1 ),
288 $ lda, a( 1, 1 ), lda, beta, c( n1+1 ), n )
294 CALL dsyrk(
'L',
'T', n1, k, alpha, a( 1, 1 ), lda,
296 CALL dsyrk(
'U',
'T', n2, k, alpha, a( 1, n1+1 ), lda,
297 $ beta, c( n+1 ), n )
298 CALL dgemm(
'T',
'N', n2, n1, k, alpha, a( 1, n1+1 ),
299 $ lda, a( 1, 1 ), lda, beta, c( n1+1 ), n )
311 CALL dsyrk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
312 $ beta, c( n2+1 ), n )
313 CALL dsyrk(
'U',
'N', n2, k, alpha, a( n2, 1 ), lda,
314 $ beta, c( n1+1 ), n )
315 CALL dgemm(
'N',
'T', n1, n2, k, alpha, a( 1, 1 ),
316 $ lda, a( n2, 1 ), lda, beta, c( 1 ), n )
322 CALL dsyrk(
'L',
'T', n1, k, alpha, a( 1, 1 ), lda,
323 $ beta, c( n2+1 ), n )
324 CALL dsyrk(
'U',
'T', n2, k, alpha, a( 1, n2 ), lda,
325 $ beta, c( n1+1 ), n )
326 CALL dgemm(
'T',
'N', n1, n2, k, alpha, a( 1, 1 ),
327 $ lda, a( 1, n2 ), lda, beta, c( 1 ), n )
345 CALL dsyrk(
'U',
'N', n1, k, alpha, a( 1, 1 ), lda,
347 CALL dsyrk(
'L',
'N', n2, k, alpha, a( n1+1, 1 ), lda,
349 CALL dgemm(
'N',
'T', n1, n2, k, alpha, a( 1, 1 ),
350 $ lda, a( n1+1, 1 ), lda, beta,
357 CALL dsyrk(
'U',
'T', n1, k, alpha, a( 1, 1 ), lda,
359 CALL dsyrk(
'L',
'T', n2, k, alpha, a( 1, n1+1 ), lda,
361 CALL dgemm(
'T', 'n
', N1, N2, K, ALPHA, A( 1, 1 ),
362 $ LDA, A( 1, N1+1 ), LDA, BETA,
375 CALL DSYRK( 'u
', 'n
', N1, K, ALPHA, A( 1, 1 ), LDA,
376 $ BETA, C( N2*N2+1 ), N2 )
377 CALL DSYRK( 'l
', 'n
', N2, K, ALPHA, A( N1+1, 1 ), LDA,
378 $ BETA, C( N1*N2+1 ), N2 )
379 CALL DGEMM( 'n
', 't
', N2, N1, K, ALPHA, A( N1+1, 1 ),
380 $ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), N2 )
386 CALL DSYRK( 'u
', 't
', N1, K, ALPHA, A( 1, 1 ), LDA,
387 $ BETA, C( N2*N2+1 ), N2 )
388 CALL DSYRK( 'l
', 't
', N2, K, ALPHA, A( 1, N1+1 ), LDA,
389 $ BETA, C( N1*N2+1 ), N2 )
390 CALL DGEMM( 't
', 'n
', N2, N1, K, ALPHA, A( 1, N1+1 ),
391 $ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), N2 )
403 IF( NORMALTRANSR ) THEN
415 CALL DSYRK( 'l
', 'n
', NK, K, ALPHA, A( 1, 1 ), LDA,
416 $ BETA, C( 2 ), N+1 )
417 CALL DSYRK( 'u
', 'n
', NK, K, ALPHA, A( NK+1, 1 ), LDA,
418 $ BETA, C( 1 ), N+1 )
419 CALL DGEMM( 'n
', 't
', NK, NK, K, ALPHA, A( NK+1, 1 ),
420 $ LDA, A( 1, 1 ), LDA, BETA, C( NK+2 ),
427 CALL DSYRK( 'l
', 't
', NK, K, ALPHA, A( 1, 1 ), LDA,
428 $ BETA, C( 2 ), N+1 )
429 CALL DSYRK( 'u
', 't
', NK, K, ALPHA, A( 1, NK+1 ), LDA,
430 $ BETA, C( 1 ), N+1 )
431 CALL DGEMM( 't
', 'n
', NK, NK, K, ALPHA, A( 1, NK+1 ),
432 $ LDA, A( 1, 1 ), LDA, BETA, C( NK+2 ),
445 CALL DSYRK( 'l
', 'n
', NK, K, ALPHA, A( 1, 1 ), LDA,
446 $ BETA, C( NK+2 ), N+1 )
447 CALL DSYRK( 'u
', 'n
', NK, K, ALPHA, A( NK+1, 1 ), LDA,
448 $ BETA, C( NK+1 ), N+1 )
449 CALL DGEMM( 'n
', 't
', NK, NK, K, ALPHA, A( 1, 1 ),
450 $ LDA, A( NK+1, 1 ), LDA, BETA, C( 1 ),
457 CALL DSYRK( 'l
', 't
', NK, K, ALPHA, A( 1, 1 ), LDA,
458 $ BETA, C( NK+2 ), N+1 )
459 CALL DSYRK( 'u
', 't
', NK, K, ALPHA, A( 1, NK+1 ), LDA,
460 $ BETA, C( NK+1 ), N+1 )
461 CALL DGEMM( 't
', 'n
', NK, NK, K, ALPHA, A( 1, 1 ),
462 $ LDA, A( 1, NK+1 ), LDA, BETA, C( 1 ),
481 CALL DSYRK( 'u
', 'n
', NK, K, ALPHA, A( 1, 1 ), LDA,
482 $ BETA, C( NK+1 ), NK )
483 CALL DSYRK( 'l
', 'n
', NK, K, ALPHA, A( NK+1, 1 ), LDA,
485 CALL DGEMM( 'n
', 't
', NK, NK, K, ALPHA, A( 1, 1 ),
486 $ LDA, A( NK+1, 1 ), LDA, BETA,
487 $ C( ( ( NK+1 )*NK )+1 ), NK )
493 CALL DSYRK( 'u
', 't
', NK, K, ALPHA, A( 1, 1 ), LDA,
494 $ BETA, C( NK+1 ), NK )
495 CALL DSYRK( 'l
', 't
', NK, K, ALPHA, A( 1, NK+1 ), LDA,
497 CALL DGEMM( 't
', 'n
', NK, NK, K, ALPHA, A( 1, 1 ),
498 $ LDA, A( 1, NK+1 ), LDA, BETA,
499 $ C( ( ( NK+1 )*NK )+1 ), NK )
511 CALL DSYRK( 'u
', 'n
', NK, K, ALPHA, A( 1, 1 ), LDA,
512 $ BETA, C( NK*( NK+1 )+1 ), NK )
513 CALL DSYRK( 'l
', 'n
', NK, K, ALPHA, A( NK+1, 1 ), LDA,
514 $ BETA, C( NK*NK+1 ), NK )
515 CALL DGEMM( 'n
', 't
', NK, NK, K, ALPHA, A( NK+1, 1 ),
516 $ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), NK )
522 CALL DSYRK( 'u
', 't
', NK, K, ALPHA, A( 1, 1 ), LDA,
523 $ BETA, C( NK*( NK+1 )+1 ), NK )
524 CALL DSYRK( 'l
', 't
', NK, K, ALPHA, A( 1, NK+1 ), LDA,
525 $ BETA, C( NK*NK+1 ), NK )
526 CALL DGEMM( 't
', 'n
', NK, NK, K, ALPHA, A( 1, NK+1 ),
527 $ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), NK )