162 SUBROUTINE ssfrk( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA,
173 CHARACTER TRANS, TRANSR, UPLO
176 REAL A( LDA, * ), C( * )
183 PARAMETER ( ONE = 1.0e+0, zero = 0.0e+0 )
186 LOGICAL LOWER, NORMALTRANSR, NISODD, NOTRANS
187 INTEGER INFO, NROWA, J, NK, N1, N2
204 normaltransr = lsame( transr,
'N' )
205 lower = lsame( uplo,
'L' )
206 notrans = lsame( trans,
'N' )
214 IF( .NOT.normaltransr .AND. .NOT.lsame( transr,
'T' ) )
THEN
216 ELSE IF( .NOT.lower .AND. .NOT.lsame( uplo,
'U' ) )
THEN
218 ELSE IF( .NOT.notrans .AND. .NOT.lsame( trans,
'T' ) )
THEN
220 ELSE IF( n.LT.0 )
THEN
222 ELSE IF( k.LT.0 )
THEN
224 ELSE IF( lda.LT.max( 1, nrowa ) )
THEN
228 CALL xerbla(
'SSFRK ', -info )
237 IF( ( n.EQ.0 ) .OR. ( ( ( alpha.EQ.zero ) .OR. ( k.EQ.0 ) ) .AND.
238 $ ( beta.EQ.one ) ) )
RETURN
240 IF( ( alpha.EQ.zero ) .AND. ( beta.EQ.zero ) )
THEN
241 DO j = 1, ( ( n*( n+1 ) ) / 2 )
251 IF( mod( n, 2 ).EQ.0 )
THEN
269 IF( normaltransr )
THEN
281 CALL ssyrk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
283 CALL ssyrk(
'U',
'N', n2, k, alpha, a( n1+1, 1 ),
285 $ beta, c( n+1 ), n )
286 CALL sgemm(
'N',
'T', n2, n1, k, alpha, a( n1+1,
288 $ lda, a( 1, 1 ), lda, beta, c( n1+1 ), n )
294 CALL ssyrk(
'L',
'T', n1, k, alpha, a( 1, 1 ), lda,
296 CALL ssyrk(
'U',
'T', n2, k, alpha, a( 1, n1+1 ),
298 $ beta, c( n+1 ), n )
299 CALL sgemm(
'T',
'N', n2, n1, k, alpha, a( 1,
301 $ lda, a( 1, 1 ), lda, beta, c( n1+1 ), n )
313 CALL ssyrk(
'L',
'N', n1, k, alpha, a( 1, 1 ), lda,
314 $ beta, c( n2+1 ), n )
315 CALL ssyrk(
'U',
'N', n2, k, alpha, a( n2, 1 ),
317 $ beta, c( n1+1 ), n )
318 CALL sgemm(
'N',
'T', n1, n2, k, alpha, a( 1, 1 ),
319 $ lda, a( n2, 1 ), lda, beta, c( 1 ), n )
325 CALL ssyrk(
'L',
'T', n1, k, alpha, a( 1, 1 ), lda,
326 $ beta, c( n2+1 ), n )
327 CALL ssyrk(
'U',
'T', n2, k, alpha, a( 1, n2 ),
329 $ beta, c( n1+1 ), n )
330 CALL sgemm(
'T',
'N', n1, n2, k, alpha, a( 1, 1 ),
331 $ lda, a( 1, n2 ), lda, beta, c( 1 ), n )
349 CALL ssyrk(
'U',
'N', n1, k, alpha, a( 1, 1 ), lda,
351 CALL ssyrk(
'L',
'N', n2, k, alpha, a( n1+1, 1 ),
354 CALL sgemm(
'N',
'T', n1, n2, k, alpha, a( 1, 1 ),
355 $ lda, a( n1+1, 1 ), lda, beta,
362 CALL ssyrk(
'U',
'T', n1, k, alpha, a( 1, 1 ), lda,
364 CALL ssyrk(
'L',
'T', n2, k, alpha, a( 1, n1+1 ),
367 CALL sgemm(
'T',
'N', n1, n2, k, alpha, a( 1, 1 ),
368 $ lda, a( 1, n1+1 ), lda, beta,
381 CALL ssyrk(
'U',
'N', n1, k, alpha, a( 1, 1 ), lda,
382 $ beta, c( n2*n2+1 ), n2 )
383 CALL ssyrk(
'L',
'N', n2, k, alpha, a( n1+1, 1 ),
385 $ beta, c( n1*n2+1 ), n2 )
386 CALL sgemm(
'N',
'T', n2, n1, k, alpha, a( n1+1,
388 $ lda, a( 1, 1 ), lda, beta, c( 1 ), n2 )
394 CALL ssyrk(
'U',
'T', n1, k, alpha, a( 1, 1 ), lda,
395 $ beta, c( n2*n2+1 ), n2 )
396 CALL ssyrk(
'L',
'T', n2, k, alpha, a( 1, n1+1 ),
398 $ beta, c( n1*n2+1 ), n2 )
399 CALL sgemm(
'T',
'N', n2, n1, k, alpha, a( 1,
401 $ lda, a( 1, 1 ), lda, beta, c( 1 ), n2 )
413 IF( normaltransr )
THEN
425 CALL ssyrk(
'L',
'N', nk, k, alpha, a( 1, 1 ), lda,
426 $ beta, c( 2 ), n+1 )
427 CALL ssyrk(
'U',
'N', nk, k, alpha, a( nk+1, 1 ),
429 $ beta, c( 1 ), n+1 )
430 CALL sgemm(
'N',
'T', nk, nk, k, alpha, a( nk+1,
432 $ lda, a( 1, 1 ), lda, beta, c( nk+2 ),
439 CALL ssyrk(
'L',
'T', nk, k, alpha, a( 1, 1 ), lda,
440 $ beta, c( 2 ), n+1 )
441 CALL ssyrk(
'U',
'T', nk, k, alpha, a( 1, nk+1 ),
443 $ beta, c( 1 ), n+1 )
444 CALL sgemm(
'T',
'N', nk, nk, k, alpha, a( 1,
446 $ lda, a( 1, 1 ), lda, beta, c( nk+2 ),
459 CALL ssyrk(
'L',
'N', nk, k, alpha, a( 1, 1 ), lda,
460 $ beta, c( nk+2 ), n+1 )
461 CALL ssyrk(
'U',
'N', nk, k, alpha, a( nk+1, 1 ),
463 $ beta, c( nk+1 ), n+1 )
464 CALL sgemm(
'N',
'T', nk, nk, k, alpha, a( 1, 1 ),
465 $ lda, a( nk+1, 1 ), lda, beta, c( 1 ),
472 CALL ssyrk(
'L',
'T', nk, k, alpha, a( 1, 1 ), lda,
473 $ beta, c( nk+2 ), n+1 )
474 CALL ssyrk(
'U',
'T', nk, k, alpha, a( 1, nk+1 ),
476 $ beta, c( nk+1 ), n+1 )
477 CALL sgemm(
'T',
'N', nk, nk, k, alpha, a( 1, 1 ),
478 $ lda, a( 1, nk+1 ), lda, beta, c( 1 ),
497 CALL ssyrk(
'U',
'N', nk, k, alpha, a( 1, 1 ), lda,
498 $ beta, c( nk+1 ), nk )
499 CALL ssyrk(
'L',
'N', nk, k, alpha, a( nk+1, 1 ),
502 CALL sgemm(
'N',
'T', nk, nk, k, alpha, a( 1, 1 ),
503 $ lda, a( nk+1, 1 ), lda, beta,
504 $ c( ( ( nk+1 )*nk )+1 ), nk )
510 CALL ssyrk(
'U',
'T', nk, k, alpha, a( 1, 1 ), lda,
511 $ beta, c( nk+1 ), nk )
512 CALL ssyrk(
'L',
'T', nk, k, alpha, a( 1, nk+1 ),
515 CALL sgemm(
'T',
'N', nk, nk, k, alpha, a( 1, 1 ),
516 $ lda, a( 1, nk+1 ), lda, beta,
517 $ c( ( ( nk+1 )*nk )+1 ), nk )
529 CALL ssyrk(
'U',
'N', nk, k, alpha, a( 1, 1 ), lda,
530 $ beta, c( nk*( nk+1 )+1 ), nk )
531 CALL ssyrk(
'L',
'N', nk, k, alpha, a( nk+1, 1 ),
533 $ beta, c( nk*nk+1 ), nk )
534 CALL sgemm(
'N',
'T', nk, nk, k, alpha, a( nk+1,
536 $ lda, a( 1, 1 ), lda, beta, c( 1 ), nk )
542 CALL ssyrk(
'U',
'T', nk, k, alpha, a( 1, 1 ), lda,
543 $ beta, c( nk*( nk+1 )+1 ), nk )
544 CALL ssyrk(
'L',
'T', nk, k, alpha, a( 1, nk+1 ),
546 $ beta, c( nk*nk+1 ), nk )
547 CALL sgemm(
'T',
'N', nk, nk, k, alpha, a( 1,
549 $ lda, a( 1, 1 ), lda, beta, c( 1 ), nk )