148 SUBROUTINE dlags2( UPPER, A1, A2, A3, B1, B2, B3, CSU, SNU,
158 DOUBLE PRECISION A1, A2, A3, B1, B2, B3, CSQ, CSU, CSV, SNQ,
165 DOUBLE PRECISION ZERO
166 PARAMETER ( ZERO = 0.0d+0 )
169 DOUBLE PRECISION A, AUA11, AUA12, AUA21, AUA22, AVB11, AVB12,
170 $ AVB21, AVB22, B, C, CSL, CSR, D, R, S1, S2,
171 $ snl, snr, ua11, ua11r, ua12, ua21, ua22, ua22r,
172 $ vb11, vb11r, vb12, vb21, vb22, vb22r
198 CALL dlasv2( a, b, d, s1, s2, snr, csr, snl, csl )
200 IF( abs( csl ).GE.abs( snl ) .OR. abs( csr ).GE.abs( snr ) )
207 ua12 = csl*a2 + snl*a3
210 vb12 = csr*b2 + snr*b3
212 aua12 = abs( csl )*abs( a2 ) + abs( snl )*abs( a3 )
213 avb12 = abs( csr )*abs( b2 ) + abs( snr )*abs( b3 )
217 IF( ( abs( ua11r )+abs( ua12 ) ).NE.zero )
THEN
218 IF( aua12 / ( abs( ua11r )+abs( ua12 ) ).LE.avb12 /
219 $ ( abs( vb11r )+abs( vb12 ) ) )
THEN
220 CALL dlartg( -ua11r, ua12, csq, snq, r )
222 CALL dlartg( -vb11r, vb12, csq, snq, r )
225 CALL dlartg( -vb11r, vb12, csq, snq, r )
239 ua22 = -snl*a2 + csl*a3
242 vb22 = -snr*b2 + csr*b3
244 aua22 = abs( snl )*abs( a2 ) + abs( csl )*abs( a3 )
245 avb22 = abs( snr )*abs( b2 ) + abs( csr )*abs( b3 )
249 IF( ( abs( ua21 )+abs( ua22 ) ).NE.zero )
THEN
250 IF( aua22 / ( abs( ua21 )+abs( ua22 ) ).LE.avb22 /
251 $ ( abs( vb21 )+abs( vb22 ) ) )
THEN
252 CALL dlartg( -ua21, ua22, csq, snq, r )
254 CALL dlartg( -vb21, vb22, csq, snq, r )
257 CALL dlartg( -vb21, vb22, csq, snq, r )
283 CALL dlasv2( a, c, d, s1, s2, snr, csr, snl, csl )
285 IF( abs( csr ).GE.abs( snr ) .OR. abs( csl ).GE.abs( snl ) )
291 ua21 = -snr*a1 + csr*a2
294 vb21 = -snl*b1 + csl*b2
297 aua21 = abs( snr )*abs( a1 ) + abs( csr )*abs( a2 )
298 avb21 = abs( snl )*abs( b1 ) + abs( csl )*abs( b2 )
302 IF( ( abs( ua21 )+abs( ua22r ) ).NE.zero )
THEN
303 IF( aua21 / ( abs( ua21 )+abs( ua22r ) ).LE.avb21 /
304 $ ( abs( vb21 )+abs( vb22r ) ) )
THEN
305 CALL dlartg( ua22r, ua21, csq, snq, r )
307 CALL dlartg( vb22r, vb21, csq, snq, r )
310 CALL dlartg( vb22r, vb21, csq, snq, r )
323 ua11 = csr*a1 + snr*a2
326 vb11 = csl*b1 + snl*b2
329 aua11 = abs( csr )*abs( a1 ) + abs( snr )*abs( a2 )
330 avb11 = abs( csl )*abs( b1 ) + abs( snl )*abs( b2 )
334 IF( ( abs( ua11 )+abs( ua12 ) ).NE.zero )
THEN
335 IF( aua11 / ( abs( ua11 )+abs( ua12 ) ).LE.avb11 /
336 $ ( abs( vb11 )+abs( vb12 ) ) )
THEN
337 CALL dlartg( ua12, ua11, csq, snq, r )
339 CALL dlartg( vb12, vb11, csq, snq, r )
342 CALL dlartg( vb12, vb11, csq, snq, r )
subroutine dlags2(upper, a1, a2, a3, b1, b2, b3, csu, snu, csv, snv, csq, snq)
DLAGS2 computes 2-by-2 orthogonal matrices U, V, and Q, and applies them to matrices A and B such tha...