107 RECURSIVE SUBROUTINE zpotrf2( UPLO, N, A, LDA, INFO )
119 COMPLEX*16 A( lda, * )
125 DOUBLE PRECISION ONE, ZERO
126 parameter ( one = 1.0d+0, zero = 0.0d+0 )
128 parameter ( cone = (1.0d+0, 0.0d+0) )
132 INTEGER N1, N2, IINFO
136 LOGICAL LSAME, DISNAN
137 EXTERNAL lsame, disnan
143 INTRINSIC max, dble, sqrt
150 upper = lsame( uplo,
'U' )
151 IF( .NOT.upper .AND. .NOT.lsame( uplo,
'L' ) )
THEN
153 ELSE IF( n.LT.0 )
THEN
155 ELSE IF( lda.LT.max( 1, n ) )
THEN
159 CALL xerbla(
'ZPOTRF2', -info )
174 ajj = dble( a( 1, 1 ) )
175 IF( ajj.LE.zero.OR.disnan( ajj ) )
THEN
182 a( 1, 1 ) = sqrt( ajj )
192 CALL zpotrf2( uplo, n1, a( 1, 1 ), lda, iinfo )
193 IF ( iinfo.NE.0 )
THEN
204 CALL ztrsm(
'L',
'U',
'C',
'N', n1, n2, cone,
205 $ a( 1, 1 ), lda, a( 1, n1+1 ), lda )
209 CALL zherk( uplo,
'C', n2, n1, -one, a( 1, n1+1 ), lda,
210 $ one, a( n1+1, n1+1 ), lda )
211 CALL zpotrf2( uplo, n2, a( n1+1, n1+1 ), lda, iinfo )
212 IF ( iinfo.NE.0 )
THEN
223 CALL ztrsm(
'R',
'L',
'C',
'N', n2, n1, cone,
224 $ a( 1, 1 ), lda, a( n1+1, 1 ), lda )
228 CALL zherk( uplo,
'N', n2, n1, -one, a( n1+1, 1 ), lda,
229 $ one, a( n1+1, n1+1 ), lda )
230 CALL zpotrf2( uplo, n2, a( n1+1, n1+1 ), lda, iinfo )
231 IF ( iinfo.NE.0 )
THEN
recursive subroutine zpotrf2(UPLO, N, A, LDA, INFO)
ZPOTRF2
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zherk(UPLO, TRANS, N, K, ALPHA, A, LDA, BETA, C, LDC)
ZHERK
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM