--- rpl/lapack/lapack/dtprfb.f 2016/08/27 15:34:42 1.6 +++ rpl/lapack/lapack/dtprfb.f 2017/06/17 10:54:06 1.7 @@ -2,44 +2,44 @@ * * =========== DOCUMENTATION =========== * -* Online html documentation available at -* http://www.netlib.org/lapack/explore-html/ +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ * *> \htmlonly -*> Download DTPRFB + dependencies -*> -*> [TGZ] -*> -*> [ZIP] -*> +*> Download DTPRFB + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> *> [TXT] -*> \endhtmlonly +*> \endhtmlonly * * Definition: * =========== * -* SUBROUTINE DTPRFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, +* SUBROUTINE DTPRFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, * V, LDV, T, LDT, A, LDA, B, LDB, WORK, LDWORK ) -* +* * .. Scalar Arguments .. * CHARACTER DIRECT, SIDE, STOREV, TRANS * INTEGER K, L, LDA, LDB, LDT, LDV, LDWORK, M, N * .. * .. Array Arguments .. -* DOUBLE PRECISION A( LDA, * ), B( LDB, * ), T( LDT, * ), +* DOUBLE PRECISION A( LDA, * ), B( LDB, * ), T( LDT, * ), * $ V( LDV, * ), WORK( LDWORK, * ) * .. -* +* * *> \par Purpose: * ============= *> *> \verbatim *> -*> DTPRFB applies a real "triangular-pentagonal" block reflector H or its -*> transpose H**T to a real matrix C, which is composed of two +*> DTPRFB applies a real "triangular-pentagonal" block reflector H or its +*> transpose H**T to a real matrix C, which is composed of two *> blocks A and B, either from the left or right. -*> +*> *> \endverbatim * * Arguments: @@ -80,14 +80,14 @@ *> \param[in] M *> \verbatim *> M is INTEGER -*> The number of rows of the matrix B. +*> The number of rows of the matrix B. *> M >= 0. *> \endverbatim *> *> \param[in] N *> \verbatim *> N is INTEGER -*> The number of columns of the matrix B. +*> The number of columns of the matrix B. *> N >= 0. *> \endverbatim *> @@ -95,14 +95,14 @@ *> \verbatim *> K is INTEGER *> The order of the matrix T, i.e. the number of elementary -*> reflectors whose product defines the block reflector. +*> reflectors whose product defines the block reflector. *> K >= 0. *> \endverbatim *> *> \param[in] L *> \verbatim *> L is INTEGER -*> The order of the trapezoidal part of V. +*> The order of the trapezoidal part of V. *> K >= L >= 0. See Further Details. *> \endverbatim *> @@ -129,13 +129,13 @@ *> \verbatim *> T is DOUBLE PRECISION array, dimension (LDT,K) *> The triangular K-by-K matrix T in the representation of the -*> block reflector. +*> block reflector. *> \endverbatim *> *> \param[in] LDT *> \verbatim *> LDT is INTEGER -*> The leading dimension of the array T. +*> The leading dimension of the array T. *> LDT >= K. *> \endverbatim *> @@ -144,16 +144,16 @@ *> A is DOUBLE PRECISION array, dimension *> (LDA,N) if SIDE = 'L' or (LDA,K) if SIDE = 'R' *> On entry, the K-by-N or M-by-K matrix A. -*> On exit, A is overwritten by the corresponding block of -*> H*C or H**T*C or C*H or C*H**T. See Futher Details. +*> On exit, A is overwritten by the corresponding block of +*> H*C or H**T*C or C*H or C*H**T. See Further Details. *> \endverbatim *> *> \param[in] LDA *> \verbatim *> LDA is INTEGER -*> The leading dimension of the array A. +*> The leading dimension of the array A. *> If SIDE = 'L', LDC >= max(1,K); -*> If SIDE = 'R', LDC >= max(1,M). +*> If SIDE = 'R', LDC >= max(1,M). *> \endverbatim *> *> \param[in,out] B @@ -167,7 +167,7 @@ *> \param[in] LDB *> \verbatim *> LDB is INTEGER -*> The leading dimension of the array B. +*> The leading dimension of the array B. *> LDB >= max(1,M). *> \endverbatim *> @@ -182,19 +182,19 @@ *> \verbatim *> LDWORK is INTEGER *> The leading dimension of the array WORK. -*> If SIDE = 'L', LDWORK >= K; +*> If SIDE = 'L', LDWORK >= K; *> if SIDE = 'R', LDWORK >= M. *> \endverbatim * * Authors: * ======== * -*> \author Univ. of Tennessee -*> \author Univ. of California Berkeley -*> \author Univ. of Colorado Denver -*> \author NAG Ltd. +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. * -*> \date September 2012 +*> \date December 2016 * *> \ingroup doubleOTHERauxiliary * @@ -204,21 +204,21 @@ *> \verbatim *> *> The matrix C is a composite matrix formed from blocks A and B. -*> The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K, +*> The block B is of size M-by-N; if SIDE = 'R', A is of size M-by-K, *> and if SIDE = 'L', A is of size K-by-N. *> *> If SIDE = 'R' and DIRECT = 'F', C = [A B]. *> -*> If SIDE = 'L' and DIRECT = 'F', C = [A] +*> If SIDE = 'L' and DIRECT = 'F', C = [A] *> [B]. *> *> If SIDE = 'R' and DIRECT = 'B', C = [B A]. *> *> If SIDE = 'L' and DIRECT = 'B', C = [B] -*> [A]. +*> [A]. *> -*> The pentagonal matrix V is composed of a rectangular block V1 and a -*> trapezoidal block V2. The size of the trapezoidal block is determined by +*> The pentagonal matrix V is composed of a rectangular block V1 and a +*> trapezoidal block V2. The size of the trapezoidal block is determined by *> the parameter L, where 0<=L<=K. If L=K, the V2 block of V is triangular; *> if L=0, there is no trapezoidal block, thus V = V1 is rectangular. *> @@ -235,7 +235,7 @@ *> - V2 is lower trapezoidal (last L rows of K-by-K lower triangular) *> *> If DIRECT = 'B' and STOREV = 'R': V = [V2 V1] -*> +*> *> - V2 is upper trapezoidal (last L columns of K-by-K upper triangular) *> *> If STOREV = 'C' and SIDE = 'L', V is M-by-K with V2 L-by-K. @@ -248,20 +248,20 @@ *> \endverbatim *> * ===================================================================== - SUBROUTINE DTPRFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, + SUBROUTINE DTPRFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, L, $ V, LDV, T, LDT, A, LDA, B, LDB, WORK, LDWORK ) * -* -- LAPACK auxiliary routine (version 3.4.2) -- +* -- LAPACK auxiliary routine (version 3.7.0) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* September 2012 +* December 2016 * * .. Scalar Arguments .. CHARACTER DIRECT, SIDE, STOREV, TRANS INTEGER K, L, LDA, LDB, LDT, LDV, LDWORK, M, N * .. * .. Array Arguments .. - DOUBLE PRECISION A( LDA, * ), B( LDB, * ), T( LDT, * ), + DOUBLE PRECISION A( LDA, * ), B( LDB, * ), T( LDT, * ), $ V( LDV, * ), WORK( LDWORK, * ) * .. * @@ -322,7 +322,7 @@ END IF * * --------------------------------------------------------------------------- -* +* IF( COLUMN .AND. FORWARD .AND. LEFT ) THEN * * --------------------------------------------------------------------------- @@ -336,34 +336,34 @@ * H = I - W T W**T or H**T = I - W T**T W**T * * A = A - T (A + V**T B) or A = A - T**T (A + V**T B) -* B = B - V T (A + V**T B) or B = B - V T**T (A + V**T B) +* B = B - V T (A + V**T B) or B = B - V T**T (A + V**T B) * * --------------------------------------------------------------------------- * MP = MIN( M-L+1, M ) KP = MIN( L+1, K ) -* +* DO J = 1, N DO I = 1, L WORK( I, J ) = B( M-L+I, J ) END DO END DO CALL DTRMM( 'L', 'U', 'T', 'N', L, N, ONE, V( MP, 1 ), LDV, - $ WORK, LDWORK ) - CALL DGEMM( 'T', 'N', L, N, M-L, ONE, V, LDV, B, LDB, + $ WORK, LDWORK ) + CALL DGEMM( 'T', 'N', L, N, M-L, ONE, V, LDV, B, LDB, $ ONE, WORK, LDWORK ) - CALL DGEMM( 'T', 'N', K-L, N, M, ONE, V( 1, KP ), LDV, + CALL DGEMM( 'T', 'N', K-L, N, M, ONE, V( 1, KP ), LDV, $ B, LDB, ZERO, WORK( KP, 1 ), LDWORK ) -* +* DO J = 1, N DO I = 1, K WORK( I, J ) = WORK( I, J ) + A( I, J ) END DO END DO * - CALL DTRMM( 'L', 'U', TRANS, 'N', K, N, ONE, T, LDT, + CALL DTRMM( 'L', 'U', TRANS, 'N', K, N, ONE, T, LDT, $ WORK, LDWORK ) -* +* DO J = 1, N DO I = 1, K A( I, J ) = A( I, J ) - WORK( I, J ) @@ -373,7 +373,7 @@ CALL DGEMM( 'N', 'N', M-L, N, K, -ONE, V, LDV, WORK, LDWORK, $ ONE, B, LDB ) CALL DGEMM( 'N', 'N', L, N, K-L, -ONE, V( MP, KP ), LDV, - $ WORK( KP, 1 ), LDWORK, ONE, B( MP, 1 ), LDB ) + $ WORK( KP, 1 ), LDWORK, ONE, B( MP, 1 ), LDB ) CALL DTRMM( 'L', 'U', 'N', 'N', L, N, ONE, V( MP, 1 ), LDV, $ WORK, LDWORK ) DO J = 1, N @@ -383,7 +383,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( COLUMN .AND. FORWARD .AND. RIGHT ) THEN * * --------------------------------------------------------------------------- @@ -402,7 +402,7 @@ * NP = MIN( N-L+1, N ) KP = MIN( L+1, K ) -* +* DO J = 1, L DO I = 1, M WORK( I, J ) = B( I, N-L+J ) @@ -410,20 +410,20 @@ END DO CALL DTRMM( 'R', 'U', 'N', 'N', M, L, ONE, V( NP, 1 ), LDV, $ WORK, LDWORK ) - CALL DGEMM( 'N', 'N', M, L, N-L, ONE, B, LDB, + CALL DGEMM( 'N', 'N', M, L, N-L, ONE, B, LDB, $ V, LDV, ONE, WORK, LDWORK ) - CALL DGEMM( 'N', 'N', M, K-L, N, ONE, B, LDB, + CALL DGEMM( 'N', 'N', M, K-L, N, ONE, B, LDB, $ V( 1, KP ), LDV, ZERO, WORK( 1, KP ), LDWORK ) -* +* DO J = 1, K DO I = 1, M WORK( I, J ) = WORK( I, J ) + A( I, J ) END DO END DO * - CALL DTRMM( 'R', 'U', TRANS, 'N', M, K, ONE, T, LDT, + CALL DTRMM( 'R', 'U', TRANS, 'N', M, K, ONE, T, LDT, $ WORK, LDWORK ) -* +* DO J = 1, K DO I = 1, M A( I, J ) = A( I, J ) - WORK( I, J ) @@ -443,7 +443,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( COLUMN .AND. BACKWARD .AND. LEFT ) THEN * * --------------------------------------------------------------------------- @@ -457,7 +457,7 @@ * H = I - W T W**T or H**T = I - W T**T W**T * * A = A - T (A + V**T B) or A = A - T**T (A + V**T B) -* B = B - V T (A + V**T B) or B = B - V T**T (A + V**T B) +* B = B - V T (A + V**T B) or B = B - V T**T (A + V**T B) * * --------------------------------------------------------------------------- * @@ -472,10 +472,10 @@ * CALL DTRMM( 'L', 'L', 'T', 'N', L, N, ONE, V( 1, KP ), LDV, $ WORK( KP, 1 ), LDWORK ) - CALL DGEMM( 'T', 'N', L, N, M-L, ONE, V( MP, KP ), LDV, + CALL DGEMM( 'T', 'N', L, N, M-L, ONE, V( MP, KP ), LDV, $ B( MP, 1 ), LDB, ONE, WORK( KP, 1 ), LDWORK ) CALL DGEMM( 'T', 'N', K-L, N, M, ONE, V, LDV, - $ B, LDB, ZERO, WORK, LDWORK ) + $ B, LDB, ZERO, WORK, LDWORK ) * DO J = 1, N DO I = 1, K @@ -483,16 +483,16 @@ END DO END DO * - CALL DTRMM( 'L', 'L', TRANS, 'N', K, N, ONE, T, LDT, + CALL DTRMM( 'L', 'L', TRANS, 'N', K, N, ONE, T, LDT, $ WORK, LDWORK ) -* +* DO J = 1, N DO I = 1, K A( I, J ) = A( I, J ) - WORK( I, J ) END DO END DO * - CALL DGEMM( 'N', 'N', M-L, N, K, -ONE, V( MP, 1 ), LDV, + CALL DGEMM( 'N', 'N', M-L, N, K, -ONE, V( MP, 1 ), LDV, $ WORK, LDWORK, ONE, B( MP, 1 ), LDB ) CALL DGEMM( 'N', 'N', L, N, K-L, -ONE, V, LDV, $ WORK, LDWORK, ONE, B, LDB ) @@ -505,7 +505,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( COLUMN .AND. BACKWARD .AND. RIGHT ) THEN * * --------------------------------------------------------------------------- @@ -524,7 +524,7 @@ * NP = MIN( L+1, N ) KP = MIN( K-L+1, K ) -* +* DO J = 1, L DO I = 1, M WORK( I, K-L+J ) = B( I, J ) @@ -532,20 +532,20 @@ END DO CALL DTRMM( 'R', 'L', 'N', 'N', M, L, ONE, V( 1, KP ), LDV, $ WORK( 1, KP ), LDWORK ) - CALL DGEMM( 'N', 'N', M, L, N-L, ONE, B( 1, NP ), LDB, + CALL DGEMM( 'N', 'N', M, L, N-L, ONE, B( 1, NP ), LDB, $ V( NP, KP ), LDV, ONE, WORK( 1, KP ), LDWORK ) - CALL DGEMM( 'N', 'N', M, K-L, N, ONE, B, LDB, + CALL DGEMM( 'N', 'N', M, K-L, N, ONE, B, LDB, $ V, LDV, ZERO, WORK, LDWORK ) -* +* DO J = 1, K DO I = 1, M WORK( I, J ) = WORK( I, J ) + A( I, J ) END DO END DO * - CALL DTRMM( 'R', 'L', TRANS, 'N', M, K, ONE, T, LDT, + CALL DTRMM( 'R', 'L', TRANS, 'N', M, K, ONE, T, LDT, $ WORK, LDWORK ) -* +* DO J = 1, K DO I = 1, M A( I, J ) = A( I, J ) - WORK( I, J ) @@ -565,7 +565,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( ROW .AND. FORWARD .AND. LEFT ) THEN * * --------------------------------------------------------------------------- @@ -578,7 +578,7 @@ * H = I - W**T T W or H**T = I - W**T T**T W * * A = A - T (A + V B) or A = A - T**T (A + V B) -* B = B - V**T T (A + V B) or B = B - V**T T**T (A + V B) +* B = B - V**T T (A + V B) or B = B - V**T T**T (A + V B) * * --------------------------------------------------------------------------- * @@ -589,12 +589,12 @@ DO I = 1, L WORK( I, J ) = B( M-L+I, J ) END DO - END DO + END DO CALL DTRMM( 'L', 'L', 'N', 'N', L, N, ONE, V( 1, MP ), LDV, $ WORK, LDB ) - CALL DGEMM( 'N', 'N', L, N, M-L, ONE, V, LDV,B, LDB, + CALL DGEMM( 'N', 'N', L, N, M-L, ONE, V, LDV,B, LDB, $ ONE, WORK, LDWORK ) - CALL DGEMM( 'N', 'N', K-L, N, M, ONE, V( KP, 1 ), LDV, + CALL DGEMM( 'N', 'N', K-L, N, M, ONE, V( KP, 1 ), LDV, $ B, LDB, ZERO, WORK( KP, 1 ), LDWORK ) * DO J = 1, N @@ -603,7 +603,7 @@ END DO END DO * - CALL DTRMM( 'L', 'U', TRANS, 'N', K, N, ONE, T, LDT, + CALL DTRMM( 'L', 'U', TRANS, 'N', K, N, ONE, T, LDT, $ WORK, LDWORK ) * DO J = 1, N @@ -614,7 +614,7 @@ * CALL DGEMM( 'T', 'N', M-L, N, K, -ONE, V, LDV, WORK, LDWORK, $ ONE, B, LDB ) - CALL DGEMM( 'T', 'N', L, N, K-L, -ONE, V( KP, MP ), LDV, + CALL DGEMM( 'T', 'N', L, N, K-L, -ONE, V( KP, MP ), LDV, $ WORK( KP, 1 ), LDWORK, ONE, B( MP, 1 ), LDB ) CALL DTRMM( 'L', 'L', 'T', 'N', L, N, ONE, V( 1, MP ), LDV, $ WORK, LDWORK ) @@ -625,7 +625,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( ROW .AND. FORWARD .AND. RIGHT ) THEN * * --------------------------------------------------------------------------- @@ -653,7 +653,7 @@ $ WORK, LDWORK ) CALL DGEMM( 'N', 'T', M, L, N-L, ONE, B, LDB, V, LDV, $ ONE, WORK, LDWORK ) - CALL DGEMM( 'N', 'T', M, K-L, N, ONE, B, LDB, + CALL DGEMM( 'N', 'T', M, K-L, N, ONE, B, LDB, $ V( KP, 1 ), LDV, ZERO, WORK( 1, KP ), LDWORK ) * DO J = 1, K @@ -662,7 +662,7 @@ END DO END DO * - CALL DTRMM( 'R', 'U', TRANS, 'N', M, K, ONE, T, LDT, + CALL DTRMM( 'R', 'U', TRANS, 'N', M, K, ONE, T, LDT, $ WORK, LDWORK ) * DO J = 1, K @@ -671,10 +671,10 @@ END DO END DO * - CALL DGEMM( 'N', 'N', M, N-L, K, -ONE, WORK, LDWORK, + CALL DGEMM( 'N', 'N', M, N-L, K, -ONE, WORK, LDWORK, $ V, LDV, ONE, B, LDB ) CALL DGEMM( 'N', 'N', M, L, K-L, -ONE, WORK( 1, KP ), LDWORK, - $ V( KP, NP ), LDV, ONE, B( 1, NP ), LDB ) + $ V( KP, NP ), LDV, ONE, B( 1, NP ), LDB ) CALL DTRMM( 'R', 'L', 'N', 'N', M, L, ONE, V( 1, NP ), LDV, $ WORK, LDWORK ) DO J = 1, L @@ -684,7 +684,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( ROW .AND. BACKWARD .AND. LEFT ) THEN * * --------------------------------------------------------------------------- @@ -697,7 +697,7 @@ * H = I - W**T T W or H**T = I - W**T T**T W * * A = A - T (A + V B) or A = A - T**T (A + V B) -* B = B - V**T T (A + V B) or B = B - V**T T**T (A + V B) +* B = B - V**T T (A + V B) or B = B - V**T T**T (A + V B) * * --------------------------------------------------------------------------- * @@ -733,10 +733,10 @@ * CALL DGEMM( 'T', 'N', M-L, N, K, -ONE, V( 1, MP ), LDV, $ WORK, LDWORK, ONE, B( MP, 1 ), LDB ) - CALL DGEMM( 'T', 'N', L, N, K-L, -ONE, V, LDV, + CALL DGEMM( 'T', 'N', L, N, K-L, -ONE, V, LDV, $ WORK, LDWORK, ONE, B, LDB ) CALL DTRMM( 'L', 'U', 'T', 'N', L, N, ONE, V( KP, 1 ), LDV, - $ WORK( KP, 1 ), LDWORK ) + $ WORK( KP, 1 ), LDWORK ) DO J = 1, N DO I = 1, L B( I, J ) = B( I, J ) - WORK( K-L+I, J ) @@ -744,7 +744,7 @@ END DO * * --------------------------------------------------------------------------- -* +* ELSE IF( ROW .AND. BACKWARD .AND. RIGHT ) THEN * * --------------------------------------------------------------------------- @@ -773,7 +773,7 @@ CALL DGEMM( 'N', 'T', M, L, N-L, ONE, B( 1, NP ), LDB, $ V( KP, NP ), LDV, ONE, WORK( 1, KP ), LDWORK ) CALL DGEMM( 'N', 'T', M, K-L, N, ONE, B, LDB, V, LDV, - $ ZERO, WORK, LDWORK ) + $ ZERO, WORK, LDWORK ) * DO J = 1, K DO I = 1, M @@ -781,7 +781,7 @@ END DO END DO * - CALL DTRMM( 'R', 'L', TRANS, 'N', M, K, ONE, T, LDT, + CALL DTRMM( 'R', 'L', TRANS, 'N', M, K, ONE, T, LDT, $ WORK, LDWORK ) * DO J = 1, K @@ -790,9 +790,9 @@ END DO END DO * - CALL DGEMM( 'N', 'N', M, N-L, K, -ONE, WORK, LDWORK, + CALL DGEMM( 'N', 'N', M, N-L, K, -ONE, WORK, LDWORK, $ V( 1, NP ), LDV, ONE, B( 1, NP ), LDB ) - CALL DGEMM( 'N', 'N', M, L, K-L , -ONE, WORK, LDWORK, + CALL DGEMM( 'N', 'N', M, L, K-L , -ONE, WORK, LDWORK, $ V, LDV, ONE, B, LDB ) CALL DTRMM( 'R', 'U', 'N', 'N', M, L, ONE, V( KP, 1 ), LDV, $ WORK( 1, KP ), LDWORK )