90 SUBROUTINE dget31( RMAX, LMAX, NINFO, KNT )
107 DOUBLE PRECISION ZERO, HALF, ONE
108 parameter( zero = 0.0d0, half = 0.5d0, one = 1.0d0 )
109 DOUBLE PRECISION TWO, THREE, FOUR
110 parameter( two = 2.0d0, three = 3.0d0, four = 4.0d0 )
111 DOUBLE PRECISION SEVEN,
112 parameter( seven = 7.0d0, ten = 10.0d0 )
113 DOUBLE PRECISION TWNONE
114 parameter( twnone = 21.0d0 )
119 DOUBLE PRECISION BIGNUM, CA, D1, D2, DEN, , RES, SCALE, SMIN,
120 $ SMLNUM, TMP, UNFL, WI, WR, XNORM
124DOUBLE PRECISION A( 2, 2 ), B( 2, 2 ), VAB( 3 ), VCA( 5 ),
129 DOUBLE PRECISION DLAMCH
136 INTRINSIC abs,
max, sqrt
139 DATA ltrans / .false., .true. /
147 smlnum = dlamch(
'S' ) / eps
148 bignum = one / smlnum
149 CALL dlabad( smlnum, bignum )
155 vsmin( 3 ) = one / ( ten*ten )
156 vsmin( 4 ) = one / eps
157 vab( 1 ) = sqrt( smlnum )
159 vab( 3 ) = sqrt( bignum )
168 vdd( 1 ) = sqrt( smlnum )
171 vdd( 4 ) = sqrt( bignum )
173 vca( 2 ) = sqrt( smlnum )
194 smin = vsmin( ismin )
199 a( 1, 1 ) = vab( ia )
201 b( 1, 1 ) = vab( ib )
203 IF( d1.EQ.one .AND. d2.EQ.one .AND. ca.EQ.
210 CALL dlaln2( ltrans( itrans ), na, nw,
211 $ smin, ca, a, 2, d1, d2, b, 2,
212 $ wr, wi, x, 2, scale, xnorm,
215 $ ninfo( 1 ) = ninfo( 1 ) + 1
217 $ ninfo( 2 ) = ninfo( 2 ) + 1
218 res = abs( ( ca*a( 1, 1 )-wr*d1 )*
219 $ x( 1, 1 )-scale*b( 1, 1 ) )
221 den =
max( eps*( abs( ( ca*a( 1,
222 $ 1 )-wr*d1 )*x( 1, 1 ) ) ),
225 den =
max( smin*abs( x( 1, 1 ) ),
229 IF( abs( x( 1, 1 ) ).LT.unfl .AND.
230 $ abs( b( 1, 1 ) ).LE.smlnum*
234 res = res + abs( xnorm-abs( x( 1, 1 ) ) )
235 $ /
max( smlnum, xnorm ) / eps
236 IF( info.NE.0 .AND. info.NE.1 )
237 $ res = res + one / eps
239 IF( res.GT.rmax )
THEN
250 a( 1, 1 ) = vab( ia )
252 b( 1, 1 ) = vab( ib )
253 b( 1, 2 ) = -half*vab( ib )
255 IF( d1.EQ.one .AND. d2.EQ.one .AND. ca.EQ.
257 wr = vwr( iwr )*a( 1, 1 )
262 IF( d1.EQ.one .AND. d2.EQ.one .AND.
264 wi = vwi( iwi )*a( 1, 1 )
268 CALL dlaln2( ltrans( itrans ), na, nw,
269 $ smin, ca, a, 2, d1, d2, b,
270 $ 2, wr, wi, x, 2, scale,
273 $ ninfo( 1 ) = ninfo( 1 ) + 1
275 $ ninfo( 2 ) = ninfo( 2 ) + 1
276 res = abs( ( ca*a( 1, 1 )-wr*d1 )*
277 $ x( 1, 1 )+( wi*d1 )*x( 1, 2 )-
279 res = res + abs( ( -wi*d1 )*x( 1, 1 )+
280 $ ( ca*a( 1, 1 )-wr*d1 )*x( 1, 2 )-
283 den =
max( eps*(
max( abs( ca*a( 1,
284 $ 1 )-wr*d1 ), abs( d1*wi ) )*
285 $ ( abs( x( 1, 1 ) )+abs( x( 1,
286 $ 2 ) ) ) ), smlnum )
288 den =
max( smin*( abs( x( 1,
289 $ 1 ) )+abs( x( 1, 2 ) ) ),
293 IF( abs( x( 1, 1 ) ).LT.unfl .AND.
294 $ abs( x( 1, 2 ) ).LT.unfl .AND.
295 $ abs( b( 1, 1 ) ).LE.smlnum*
296 $ abs( ca*a( 1, 1 )-wr*d1 ) )
299 $ res = res + one / eps
300 res = res + abs( xnorm-
302 $ abs( x( 1, 2 ) ) ) /
303 $
max( smlnum, xnorm ) / eps
304 IF( info.NE.0 .AND. info.NE.1 )
305 $ res = res + one / eps
307 IF( res.GT.rmax )
THEN
319 a( 1, 1 ) = vab( ia )
320 a( 1, 2 ) = -three*vab( ia )
321 a( 2, 1 ) = -seven*vab( ia )
322 a( 2, 2 ) = twnone*vab( ia )
324 b( 1, 1 ) = vab( ib )
325 b( 2, 1 ) = -two*vab( ib )
327 IF( d1.EQ.one .AND. d2.EQ.one .AND. ca.EQ.
329 wr = vwr( iwr )*a( 1, 1 )
334 CALL dlaln2( ltrans( itrans ), na, nw,
335 $ smin, ca, a, 2, d1, d2, b, 2,
336 $ wr, wi, x, 2, scale, xnorm,
339 $ ninfo( 1 ) = ninfo( 1 ) + 1
341 $ ninfo( 2 ) = ninfo( 2 ) + 1
342 IF( itrans.EQ.1 )
THEN
344 a( 1, 2 ) = a( 2, 1 )
348 $ x( 1, 1 )+( ca*a( 1, 2 ) )*
349 $ x( 2, 1 )-scale*b( 1, 1 ) )
350 res = res + abs( ( ca*a( 2, 1 ) )*
352 $ x( 2, 1 )-scale*b( 2, 1 ) )
354 den =
max( eps*(
max( abs( ca*a( 1,
355 $ 1 )-wr*d1 )+abs( ca*a( 1, 2 ) ),
356 $ abs( ca*a( 2, 1 ) )+abs( ca*a( 2,
357 $ 2 )-wr*d2 ) )*
max( abs( x( 1,
358 $ 1 ) ), abs( x( 2, 1 ) ) ) ),
361 den =
max( eps*(
max( smin / eps,
363 $ 1 )-wr*d1 )+abs( ca*a( 1, 2 ) ),
364 $ abs( ca*a( 2, 1 ) )+abs( ca*a( 2,
365 $ 2 )-wr*d2 ) ) )*
max( abs( x( 1,
366 $ 1 ) ), abs( x( 2, 1 ) ) ) ),
370 IF( abs( x( 1, 1 ) ).LT.unfl .AND.
371 $ abs( x( 2, 1 ) ).LT.unfl .AND.
372 $ abs( b( 1, 1 ) )+abs( b( 2, 1 ) ).LE.
373 $ smlnum*( abs( ca*a( 1,
374 $ 1 )-wr*d1 )+abs( ca*a( 1,
375 $ 2 ) )+abs( ca*a( 2,
376 $ 1 ) )+abs( ca*a( 2, 2 )-wr*d2 ) ) )
379 $ res = res + one / eps
380 res = res + abs( xnorm-
381 $
max( abs( x( 1, 1 ) ), abs( x( 2,
382 $ 1 ) ) ) ) /
max( smlnum, xnorm ) /
384 IF( info.NE.0 .AND. info.NE.1 )
385 $ res = res + one / eps
387 IF( res.GT.rmax )
THEN
398 a( 1, 1 ) = vab( ia )*two
399 a( 1, 2 ) = -three*vab( ia )
400 a( 2, 1 ) = -seven*vab( ia )
401 a( 2, 2 ) = twnone*vab( ia )
403 b( 1, 1 ) = vab( ib )
404 b( 2, 1 ) = -two*vab( ib )
405 b( 1, 2 ) = four*vab( ib )
406 b( 2, 2 ) = -seven*vab( ib )
408 IF( d1.EQ.one .AND. d2.EQ.one .AND. ca.EQ.
410 wr = vwr( iwr )*a( 1, 1 )
415 IF( d1.EQ.one .AND. d2.EQ.one .AND.
417 wi = vwi( iwi )*a( 1, 1 )
421 CALL dlaln2( ltrans( itrans ), na, nw,
422 $ smin, ca, a, 2, d1, d2, b,
423 $ 2, wr, wi, x, 2, scale,
426 $ ninfo( 1 ) = ninfo( 1 ) + 1
428 $ ninfo( 2 ) = ninfo( 2 ) + 1
429 IF( itrans.EQ.1 )
THEN
431 a( 1, 2 ) = a( 2, 1 )
434 res = abs( ( ca*a( 1, 1 )-wr*d1 )*
435 $ x( 1, 1 )+( ca*a( 1, 2 ) )*
436 $ x( 2, 1 )+( wi*d1 )*x( 1, 2 )-
438 res = res + abs( ( ca*a( 1,
439 $ 1 )-wr*d1 )*x( 1, 2 )+
440 $ ( ca*a( 1, 2 ) )*x( 2, 2 )-
441 $ ( wi*d1 )*x( 1, 1 )-scale*
443 res = res + abs( ( ca*a( 2, 1 ) )*
444 $ x( 1, 1 )+( ca*a( 2, 2 )-wr*d2 )*
445 $ x( 2, 1 )+( wi*d2 )*x( 2, 2 )-
447 res = res + abs( ( ca*a( 2, 1 ) )*
448 $ x( 1, 2 )+( ca*a( 2, 2 )-wr*d2 )*
449 $ x( 2, 2 )-( wi*d2 )*x( 2, 1 )-
452 den =
max( eps*(
max( abs( ca*a( 1,
453 $ 1 )-wr*d1 )+abs( ca*a( 1,
454 $ 2 ) )+abs( wi*d1 ),
456 $ 1 ) )+abs( ca*a( 2,
457 $ 2 )-wr*d2 )+abs( wi*d2 ) )*
459 $ 1 ) )+abs( x( 2, 1 ) ),
460 $ abs( x( 1, 2 ) )+abs( x( 2,
461 $ 2 ) ) ) ), smlnum )
463 den =
max( eps*(
max( smin / eps,
465 $ 1 )-wr*d1 )+abs( ca*a( 1,
466 $ 2 ) )+abs( wi*d1 ),
469 $ 2 )-wr*d2 )+abs( wi*d2 ) ) )*
471 $ 1 ) )+abs( x( 2, 1 ) ),
472 $ abs( x( 1, 2 ) )+abs( x( 2,
473 $ 2 ) ) ) ), smlnum )
476 IF( abs( x( 1, 1 ) ).LT.unfl .AND.
477 $ abs( x( 2, 1 ) ).LT.unfl .AND.
478 $ abs( x( 1, 2 ) ).LT.unfl .AND.
479 $ abs( x( 2, 2 ) ).LT.unfl .AND.
481 $ abs( b( 2, 1 ) ).LE.smlnum*
482 $ ( abs( ca*a( 1, 1 )-wr*d1 )+
483 $ abs( ca*a( 1, 2 ) )+abs( ca*a( 2,
484 $ 1 ) )+abs( ca*a( 2,
485 $ 2 )-wr*d2 )+abs( wi*d2 )+abs( wi*
489 res = res + abs( xnorm-
490 $
max( abs( x( 1, 1 ) )+abs( x( 1,
492 $ 1 ) )+abs( x( 2, 2 ) ) ) ) /
493 $
max( smlnum, xnorm ) / eps
494 IF( info.NE.0 .AND. info.NE.1 )
495 $ res = res + one / eps
497 IF( res.GT.rmax )
THEN