3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
11 * SUBROUTINE DGET31( RMAX, LMAX, NINFO, KNT )
13 * .. Scalar Arguments ..
15 * DOUBLE PRECISION RMAX
17 * .. Array Arguments ..
27 *> DGET31 tests DLALN2, a routine for solving
31 *> where A is an NA by NA matrix (NA=1 or 2 only), w is a real (NW=1) or
32 *> complex (NW=2) constant, ca is a real constant, D is an NA by NA real
33 *> diagonal matrix, and B is an NA by NW matrix (when NW=2 the second
34 *> column of B contains the imaginary part of the solution). The code
35 *> returns X and s, where s is a scale factor, less than or equal to 1,
36 *> which is chosen to avoid overflow in X.
38 *> If any singular values of ca A-w D are less than another input
39 *> parameter SMIN, they are perturbed up to SMIN.
41 *> The test condition is that the scaled residual
43 *> norm( (ca A-w D)*X - s*B ) /
44 *> ( max( ulp*norm(ca A-w D), SMIN )*norm(X) )
46 *> should be on the order of 1. Here, ulp is the machine precision.
47 *> Also, it is verified that SCALE is less than or equal to 1, and that
48 *> XNORM = infinity-norm(X).
56 *> RMAX is DOUBLE PRECISION
57 *> Value of the largest test ratio.
63 *> Example number where largest test ratio achieved.
68 *> NINFO is INTEGER array, dimension (3)
69 *> NINFO(1) = number of examples with INFO less than 0
70 *> NINFO(2) = number of examples with INFO greater than 0
76 *> Total number of examples tested.
82 *> \author Univ. of Tennessee
83 *> \author Univ. of California Berkeley
84 *> \author Univ. of Colorado Denver
87 *> \date November 2011
89 *> \ingroup double_eig
91 * =====================================================================
92 SUBROUTINE DGET31( RMAX, LMAX, NINFO, KNT )
94 * -- LAPACK test routine (version 3.4.0) --
95 * -- LAPACK is a software package provided by Univ. of Tennessee, --
96 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
99 * .. Scalar Arguments ..
101 DOUBLE PRECISION RMAX
103 * .. Array Arguments ..
107 * =====================================================================
110 DOUBLE PRECISION ZERO, HALF, ONE
111 PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0 )
112 DOUBLE PRECISION TWO, THREE, FOUR
113 PARAMETER ( TWO = 2.0D0, THREE = 3.0D0, FOUR = 4.0D0 )
114 DOUBLE PRECISION SEVEN, TEN
115 PARAMETER ( SEVEN = 7.0D0, TEN = 10.0D0 )
116 DOUBLE PRECISION TWNONE
117 PARAMETER ( TWNONE = 21.0D0 )
119 * .. Local Scalars ..
120 INTEGER IA, IB, ICA, ID1, ID2, INFO, ISMIN, ITRANS,
122 DOUBLE PRECISION BIGNUM, CA, D1, D2, DEN, EPS, RES, SCALE, SMIN,
123 $ SMLNUM, TMP, UNFL, WI, WR, XNORM
126 LOGICAL LTRANS( 0: 1 )
127 DOUBLE PRECISION A( 2, 2 ), B( 2, 2 ), VAB( 3 ), VCA( 5 ),
128 $ VDD( 4 ), VSMIN( 4 ), VWI( 4 ), VWR( 4 ),
131 * .. External Functions ..
132 DOUBLE PRECISION DLAMCH
135 * .. External Subroutines ..
136 EXTERNAL DLABAD, DLALN2
138 * .. Intrinsic Functions ..
139 INTRINSIC ABS, MAX, SQRT
141 * .. Data statements ..
142 DATA LTRANS / .FALSE., .TRUE. /
144 * .. Executable Statements ..
146 * Get machine parameters
150 SMLNUM = DLAMCH( 'S' ) / EPS
151 BIGNUM = ONE / SMLNUM
152 CALL DLABAD( SMLNUM, BIGNUM )
154 * Set up test case parameters
158 VSMIN( 3 ) = ONE / ( TEN*TEN )
159 VSMIN( 4 ) = ONE / EPS
160 VAB( 1 ) = SQRT( SMLNUM )
162 VAB( 3 ) = SQRT( BIGNUM )
171 VDD( 1 ) = SQRT( SMLNUM )
174 VDD( 4 ) = SQRT( BIGNUM )
176 VCA( 2 ) = SQRT( SMLNUM )
197 SMIN = VSMIN( ISMIN )
202 A( 1, 1 ) = VAB( IA )
204 B( 1, 1 ) = VAB( IB )
206 IF( D1.EQ.ONE .AND. D2.EQ.ONE .AND. CA.EQ.
208 WR = VWR( IWR )*A( 1, 1 )
213 CALL DLALN2( LTRANS( ITRANS ), NA, NW,
214 $ SMIN, CA, A, 2, D1, D2, B, 2,
215 $ WR, WI, X, 2, SCALE, XNORM,
218 $ NINFO( 1 ) = NINFO( 1 ) + 1
220 $ NINFO( 2 ) = NINFO( 2 ) + 1
221 RES = ABS( ( CA*A( 1, 1 )-WR*D1 )*
222 $ X( 1, 1 )-SCALE*B( 1, 1 ) )
224 DEN = MAX( EPS*( ABS( ( CA*A( 1,
225 $ 1 )-WR*D1 )*X( 1, 1 ) ) ),
228 DEN = MAX( SMIN*ABS( X( 1, 1 ) ),
232 IF( ABS( X( 1, 1 ) ).LT.UNFL .AND.
233 $ ABS( B( 1, 1 ) ).LE.SMLNUM*
234 $ ABS( CA*A( 1, 1 )-WR*D1 ) )RES = ZERO
236 $ RES = RES + ONE / EPS
237 RES = RES + ABS( XNORM-ABS( X( 1, 1 ) ) )
238 $ / MAX( SMLNUM, XNORM ) / EPS
239 IF( INFO.NE.0 .AND. INFO.NE.1 )
240 $ RES = RES + ONE / EPS
242 IF( RES.GT.RMAX ) THEN
253 A( 1, 1 ) = VAB( IA )
255 B( 1, 1 ) = VAB( IB )
256 B( 1, 2 ) = -HALF*VAB( IB )
258 IF( D1.EQ.ONE .AND. D2.EQ.ONE .AND. CA.EQ.
260 WR = VWR( IWR )*A( 1, 1 )
265 IF( D1.EQ.ONE .AND. D2.EQ.ONE .AND.
267 WI = VWI( IWI )*A( 1, 1 )
271 CALL DLALN2( LTRANS( ITRANS ), NA, NW,
272 $ SMIN, CA, A, 2, D1, D2, B,
273 $ 2, WR, WI, X, 2, SCALE,
276 $ NINFO( 1 ) = NINFO( 1 ) + 1
278 $ NINFO( 2 ) = NINFO( 2 ) + 1
279 RES = ABS( ( CA*A( 1, 1 )-WR*D1 )*
280 $ X( 1, 1 )+( WI*D1 )*X( 1, 2 )-
282 RES = RES + ABS( ( -WI*D1 )*X( 1, 1 )+
283 $ ( CA*A( 1, 1 )-WR*D1 )*X( 1, 2 )-
286 DEN = MAX( EPS*( MAX( ABS( CA*A( 1,
287 $ 1 )-WR*D1 ), ABS( D1*WI ) )*
288 $ ( ABS( X( 1, 1 ) )+ABS( X( 1,
289 $ 2 ) ) ) ), SMLNUM )
291 DEN = MAX( SMIN*( ABS( X( 1,
292 $ 1 ) )+ABS( X( 1, 2 ) ) ),
296 IF( ABS( X( 1, 1 ) ).LT.UNFL .AND.
297 $ ABS( X( 1, 2 ) ).LT.UNFL .AND.
298 $ ABS( B( 1, 1 ) ).LE.SMLNUM*
299 $ ABS( CA*A( 1, 1 )-WR*D1 ) )
302 $ RES = RES + ONE / EPS
303 RES = RES + ABS( XNORM-
305 $ ABS( X( 1, 2 ) ) ) /
306 $ MAX( SMLNUM, XNORM ) / EPS
307 IF( INFO.NE.0 .AND. INFO.NE.1 )
308 $ RES = RES + ONE / EPS
310 IF( RES.GT.RMAX ) THEN
322 A( 1, 1 ) = VAB( IA )
323 A( 1, 2 ) = -THREE*VAB( IA )
324 A( 2, 1 ) = -SEVEN*VAB( IA )
325 A( 2, 2 ) = TWNONE*VAB( IA )
327 B( 1, 1 ) = VAB( IB )
328 B( 2, 1 ) = -TWO*VAB( IB )
330 IF( D1.EQ.ONE .AND. D2.EQ.ONE .AND. CA.EQ.
332 WR = VWR( IWR )*A( 1, 1 )
337 CALL DLALN2( LTRANS( ITRANS ), NA, NW,
338 $ SMIN, CA, A, 2, D1, D2, B, 2,
339 $ WR, WI, X, 2, SCALE, XNORM,
342 $ NINFO( 1 ) = NINFO( 1 ) + 1
344 $ NINFO( 2 ) = NINFO( 2 ) + 1
345 IF( ITRANS.EQ.1 ) THEN
347 A( 1, 2 ) = A( 2, 1 )
350 RES = ABS( ( CA*A( 1, 1 )-WR*D1 )*
351 $ X( 1, 1 )+( CA*A( 1, 2 ) )*
352 $ X( 2, 1 )-SCALE*B( 1, 1 ) )
353 RES = RES + ABS( ( CA*A( 2, 1 ) )*
354 $ X( 1, 1 )+( CA*A( 2, 2 )-WR*D2 )*
355 $ X( 2, 1 )-SCALE*B( 2, 1 ) )
357 DEN = MAX( EPS*( MAX( ABS( CA*A( 1,
358 $ 1 )-WR*D1 )+ABS( CA*A( 1, 2 ) ),
359 $ ABS( CA*A( 2, 1 ) )+ABS( CA*A( 2,
360 $ 2 )-WR*D2 ) )*MAX( ABS( X( 1,
361 $ 1 ) ), ABS( X( 2, 1 ) ) ) ),
364 DEN = MAX( EPS*( MAX( SMIN / EPS,
366 $ 1 )-WR*D1 )+ABS( CA*A( 1, 2 ) ),
367 $ ABS( CA*A( 2, 1 ) )+ABS( CA*A( 2,
368 $ 2 )-WR*D2 ) ) )*MAX( ABS( X( 1,
369 $ 1 ) ), ABS( X( 2, 1 ) ) ) ),
373 IF( ABS( X( 1, 1 ) ).LT.UNFL .AND.
374 $ ABS( X( 2, 1 ) ).LT.UNFL .AND.
375 $ ABS( B( 1, 1 ) )+ABS( B( 2, 1 ) ).LE.
376 $ SMLNUM*( ABS( CA*A( 1,
377 $ 1 )-WR*D1 )+ABS( CA*A( 1,
378 $ 2 ) )+ABS( CA*A( 2,
379 $ 1 ) )+ABS( CA*A( 2, 2 )-WR*D2 ) ) )
382 $ RES = RES + ONE / EPS
383 RES = RES + ABS( XNORM-
384 $ MAX( ABS( X( 1, 1 ) ), ABS( X( 2,
385 $ 1 ) ) ) ) / MAX( SMLNUM, XNORM ) /
387 IF( INFO.NE.0 .AND. INFO.NE.1 )
388 $ RES = RES + ONE / EPS
390 IF( RES.GT.RMAX ) THEN
401 A( 1, 1 ) = VAB( IA )*TWO
402 A( 1, 2 ) = -THREE*VAB( IA )
403 A( 2, 1 ) = -SEVEN*VAB( IA )
404 A( 2, 2 ) = TWNONE*VAB( IA )
406 B( 1, 1 ) = VAB( IB )
407 B( 2, 1 ) = -TWO*VAB( IB )
408 B( 1, 2 ) = FOUR*VAB( IB )
409 B( 2, 2 ) = -SEVEN*VAB( IB )
411 IF( D1.EQ.ONE .AND. D2.EQ.ONE .AND. CA.EQ.
413 WR = VWR( IWR )*A( 1, 1 )
418 IF( D1.EQ.ONE .AND. D2.EQ.ONE .AND.
420 WI = VWI( IWI )*A( 1, 1 )
424 CALL DLALN2( LTRANS( ITRANS ), NA, NW,
425 $ SMIN, CA, A, 2, D1, D2, B,
426 $ 2, WR, WI, X, 2, SCALE,
429 $ NINFO( 1 ) = NINFO( 1 ) + 1
431 $ NINFO( 2 ) = NINFO( 2 ) + 1
432 IF( ITRANS.EQ.1 ) THEN
434 A( 1, 2 ) = A( 2, 1 )
437 RES = ABS( ( CA*A( 1, 1 )-WR*D1 )*
438 $ X( 1, 1 )+( CA*A( 1, 2 ) )*
439 $ X( 2, 1 )+( WI*D1 )*X( 1, 2 )-
441 RES = RES + ABS( ( CA*A( 1,
442 $ 1 )-WR*D1 )*X( 1, 2 )+
443 $ ( CA*A( 1, 2 ) )*X( 2, 2 )-
444 $ ( WI*D1 )*X( 1, 1 )-SCALE*
446 RES = RES + ABS( ( CA*A( 2, 1 ) )*
447 $ X( 1, 1 )+( CA*A( 2, 2 )-WR*D2 )*
448 $ X( 2, 1 )+( WI*D2 )*X( 2, 2 )-
450 RES = RES + ABS( ( CA*A( 2, 1 ) )*
451 $ X( 1, 2 )+( CA*A( 2, 2 )-WR*D2 )*
452 $ X( 2, 2 )-( WI*D2 )*X( 2, 1 )-
455 DEN = MAX( EPS*( MAX( ABS( CA*A( 1,
456 $ 1 )-WR*D1 )+ABS( CA*A( 1,
457 $ 2 ) )+ABS( WI*D1 ),
459 $ 1 ) )+ABS( CA*A( 2,
460 $ 2 )-WR*D2 )+ABS( WI*D2 ) )*
462 $ 1 ) )+ABS( X( 2, 1 ) ),
463 $ ABS( X( 1, 2 ) )+ABS( X( 2,
464 $ 2 ) ) ) ), SMLNUM )
466 DEN = MAX( EPS*( MAX( SMIN / EPS,
468 $ 1 )-WR*D1 )+ABS( CA*A( 1,
469 $ 2 ) )+ABS( WI*D1 ),
471 $ 1 ) )+ABS( CA*A( 2,
472 $ 2 )-WR*D2 )+ABS( WI*D2 ) ) )*
474 $ 1 ) )+ABS( X( 2, 1 ) ),
475 $ ABS( X( 1, 2 ) )+ABS( X( 2,
476 $ 2 ) ) ) ), SMLNUM )
479 IF( ABS( X( 1, 1 ) ).LT.UNFL .AND.
480 $ ABS( X( 2, 1 ) ).LT.UNFL .AND.
481 $ ABS( X( 1, 2 ) ).LT.UNFL .AND.
482 $ ABS( X( 2, 2 ) ).LT.UNFL .AND.
484 $ ABS( B( 2, 1 ) ).LE.SMLNUM*
485 $ ( ABS( CA*A( 1, 1 )-WR*D1 )+
486 $ ABS( CA*A( 1, 2 ) )+ABS( CA*A( 2,
487 $ 1 ) )+ABS( CA*A( 2,
488 $ 2 )-WR*D2 )+ABS( WI*D2 )+ABS( WI*
491 $ RES = RES + ONE / EPS
492 RES = RES + ABS( XNORM-
493 $ MAX( ABS( X( 1, 1 ) )+ABS( X( 1,
495 $ 1 ) )+ABS( X( 2, 2 ) ) ) ) /
496 $ MAX( SMLNUM, XNORM ) / EPS
497 IF( INFO.NE.0 .AND. INFO.NE.1 )
498 $ RES = RES + ONE / EPS
500 IF( RES.GT.RMAX ) THEN