66 INTEGER LDA, LDB, LDVL, LDVR
67 parameter( lda = 50, ldb = 50, ldvl = 50, ldvr = 50 )
69 parameter( lde = 50, ldf = 50, ldwork = 50 )
70 DOUBLE PRECISION ZERO, ONE
71 parameter( zero = 0.0d+0, one = 1.0d+0 )
74 INTEGER I, IHI, ILO, INFO, J, KNT, M, N, NINFO
75 DOUBLE PRECISION ANORM, BNORM, EPS, RMAX, VMAX
79 DOUBLE PRECISION A( LDA, LDA ), AF( LDA, LDA ), B( , LDB ),
80 $ BF( LDB, LDB ), E( LDE, LDE ), F( LDF, LDF ),
81 $ LSCALE( LDA ), RSCALE( LDA ), VL( LDVL, LDVL ),
82 $ VLF( LDVL, LDVL ), VR( LDVR, LDVR ),
83 $ VRF( LDVR, LDVR ), WORK( LDWORK, LDWORK )
86 DOUBLE PRECISION DLAMCH, DLANGE
87 EXTERNAL dlamch, dlange
107 eps = dlamch(
'Precision' )
110 READ( nin, fmt = * )n, m
115 READ( nin, fmt = * )( a( i, j ), j = 1, n )
119 READ( nin, fmt = * )( b( i, j ), j = 1, n )
123 READ( nin, fmt = * )( vl( i, j ), j = 1, m )
127 READ( nin, fmt = * )( vr( i, j ), j = 1, m )
132 anorm = dlange(
'M', n, n, a, lda, work )
133 bnorm = dlange(
'M', n, n, b, ldb, work )
135 CALL dlacpy(
'FULL', n, n, a, lda, af, lda )
136 CALL dlacpy(
'FULL', n, n, b, ldb, bf, ldb )
138 CALL dggbal(
'B', n, a, lda, b, ldb, ilo, ihi, lscale, rscale,
145 CALL dlacpy(
'FULL', n, m, vl, ldvl, vlf, ldvl )
146 CALL dlacpy(
'FULL', n, m, vr, ldvr, vrf, ldvr )
148 CALL dggbak(
'B', 'l
', N, ILO, IHI, LSCALE, RSCALE, M, VL, LDVL,
155 CALL DGGBAK( 'b
', 'r
', N, ILO, IHI, LSCALE, RSCALE, M, VR, LDVR,
167 CALL DGEMM( 'n
', 'n
', N, M, N, ONE, AF, LDA, VR, LDVR, ZERO, WORK,
169 CALL DGEMM( 't
', 'n
', M, M, N, ONE, VL, LDVL, WORK, LDWORK, ZERO,
172 CALL DGEMM( 'n
', 'n
', N, M, N, ONE, A, LDA, VRF, LDVR, ZERO, WORK,
174 CALL DGEMM( 't
', 'n
', M, M, N, ONE, VLF, LDVL, WORK, LDWORK, ZERO,
180 VMAX = MAX( VMAX, ABS( E( I, J )-F( I, J ) ) )
183 VMAX = VMAX / ( EPS*MAX( ANORM, BNORM ) )
184.GT.
IF( VMAXRMAX ) THEN
191 CALL DGEMM( 'n
', 'n
', N, M, N, ONE, BF, LDB, VR, LDVR, ZERO, WORK,
193 CALL DGEMM( 't
', 'n
', M, M, N, ONE, VL, LDVL, WORK, LDWORK, ZERO,
196 CALL DGEMM( 'n
', 'n
', N, M, N, ONE, B, LDB, VRF, LDVR, ZERO, WORK,
198 CALL DGEMM( 't
', 'n
', M, M, N, ONE, VLF, LDVL, WORK, LDWORK, ZERO,
204 VMAX = MAX( VMAX, ABS( E( I, J )-F( I, J ) ) )
207 VMAX = VMAX / ( EPS*MAX( ANORM, BNORM ) )
208.GT.
IF( VMAXRMAX ) THEN
217 WRITE( NOUT, FMT = 9999 )
218 9999 FORMAT( 1X, '.. test output of
dggbak ..
' )
220 WRITE( NOUT, FMT = 9998 )RMAX
221 9998 FORMAT( ' value of largest test error =
', D12.3 )
222 WRITE( NOUT, FMT = 9997 )LMAX( 1 )
223 9997 FORMAT( ' example number
where dggbal info is not 0 =
', I4 )
224 WRITE( NOUT, FMT = 9996 )LMAX( 2 )
225 9996 FORMAT( ' example number
where dggbak(l) info is not 0 =
', I4 )
226 WRITE( NOUT, FMT = 9995 )LMAX( 3 )
227 9995 FORMAT( ' example number
where dggbak(r) info is not 0 =
', I4 )
228 WRITE( NOUT, FMT = 9994 )LMAX( 4 )
229 9994 FORMAT( ' example number having largest error =
', I4 )
230 WRITE( NOUT, FMT = 9993 )NINFO
231 9993 FORMAT( ' number of examples
where info is not 0 =
', I4 )
232 WRITE( NOUT, FMT = 9992 )KNT
233 9992 FORMAT( ' total number of examples tested =
', I4 )
subroutine dggbal(job, n, a, lda, b, ldb, ilo, ihi, lscale, rscale, work, info)
DGGBAL
subroutine dggbak(job, side, n, ilo, ihi, lscale, rscale, m, v, ldv, info)
DGGBAK
subroutine dgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
DGEMM