90 SUBROUTINE sget31( RMAX, LMAX, NINFO, KNT )
108 parameter( zero = 0.0e0, half = 0.5e0, one = 1.0e0 )
109 REAL TWO, THREE, FOUR
110 parameter( two = 2.0e0, three = 3.0e0, four = 4.0e0 )
112 parameter( seven = 7.0e0, ten = 10.0e0 )
114 parameter( twnone = 21.0e0 )
117 INTEGER IA, IB, ICA, ID1, ID2, INFO, ISMIN, ITRANS,
119 REAL BIGNUM, CA, D1, D2, DEN, EPS, RES, SCALE, SMIN,
120 $ SMLNUM, TMP, UNFL, WI, WR, XNORM
123 LOGICAL LTRANS( 0: 1 )
124 REAL A( 2, 2 ), B( 2, 2 ), VAB( 3 ), VCA( 5 ),
125 $ VDD( 4 ), VSMIN( 4 ), VWI( 4 ), VWR( 4 ),
136 INTRINSIC abs,
max, sqrt
139 DATA ltrans / .false., .true. /
147 smlnum = slamch(
'S' ) / eps
148 bignum = one / smlnum
149 CALL slabad( 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.
205 wr = vwr( iwr )*a( 1, 1 )
210 CALL slaln2( 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*
231 $ abs( ca*a( 1, 1 )-wr*d1 ) )res = zero
233 $ res = res + one / eps
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 slaln2( 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 slaln2( 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 )
347 res = abs( ( ca*a( 1, 1 )-wr*d1 )*
348 $ x( 1, 1 )+( ca*a( 1, 2 ) )*
349 $ x( 2, 1 )-scale*b( 1, 1 ) )
350 res = res + abs( ( ca*a( 2, 1 ) )*
351 $ x( 1, 1 )+( ca*a( 2, 2 )-wr*d2 )*
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 )
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,
415 IF( d1.EQ.one .AND. d2.EQ.one .AND.
417 wi = vwi( iwi )*a( 1, 1 )
421 CALL slaln2( 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 ),
468 $ 1 ) )+abs( ca*a( 2,
469 $ 2 )-wr*d2 )+abs( wi*d2 ) ) )*
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*
488 $ res = res + one / eps
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