 LAPACK  3.10.0 LAPACK: Linear Algebra PACKage

◆ csgt01()

 subroutine csgt01 ( integer ITYPE, character UPLO, integer N, integer M, complex, dimension( lda, * ) A, integer LDA, complex, dimension( ldb, * ) B, integer LDB, complex, dimension( ldz, * ) Z, integer LDZ, real, dimension( * ) D, complex, dimension( * ) WORK, real, dimension( * ) RWORK, real, dimension( * ) RESULT )

CSGT01

Purpose:
CSGT01 checks a decomposition of the form

A Z   =  B Z D or
A B Z =  Z D or
B A Z =  Z D

where A is a Hermitian matrix, B is Hermitian positive definite,
Z is unitary, and D is diagonal.

One of the following test ratios is computed:

ITYPE = 1:  RESULT(1) = | A Z - B Z D | / ( |A| |Z| n ulp )

ITYPE = 2:  RESULT(1) = | A B Z - Z D | / ( |A| |Z| n ulp )

ITYPE = 3:  RESULT(1) = | B A Z - Z D | / ( |A| |Z| n ulp )
Parameters
 [in] ITYPE ITYPE is INTEGER The form of the Hermitian generalized eigenproblem. = 1: A*z = (lambda)*B*z = 2: A*B*z = (lambda)*z = 3: B*A*z = (lambda)*z [in] UPLO UPLO is CHARACTER*1 Specifies whether the upper or lower triangular part of the Hermitian matrices A and B is stored. = 'U': Upper triangular = 'L': Lower triangular [in] N N is INTEGER The order of the matrix A. N >= 0. [in] M M is INTEGER The number of eigenvalues found. M >= 0. [in] A A is COMPLEX array, dimension (LDA, N) The original Hermitian matrix A. [in] LDA LDA is INTEGER The leading dimension of the array A. LDA >= max(1,N). [in] B B is COMPLEX array, dimension (LDB, N) The original Hermitian positive definite matrix B. [in] LDB LDB is INTEGER The leading dimension of the array B. LDB >= max(1,N). [in] Z Z is COMPLEX array, dimension (LDZ, M) The computed eigenvectors of the generalized eigenproblem. [in] LDZ LDZ is INTEGER The leading dimension of the array Z. LDZ >= max(1,N). [in] D D is REAL array, dimension (M) The computed eigenvalues of the generalized eigenproblem. [out] WORK WORK is COMPLEX array, dimension (N*N) [out] RWORK RWORK is REAL array, dimension (N) [out] RESULT RESULT is REAL array, dimension (1) The test ratio as described above.

Definition at line 150 of file csgt01.f.

152 *
153 * -- LAPACK test routine --
154 * -- LAPACK is a software package provided by Univ. of Tennessee, --
155 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
156 *
157 * .. Scalar Arguments ..
158  CHARACTER UPLO
159  INTEGER ITYPE, LDA, LDB, LDZ, M, N
160 * ..
161 * .. Array Arguments ..
162  REAL D( * ), RESULT( * ), RWORK( * )
163  COMPLEX A( LDA, * ), B( LDB, * ), WORK( * ),
164  \$ Z( LDZ, * )
165 * ..
166 *
167 * =====================================================================
168 *
169 * .. Parameters ..
170  REAL ZERO, ONE
171  parameter( zero = 0.0e+0, one = 1.0e+0 )
172  COMPLEX CZERO, CONE
173  parameter( czero = ( 0.0e+0, 0.0e+0 ),
174  \$ cone = ( 1.0e+0, 0.0e+0 ) )
175 * ..
176 * .. Local Scalars ..
177  INTEGER I
178  REAL ANORM, ULP
179 * ..
180 * .. External Functions ..
181  REAL CLANGE, CLANHE, SLAMCH
182  EXTERNAL clange, clanhe, slamch
183 * ..
184 * .. External Subroutines ..
185  EXTERNAL chemm, csscal
186 * ..
187 * .. Executable Statements ..
188 *
189  result( 1 ) = zero
190  IF( n.LE.0 )
191  \$ RETURN
192 *
193  ulp = slamch( 'Epsilon' )
194 *
195 * Compute product of 1-norms of A and Z.
196 *
197  anorm = clanhe( '1', uplo, n, a, lda, rwork )*
198  \$ clange( '1', n, m, z, ldz, rwork )
199  IF( anorm.EQ.zero )
200  \$ anorm = one
201 *
202  IF( itype.EQ.1 ) THEN
203 *
204 * Norm of AZ - BZD
205 *
206  CALL chemm( 'Left', uplo, n, m, cone, a, lda, z, ldz, czero,
207  \$ work, n )
208  DO 10 i = 1, m
209  CALL csscal( n, d( i ), z( 1, i ), 1 )
210  10 CONTINUE
211  CALL chemm( 'Left', uplo, n, m, cone, b, ldb, z, ldz, -cone,
212  \$ work, n )
213 *
214  result( 1 ) = ( clange( '1', n, m, work, n, rwork ) / anorm ) /
215  \$ ( n*ulp )
216 *
217  ELSE IF( itype.EQ.2 ) THEN
218 *
219 * Norm of ABZ - ZD
220 *
221  CALL chemm( 'Left', uplo, n, m, cone, b, ldb, z, ldz, czero,
222  \$ work, n )
223  DO 20 i = 1, m
224  CALL csscal( n, d( i ), z( 1, i ), 1 )
225  20 CONTINUE
226  CALL chemm( 'Left', uplo, n, m, cone, a, lda, work, n, -cone,
227  \$ z, ldz )
228 *
229  result( 1 ) = ( clange( '1', n, m, z, ldz, rwork ) / anorm ) /
230  \$ ( n*ulp )
231 *
232  ELSE IF( itype.EQ.3 ) THEN
233 *
234 * Norm of BAZ - ZD
235 *
236  CALL chemm( 'Left', uplo, n, m, cone, a, lda, z, ldz, czero,
237  \$ work, n )
238  DO 30 i = 1, m
239  CALL csscal( n, d( i ), z( 1, i ), 1 )
240  30 CONTINUE
241  CALL chemm( 'Left', uplo, n, m, cone, b, ldb, work, n, -cone,
242  \$ z, ldz )
243 *
244  result( 1 ) = ( clange( '1', n, m, z, ldz, rwork ) / anorm ) /
245  \$ ( n*ulp )
246  END IF
247 *
248  RETURN
249 *
250 * End of CSGT01
251 *
subroutine csscal(N, SA, CX, INCX)
CSSCAL
Definition: csscal.f:78
subroutine chemm(SIDE, UPLO, M, N, ALPHA, A, LDA, B, LDB, BETA, C, LDC)
CHEMM
Definition: chemm.f:191
real function clange(NORM, M, N, A, LDA, WORK)
CLANGE returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value ...
Definition: clange.f:115
real function clanhe(NORM, UPLO, N, A, LDA, WORK)
CLANHE returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...
Definition: clanhe.f:124
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:68
Here is the call graph for this function:
Here is the caller graph for this function: