158 SUBROUTINE zlags2( UPPER, A1, A2, A3, B1, B2, B3, CSU, SNU, CSV,
168 DOUBLE PRECISION a1, a3, b1, b3, csq, csu, csv
169 COMPLEX*16 a2, b2, snq, snu, snv
175 DOUBLE PRECISION zero, one
176 parameter( zero = 0.0d+0, one = 1.0d+0 )
179 DOUBLE PRECISION a, aua11, aua12, aua21, aua22, avb12, avb11,
180 $ avb21, avb22, csl, csr, d, fb, fc, s1, s2,
181 $ snl, snr, ua11r, ua22r, vb11r, vb22r
182 COMPLEX*16 b, c, d1, r, t, ua11, ua12, ua21, ua22, vb11,
189 INTRINSIC abs, dble, dcmplx, dconjg, dimag
192 DOUBLE PRECISION abs1
195 abs1( t ) = abs( dble( t ) ) + abs( dimag( t ) )
223 CALL
dlasv2( a, fb, d, s1, s2, snr, csr, snl, csl )
225 IF( abs( csl ).GE.abs( snl ) .OR. abs( csr ).GE.abs( snr ) )
232 ua12 = csl*a2 + d1*snl*a3
235 vb12 = csr*b2 + d1*snr*b3
237 aua12 = abs( csl )*abs1( a2 ) + abs( snl )*abs( a3 )
238 avb12 = abs( csr )*abs1( b2 ) + abs( snr )*abs( b3 )
242 IF( ( abs( ua11r )+abs1( ua12 ) ).EQ.zero )
THEN
243 CALL
zlartg( -dcmplx( vb11r ), dconjg( vb12 ), csq, snq,
245 ELSE IF( ( abs( vb11r )+abs1( vb12 ) ).EQ.zero )
THEN
246 CALL
zlartg( -dcmplx( ua11r ), dconjg( ua12 ), csq, snq,
248 ELSE IF( aua12 / ( abs( ua11r )+abs1( ua12 ) ).LE.avb12 /
249 $ ( abs( vb11r )+abs1( vb12 ) ) )
THEN
250 CALL
zlartg( -dcmplx( ua11r ), dconjg( ua12 ), csq, snq,
253 CALL
zlartg( -dcmplx( vb11r ), dconjg( vb12 ), csq, snq,
267 ua21 = -dconjg( d1 )*snl*a1
268 ua22 = -dconjg( d1 )*snl*a2 + csl*a3
270 vb21 = -dconjg( d1 )*snr*b1
271 vb22 = -dconjg( d1 )*snr*b2 + csr*b3
273 aua22 = abs( snl )*abs1( a2 ) + abs( csl )*abs( a3 )
274 avb22 = abs( snr )*abs1( b2 ) + abs( csr )*abs( b3 )
278 IF( ( abs1( ua21 )+abs1( ua22 ) ).EQ.zero )
THEN
279 CALL
zlartg( -dconjg( vb21 ), dconjg( vb22 ), csq, snq,
281 ELSE IF( ( abs1( vb21 )+abs( vb22 ) ).EQ.zero )
THEN
282 CALL
zlartg( -dconjg( ua21 ), dconjg( ua22 ), csq, snq,
284 ELSE IF( aua22 / ( abs1( ua21 )+abs1( ua22 ) ).LE.avb22 /
285 $ ( abs1( vb21 )+abs1( vb22 ) ) )
THEN
286 CALL
zlartg( -dconjg( ua21 ), dconjg( ua22 ), csq, snq,
289 CALL
zlartg( -dconjg( vb21 ), dconjg( vb22 ), csq, snq,
324 CALL
dlasv2( a, fc, d, s1, s2, snr, csr, snl, csl )
326 IF( abs( csr ).GE.abs( snr ) .OR. abs( csl ).GE.abs( snl ) )
332 ua21 = -d1*snr*a1 + csr*a2
335 vb21 = -d1*snl*b1 + csl*b2
338 aua21 = abs( snr )*abs( a1 ) + abs( csr )*abs1( a2 )
339 avb21 = abs( snl )*abs( b1 ) + abs( csl )*abs1( b2 )
343 IF( ( abs1( ua21 )+abs( ua22r ) ).EQ.zero )
THEN
344 CALL
zlartg( dcmplx( vb22r ), vb21, csq, snq, r )
345 ELSE IF( ( abs1( vb21 )+abs( vb22r ) ).EQ.zero )
THEN
346 CALL
zlartg( dcmplx( ua22r ), ua21, csq, snq, r )
347 ELSE IF( aua21 / ( abs1( ua21 )+abs( ua22r ) ).LE.avb21 /
348 $ ( abs1( vb21 )+abs( vb22r ) ) )
THEN
349 CALL
zlartg( dcmplx( ua22r ), ua21, csq, snq, r )
351 CALL
zlartg( dcmplx( vb22r ), vb21, csq, snq, r )
355 snu = -dconjg( d1 )*snr
357 snv = -dconjg( d1 )*snl
364 ua11 = csr*a1 + dconjg( d1 )*snr*a2
365 ua12 = dconjg( d1 )*snr*a3
367 vb11 = csl*b1 + dconjg( d1 )*snl*b2
368 vb12 = dconjg( d1 )*snl*b3
370 aua11 = abs( csr )*abs( a1 ) + abs( snr )*abs1( a2 )
371 avb11 = abs( csl )*abs( b1 ) + abs( snl )*abs1( b2 )
375 IF( ( abs1( ua11 )+abs1( ua12 ) ).EQ.zero )
THEN
376 CALL
zlartg( vb12, vb11, csq, snq, r )
377 ELSE IF( ( abs1( vb11 )+abs1( vb12 ) ).EQ.zero )
THEN
378 CALL
zlartg( ua12, ua11, csq, snq, r )
379 ELSE IF( aua11 / ( abs1( ua11 )+abs1( ua12 ) ).LE.avb11 /
380 $ ( abs1( vb11 )+abs1( vb12 ) ) )
THEN
381 CALL
zlartg( ua12, ua11, csq, snq, r )
383 CALL
zlartg( vb12, vb11, csq, snq, r )
387 snu = dconjg( d1 )*csr
389 snv = dconjg( d1 )*csl