version 1.5, 2010/12/21 13:53:37
|
version 1.9, 2012/08/22 09:48:24
|
Line 1
|
Line 1
|
SUBROUTINE DSFRK( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, |
*> \brief \b DSFRK |
+ C ) |
* |
|
* =========== DOCUMENTATION =========== |
|
* |
|
* Online html documentation available at |
|
* http://www.netlib.org/lapack/explore-html/ |
|
* |
|
*> \htmlonly |
|
*> Download DSFRK + dependencies |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dsfrk.f"> |
|
*> [TGZ]</a> |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dsfrk.f"> |
|
*> [ZIP]</a> |
|
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dsfrk.f"> |
|
*> [TXT]</a> |
|
*> \endhtmlonly |
|
* |
|
* Definition: |
|
* =========== |
|
* |
|
* SUBROUTINE DSFRK( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, |
|
* C ) |
|
* |
|
* .. Scalar Arguments .. |
|
* DOUBLE PRECISION ALPHA, BETA |
|
* INTEGER K, LDA, N |
|
* CHARACTER TRANS, TRANSR, UPLO |
|
* .. |
|
* .. Array Arguments .. |
|
* DOUBLE PRECISION A( LDA, * ), C( * ) |
|
* .. |
|
* |
|
* |
|
*> \par Purpose: |
|
* ============= |
|
*> |
|
*> \verbatim |
|
*> |
|
*> Level 3 BLAS like routine for C in RFP Format. |
|
*> |
|
*> DSFRK performs one of the symmetric rank--k operations |
|
*> |
|
*> C := alpha*A*A**T + beta*C, |
|
*> |
|
*> or |
|
*> |
|
*> C := alpha*A**T*A + beta*C, |
|
*> |
|
*> where alpha and beta are real scalars, C is an n--by--n symmetric |
|
*> matrix and A is an n--by--k matrix in the first case and a k--by--n |
|
*> matrix in the second case. |
|
*> \endverbatim |
|
* |
|
* Arguments: |
|
* ========== |
* |
* |
* -- LAPACK routine (version 3.3.0) -- |
*> \param[in] TRANSR |
|
*> \verbatim |
|
*> TRANSR is CHARACTER*1 |
|
*> = 'N': The Normal Form of RFP A is stored; |
|
*> = 'T': The Transpose Form of RFP A is stored. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] UPLO |
|
*> \verbatim |
|
*> UPLO is CHARACTER*1 |
|
*> On entry, UPLO specifies whether the upper or lower |
|
*> triangular part of the array C is to be referenced as |
|
*> follows: |
|
*> |
|
*> UPLO = 'U' or 'u' Only the upper triangular part of C |
|
*> is to be referenced. |
|
*> |
|
*> UPLO = 'L' or 'l' Only the lower triangular part of C |
|
*> is to be referenced. |
|
*> |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] TRANS |
|
*> \verbatim |
|
*> TRANS is CHARACTER*1 |
|
*> On entry, TRANS specifies the operation to be performed as |
|
*> follows: |
|
*> |
|
*> TRANS = 'N' or 'n' C := alpha*A*A**T + beta*C. |
|
*> |
|
*> TRANS = 'T' or 't' C := alpha*A**T*A + beta*C. |
|
*> |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] N |
|
*> \verbatim |
|
*> N is INTEGER |
|
*> On entry, N specifies the order of the matrix C. N must be |
|
*> at least zero. |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] K |
|
*> \verbatim |
|
*> K is INTEGER |
|
*> On entry with TRANS = 'N' or 'n', K specifies the number |
|
*> of columns of the matrix A, and on entry with TRANS = 'T' |
|
*> or 't', K specifies the number of rows of the matrix A. K |
|
*> must be at least zero. |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] ALPHA |
|
*> \verbatim |
|
*> ALPHA is DOUBLE PRECISION |
|
*> On entry, ALPHA specifies the scalar alpha. |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] A |
|
*> \verbatim |
|
*> A is DOUBLE PRECISION array, dimension (LDA,ka) |
|
*> where KA |
|
*> is K when TRANS = 'N' or 'n', and is N otherwise. Before |
|
*> entry with TRANS = 'N' or 'n', the leading N--by--K part of |
|
*> the array A must contain the matrix A, otherwise the leading |
|
*> K--by--N part of the array A must contain the matrix A. |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] LDA |
|
*> \verbatim |
|
*> LDA is INTEGER |
|
*> On entry, LDA specifies the first dimension of A as declared |
|
*> in the calling (sub) program. When TRANS = 'N' or 'n' |
|
*> then LDA must be at least max( 1, n ), otherwise LDA must |
|
*> be at least max( 1, k ). |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in] BETA |
|
*> \verbatim |
|
*> BETA is DOUBLE PRECISION |
|
*> On entry, BETA specifies the scalar beta. |
|
*> Unchanged on exit. |
|
*> \endverbatim |
|
*> |
|
*> \param[in,out] C |
|
*> \verbatim |
|
*> C is DOUBLE PRECISION array, dimension (NT) |
|
*> NT = N*(N+1)/2. On entry, the symmetric matrix C in RFP |
|
*> Format. RFP Format is described by TRANSR, UPLO and N. |
|
*> \endverbatim |
|
* |
|
* Authors: |
|
* ======== |
|
* |
|
*> \author Univ. of Tennessee |
|
*> \author Univ. of California Berkeley |
|
*> \author Univ. of Colorado Denver |
|
*> \author NAG Ltd. |
* |
* |
* -- Contributed by Julien Langou of the Univ. of Colorado Denver -- |
*> \date November 2011 |
* November 2010 |
|
* |
* |
|
*> \ingroup doubleOTHERcomputational |
|
* |
|
* ===================================================================== |
|
SUBROUTINE DSFRK( TRANSR, UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, |
|
$ C ) |
|
* |
|
* -- LAPACK computational routine (version 3.4.0) -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
|
* November 2011 |
* |
* |
* .. |
|
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
DOUBLE PRECISION ALPHA, BETA |
DOUBLE PRECISION ALPHA, BETA |
INTEGER K, LDA, N |
INTEGER K, LDA, N |
Line 19
|
Line 180
|
DOUBLE PRECISION A( LDA, * ), C( * ) |
DOUBLE PRECISION A( LDA, * ), C( * ) |
* .. |
* .. |
* |
* |
* Purpose |
* ===================================================================== |
* ======= |
|
* |
|
* Level 3 BLAS like routine for C in RFP Format. |
|
* |
|
* DSFRK performs one of the symmetric rank--k operations |
|
* |
|
* C := alpha*A*A' + beta*C, |
|
* |
|
* or |
|
* |
|
* C := alpha*A'*A + beta*C, |
|
* |
|
* where alpha and beta are real scalars, C is an n--by--n symmetric |
|
* matrix and A is an n--by--k matrix in the first case and a k--by--n |
|
* matrix in the second case. |
|
* |
|
* Arguments |
|
* ========== |
|
* |
|
* TRANSR (input) CHARACTER*1 |
|
* = 'N': The Normal Form of RFP A is stored; |
|
* = 'T': The Transpose Form of RFP A is stored. |
|
* |
|
* UPLO (input) CHARACTER*1 |
|
* On entry, UPLO specifies whether the upper or lower |
|
* triangular part of the array C is to be referenced as |
|
* follows: |
|
* |
|
* UPLO = 'U' or 'u' Only the upper triangular part of C |
|
* is to be referenced. |
|
* |
|
* UPLO = 'L' or 'l' Only the lower triangular part of C |
|
* is to be referenced. |
|
* |
|
* Unchanged on exit. |
|
* |
|
* TRANS (input) CHARACTER*1 |
|
* On entry, TRANS specifies the operation to be performed as |
|
* follows: |
|
* |
|
* TRANS = 'N' or 'n' C := alpha*A*A' + beta*C. |
|
* |
|
* TRANS = 'T' or 't' C := alpha*A'*A + beta*C. |
|
* |
|
* Unchanged on exit. |
|
* |
|
* N (input) INTEGER |
|
* On entry, N specifies the order of the matrix C. N must be |
|
* at least zero. |
|
* Unchanged on exit. |
|
* |
|
* K (input) INTEGER |
|
* On entry with TRANS = 'N' or 'n', K specifies the number |
|
* of columns of the matrix A, and on entry with TRANS = 'T' |
|
* or 't', K specifies the number of rows of the matrix A. K |
|
* must be at least zero. |
|
* Unchanged on exit. |
|
* |
|
* ALPHA (input) DOUBLE PRECISION |
|
* On entry, ALPHA specifies the scalar alpha. |
|
* Unchanged on exit. |
|
* |
|
* A (input) DOUBLE PRECISION array, dimension (LDA,ka) |
|
* where KA |
|
* is K when TRANS = 'N' or 'n', and is N otherwise. Before |
|
* entry with TRANS = 'N' or 'n', the leading N--by--K part of |
|
* the array A must contain the matrix A, otherwise the leading |
|
* K--by--N part of the array A must contain the matrix A. |
|
* Unchanged on exit. |
|
* |
|
* LDA (input) INTEGER |
|
* On entry, LDA specifies the first dimension of A as declared |
|
* in the calling (sub) program. When TRANS = 'N' or 'n' |
|
* then LDA must be at least max( 1, n ), otherwise LDA must |
|
* be at least max( 1, k ). |
|
* Unchanged on exit. |
|
* |
|
* BETA (input) DOUBLE PRECISION |
|
* On entry, BETA specifies the scalar beta. |
|
* Unchanged on exit. |
|
* |
|
* |
|
* C (input/output) DOUBLE PRECISION array, dimension (NT) |
|
* NT = N*(N+1)/2. On entry, the symmetric matrix C in RFP |
|
* Format. RFP Format is described by TRANSR, UPLO and N. |
|
* |
|
* Arguments |
|
* ========== |
|
* |
* |
* .. |
* .. |
* .. Parameters .. |
* .. Parameters .. |
Line 167
|
Line 240
|
* done (it is in DSYRK for example) and left in the general case. |
* done (it is in DSYRK for example) and left in the general case. |
* |
* |
IF( ( N.EQ.0 ) .OR. ( ( ( ALPHA.EQ.ZERO ) .OR. ( K.EQ.0 ) ) .AND. |
IF( ( N.EQ.0 ) .OR. ( ( ( ALPHA.EQ.ZERO ) .OR. ( K.EQ.0 ) ) .AND. |
+ ( BETA.EQ.ONE ) ) )RETURN |
$ ( BETA.EQ.ONE ) ) )RETURN |
* |
* |
IF( ( ALPHA.EQ.ZERO ) .AND. ( BETA.EQ.ZERO ) ) THEN |
IF( ( ALPHA.EQ.ZERO ) .AND. ( BETA.EQ.ZERO ) ) THEN |
DO J = 1, ( ( N*( N+1 ) ) / 2 ) |
DO J = 1, ( ( N*( N+1 ) ) / 2 ) |
Line 211
|
Line 284
|
* N is odd, TRANSR = 'N', UPLO = 'L', and TRANS = 'N' |
* N is odd, TRANSR = 'N', UPLO = 'L', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'L', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( 1 ), N ) |
$ BETA, C( 1 ), N ) |
CALL DSYRK( 'U', 'N', N2, K, ALPHA, A( N1+1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', N2, K, ALPHA, A( N1+1, 1 ), LDA, |
+ BETA, C( N+1 ), N ) |
$ BETA, C( N+1 ), N ) |
CALL DGEMM( 'N', 'T', N2, N1, K, ALPHA, A( N1+1, 1 ), |
CALL DGEMM( 'N', 'T', N2, N1, K, ALPHA, A( N1+1, 1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( N1+1 ), N ) |
$ LDA, A( 1, 1 ), LDA, BETA, C( N1+1 ), N ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is odd, TRANSR = 'N', UPLO = 'L', and TRANS = 'T' |
* N is odd, TRANSR = 'N', UPLO = 'L', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'L', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( 1 ), N ) |
$ BETA, C( 1 ), N ) |
CALL DSYRK( 'U', 'T', N2, K, ALPHA, A( 1, N1+1 ), LDA, |
CALL DSYRK( 'U', 'T', N2, K, ALPHA, A( 1, N1+1 ), LDA, |
+ BETA, C( N+1 ), N ) |
$ BETA, C( N+1 ), N ) |
CALL DGEMM( 'T', 'N', N2, N1, K, ALPHA, A( 1, N1+1 ), |
CALL DGEMM( 'T', 'N', N2, N1, K, ALPHA, A( 1, N1+1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( N1+1 ), N ) |
$ LDA, A( 1, 1 ), LDA, BETA, C( N1+1 ), N ) |
* |
* |
END IF |
END IF |
* |
* |
Line 239
|
Line 312
|
* N is odd, TRANSR = 'N', UPLO = 'U', and TRANS = 'N' |
* N is odd, TRANSR = 'N', UPLO = 'U', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'L', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( N2+1 ), N ) |
$ BETA, C( N2+1 ), N ) |
CALL DSYRK( 'U', 'N', N2, K, ALPHA, A( N2, 1 ), LDA, |
CALL DSYRK( 'U', 'N', N2, K, ALPHA, A( N2, 1 ), LDA, |
+ BETA, C( N1+1 ), N ) |
$ BETA, C( N1+1 ), N ) |
CALL DGEMM( 'N', 'T', N1, N2, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'N', 'T', N1, N2, K, ALPHA, A( 1, 1 ), |
+ LDA, A( N2, 1 ), LDA, BETA, C( 1 ), N ) |
$ LDA, A( N2, 1 ), LDA, BETA, C( 1 ), N ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is odd, TRANSR = 'N', UPLO = 'U', and TRANS = 'T' |
* N is odd, TRANSR = 'N', UPLO = 'U', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'L', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( N2+1 ), N ) |
$ BETA, C( N2+1 ), N ) |
CALL DSYRK( 'U', 'T', N2, K, ALPHA, A( 1, N2 ), LDA, |
CALL DSYRK( 'U', 'T', N2, K, ALPHA, A( 1, N2 ), LDA, |
+ BETA, C( N1+1 ), N ) |
$ BETA, C( N1+1 ), N ) |
CALL DGEMM( 'T', 'N', N1, N2, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'T', 'N', N1, N2, K, ALPHA, A( 1, 1 ), |
+ LDA, A( 1, N2 ), LDA, BETA, C( 1 ), N ) |
$ LDA, A( 1, N2 ), LDA, BETA, C( 1 ), N ) |
* |
* |
END IF |
END IF |
* |
* |
Line 273
|
Line 346
|
* N is odd, TRANSR = 'T', UPLO = 'L', and TRANS = 'N' |
* N is odd, TRANSR = 'T', UPLO = 'L', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'U', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( 1 ), N1 ) |
$ BETA, C( 1 ), N1 ) |
CALL DSYRK( 'L', 'N', N2, K, ALPHA, A( N1+1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', N2, K, ALPHA, A( N1+1, 1 ), LDA, |
+ BETA, C( 2 ), N1 ) |
$ BETA, C( 2 ), N1 ) |
CALL DGEMM( 'N', 'T', N1, N2, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'N', 'T', N1, N2, K, ALPHA, A( 1, 1 ), |
+ LDA, A( N1+1, 1 ), LDA, BETA, |
$ LDA, A( N1+1, 1 ), LDA, BETA, |
+ C( N1*N1+1 ), N1 ) |
$ C( N1*N1+1 ), N1 ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is odd, TRANSR = 'T', UPLO = 'L', and TRANS = 'T' |
* N is odd, TRANSR = 'T', UPLO = 'L', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'U', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( 1 ), N1 ) |
$ BETA, C( 1 ), N1 ) |
CALL DSYRK( 'L', 'T', N2, K, ALPHA, A( 1, N1+1 ), LDA, |
CALL DSYRK( 'L', 'T', N2, K, ALPHA, A( 1, N1+1 ), LDA, |
+ BETA, C( 2 ), N1 ) |
$ BETA, C( 2 ), N1 ) |
CALL DGEMM( 'T', 'N', N1, N2, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'T', 'N', N1, N2, K, ALPHA, A( 1, 1 ), |
+ LDA, A( 1, N1+1 ), LDA, BETA, |
$ LDA, A( 1, N1+1 ), LDA, BETA, |
+ C( N1*N1+1 ), N1 ) |
$ C( N1*N1+1 ), N1 ) |
* |
* |
END IF |
END IF |
* |
* |
Line 303
|
Line 376
|
* N is odd, TRANSR = 'T', UPLO = 'U', and TRANS = 'N' |
* N is odd, TRANSR = 'T', UPLO = 'U', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'U', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( N2*N2+1 ), N2 ) |
$ BETA, C( N2*N2+1 ), N2 ) |
CALL DSYRK( 'L', 'N', N2, K, ALPHA, A( N1+1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', N2, K, ALPHA, A( N1+1, 1 ), LDA, |
+ BETA, C( N1*N2+1 ), N2 ) |
$ BETA, C( N1*N2+1 ), N2 ) |
CALL DGEMM( 'N', 'T', N2, N1, K, ALPHA, A( N1+1, 1 ), |
CALL DGEMM( 'N', 'T', N2, N1, K, ALPHA, A( N1+1, 1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), N2 ) |
$ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), N2 ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is odd, TRANSR = 'T', UPLO = 'U', and TRANS = 'T' |
* N is odd, TRANSR = 'T', UPLO = 'U', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'U', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'T', N1, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( N2*N2+1 ), N2 ) |
$ BETA, C( N2*N2+1 ), N2 ) |
CALL DSYRK( 'L', 'T', N2, K, ALPHA, A( 1, N1+1 ), LDA, |
CALL DSYRK( 'L', 'T', N2, K, ALPHA, A( 1, N1+1 ), LDA, |
+ BETA, C( N1*N2+1 ), N2 ) |
$ BETA, C( N1*N2+1 ), N2 ) |
CALL DGEMM( 'T', 'N', N2, N1, K, ALPHA, A( 1, N1+1 ), |
CALL DGEMM( 'T', 'N', N2, N1, K, ALPHA, A( 1, N1+1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), N2 ) |
$ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), N2 ) |
* |
* |
END IF |
END IF |
* |
* |
Line 343
|
Line 416
|
* N is even, TRANSR = 'N', UPLO = 'L', and TRANS = 'N' |
* N is even, TRANSR = 'N', UPLO = 'L', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( 2 ), N+1 ) |
$ BETA, C( 2 ), N+1 ) |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
+ BETA, C( 1 ), N+1 ) |
$ BETA, C( 1 ), N+1 ) |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( NK+1, 1 ), |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( NK+1, 1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( NK+2 ), |
$ LDA, A( 1, 1 ), LDA, BETA, C( NK+2 ), |
+ N+1 ) |
$ N+1 ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is even, TRANSR = 'N', UPLO = 'L', and TRANS = 'T' |
* N is even, TRANSR = 'N', UPLO = 'L', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( 2 ), N+1 ) |
$ BETA, C( 2 ), N+1 ) |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
+ BETA, C( 1 ), N+1 ) |
$ BETA, C( 1 ), N+1 ) |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, NK+1 ), |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, NK+1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( NK+2 ), |
$ LDA, A( 1, 1 ), LDA, BETA, C( NK+2 ), |
+ N+1 ) |
$ N+1 ) |
* |
* |
END IF |
END IF |
* |
* |
Line 373
|
Line 446
|
* N is even, TRANSR = 'N', UPLO = 'U', and TRANS = 'N' |
* N is even, TRANSR = 'N', UPLO = 'U', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( NK+2 ), N+1 ) |
$ BETA, C( NK+2 ), N+1 ) |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
+ BETA, C( NK+1 ), N+1 ) |
$ BETA, C( NK+1 ), N+1 ) |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( 1, 1 ), |
+ LDA, A( NK+1, 1 ), LDA, BETA, C( 1 ), |
$ LDA, A( NK+1, 1 ), LDA, BETA, C( 1 ), |
+ N+1 ) |
$ N+1 ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is even, TRANSR = 'N', UPLO = 'U', and TRANS = 'T' |
* N is even, TRANSR = 'N', UPLO = 'U', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( NK+2 ), N+1 ) |
$ BETA, C( NK+2 ), N+1 ) |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
+ BETA, C( NK+1 ), N+1 ) |
$ BETA, C( NK+1 ), N+1 ) |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, 1 ), |
+ LDA, A( 1, NK+1 ), LDA, BETA, C( 1 ), |
$ LDA, A( 1, NK+1 ), LDA, BETA, C( 1 ), |
+ N+1 ) |
$ N+1 ) |
* |
* |
END IF |
END IF |
* |
* |
Line 409
|
Line 482
|
* N is even, TRANSR = 'T', UPLO = 'L', and TRANS = 'N' |
* N is even, TRANSR = 'T', UPLO = 'L', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( NK+1 ), NK ) |
$ BETA, C( NK+1 ), NK ) |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
+ BETA, C( 1 ), NK ) |
$ BETA, C( 1 ), NK ) |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( 1, 1 ), |
+ LDA, A( NK+1, 1 ), LDA, BETA, |
$ LDA, A( NK+1, 1 ), LDA, BETA, |
+ C( ( ( NK+1 )*NK )+1 ), NK ) |
$ C( ( ( NK+1 )*NK )+1 ), NK ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is even, TRANSR = 'T', UPLO = 'L', and TRANS = 'T' |
* N is even, TRANSR = 'T', UPLO = 'L', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( NK+1 ), NK ) |
$ BETA, C( NK+1 ), NK ) |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
+ BETA, C( 1 ), NK ) |
$ BETA, C( 1 ), NK ) |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, 1 ), |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, 1 ), |
+ LDA, A( 1, NK+1 ), LDA, BETA, |
$ LDA, A( 1, NK+1 ), LDA, BETA, |
+ C( ( ( NK+1 )*NK )+1 ), NK ) |
$ C( ( ( NK+1 )*NK )+1 ), NK ) |
* |
* |
END IF |
END IF |
* |
* |
Line 439
|
Line 512
|
* N is even, TRANSR = 'T', UPLO = 'U', and TRANS = 'N' |
* N is even, TRANSR = 'T', UPLO = 'U', and TRANS = 'N' |
* |
* |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'N', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( NK*( NK+1 )+1 ), NK ) |
$ BETA, C( NK*( NK+1 )+1 ), NK ) |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
CALL DSYRK( 'L', 'N', NK, K, ALPHA, A( NK+1, 1 ), LDA, |
+ BETA, C( NK*NK+1 ), NK ) |
$ BETA, C( NK*NK+1 ), NK ) |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( NK+1, 1 ), |
CALL DGEMM( 'N', 'T', NK, NK, K, ALPHA, A( NK+1, 1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), NK ) |
$ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), NK ) |
* |
* |
ELSE |
ELSE |
* |
* |
* N is even, TRANSR = 'T', UPLO = 'U', and TRANS = 'T' |
* N is even, TRANSR = 'T', UPLO = 'U', and TRANS = 'T' |
* |
* |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
CALL DSYRK( 'U', 'T', NK, K, ALPHA, A( 1, 1 ), LDA, |
+ BETA, C( NK*( NK+1 )+1 ), NK ) |
$ BETA, C( NK*( NK+1 )+1 ), NK ) |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
CALL DSYRK( 'L', 'T', NK, K, ALPHA, A( 1, NK+1 ), LDA, |
+ BETA, C( NK*NK+1 ), NK ) |
$ BETA, C( NK*NK+1 ), NK ) |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, NK+1 ), |
CALL DGEMM( 'T', 'N', NK, NK, K, ALPHA, A( 1, NK+1 ), |
+ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), NK ) |
$ LDA, A( 1, 1 ), LDA, BETA, C( 1 ), NK ) |
* |
* |
END IF |
END IF |
* |
* |