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
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