156 SUBROUTINE clags2( UPPER, A1, A2, A3, B1, B2, B3, CSU, SNU, CSV,
165 REAL A1, A3, B1, B3, CSQ, CSU, CSV
166 COMPLEX A2, B2, SNQ, SNU, SNV
173 parameter( zero = 0.0e+0, one = 1.0e+0 )
176 REAL A, AUA11, AUA12, , AUA22, , AVB12,
177 $ avb21, avb22, csl, csr, d, fb, fc, s1, s2, snl,
178 $ snr, ua11r, ua22r, vb11r, vb22r
179 COMPLEX B, C, D1, R, T, UA11, UA12, UA21, UA22, VB11,
186 INTRINSIC abs, aimag,
cmplx, conjg, real
192 abs1( t ) = abs( real( t ) ) + abs( aimag( t ) )
220 CALL slasv2( a, fb, d, s1, s2, snr, csr, snl, csl )
222 IF( abs( csl ).GE.abs( snl ) .OR. abs( csr ).GE.abs( snr ) )
229 ua12 = csl*a2 + d1*snl*a3
232 vb12 = csr*b2 + d1*snr*b3
234 aua12 = abs( csl )*abs1( a2 ) + abs( snl )*abs( a3 )
235 avb12 = abs( csr )*abs1( b2 ) + abs( snr )*abs( b3 )
239 IF( ( abs( ua11r )+abs1( ua12 ) ).EQ.zero )
THEN
240 CALL clartg( -
cmplx( vb11r ), conjg( vb12 ), csq, snq,
242 ELSE IF( ( abs( vb11r )+abs1( vb12 ) ).EQ.zero )
THEN
243 CALL clartg( -
cmplx( ua11r ), conjg( ua12 ), csq, snq,
245 ELSE IF( aua12 / ( abs( ua11r )+abs1( ua12 ) ).LE.avb12 /
246 $ ( abs( vb11r )+abs1( vb12 ) ) )
THEN
247 CALL clartg( -
cmplx( ua11r ), conjg( ua12 ), csq, snq,
250 CALL clartg( -
cmplx( vb11r ), conjg( vb12 ), csq, snq,
264 ua21 = -conjg( d1 )*snl*a1
265 ua22 = -conjg( d1 )*snl*a2 + csl*a3
267 vb21 = -conjg( d1 )*snr*b1
268 vb22 = -conjg( d1 )*snr*b2 + csr*b3
270 aua22 = abs( snl )*abs1( a2 ) + abs( csl )*abs( a3 )
271 avb22 = abs( snr )*abs1( b2 ) + abs( csr )*abs( b3 )
275 IF( ( abs1( ua21 )+abs1( ua22 ) ).EQ.zero )
THEN
276 CALL clartg( -conjg( vb21 ), conjg( vb22 ), csq, snq, r )
277 ELSE IF( ( abs1( vb21 )+abs( vb22 ) ).EQ.zero )
THEN
278 CALL clartg( -conjg( ua21 ), conjg( ua22 ), csq, snq, r )
279 ELSE IF( aua22 / ( abs1( ua21 )+abs1( ua22 ) ).LE.avb22 /
280 $ ( abs1( vb21 )+abs1( vb22 ) ) )
THEN
281 CALL clartg( -conjg( ua21 ), conjg( ua22 ), csq, snq, r )
283 CALL clartg( -conjg( vb21 ), conjg( vb22 ), csq, snq, r )
317 CALL slasv2( a, fc, d, s1, s2, snr, csr, snl, csl )
319 IF( abs( csr ).GE.abs( snr ) .OR. abs( csl ).GE.abs( snl ) )
325 ua21 = -d1*snr*a1 + csr*a2
328 vb21 = -d1*snl*b1 + csl*b2
331 aua21 = abs( snr )*abs( a1 ) + abs( csr )*abs1( a2 )
332 avb21 = abs( snl )*abs( b1 ) + abs( csl )*abs1( b2 )
336 IF( ( abs1( ua21 )+abs( ua22r ) ).EQ.zero )
THEN
338 ELSE IF( ( abs1( vb21 )+abs( vb22r ) ).EQ.zero )
THEN
340 ELSE IF( aua21 / ( abs1( ua21 )+abs( ua22r ) ).LE.avb21 /
341 $ ( abs1( vb21 )+abs( vb22r ) ) )
THEN
348 snu = -conjg( d1 )*snr
350 snv = -conjg( d1 )*snl
357 ua11 = csr*a1 + conjg( d1 )*snr*a2
358 ua12 = conjg( d1 )*snr*a3
360 vb11 = csl*b1 + conjg( d1 )*snl*b2
361 vb12 = conjg( d1 )*snl*b3
363 aua11 = abs( csr )*abs( a1 ) + abs( snr )*abs1( a2 )
364 avb11 = abs( csl )*abs( b1 ) + abs( snl )*abs1( b2 )
368 IF( ( abs1( ua11 )+abs1( ua12 ) ).EQ.zero )
THEN
369 CALL clartg( vb12, vb11, csq, snq, r )
370 ELSE IF( ( abs1( vb11 )+abs1( vb12 ) ).EQ.zero )
THEN
371 CALL clartg( ua12, ua11, csq, snq, r )
372 ELSE IF( aua11 / ( abs1( ua11 )+abs1( ua12 ) ).LE.avb11 /
373 $ ( abs1( vb11 )+abs1( vb12 ) ) )
THEN
374 CALL clartg( ua12, ua11, csq, snq, r )
376 CALL clartg( vb12, vb11, csq, snq, r )
380 snu = conjg( d1 )*csr
382 snv = conjg( d1 )*csl