68 parameter( maxin = 12 )
70 parameter( nmax = 50 )
72 parameter( maxrhs = 16 )
74 parameter( ntypes = 9 )
76 parameter( nin = 5, nout = 6 )
80 INTEGER vers_major, vers_minor, vers_patch
81 INTEGER i, nn, nns, nnt
82 DOUBLE PRECISION eps, s1, s2, thresh
86 INTEGER nval( maxin ), nsval( maxin ), ntval( ntypes )
87 DOUBLE PRECISION worka( nmax, nmax )
88 DOUBLE PRECISION workasav( nmax, nmax )
89 DOUBLE PRECISION workb( nmax, maxrhs )
90 DOUBLE PRECISION workxact( nmax, maxrhs )
91 DOUBLE PRECISION workbsav( nmax, maxrhs )
92 DOUBLE PRECISION workx( nmax, maxrhs )
93 DOUBLE PRECISION workafac( nmax, nmax )
94 DOUBLE PRECISION workainv( nmax, nmax )
95 DOUBLE PRECISION workarf( (nmax*(nmax+1))/2 )
96 DOUBLE PRECISION workap( (nmax*(nmax+1))/2 )
97 DOUBLE PRECISION workarfinv( (nmax*(nmax+1))/2 )
98 DOUBLE PRECISION d_work_dlatms( 3 * nmax )
99 DOUBLE PRECISION d_work_dpot01( nmax )
100 DOUBLE PRECISION d_temp_dpot02( nmax, maxrhs )
101 DOUBLE PRECISION d_temp_dpot03( nmax, nmax )
102 DOUBLE PRECISION d_work_dlansy( nmax )
103 DOUBLE PRECISION d_work_dpot02( nmax )
104 DOUBLE PRECISION d_work_dpot03( nmax )
125 CALL ilaver( vers_major, vers_minor, vers_patch )
126 WRITE( nout, fmt = 9994 ) vers_major, vers_minor, vers_patch
130 READ( nin, fmt = * )nn
132 WRITE( nout, fmt = 9996 )
' NN ', nn, 1
135 ELSE IF( nn.GT.maxin )
THEN
136 WRITE( nout, fmt = 9995 )
' NN ', nn, maxin
140 READ( nin, fmt = * )( nval( i ), i = 1, nn )
142 IF( nval( i ).LT.0 )
THEN
143 WRITE( nout, fmt = 9996 )
' M ', nval( i ), 0
145 ELSE IF( nval( i ).GT.nmax )
THEN
146 WRITE( nout, fmt = 9995 )
' M ', nval( i ), nmax
151 $
WRITE( nout, fmt = 9993 )
'N ', ( nval( i ), i = 1, nn )
155 READ( nin, fmt = * )nns
157 WRITE( nout, fmt = 9996 )
' NNS', nns, 1
160 ELSE IF( nns.GT.maxin )
THEN
161 WRITE( nout, fmt = 9995 )
' NNS', nns, maxin
165 READ( nin, fmt = * )( nsval( i ), i = 1, nns )
167 IF( nsval( i ).LT.0 )
THEN
168 WRITE( nout, fmt = 9996 )
'NRHS', nsval( i ), 0
170 ELSE IF( nsval( i ).GT.maxrhs )
THEN
171 WRITE( nout, fmt = 9995 )
'NRHS', nsval( i ), maxrhs
176 $
WRITE( nout, fmt = 9993 )
'NRHS', ( nsval( i ), i = 1, nns )
180 READ( nin, fmt = * )nnt
182 WRITE( nout, fmt = 9996 )
' NMA', nnt, 1
185 ELSE IF( nnt.GT.ntypes )
THEN
186 WRITE( nout, fmt = 9995 )
' NMA', nnt, ntypes
190 READ( nin, fmt = * )( ntval( i ), i = 1, nnt )
192 IF( ntval( i ).LT.0 )
THEN
193 WRITE( nout, fmt = 9996 )
'TYPE', ntval( i ), 0
195 ELSE IF( ntval( i ).GT.ntypes )
THEN
196 WRITE( nout, fmt = 9995 )
'TYPE', ntval( i ), ntypes
201 $
WRITE( nout, fmt = 9993 )
'TYPE', ( ntval( i ), i = 1, nnt )
205 READ( nin, fmt = * )thresh
206 WRITE( nout, fmt = 9992 )thresh
210 READ( nin, fmt = * )tsterr
213 WRITE( nout, fmt = 9999 )
219 eps =
dlamch(
'Underflow threshold' )
220 WRITE( nout, fmt = 9991 )
'underflow', eps
221 eps =
dlamch(
'Overflow threshold' )
222 WRITE( nout, fmt = 9991 )
'overflow ', eps
224 WRITE( nout, fmt = 9991 )
'precision', eps
225 WRITE( nout, fmt = * )
235 CALL ddrvrfp( nout, nn, nval, nns, nsval, nnt, ntval, thresh,
236 $ worka, workasav, workafac, workainv, workb,
237 $ workbsav, workxact, workx, workarf, workarfinv,
238 $ d_work_dlatms, d_work_dpot01, d_temp_dpot02,
239 $ d_temp_dpot03, d_work_dlansy, d_work_dpot02,
244 CALL ddrvrf1( nout, nn, nval, thresh, worka, nmax, workarf,
250 CALL ddrvrf2( nout, nn, nval, worka, nmax, workarf,
255 CALL ddrvrf3( nout, nn, nval, thresh, worka, nmax, workarf,
256 + workainv, workafac, d_work_dlansy,
257 + d_work_dpot03, d_work_dpot01 )
262 CALL ddrvrf4( nout, nn, nval, thresh, worka, workafac, nmax,
263 + workarf, workainv, nmax, d_work_dlansy)
267 WRITE( nout, fmt = 9998 )
268 WRITE( nout, fmt = 9997 )s2 - s1
270 9999
FORMAT( /
' Execution not attempted due to input errors' )
271 9998
FORMAT( /
' End of tests' )
272 9997
FORMAT(
' Total time used = ', f12.2,
' seconds', / )
273 9996
FORMAT(
' !! Invalid input value: ', a4,
'=', i6,
'; must be >=',
275 9995
FORMAT(
' !! Invalid input value: ', a4,
'=', i6,
'; must be <=',
277 9994
FORMAT( /
' Tests of the DOUBLE PRECISION LAPACK RFP routines ',
278 $ /
' LAPACK VERSION ', i1,
'.', i1,
'.', i1,
279 $ / /
' The following parameter values will be used:' )
280 9993
FORMAT( 4x, a4,
': ', 10i6, / 11x, 10i6 )
281 9992
FORMAT( /
' Routines pass computational tests if test ratio is ',
282 $
'less than', f8.2, / )
283 9991
FORMAT(
' Relative machine ', a,
' is taken to be', d16.6 )
double precision function dlamch(CMACH)
DLAMCH
double precision function dsecnd()
DSECND Using ETIME
subroutine ddrvrf1(NOUT, NN, NVAL, THRESH, A, LDA, ARF, WORK)
DDRVRF1
subroutine ddrvrf3(NOUT, NN, NVAL, THRESH, A, LDA, ARF, B1, B2, D_WORK_DLANGE, D_WORK_DGEQRF, TAU)
DDRVRF3
subroutine ddrvrfp(NOUT, NN, NVAL, NNS, NSVAL, NNT, NTVAL, THRESH, A, ASAV, AFAC, AINV, B, BSAV, XACT, X, ARF, ARFINV, D_WORK_DLATMS, D_WORK_DPOT01, D_TEMP_DPOT02, D_TEMP_DPOT03, D_WORK_DLANSY, D_WORK_DPOT02, D_WORK_DPOT03)
DDRVRFP
subroutine derrrfp(NUNIT)
DERRRFP
subroutine ddrvrf4(NOUT, NN, NVAL, THRESH, C1, C2, LDC, CRF, A, LDA, D_WORK_DLANGE)
DDRVRF4
subroutine ddrvrf2(NOUT, NN, NVAL, A, LDA, ARF, AP, ASAV)
DDRVRF2
subroutine ilaver(VERS_MAJOR, VERS_MINOR, VERS_PATCH)
ILAVER returns the LAPACK version.