| @@ -252,7 +252,7 @@ | |||||
| *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | ||||
| *> the right singular vectors; | *> the right singular vectors; | ||||
| *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | ||||
| *> then V is used as workspace if the pprocedure | |||||
| *> then V is used as workspace if the procedure | |||||
| *> replaces A with A^*. In that case, [U] is computed | *> replaces A with A^*. In that case, [U] is computed | ||||
| *> in V as right singular vectors of A^* and then | *> in V as right singular vectors of A^* and then | ||||
| *> copied back to the U array. This 'W' option is just | *> copied back to the U array. This 'W' option is just | ||||
| @@ -363,7 +363,7 @@ | |||||
| *> an optimal implementation would do all necessary scaling before calling | *> an optimal implementation would do all necessary scaling before calling | ||||
| *> CGESVD and the scaling in CGESVD can be switched off. | *> CGESVD and the scaling in CGESVD can be switched off. | ||||
| *> 3. Other comments related to code optimization are given in comments in the | *> 3. Other comments related to code optimization are given in comments in the | ||||
| *> code, enlosed in [[double brackets]]. | |||||
| *> code, enclosed in [[double brackets]]. | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| *> \par Bugs, examples and comments | *> \par Bugs, examples and comments | ||||
| @@ -52,10 +52,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -75,10 +75,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -87,7 +87,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -480,7 +480,7 @@ | |||||
| A( J, K ) = CONJG( A( P, J ) ) | A( J, K ) = CONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 14 CONTINUE | 14 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = CONJG( A( P, K ) ) | A( P, K ) = CONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( K, K ) ) | R1 = REAL( A( K, K ) ) | ||||
| @@ -508,7 +508,7 @@ | |||||
| A( J, KK ) = CONJG( A( KP, J ) ) | A( J, KK ) = CONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 15 CONTINUE | 15 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = CONJG( A( KP, KK ) ) | A( KP, KK ) = CONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( KK, KK ) ) | R1 = REAL( A( KK, KK ) ) | ||||
| @@ -834,7 +834,7 @@ | |||||
| A( J, K ) = CONJG( A( P, J ) ) | A( J, K ) = CONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 44 CONTINUE | 44 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = CONJG( A( P, K ) ) | A( P, K ) = CONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( K, K ) ) | R1 = REAL( A( K, K ) ) | ||||
| @@ -862,7 +862,7 @@ | |||||
| A( J, KK ) = CONJG( A( KP, J ) ) | A( J, KK ) = CONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 45 CONTINUE | 45 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = CONJG( A( KP, KK ) ) | A( KP, KK ) = CONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( KK, KK ) ) | R1 = REAL( A( KK, KK ) ) | ||||
| @@ -420,7 +420,7 @@ | |||||
| A( J, K ) = CONJG( A( P, J ) ) | A( J, K ) = CONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 14 CONTINUE | 14 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = CONJG( A( P, K ) ) | A( P, K ) = CONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( K, K ) ) | R1 = REAL( A( K, K ) ) | ||||
| @@ -441,7 +441,7 @@ | |||||
| A( J, KK ) = CONJG( A( KP, J ) ) | A( J, KK ) = CONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 15 CONTINUE | 15 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = CONJG( A( KP, KK ) ) | A( KP, KK ) = CONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( KK, KK ) ) | R1 = REAL( A( KK, KK ) ) | ||||
| @@ -733,7 +733,7 @@ | |||||
| A( J, K ) = CONJG( A( P, J ) ) | A( J, K ) = CONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 44 CONTINUE | 44 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = CONJG( A( P, K ) ) | A( P, K ) = CONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( K, K ) ) | R1 = REAL( A( K, K ) ) | ||||
| @@ -754,7 +754,7 @@ | |||||
| A( J, KK ) = CONJG( A( KP, J ) ) | A( J, KK ) = CONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 45 CONTINUE | 45 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = CONJG( A( KP, KK ) ) | A( KP, KK ) = CONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = REAL( A( KK, KK ) ) | R1 = REAL( A( KK, KK ) ) | ||||
| @@ -74,7 +74,7 @@ | |||||
| *> | *> | ||||
| *> On exit, the tridiagonal matrix is stored in the diagonals | *> On exit, the tridiagonal matrix is stored in the diagonals | ||||
| *> and the subdiagonals of A just below (or above) the diagonals, | *> and the subdiagonals of A just below (or above) the diagonals, | ||||
| *> and L is stored below (or above) the subdiaonals, when UPLO | |||||
| *> and L is stored below (or above) the subdiagonals, when UPLO | |||||
| *> is 'L' (or 'U'). | *> is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -75,7 +75,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -18,7 +18,7 @@ | |||||
| * Definition: | * Definition: | ||||
| * =========== | * =========== | ||||
| * | * | ||||
| * SUBROUTINE CLA_GBRFSX_EXTENDED ( PREC_TYPE, TRANS_TYPE, N, KL, KU, | |||||
| * SUBROUTINE CLA_GBRFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, KL, KU, | |||||
| * NRHS, AB, LDAB, AFB, LDAFB, IPIV, | * NRHS, AB, LDAB, AFB, LDAFB, IPIV, | ||||
| * COLEQU, C, B, LDB, Y, LDY, | * COLEQU, C, B, LDB, Y, LDY, | ||||
| * BERR_OUT, N_NORMS, ERR_BNDS_NORM, | * BERR_OUT, N_NORMS, ERR_BNDS_NORM, | ||||
| @@ -400,7 +400,7 @@ | |||||
| *> \ingroup complexGBcomputational | *> \ingroup complexGBcomputational | ||||
| * | * | ||||
| * ===================================================================== | * ===================================================================== | ||||
| SUBROUTINE CLA_GBRFSX_EXTENDED ( PREC_TYPE, TRANS_TYPE, N, KL, KU, | |||||
| SUBROUTINE CLA_GBRFSX_EXTENDED( PREC_TYPE, TRANS_TYPE, N, KL, KU, | |||||
| $ NRHS, AB, LDAB, AFB, LDAFB, IPIV, | $ NRHS, AB, LDAB, AFB, LDAFB, IPIV, | ||||
| $ COLEQU, C, B, LDB, Y, LDY, | $ COLEQU, C, B, LDB, Y, LDY, | ||||
| $ BERR_OUT, N_NORMS, ERR_BNDS_NORM, | $ BERR_OUT, N_NORMS, ERR_BNDS_NORM, | ||||
| @@ -651,7 +651,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL CAXPY( N, (1.0E+0,0.0E+0), DY, 1, Y(1,J), 1 ) | CALL CAXPY( N, (1.0E+0,0.0E+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -637,7 +637,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL CAXPY( N, (1.0E+0,0.0E+0), DY, 1, Y(1,J), 1 ) | CALL CAXPY( N, (1.0E+0,0.0E+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -654,7 +654,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL CAXPY( N, CMPLX(1.0), DY, 1, Y(1,J), 1 ) | CALL CAXPY( N, CMPLX(1.0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -625,7 +625,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL CAXPY( N, CMPLX(1.0), DY, 1, Y(1,J), 1 ) | CALL CAXPY( N, CMPLX(1.0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -654,7 +654,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL CAXPY( N, CMPLX(1.0), DY, 1, Y(1,J), 1 ) | CALL CAXPY( N, CMPLX(1.0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -363,7 +363,7 @@ | |||||
| RETURN | RETURN | ||||
| END IF | END IF | ||||
| * | * | ||||
| * Prepare the INDXQ sorting premutation. | |||||
| * Prepare the INDXQ sorting permutation. | |||||
| * | * | ||||
| N1 = K | N1 = K | ||||
| N2 = N - K | N2 = N - K | ||||
| @@ -89,7 +89,7 @@ | |||||
| *> Anal., 29(2006), pp. 199--227. | *> Anal., 29(2006), pp. 199--227. | ||||
| *> | *> | ||||
| *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | ||||
| *> multipole rational QZ method with agressive early deflation" | |||||
| *> multipole rational QZ method with aggressive early deflation" | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| * Arguments: | * Arguments: | ||||
| @@ -310,7 +310,7 @@ | |||||
| CHARACTER :: JBCMPZ*3 | CHARACTER :: JBCMPZ*3 | ||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, CHGEQZ, CLAQZ2, CLAQZ3, CLASET, SLABAD, | |||||
| EXTERNAL :: XERBLA, CHGEQZ, CLAQZ2, CLAQZ3, CLASET, | |||||
| $ CLARTG, CROT | $ CLARTG, CROT | ||||
| REAL, EXTERNAL :: SLAMCH, CLANHS | REAL, EXTERNAL :: SLAMCH, CLANHS | ||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| @@ -462,7 +462,6 @@ | |||||
| * Get machine constants | * Get machine constants | ||||
| SAFMIN = SLAMCH( 'SAFE MINIMUM' ) | SAFMIN = SLAMCH( 'SAFE MINIMUM' ) | ||||
| SAFMAX = ONE/SAFMIN | SAFMAX = ONE/SAFMIN | ||||
| CALL SLABAD( SAFMIN, SAFMAX ) | |||||
| ULP = SLAMCH( 'PRECISION' ) | ULP = SLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( REAL( N )/ULP ) | SMLNUM = SAFMIN*( REAL( N )/ULP ) | ||||
| @@ -533,7 +532,7 @@ | |||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | ||||
| * A diagonal element of B is negligable, move it | |||||
| * A diagonal element of B is negligible, move it | |||||
| * to the top and deflate it | * to the top and deflate it | ||||
| DO K2 = K, ISTART2+1, -1 | DO K2 = K, ISTART2+1, -1 | ||||
| @@ -452,7 +452,7 @@ | |||||
| IF( LNOTIDENT ) THEN | IF( LNOTIDENT ) THEN | ||||
| * | * | ||||
| * col2_(2) Compute W2: = (V1**H) * W2 = (A1**H) * W2, | * col2_(2) Compute W2: = (V1**H) * W2 = (A1**H) * W2, | ||||
| * V1 is not an identy matrix, but unit lower-triangular | |||||
| * V1 is not an identity matrix, but unit lower-triangular | |||||
| * V1 stored in A1 (diagonal ones are not stored). | * V1 stored in A1 (diagonal ones are not stored). | ||||
| * | * | ||||
| * | * | ||||
| @@ -227,7 +227,7 @@ | |||||
| BM = RHS( J ) - CONE | BM = RHS( J ) - CONE | ||||
| SPLUS = ONE | SPLUS = ONE | ||||
| * | * | ||||
| * Lockahead for L- part RHS(1:N-1) = +-1 | |||||
| * Look-ahead for L- part RHS(1:N-1) = +-1 | |||||
| * SPLUS and SMIN computed more efficiently than in BSOLVE[1]. | * SPLUS and SMIN computed more efficiently than in BSOLVE[1]. | ||||
| * | * | ||||
| SPLUS = SPLUS + REAL( CDOTC( N-J, Z( J+1, J ), 1, Z( J+1, | SPLUS = SPLUS + REAL( CDOTC( N-J, Z( J+1, J ), 1, Z( J+1, | ||||
| @@ -577,7 +577,7 @@ | |||||
| * Prepare the linear update to be executed with GEMM. | * Prepare the linear update to be executed with GEMM. | ||||
| * For each column, compute a consistent scaling, a | * For each column, compute a consistent scaling, a | ||||
| * scaling factor to survive the linear update, and | * scaling factor to survive the linear update, and | ||||
| * rescale the column segments, if necesssary. Then | |||||
| * rescale the column segments, if necessary. Then | |||||
| * the linear update is safely executed. | * the linear update is safely executed. | ||||
| * | * | ||||
| DO KK = 1, K2-K1 | DO KK = 1, K2-K1 | ||||
| @@ -39,7 +39,7 @@ | |||||
| *> CSYTRF provided on entry in parameter A into the factorization | *> CSYTRF provided on entry in parameter A into the factorization | ||||
| *> output format used in CSYTRF_RK (or CSYTRF_BK) that is stored | *> output format used in CSYTRF_RK (or CSYTRF_BK) that is stored | ||||
| *> on exit in parameters A and E. It also converts in place details of | *> on exit in parameters A and E. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in CSYTRF into | |||||
| *> the interchanges stored in IPIV from the format used in CSYTRF into | |||||
| *> the format used in CSYTRF_RK (or CSYTRF_BK). | *> the format used in CSYTRF_RK (or CSYTRF_BK). | ||||
| *> | *> | ||||
| *> If parameter WAY = 'R': | *> If parameter WAY = 'R': | ||||
| @@ -48,7 +48,7 @@ | |||||
| *> (or CSYTRF_BK) provided on entry in parameters A and E into | *> (or CSYTRF_BK) provided on entry in parameters A and E into | ||||
| *> the factorization output format used in CSYTRF that is stored | *> the factorization output format used in CSYTRF that is stored | ||||
| *> on exit in parameter A. It also converts in place details of | *> on exit in parameter A. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in CSYTRF_RK | |||||
| *> the interchanges stored in IPIV from the format used in CSYTRF_RK | |||||
| *> (or CSYTRF_BK) into the format used in CSYTRF. | *> (or CSYTRF_BK) into the format used in CSYTRF. | ||||
| *> | *> | ||||
| *> CSYCONVF can also convert in Hermitian matrix case, i.e. between | *> CSYCONVF can also convert in Hermitian matrix case, i.e. between | ||||
| @@ -325,7 +325,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -469,7 +469,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -535,7 +535,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -520,7 +520,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -87,7 +87,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -74,7 +74,7 @@ | |||||
| *> | *> | ||||
| *> On exit, the tridiagonal matrix is stored in the diagonals | *> On exit, the tridiagonal matrix is stored in the diagonals | ||||
| *> and the subdiagonals of A just below (or above) the diagonals, | *> and the subdiagonals of A just below (or above) the diagonals, | ||||
| *> and L is stored below (or above) the subdiaonals, when UPLO | |||||
| *> and L is stored below (or above) the subdiagonals, when UPLO | |||||
| *> is 'L' (or 'U'). | *> is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -75,7 +75,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -40,7 +40,7 @@ | |||||
| *> | *> | ||||
| *> The Schur form T is reordered by a unitary similarity transformation | *> The Schur form T is reordered by a unitary similarity transformation | ||||
| *> Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by | *> Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by | ||||
| *> postmultplying it with Z. | |||||
| *> postmultiplying it with Z. | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| * Arguments: | * Arguments: | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> CUNBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | *> CUNBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> CUNBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | *> CUNBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> CUNBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | *> CUNBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -38,7 +38,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> CUNBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | *> CUNBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -45,7 +45,7 @@ | |||||
| *> | *> | ||||
| *> Given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ] | *> Given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ] | ||||
| *> and superdiagonal E = [ e_1 e_2 ... e_N-1 ], DBDSVDX computes the | *> and superdiagonal E = [ e_1 e_2 ... e_N-1 ], DBDSVDX computes the | ||||
| *> singular value decompositon of B through the eigenvalues and | |||||
| *> singular value decomposition of B through the eigenvalues and | |||||
| *> eigenvectors of the N*2-by-N*2 tridiagonal matrix | *> eigenvectors of the N*2-by-N*2 tridiagonal matrix | ||||
| *> | *> | ||||
| *> | 0 d_1 | | *> | 0 d_1 | | ||||
| @@ -253,7 +253,7 @@ | |||||
| *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | ||||
| *> the right singular vectors; | *> the right singular vectors; | ||||
| *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | ||||
| *> then V is used as workspace if the pprocedure | |||||
| *> then V is used as workspace if the procedure | |||||
| *> replaces A with A^t. In that case, [U] is computed | *> replaces A with A^t. In that case, [U] is computed | ||||
| *> in V as right singular vectors of A^t and then | *> in V as right singular vectors of A^t and then | ||||
| *> copied back to the U array. This 'W' option is just | *> copied back to the U array. This 'W' option is just | ||||
| @@ -365,7 +365,7 @@ | |||||
| *> an optimal implementation would do all necessary scaling before calling | *> an optimal implementation would do all necessary scaling before calling | ||||
| *> CGESVD and the scaling in CGESVD can be switched off. | *> CGESVD and the scaling in CGESVD can be switched off. | ||||
| *> 3. Other comments related to code optimization are given in comments in the | *> 3. Other comments related to code optimization are given in comments in the | ||||
| *> code, enlosed in [[double brackets]]. | |||||
| *> code, enclosed in [[double brackets]]. | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| *> \par Bugs, examples and comments | *> \par Bugs, examples and comments | ||||
| @@ -52,10 +52,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -75,10 +75,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -645,7 +645,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL DAXPY( N, 1.0D+0, DY, 1, Y(1,J), 1 ) | CALL DAXPY( N, 1.0D+0, DY, 1, Y(1,J), 1 ) | ||||
| @@ -625,7 +625,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL DAXPY( N, 1.0D+0, DY, 1, Y( 1, J ), 1 ) | CALL DAXPY( N, 1.0D+0, DY, 1, Y( 1, J ), 1 ) | ||||
| @@ -617,7 +617,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL DAXPY( N, 1.0D+0, DY, 1, Y(1,J), 1 ) | CALL DAXPY( N, 1.0D+0, DY, 1, Y(1,J), 1 ) | ||||
| @@ -647,7 +647,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL DAXPY( N, 1.0D+0, DY, 1, Y(1,J), 1 ) | CALL DAXPY( N, 1.0D+0, DY, 1, Y(1,J), 1 ) | ||||
| @@ -102,7 +102,7 @@ | |||||
| *> Anal., 29(2006), pp. 199--227. | *> Anal., 29(2006), pp. 199--227. | ||||
| *> | *> | ||||
| *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | ||||
| *> multipole rational QZ method with agressive early deflation" | |||||
| *> multipole rational QZ method with aggressive early deflation" | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| * Arguments: | * Arguments: | ||||
| @@ -332,7 +332,7 @@ | |||||
| CHARACTER :: JBCMPZ*3 | CHARACTER :: JBCMPZ*3 | ||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, DHGEQZ, DLASET, DLAQZ3, DLAQZ4, DLABAD, | |||||
| EXTERNAL :: XERBLA, DHGEQZ, DLASET, DLAQZ3, DLAQZ4, | |||||
| $ DLARTG, DROT | $ DLARTG, DROT | ||||
| DOUBLE PRECISION, EXTERNAL :: DLAMCH, DLANHS | DOUBLE PRECISION, EXTERNAL :: DLAMCH, DLANHS | ||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| @@ -482,7 +482,6 @@ | |||||
| * Get machine constants | * Get machine constants | ||||
| SAFMIN = DLAMCH( 'SAFE MINIMUM' ) | SAFMIN = DLAMCH( 'SAFE MINIMUM' ) | ||||
| SAFMAX = ONE/SAFMIN | SAFMAX = ONE/SAFMIN | ||||
| CALL DLABAD( SAFMIN, SAFMAX ) | |||||
| ULP = DLAMCH( 'PRECISION' ) | ULP = DLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( DBLE( N )/ULP ) | SMLNUM = SAFMIN*( DBLE( N )/ULP ) | ||||
| @@ -567,7 +566,7 @@ | |||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | ||||
| * A diagonal element of B is negligable, move it | |||||
| * A diagonal element of B is negligible, move it | |||||
| * to the top and deflate it | * to the top and deflate it | ||||
| DO K2 = K, ISTART2+1, -1 | DO K2 = K, ISTART2+1, -1 | ||||
| @@ -451,7 +451,7 @@ | |||||
| IF( LNOTIDENT ) THEN | IF( LNOTIDENT ) THEN | ||||
| * | * | ||||
| * col2_(2) Compute W2: = (V1**T) * W2 = (A1**T) * W2, | * col2_(2) Compute W2: = (V1**T) * W2 = (A1**T) * W2, | ||||
| * V1 is not an identy matrix, but unit lower-triangular | |||||
| * V1 is not an identity matrix, but unit lower-triangular | |||||
| * V1 stored in A1 (diagonal ones are not stored). | * V1 stored in A1 (diagonal ones are not stored). | ||||
| * | * | ||||
| * | * | ||||
| @@ -574,7 +574,7 @@ | |||||
| * Prepare the linear update to be executed with GEMM. | * Prepare the linear update to be executed with GEMM. | ||||
| * For each column, compute a consistent scaling, a | * For each column, compute a consistent scaling, a | ||||
| * scaling factor to survive the linear update, and | * scaling factor to survive the linear update, and | ||||
| * rescale the column segments, if necesssary. Then | |||||
| * rescale the column segments, if necessary. Then | |||||
| * the linear update is safely executed. | * the linear update is safely executed. | ||||
| * | * | ||||
| DO KK = 1, K2-K1 | DO KK = 1, K2-K1 | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> DORBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | *> DORBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> DORBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | *> DORBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> DORBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | *> DORBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -38,7 +38,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> DORBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | *> DORBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -39,7 +39,7 @@ | |||||
| *> DSYTRF provided on entry in parameter A into the factorization | *> DSYTRF provided on entry in parameter A into the factorization | ||||
| *> output format used in DSYTRF_RK (or DSYTRF_BK) that is stored | *> output format used in DSYTRF_RK (or DSYTRF_BK) that is stored | ||||
| *> on exit in parameters A and E. It also converts in place details of | *> on exit in parameters A and E. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in DSYTRF into | |||||
| *> the interchanges stored in IPIV from the format used in DSYTRF into | |||||
| *> the format used in DSYTRF_RK (or DSYTRF_BK). | *> the format used in DSYTRF_RK (or DSYTRF_BK). | ||||
| *> | *> | ||||
| *> If parameter WAY = 'R': | *> If parameter WAY = 'R': | ||||
| @@ -48,7 +48,7 @@ | |||||
| *> (or DSYTRF_BK) provided on entry in parameters A and E into | *> (or DSYTRF_BK) provided on entry in parameters A and E into | ||||
| *> the factorization output format used in DSYTRF that is stored | *> the factorization output format used in DSYTRF that is stored | ||||
| *> on exit in parameter A. It also converts in place details of | *> on exit in parameter A. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in DSYTRF_RK | |||||
| *> the interchanges stored in IPIV from the format used in DSYTRF_RK | |||||
| *> (or DSYTRF_BK) into the format used in DSYTRF. | *> (or DSYTRF_BK) into the format used in DSYTRF. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| @@ -322,7 +322,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -466,7 +466,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -532,7 +532,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -517,7 +517,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -89,7 +89,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -74,7 +74,7 @@ | |||||
| *> | *> | ||||
| *> On exit, the tridiagonal matrix is stored in the diagonals | *> On exit, the tridiagonal matrix is stored in the diagonals | ||||
| *> and the subdiagonals of A just below (or above) the diagonals, | *> and the subdiagonals of A just below (or above) the diagonals, | ||||
| *> and L is stored below (or above) the subdiaonals, when UPLO | |||||
| *> and L is stored below (or above) the subdiagonals, when UPLO | |||||
| *> is 'L' (or 'U'). | *> is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -75,7 +75,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -45,7 +45,7 @@ | |||||
| *> | *> | ||||
| *> Given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ] | *> Given an upper bidiagonal B with diagonal D = [ d_1 d_2 ... d_N ] | ||||
| *> and superdiagonal E = [ e_1 e_2 ... e_N-1 ], SBDSVDX computes the | *> and superdiagonal E = [ e_1 e_2 ... e_N-1 ], SBDSVDX computes the | ||||
| *> singular value decompositon of B through the eigenvalues and | |||||
| *> singular value decomposition of B through the eigenvalues and | |||||
| *> eigenvectors of the N*2-by-N*2 tridiagonal matrix | *> eigenvectors of the N*2-by-N*2 tridiagonal matrix | ||||
| *> | *> | ||||
| *> | 0 d_1 | | *> | 0 d_1 | | ||||
| @@ -253,7 +253,7 @@ | |||||
| *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | ||||
| *> the right singular vectors; | *> the right singular vectors; | ||||
| *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | ||||
| *> then V is used as workspace if the pprocedure | |||||
| *> then V is used as workspace if the procedure | |||||
| *> replaces A with A^t. In that case, [U] is computed | *> replaces A with A^t. In that case, [U] is computed | ||||
| *> in V as right singular vectors of A^t and then | *> in V as right singular vectors of A^t and then | ||||
| *> copied back to the U array. This 'W' option is just | *> copied back to the U array. This 'W' option is just | ||||
| @@ -365,7 +365,7 @@ | |||||
| *> an optimal implementation would do all necessary scaling before calling | *> an optimal implementation would do all necessary scaling before calling | ||||
| *> CGESVD and the scaling in CGESVD can be switched off. | *> CGESVD and the scaling in CGESVD can be switched off. | ||||
| *> 3. Other comments related to code optimization are given in comments in the | *> 3. Other comments related to code optimization are given in comments in the | ||||
| *> code, enlosed in [[double brackets]]. | |||||
| *> code, enclosed in [[double brackets]]. | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| *> \par Bugs, examples and comments | *> \par Bugs, examples and comments | ||||
| @@ -52,10 +52,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -75,10 +75,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -644,7 +644,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL SAXPY( N, 1.0, DY, 1, Y(1,J), 1 ) | CALL SAXPY( N, 1.0, DY, 1, Y(1,J), 1 ) | ||||
| @@ -628,7 +628,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL SAXPY( N, 1.0, DY, 1, Y( 1, J ), 1 ) | CALL SAXPY( N, 1.0, DY, 1, Y( 1, J ), 1 ) | ||||
| @@ -617,7 +617,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL SAXPY( N, 1.0, DY, 1, Y(1,J), 1 ) | CALL SAXPY( N, 1.0, DY, 1, Y(1,J), 1 ) | ||||
| @@ -647,7 +647,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL SAXPY( N, 1.0, DY, 1, Y(1,J), 1 ) | CALL SAXPY( N, 1.0, DY, 1, Y(1,J), 1 ) | ||||
| @@ -100,7 +100,7 @@ | |||||
| *> Anal., 29(2006), pp. 199--227. | *> Anal., 29(2006), pp. 199--227. | ||||
| *> | *> | ||||
| *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | ||||
| *> multipole rational QZ method with agressive early deflation" | |||||
| *> multipole rational QZ method with aggressive early deflation" | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| * Arguments: | * Arguments: | ||||
| @@ -329,7 +329,7 @@ | |||||
| CHARACTER :: JBCMPZ*3 | CHARACTER :: JBCMPZ*3 | ||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, SHGEQZ, SLAQZ3, SLAQZ4, SLASET, SLABAD, | |||||
| EXTERNAL :: XERBLA, SHGEQZ, SLAQZ3, SLAQZ4, SLASET, | |||||
| $ SLARTG, SROT | $ SLARTG, SROT | ||||
| REAL, EXTERNAL :: SLAMCH, SLANHS | REAL, EXTERNAL :: SLAMCH, SLANHS | ||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| @@ -479,7 +479,6 @@ | |||||
| * Get machine constants | * Get machine constants | ||||
| SAFMIN = SLAMCH( 'SAFE MINIMUM' ) | SAFMIN = SLAMCH( 'SAFE MINIMUM' ) | ||||
| SAFMAX = ONE/SAFMIN | SAFMAX = ONE/SAFMIN | ||||
| CALL SLABAD( SAFMIN, SAFMAX ) | |||||
| ULP = SLAMCH( 'PRECISION' ) | ULP = SLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( REAL( N )/ULP ) | SMLNUM = SAFMIN*( REAL( N )/ULP ) | ||||
| @@ -564,7 +563,7 @@ | |||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | ||||
| * A diagonal element of B is negligable, move it | |||||
| * A diagonal element of B is negligible, move it | |||||
| * to the top and deflate it | * to the top and deflate it | ||||
| DO K2 = K, ISTART2+1, -1 | DO K2 = K, ISTART2+1, -1 | ||||
| @@ -451,7 +451,7 @@ | |||||
| IF( LNOTIDENT ) THEN | IF( LNOTIDENT ) THEN | ||||
| * | * | ||||
| * col2_(2) Compute W2: = (V1**T) * W2 = (A1**T) * W2, | * col2_(2) Compute W2: = (V1**T) * W2 = (A1**T) * W2, | ||||
| * V1 is not an identy matrix, but unit lower-triangular | |||||
| * V1 is not an identity matrix, but unit lower-triangular | |||||
| * V1 stored in A1 (diagonal ones are not stored). | * V1 stored in A1 (diagonal ones are not stored). | ||||
| * | * | ||||
| * | * | ||||
| @@ -574,7 +574,7 @@ | |||||
| * Prepare the linear update to be executed with GEMM. | * Prepare the linear update to be executed with GEMM. | ||||
| * For each column, compute a consistent scaling, a | * For each column, compute a consistent scaling, a | ||||
| * scaling factor to survive the linear update, and | * scaling factor to survive the linear update, and | ||||
| * rescale the column segments, if necesssary. Then | |||||
| * rescale the column segments, if necessary. Then | |||||
| * the linear update is safely executed. | * the linear update is safely executed. | ||||
| * | * | ||||
| DO KK = 1, K2-K1 | DO KK = 1, K2-K1 | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> SORBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | *> SORBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> SORBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | *> SORBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> SORBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | *> SORBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -38,7 +38,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> SORBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | *> SORBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -39,7 +39,7 @@ | |||||
| *> SSYTRF provided on entry in parameter A into the factorization | *> SSYTRF provided on entry in parameter A into the factorization | ||||
| *> output format used in SSYTRF_RK (or SSYTRF_BK) that is stored | *> output format used in SSYTRF_RK (or SSYTRF_BK) that is stored | ||||
| *> on exit in parameters A and E. It also converts in place details of | *> on exit in parameters A and E. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in SSYTRF into | |||||
| *> the interchanges stored in IPIV from the format used in SSYTRF into | |||||
| *> the format used in SSYTRF_RK (or SSYTRF_BK). | *> the format used in SSYTRF_RK (or SSYTRF_BK). | ||||
| *> | *> | ||||
| *> If parameter WAY = 'R': | *> If parameter WAY = 'R': | ||||
| @@ -48,7 +48,7 @@ | |||||
| *> (or SSYTRF_BK) provided on entry in parameters A and E into | *> (or SSYTRF_BK) provided on entry in parameters A and E into | ||||
| *> the factorization output format used in SSYTRF that is stored | *> the factorization output format used in SSYTRF that is stored | ||||
| *> on exit in parameter A. It also converts in place details of | *> on exit in parameter A. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in SSYTRF_RK | |||||
| *> the interchanges stored in IPIV from the format used in SSYTRF_RK | |||||
| *> (or SSYTRF_BK) into the format used in SSYTRF. | *> (or SSYTRF_BK) into the format used in SSYTRF. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| @@ -322,7 +322,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -466,7 +466,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -532,7 +532,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -517,7 +517,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -88,7 +88,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -74,7 +74,7 @@ | |||||
| *> | *> | ||||
| *> On exit, the tridiagonal matrix is stored in the diagonals | *> On exit, the tridiagonal matrix is stored in the diagonals | ||||
| *> and the subdiagonals of A just below (or above) the diagonals, | *> and the subdiagonals of A just below (or above) the diagonals, | ||||
| *> and L is stored below (or above) the subdiaonals, when UPLO | |||||
| *> and L is stored below (or above) the subdiagonals, when UPLO | |||||
| *> is 'L' (or 'U'). | *> is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -75,7 +75,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -252,7 +252,7 @@ | |||||
| *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | *> If JOBV = 'V', 'J' then V contains on exit the N-by-N matrix of | ||||
| *> the right singular vectors; | *> the right singular vectors; | ||||
| *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | *> If JOBV = 'W', AND (JOBU = 'U' AND JOBT = 'T' AND M = N), | ||||
| *> then V is used as workspace if the pprocedure | |||||
| *> then V is used as workspace if the procedure | |||||
| *> replaces A with A^*. In that case, [U] is computed | *> replaces A with A^*. In that case, [U] is computed | ||||
| *> in V as right singular vectors of A^* and then | *> in V as right singular vectors of A^* and then | ||||
| *> copied back to the U array. This 'W' option is just | *> copied back to the U array. This 'W' option is just | ||||
| @@ -363,7 +363,7 @@ | |||||
| *> an optimal implementation would do all necessary scaling before calling | *> an optimal implementation would do all necessary scaling before calling | ||||
| *> CGESVD and the scaling in CGESVD can be switched off. | *> CGESVD and the scaling in CGESVD can be switched off. | ||||
| *> 3. Other comments related to code optimization are given in comments in the | *> 3. Other comments related to code optimization are given in comments in the | ||||
| *> code, enlosed in [[double brackets]]. | |||||
| *> code, enclosed in [[double brackets]]. | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| *> \par Bugs, examples and comments | *> \par Bugs, examples and comments | ||||
| @@ -52,10 +52,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -75,10 +75,10 @@ | |||||
| *> Specifies whether the output from this procedure is used | *> Specifies whether the output from this procedure is used | ||||
| *> to compute the matrix V: | *> to compute the matrix V: | ||||
| *> = 'V': the product of the Jacobi rotations is accumulated | *> = 'V': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the N-by-N array V. | |||||
| *> by postmultiplying the N-by-N array V. | |||||
| *> (See the description of V.) | *> (See the description of V.) | ||||
| *> = 'A': the product of the Jacobi rotations is accumulated | *> = 'A': the product of the Jacobi rotations is accumulated | ||||
| *> by postmulyiplying the MV-by-N array V. | |||||
| *> by postmultiplying the MV-by-N array V. | |||||
| *> (See the descriptions of MV and V.) | *> (See the descriptions of MV and V.) | ||||
| *> = 'N': the Jacobi rotations are not accumulated. | *> = 'N': the Jacobi rotations are not accumulated. | ||||
| *> \endverbatim | *> \endverbatim | ||||
| @@ -88,7 +88,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -480,7 +480,7 @@ | |||||
| A( J, K ) = DCONJG( A( P, J ) ) | A( J, K ) = DCONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 14 CONTINUE | 14 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = DCONJG( A( P, K ) ) | A( P, K ) = DCONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( K, K ) ) | R1 = DBLE( A( K, K ) ) | ||||
| @@ -508,7 +508,7 @@ | |||||
| A( J, KK ) = DCONJG( A( KP, J ) ) | A( J, KK ) = DCONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 15 CONTINUE | 15 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = DCONJG( A( KP, KK ) ) | A( KP, KK ) = DCONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( KK, KK ) ) | R1 = DBLE( A( KK, KK ) ) | ||||
| @@ -834,7 +834,7 @@ | |||||
| A( J, K ) = DCONJG( A( P, J ) ) | A( J, K ) = DCONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 44 CONTINUE | 44 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = DCONJG( A( P, K ) ) | A( P, K ) = DCONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( K, K ) ) | R1 = DBLE( A( K, K ) ) | ||||
| @@ -862,7 +862,7 @@ | |||||
| A( J, KK ) = DCONJG( A( KP, J ) ) | A( J, KK ) = DCONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 45 CONTINUE | 45 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = DCONJG( A( KP, KK ) ) | A( KP, KK ) = DCONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( KK, KK ) ) | R1 = DBLE( A( KK, KK ) ) | ||||
| @@ -420,7 +420,7 @@ | |||||
| A( J, K ) = DCONJG( A( P, J ) ) | A( J, K ) = DCONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 14 CONTINUE | 14 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = DCONJG( A( P, K ) ) | A( P, K ) = DCONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( K, K ) ) | R1 = DBLE( A( K, K ) ) | ||||
| @@ -441,7 +441,7 @@ | |||||
| A( J, KK ) = DCONJG( A( KP, J ) ) | A( J, KK ) = DCONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 15 CONTINUE | 15 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = DCONJG( A( KP, KK ) ) | A( KP, KK ) = DCONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( KK, KK ) ) | R1 = DBLE( A( KK, KK ) ) | ||||
| @@ -733,7 +733,7 @@ | |||||
| A( J, K ) = DCONJG( A( P, J ) ) | A( J, K ) = DCONJG( A( P, J ) ) | ||||
| A( P, J ) = T | A( P, J ) = T | ||||
| 44 CONTINUE | 44 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( P, K ) = DCONJG( A( P, K ) ) | A( P, K ) = DCONJG( A( P, K ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( K, K ) ) | R1 = DBLE( A( K, K ) ) | ||||
| @@ -754,7 +754,7 @@ | |||||
| A( J, KK ) = DCONJG( A( KP, J ) ) | A( J, KK ) = DCONJG( A( KP, J ) ) | ||||
| A( KP, J ) = T | A( KP, J ) = T | ||||
| 45 CONTINUE | 45 CONTINUE | ||||
| * (3) Swap and conjugate corner elements at row-col interserction | |||||
| * (3) Swap and conjugate corner elements at row-col intersection | |||||
| A( KP, KK ) = DCONJG( A( KP, KK ) ) | A( KP, KK ) = DCONJG( A( KP, KK ) ) | ||||
| * (4) Swap diagonal elements at row-col intersection | * (4) Swap diagonal elements at row-col intersection | ||||
| R1 = DBLE( A( KK, KK ) ) | R1 = DBLE( A( KK, KK ) ) | ||||
| @@ -74,7 +74,7 @@ | |||||
| *> | *> | ||||
| *> On exit, the tridiagonal matrix is stored in the diagonals | *> On exit, the tridiagonal matrix is stored in the diagonals | ||||
| *> and the subdiagonals of A just below (or above) the diagonals, | *> and the subdiagonals of A just below (or above) the diagonals, | ||||
| *> and L is stored below (or above) the subdiaonals, when UPLO | |||||
| *> and L is stored below (or above) the subdiagonals, when UPLO | |||||
| *> is 'L' (or 'U'). | *> is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -75,7 +75,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -651,7 +651,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL ZAXPY( N, (1.0D+0,0.0D+0), DY, 1, Y(1,J), 1 ) | CALL ZAXPY( N, (1.0D+0,0.0D+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -636,7 +636,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL ZAXPY( N, (1.0D+0,0.0D+0), DY, 1, Y(1,J), 1 ) | CALL ZAXPY( N, (1.0D+0,0.0D+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -655,7 +655,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL ZAXPY( N, DCMPLX(1.0D+0), DY, 1, Y(1,J), 1 ) | CALL ZAXPY( N, DCMPLX(1.0D+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -626,7 +626,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | IF (Y_PREC_STATE .LT. EXTRA_Y) THEN | ||||
| CALL ZAXPY( N, DCMPLX(1.0D+0), DY, 1, Y(1,J), 1 ) | CALL ZAXPY( N, DCMPLX(1.0D+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -655,7 +655,7 @@ | |||||
| PREVNORMDX = NORMDX | PREVNORMDX = NORMDX | ||||
| PREV_DZ_Z = DZ_Z | PREV_DZ_Z = DZ_Z | ||||
| * | * | ||||
| * Update soluton. | |||||
| * Update solution. | |||||
| * | * | ||||
| IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | IF ( Y_PREC_STATE .LT. EXTRA_Y ) THEN | ||||
| CALL ZAXPY( N, DCMPLX(1.0D+0), DY, 1, Y(1,J), 1 ) | CALL ZAXPY( N, DCMPLX(1.0D+0), DY, 1, Y(1,J), 1 ) | ||||
| @@ -363,7 +363,7 @@ | |||||
| RETURN | RETURN | ||||
| END IF | END IF | ||||
| * | * | ||||
| * Prepare the INDXQ sorting premutation. | |||||
| * Prepare the INDXQ sorting permutation. | |||||
| * | * | ||||
| N1 = K | N1 = K | ||||
| N2 = N - K | N2 = N - K | ||||
| @@ -89,7 +89,7 @@ | |||||
| *> Anal., 29(2006), pp. 199--227. | *> Anal., 29(2006), pp. 199--227. | ||||
| *> | *> | ||||
| *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | *> Ref: T. Steel, D. Camps, K. Meerbergen, R. Vandebril "A multishift, | ||||
| *> multipole rational QZ method with agressive early deflation" | |||||
| *> multipole rational QZ method with aggressive early deflation" | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| * Arguments: | * Arguments: | ||||
| @@ -312,7 +312,7 @@ | |||||
| CHARACTER :: JBCMPZ*3 | CHARACTER :: JBCMPZ*3 | ||||
| * External Functions | * External Functions | ||||
| EXTERNAL :: XERBLA, ZHGEQZ, ZLAQZ2, ZLAQZ3, ZLASET, DLABAD, | |||||
| EXTERNAL :: XERBLA, ZHGEQZ, ZLAQZ2, ZLAQZ3, ZLASET, | |||||
| $ ZLARTG, ZROT | $ ZLARTG, ZROT | ||||
| DOUBLE PRECISION, EXTERNAL :: DLAMCH, ZLANHS | DOUBLE PRECISION, EXTERNAL :: DLAMCH, ZLANHS | ||||
| LOGICAL, EXTERNAL :: LSAME | LOGICAL, EXTERNAL :: LSAME | ||||
| @@ -464,7 +464,6 @@ | |||||
| * Get machine constants | * Get machine constants | ||||
| SAFMIN = DLAMCH( 'SAFE MINIMUM' ) | SAFMIN = DLAMCH( 'SAFE MINIMUM' ) | ||||
| SAFMAX = ONE/SAFMIN | SAFMAX = ONE/SAFMIN | ||||
| CALL DLABAD( SAFMIN, SAFMAX ) | |||||
| ULP = DLAMCH( 'PRECISION' ) | ULP = DLAMCH( 'PRECISION' ) | ||||
| SMLNUM = SAFMIN*( DBLE( N )/ULP ) | SMLNUM = SAFMIN*( DBLE( N )/ULP ) | ||||
| @@ -535,7 +534,7 @@ | |||||
| DO WHILE ( K.GE.ISTART2 ) | DO WHILE ( K.GE.ISTART2 ) | ||||
| IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | IF( ABS( B( K, K ) ) .LT. BTOL ) THEN | ||||
| * A diagonal element of B is negligable, move it | |||||
| * A diagonal element of B is negligible, move it | |||||
| * to the top and deflate it | * to the top and deflate it | ||||
| DO K2 = K, ISTART2+1, -1 | DO K2 = K, ISTART2+1, -1 | ||||
| @@ -452,7 +452,7 @@ | |||||
| IF( LNOTIDENT ) THEN | IF( LNOTIDENT ) THEN | ||||
| * | * | ||||
| * col2_(2) Compute W2: = (V1**H) * W2 = (A1**H) * W2, | * col2_(2) Compute W2: = (V1**H) * W2 = (A1**H) * W2, | ||||
| * V1 is not an identy matrix, but unit lower-triangular | |||||
| * V1 is not an identity matrix, but unit lower-triangular | |||||
| * V1 stored in A1 (diagonal ones are not stored). | * V1 stored in A1 (diagonal ones are not stored). | ||||
| * | * | ||||
| * | * | ||||
| @@ -227,7 +227,7 @@ | |||||
| BM = RHS( J ) - CONE | BM = RHS( J ) - CONE | ||||
| SPLUS = ONE | SPLUS = ONE | ||||
| * | * | ||||
| * Lockahead for L- part RHS(1:N-1) = +-1 | |||||
| * Look-ahead for L- part RHS(1:N-1) = +-1 | |||||
| * SPLUS and SMIN computed more efficiently than in BSOLVE[1]. | * SPLUS and SMIN computed more efficiently than in BSOLVE[1]. | ||||
| * | * | ||||
| SPLUS = SPLUS + DBLE( ZDOTC( N-J, Z( J+1, J ), 1, Z( J+1, | SPLUS = SPLUS + DBLE( ZDOTC( N-J, Z( J+1, J ), 1, Z( J+1, | ||||
| @@ -577,7 +577,7 @@ | |||||
| * Prepare the linear update to be executed with GEMM. | * Prepare the linear update to be executed with GEMM. | ||||
| * For each column, compute a consistent scaling, a | * For each column, compute a consistent scaling, a | ||||
| * scaling factor to survive the linear update, and | * scaling factor to survive the linear update, and | ||||
| * rescale the column segments, if necesssary. Then | |||||
| * rescale the column segments, if necessary. Then | |||||
| * the linear update is safely executed. | * the linear update is safely executed. | ||||
| * | * | ||||
| DO KK = 1, K2 - K1 | DO KK = 1, K2 - K1 | ||||
| @@ -39,7 +39,7 @@ | |||||
| *> ZSYTRF provided on entry in parameter A into the factorization | *> ZSYTRF provided on entry in parameter A into the factorization | ||||
| *> output format used in ZSYTRF_RK (or ZSYTRF_BK) that is stored | *> output format used in ZSYTRF_RK (or ZSYTRF_BK) that is stored | ||||
| *> on exit in parameters A and E. It also converts in place details of | *> on exit in parameters A and E. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in ZSYTRF into | |||||
| *> the interchanges stored in IPIV from the format used in ZSYTRF into | |||||
| *> the format used in ZSYTRF_RK (or ZSYTRF_BK). | *> the format used in ZSYTRF_RK (or ZSYTRF_BK). | ||||
| *> | *> | ||||
| *> If parameter WAY = 'R': | *> If parameter WAY = 'R': | ||||
| @@ -48,7 +48,7 @@ | |||||
| *> (or ZSYTRF_BK) provided on entry in parameters A and E into | *> (or ZSYTRF_BK) provided on entry in parameters A and E into | ||||
| *> the factorization output format used in ZSYTRF that is stored | *> the factorization output format used in ZSYTRF that is stored | ||||
| *> on exit in parameter A. It also converts in place details of | *> on exit in parameter A. It also converts in place details of | ||||
| *> the intechanges stored in IPIV from the format used in ZSYTRF_RK | |||||
| *> the interchanges stored in IPIV from the format used in ZSYTRF_RK | |||||
| *> (or ZSYTRF_BK) into the format used in ZSYTRF. | *> (or ZSYTRF_BK) into the format used in ZSYTRF. | ||||
| *> | *> | ||||
| *> ZSYCONVF can also convert in Hermitian matrix case, i.e. between | *> ZSYCONVF can also convert in Hermitian matrix case, i.e. between | ||||
| @@ -325,7 +325,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -469,7 +469,7 @@ | |||||
| END IF | END IF | ||||
| * | * | ||||
| * Convert IPIV | * Convert IPIV | ||||
| * There is no interchnge of rows i and and IPIV(i), | |||||
| * There is no interchange of rows i and and IPIV(i), | |||||
| * so this should be reflected in IPIV format for | * so this should be reflected in IPIV format for | ||||
| * *SYTRF_RK ( or *SYTRF_BK) | * *SYTRF_RK ( or *SYTRF_BK) | ||||
| * | * | ||||
| @@ -535,7 +535,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -520,7 +520,7 @@ | |||||
| * | * | ||||
| * Revert VALUE | * Revert VALUE | ||||
| * Assign subdiagonal entries of D from array E to | * Assign subdiagonal entries of D from array E to | ||||
| * subgiagonal entries of A. | |||||
| * subdiagonal entries of A. | |||||
| * | * | ||||
| I = 1 | I = 1 | ||||
| DO WHILE ( I.LE.N-1 ) | DO WHILE ( I.LE.N-1 ) | ||||
| @@ -87,7 +87,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -74,7 +74,7 @@ | |||||
| *> | *> | ||||
| *> On exit, the tridiagonal matrix is stored in the diagonals | *> On exit, the tridiagonal matrix is stored in the diagonals | ||||
| *> and the subdiagonals of A just below (or above) the diagonals, | *> and the subdiagonals of A just below (or above) the diagonals, | ||||
| *> and L is stored below (or above) the subdiaonals, when UPLO | |||||
| *> and L is stored below (or above) the subdiagonals, when UPLO | |||||
| *> is 'L' (or 'U'). | *> is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -75,7 +75,7 @@ | |||||
| *> triangular part of the matrix A, and the strictly upper | *> triangular part of the matrix A, and the strictly upper | ||||
| *> triangular part of A is not referenced. | *> triangular part of A is not referenced. | ||||
| *> | *> | ||||
| *> On exit, L is stored below (or above) the subdiaonal blocks, | |||||
| *> On exit, L is stored below (or above) the subdiagonal blocks, | |||||
| *> when UPLO is 'L' (or 'U'). | *> when UPLO is 'L' (or 'U'). | ||||
| *> \endverbatim | *> \endverbatim | ||||
| *> | *> | ||||
| @@ -40,7 +40,7 @@ | |||||
| *> | *> | ||||
| *> The Schur form T is reordered by a unitary similarity transformation | *> The Schur form T is reordered by a unitary similarity transformation | ||||
| *> Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by | *> Z**H*T*Z, and optionally the matrix Q of Schur vectors is updated by | ||||
| *> postmultplying it with Z. | |||||
| *> postmultiplying it with Z. | |||||
| *> \endverbatim | *> \endverbatim | ||||
| * | * | ||||
| * Arguments: | * Arguments: | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> ZUNBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | *> ZUNBDB1 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> ZUNBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | *> ZUNBDB2 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -37,7 +37,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> ZUNBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | *> ZUNBDB3 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||
| @@ -38,7 +38,7 @@ | |||||
| *>\verbatim | *>\verbatim | ||||
| *> | *> | ||||
| *> ZUNBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | *> ZUNBDB4 simultaneously bidiagonalizes the blocks of a tall and skinny | ||||
| *> matrix X with orthonomal columns: | |||||
| *> matrix X with orthonormal columns: | |||||
| *> | *> | ||||
| *> [ B11 ] | *> [ B11 ] | ||||
| *> [ X11 ] [ P1 | ] [ 0 ] | *> [ X11 ] [ P1 | ] [ 0 ] | ||||