 LAPACK  3.8.0 LAPACK: Linear Algebra PACKage

## ◆ zhesv()

 subroutine zhesv ( character UPLO, integer N, integer NRHS, complex*16, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, complex*16, dimension( ldb, * ) B, integer LDB, complex*16, dimension( * ) WORK, integer LWORK, integer INFO )

ZHESV computes the solution to system of linear equations A * X = B for HE matrices

Purpose:
``` ZHESV computes the solution to a complex system of linear equations
A * X = B,
where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS
matrices.

The diagonal pivoting method is used to factor A as
A = U * D * U**H,  if UPLO = 'U', or
A = L * D * L**H,  if UPLO = 'L',
where U (or L) is a product of permutation and unit upper (lower)
triangular matrices, and D is Hermitian and block diagonal with
1-by-1 and 2-by-2 diagonal blocks.  The factored form of A is then
used to solve the system of equations A * X = B.```
Parameters
 [in] UPLO ``` UPLO is CHARACTER*1 = 'U': Upper triangle of A is stored; = 'L': Lower triangle of A is stored.``` [in] N ``` N is INTEGER The number of linear equations, i.e., the order of the matrix A. N >= 0.``` [in] NRHS ``` NRHS is INTEGER The number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0.``` [in,out] A ``` A is COMPLEX*16 array, dimension (LDA,N) On entry, the Hermitian matrix A. If UPLO = 'U', the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, if INFO = 0, the block diagonal matrix D and the multipliers used to obtain the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H as computed by ZHETRF.``` [in] LDA ``` LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N).``` [out] IPIV ``` IPIV is INTEGER array, dimension (N) Details of the interchanges and the block structure of D, as determined by ZHETRF. If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged, and D(k,k) is a 1-by-1 diagonal block. If UPLO = 'U' and IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block. If UPLO = 'L' and IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.``` [in,out] B ``` B is COMPLEX*16 array, dimension (LDB,NRHS) On entry, the N-by-NRHS right hand side matrix B. On exit, if INFO = 0, the N-by-NRHS solution matrix X.``` [in] LDB ``` LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N).``` [out] WORK ``` WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)) On exit, if INFO = 0, WORK(1) returns the optimal LWORK.``` [in] LWORK ``` LWORK is INTEGER The length of WORK. LWORK >= 1, and for best performance LWORK >= max(1,N*NB), where NB is the optimal blocksize for ZHETRF. for LWORK < N, TRS will be done with Level BLAS 2 for LWORK >= N, TRS will be done with Level BLAS 3 If LWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and no error message related to LWORK is issued by XERBLA.``` [out] INFO ``` INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value > 0: if INFO = i, D(i,i) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, so the solution could not be computed.```
Date
December 2016

Definition at line 173 of file zhesv.f.

173 *
174 * -- LAPACK driver routine (version 3.7.0) --
175 * -- LAPACK is a software package provided by Univ. of Tennessee, --
176 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
177 * December 2016
178 *
179 * .. Scalar Arguments ..
180  CHARACTER uplo
181  INTEGER info, lda, ldb, lwork, n, nrhs
182 * ..
183 * .. Array Arguments ..
184  INTEGER ipiv( * )
185  COMPLEX*16 a( lda, * ), b( ldb, * ), work( * )
186 * ..
187 *
188 * =====================================================================
189 *
190 * .. Local Scalars ..
191  LOGICAL lquery
192  INTEGER lwkopt, nb
193 * ..
194 * .. External Functions ..
195  LOGICAL lsame
196  INTEGER ilaenv
197  EXTERNAL lsame, ilaenv
198 * ..
199 * .. External Subroutines ..
200  EXTERNAL xerbla, zhetrf, zhetrs, zhetrs2
201 * ..
202 * .. Intrinsic Functions ..
203  INTRINSIC max
204 * ..
205 * .. Executable Statements ..
206 *
207 * Test the input parameters.
208 *
209  info = 0
210  lquery = ( lwork.EQ.-1 )
211  IF( .NOT.lsame( uplo, 'U' ) .AND. .NOT.lsame( uplo, 'L' ) ) THEN
212  info = -1
213  ELSE IF( n.LT.0 ) THEN
214  info = -2
215  ELSE IF( nrhs.LT.0 ) THEN
216  info = -3
217  ELSE IF( lda.LT.max( 1, n ) ) THEN
218  info = -5
219  ELSE IF( ldb.LT.max( 1, n ) ) THEN
220  info = -8
221  ELSE IF( lwork.LT.1 .AND. .NOT.lquery ) THEN
222  info = -10
223  END IF
224 *
225  IF( info.EQ.0 ) THEN
226  IF( n.EQ.0 ) THEN
227  lwkopt = 1
228  ELSE
229  nb = ilaenv( 1, 'ZHETRF', uplo, n, -1, -1, -1 )
230  lwkopt = n*nb
231  END IF
232  work( 1 ) = lwkopt
233  END IF
234 *
235  IF( info.NE.0 ) THEN
236  CALL xerbla( 'ZHESV ', -info )
237  RETURN
238  ELSE IF( lquery ) THEN
239  RETURN
240  END IF
241 *
242 * Compute the factorization A = U*D*U**H or A = L*D*L**H.
243 *
244  CALL zhetrf( uplo, n, a, lda, ipiv, work, lwork, info )
245  IF( info.EQ.0 ) THEN
246 *
247 * Solve the system A*X = B, overwriting B with X.
248 *
249  IF ( lwork.LT.n ) THEN
250 *
251 * Solve with TRS ( Use Level BLAS 2)
252 *
253  CALL zhetrs( uplo, n, nrhs, a, lda, ipiv, b, ldb, info )
254 *
255  ELSE
256 *
257 * Solve with TRS2 ( Use Level BLAS 3)
258 *
259  CALL zhetrs2( uplo,n,nrhs,a,lda,ipiv,b,ldb,work,info )
260 *
261  END IF
262 *
263  END IF
264 *
265  work( 1 ) = lwkopt
266 *
267  RETURN
268 *
269 * End of ZHESV
270 *
subroutine zhetrs(UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
ZHETRS
Definition: zhetrs.f:122
integer function ilaenv(ISPEC, NAME, OPTS, N1, N2, N3, N4)
ILAENV
Definition: tstiee.f:83
subroutine xerbla(SRNAME, INFO)
XERBLA
Definition: xerbla.f:62
logical function lsame(CA, CB)
LSAME
Definition: lsame.f:55
subroutine zhetrf(UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
ZHETRF
Definition: zhetrf.f:179
subroutine zhetrs2(UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, INFO)
ZHETRS2
Definition: zhetrs2.f:129
Here is the call graph for this function:
Here is the caller graph for this function: