160 SUBROUTINE zget52( LEFT, N, A, LDA, B, LDB, E, LDE, ALPHA, BETA,
161 $ WORK, RWORK, RESULT )
169 INTEGER LDA, LDB, LDE, N
172 DOUBLE PRECISION RESULT( 2 ), RWORK( * )
173 COMPLEX*16 A( , * ), ALPHA( * ), B( LDB, * ),
174 $ beta( * ), e( lde, * ), work( * )
180 DOUBLE PRECISION ZERO, ONE
181 parameter( zero = 0.0d+0, one = 1.0d+0 )
182 COMPLEX*16 CZERO, CONE
183 parameter( czero = ( 0.0d+0, 0.0d+0 ),
184 $ cone = ( 1.0d+0, 0.0d+0 ) )
187 CHARACTER NORMAB, TRANS
189 DOUBLE PRECISION ABMAX, ALFMAX, ANORM, BETMAX, BNORM, ENORM,
190 $ enrmer, errnrm, safmax, safmin, scale, temp1,
192 COMPLEX*16 ACOEFF, ALPHAI, BCOEFF, , X
195 DOUBLE PRECISION DLAMCH, ZLANGE
196 EXTERNAL dlamch, zlange
202 INTRINSIC abs, dble, dconjg, dimag,
max
205 DOUBLE PRECISION ABS1
208 abs1( x ) = abs( dble( x ) ) + abs( dimag( x ) )
217 safmin = dlamch(
'Safe minimum' )
218 safmax = one / safmin
219 ulp = dlamch(
'Epsilon' )*dlamch(
'Base' )
231 ANORM = MAX( ZLANGE( NORMAB, N, N, A, LDA, RWORK ), SAFMIN )
232 BNORM = MAX( ZLANGE( NORMAB, N, N, B, LDB, RWORK ), SAFMIN )
233 ENORM = MAX( ZLANGE( 'o
', N, N, E, LDE, RWORK ), ULP )
234 ALFMAX = SAFMAX / MAX( ONE, BNORM )
235 BETMAX = SAFMAX / MAX( ONE, ANORM )
241 ALPHAI = ALPHA( JVEC )
243 ABMAX = MAX( ABS1( ALPHAI ), ABS1( BETAI ) )
244.GT..OR..GT..OR.
IF( ABS1( ALPHAI )ALFMAX ABS1( BETAI )BETMAX
245.LT.
$ ABMAXONE ) THEN
246 SCALE = ONE / MAX( ABMAX, SAFMIN )
247 ALPHAI = SCALE*ALPHAI
250 SCALE = ONE / MAX( ABS1( ALPHAI )*BNORM, ABS1( BETAI )*ANORM,
253 BCOEFF = SCALE*ALPHAI
255 ACOEFF = DCONJG( ACOEFF )
256 BCOEFF = DCONJG( BCOEFF )
258 CALL ZGEMV( TRANS, N, N, ACOEFF, A, LDA, E( 1, JVEC ), 1,
259 $ CZERO, WORK( N*( JVEC-1 )+1 ), 1 )
260 CALL ZGEMV( TRANS, N, N, -BCOEFF, B, LDA, E( 1, JVEC ), 1,
261 $ CONE, WORK( N*( JVEC-1 )+1 ), 1 )
264 ERRNRM = ZLANGE( 'one
', N, N, WORK, N, RWORK ) / ENORM
268 RESULT( 1 ) = ERRNRM / ULP
276 TEMP1 = MAX( TEMP1, ABS1( E( J, JVEC ) ) )
278 ENRMER = MAX( ENRMER, ABS( TEMP1-ONE ) )
283 RESULT( 2 ) = ENRMER / ( DBLE( N )*ULP )
subroutine zgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
ZGEMV
subroutine zget52(left, n, a, lda, b, ldb, e, lde, alpha, beta, work, rwork, result)
ZGET52