LAPACK  3.8.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.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
December 2016

Definition at line 154 of file csgt01.f.

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