Annotation of rpl/lapack/lapack/zhetrs_aa_2stage.f, revision 1.1
1.1 ! bertrand 1: *> \brief \b ZHETRS_AA_2STAGE
! 2: *
! 3: * @generated from SRC/dsytrs_aa_2stage.f, fortran d -> c, Mon Oct 30 11:59:02 2017
! 4: *
! 5: * =========== DOCUMENTATION ===========
! 6: *
! 7: * Online html documentation available at
! 8: * http://www.netlib.org/lapack/explore-html/
! 9: *
! 10: *> \htmlonly
! 11: *> Download ZHETRS_AA_2STAGE + dependencies
! 12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zhetrs_aa_2stage.f">
! 13: *> [TGZ]</a>
! 14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zhetrs_aa_2stage.f">
! 15: *> [ZIP]</a>
! 16: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zhetrs_aa_2stage.f">
! 17: *> [TXT]</a>
! 18: *> \endhtmlonly
! 19: *
! 20: * Definition:
! 21: * ===========
! 22: *
! 23: * SUBROUTINE ZHETRS_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB, IPIV,
! 24: * IPIV2, B, LDB, INFO )
! 25: *
! 26: * .. Scalar Arguments ..
! 27: * CHARACTER UPLO
! 28: * INTEGER N, NRHS, LDA, LTB, LDB, INFO
! 29: * ..
! 30: * .. Array Arguments ..
! 31: * INTEGER IPIV( * ), IPIV2( * )
! 32: * COMPLEX*16 A( LDA, * ), TB( * ), B( LDB, * )
! 33: * ..
! 34: *
! 35: *> \par Purpose:
! 36: * =============
! 37: *>
! 38: *> \verbatim
! 39: *>
! 40: *> ZHETRS_AA_2STAGE solves a system of linear equations A*X = B with a
! 41: *> hermitian matrix A using the factorization A = U*T*U**T or
! 42: *> A = L*T*L**T computed by ZHETRF_AA_2STAGE.
! 43: *> \endverbatim
! 44: *
! 45: * Arguments:
! 46: * ==========
! 47: *
! 48: *> \param[in] UPLO
! 49: *> \verbatim
! 50: *> UPLO is CHARACTER*1
! 51: *> Specifies whether the details of the factorization are stored
! 52: *> as an upper or lower triangular matrix.
! 53: *> = 'U': Upper triangular, form is A = U*T*U**T;
! 54: *> = 'L': Lower triangular, form is A = L*T*L**T.
! 55: *> \endverbatim
! 56: *>
! 57: *> \param[in] N
! 58: *> \verbatim
! 59: *> N is INTEGER
! 60: *> The order of the matrix A. N >= 0.
! 61: *> \endverbatim
! 62: *>
! 63: *> \param[in] NRHS
! 64: *> \verbatim
! 65: *> NRHS is INTEGER
! 66: *> The number of right hand sides, i.e., the number of columns
! 67: *> of the matrix B. NRHS >= 0.
! 68: *> \endverbatim
! 69: *>
! 70: *> \param[in] A
! 71: *> \verbatim
! 72: *> A is COMPLEX*16array, dimension (LDA,N)
! 73: *> Details of factors computed by ZHETRF_AA_2STAGE.
! 74: *> \endverbatim
! 75: *>
! 76: *> \param[in] LDA
! 77: *> \verbatim
! 78: *> LDA is INTEGER
! 79: *> The leading dimension of the array A. LDA >= max(1,N).
! 80: *> \endverbatim
! 81: *>
! 82: *> \param[out] TB
! 83: *> \verbatim
! 84: *> TB is COMPLEX*16array, dimension (LTB)
! 85: *> Details of factors computed by ZHETRF_AA_2STAGE.
! 86: *> \endverbatim
! 87: *>
! 88: *> \param[in] LTB
! 89: *> \verbatim
! 90: *> The size of the array TB. LTB >= 4*N.
! 91: *> \endverbatim
! 92: *>
! 93: *> \param[in] IPIV
! 94: *> \verbatim
! 95: *> IPIV is INTEGER array, dimension (N)
! 96: *> Details of the interchanges as computed by
! 97: *> ZHETRF_AA_2STAGE.
! 98: *> \endverbatim
! 99: *>
! 100: *> \param[in] IPIV2
! 101: *> \verbatim
! 102: *> IPIV2 is INTEGER array, dimension (N)
! 103: *> Details of the interchanges as computed by
! 104: *> ZHETRF_AA_2STAGE.
! 105: *> \endverbatim
! 106: *>
! 107: *> \param[in,out] B
! 108: *> \verbatim
! 109: *> B is COMPLEX*16array, dimension (LDB,NRHS)
! 110: *> On entry, the right hand side matrix B.
! 111: *> On exit, the solution matrix X.
! 112: *> \endverbatim
! 113: *>
! 114: *> \param[in] LDB
! 115: *> \verbatim
! 116: *> LDB is INTEGER
! 117: *> The leading dimension of the array B. LDB >= max(1,N).
! 118: *> \endverbatim
! 119: *>
! 120: *> \param[out] INFO
! 121: *> \verbatim
! 122: *> INFO is INTEGER
! 123: *> = 0: successful exit
! 124: *> < 0: if INFO = -i, the i-th argument had an illegal value
! 125: *> \endverbatim
! 126: *
! 127: * Authors:
! 128: * ========
! 129: *
! 130: *> \author Univ. of Tennessee
! 131: *> \author Univ. of California Berkeley
! 132: *> \author Univ. of Colorado Denver
! 133: *> \author NAG Ltd.
! 134: *
! 135: *> \date November 2017
! 136: *
! 137: *> \ingroup complex16SYcomputational
! 138: *
! 139: * =====================================================================
! 140: SUBROUTINE ZHETRS_AA_2STAGE( UPLO, N, NRHS, A, LDA, TB, LTB,
! 141: $ IPIV, IPIV2, B, LDB, INFO )
! 142: *
! 143: * -- LAPACK computational routine (version 3.8.0) --
! 144: * -- LAPACK is a software package provided by Univ. of Tennessee, --
! 145: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
! 146: * November 2017
! 147: *
! 148: IMPLICIT NONE
! 149: *
! 150: * .. Scalar Arguments ..
! 151: CHARACTER UPLO
! 152: INTEGER N, NRHS, LDA, LTB, LDB, INFO
! 153: * ..
! 154: * .. Array Arguments ..
! 155: INTEGER IPIV( * ), IPIV2( * )
! 156: COMPLEX*16 A( LDA, * ), TB( * ), B( LDB, * )
! 157: * ..
! 158: *
! 159: * =====================================================================
! 160: *
! 161: COMPLEX*16 ONE
! 162: PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ) )
! 163: * ..
! 164: * .. Local Scalars ..
! 165: INTEGER LDTB, NB
! 166: LOGICAL UPPER
! 167: * ..
! 168: * .. External Functions ..
! 169: LOGICAL LSAME
! 170: EXTERNAL LSAME
! 171: * ..
! 172: * .. External Subroutines ..
! 173: EXTERNAL ZGBTRS, ZLASWP, ZTRSM, XERBLA
! 174: * ..
! 175: * .. Intrinsic Functions ..
! 176: INTRINSIC MAX
! 177: * ..
! 178: * .. Executable Statements ..
! 179: *
! 180: INFO = 0
! 181: UPPER = LSAME( UPLO, 'U' )
! 182: IF( .NOT.UPPER .AND. .NOT.LSAME( UPLO, 'L' ) ) THEN
! 183: INFO = -1
! 184: ELSE IF( N.LT.0 ) THEN
! 185: INFO = -2
! 186: ELSE IF( NRHS.LT.0 ) THEN
! 187: INFO = -3
! 188: ELSE IF( LDA.LT.MAX( 1, N ) ) THEN
! 189: INFO = -5
! 190: ELSE IF( LTB.LT.( 4*N ) ) THEN
! 191: INFO = -7
! 192: ELSE IF( LDB.LT.MAX( 1, N ) ) THEN
! 193: INFO = -11
! 194: END IF
! 195: IF( INFO.NE.0 ) THEN
! 196: CALL XERBLA( 'ZHETRS_AA_2STAGE', -INFO )
! 197: RETURN
! 198: END IF
! 199: *
! 200: * Quick return if possible
! 201: *
! 202: IF( N.EQ.0 .OR. NRHS.EQ.0 )
! 203: $ RETURN
! 204: *
! 205: * Read NB and compute LDTB
! 206: *
! 207: NB = INT( TB( 1 ) )
! 208: LDTB = LTB/N
! 209: *
! 210: IF( UPPER ) THEN
! 211: *
! 212: * Solve A*X = B, where A = U*T*U**T.
! 213: *
! 214: IF( N.GT.NB ) THEN
! 215: *
! 216: * Pivot, P**T * B
! 217: *
! 218: CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, 1 )
! 219: *
! 220: * Compute (U**T \P**T * B) -> B [ (U**T \P**T * B) ]
! 221: *
! 222: CALL ZTRSM( 'L', 'U', 'C', 'U', N-NB, NRHS, ONE, A(1, NB+1),
! 223: $ LDA, B(NB+1, 1), LDB)
! 224: *
! 225: END IF
! 226: *
! 227: * Compute T \ B -> B [ T \ (U**T \P**T * B) ]
! 228: *
! 229: CALL ZGBTRS( 'N', N, NB, NB, NRHS, TB, LDTB, IPIV2, B, LDB,
! 230: $ INFO)
! 231: IF( N.GT.NB ) THEN
! 232: *
! 233: * Compute (U \ B) -> B [ U \ (T \ (U**T \P**T * B) ) ]
! 234: *
! 235: CALL ZTRSM( 'L', 'U', 'N', 'U', N-NB, NRHS, ONE, A(1, NB+1),
! 236: $ LDA, B(NB+1, 1), LDB)
! 237: *
! 238: * Pivot, P * B [ P * (U \ (T \ (U**T \P**T * B) )) ]
! 239: *
! 240: CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, -1 )
! 241: *
! 242: END IF
! 243: *
! 244: ELSE
! 245: *
! 246: * Solve A*X = B, where A = L*T*L**T.
! 247: *
! 248: IF( N.GT.NB ) THEN
! 249: *
! 250: * Pivot, P**T * B
! 251: *
! 252: CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, 1 )
! 253: *
! 254: * Compute (L \P**T * B) -> B [ (L \P**T * B) ]
! 255: *
! 256: CALL ZTRSM( 'L', 'L', 'N', 'U', N-NB, NRHS, ONE, A(NB+1, 1),
! 257: $ LDA, B(NB+1, 1), LDB)
! 258: *
! 259: END IF
! 260: *
! 261: * Compute T \ B -> B [ T \ (L \P**T * B) ]
! 262: *
! 263: CALL ZGBTRS( 'N', N, NB, NB, NRHS, TB, LDTB, IPIV2, B, LDB,
! 264: $ INFO)
! 265: IF( N.GT.NB ) THEN
! 266: *
! 267: * Compute (L**T \ B) -> B [ L**T \ (T \ (L \P**T * B) ) ]
! 268: *
! 269: CALL ZTRSM( 'L', 'L', 'C', 'U', N-NB, NRHS, ONE, A(NB+1, 1),
! 270: $ LDA, B(NB+1, 1), LDB)
! 271: *
! 272: * Pivot, P * B [ P * (L**T \ (T \ (L \P**T * B) )) ]
! 273: *
! 274: CALL ZLASWP( NRHS, B, LDB, NB+1, N, IPIV, -1 )
! 275: *
! 276: END IF
! 277: END IF
! 278: *
! 279: RETURN
! 280: *
! 281: * End of ZHETRS_AA_2STAGE
! 282: *
! 283: END
CVSweb interface <joel.bertrand@systella.fr>