81 SUBROUTINE sget34( RMAX, LMAX, NINFO, KNT )
99 parameter( zero = 0.0e0, half = 0.5e0, one = 1.0e0 )
101 parameter( two = 2.0e0, three = 3.0e0 )
103 parameter( lwork = 32 )
106 INTEGER I, IA, IA11, IA12, IA21, IA22, IAM, IB, IC,
107 $ IC11, IC12, IC21, IC22, ICM, INFO, J
108 REAL BIGNUM, EPS, RES, SMLNUM, TNRM
111 REAL Q( 4, 4 ), RESULT( 2 ), T( 4, 4 ), T1( 4, 4 ),
112 $ VAL( 9 ), VM( 2 ), WORK( LWORK )
122 INTRINSIC abs,
max, real, sign, sqrt
129 smlnum = slamch( 's
' ) / EPS
130 BIGNUM = ONE / SMLNUM
131 CALL SLABAD( SMLNUM, BIGNUM )
136 VAL( 2 ) = SQRT( SMLNUM )
139 VAL( 5 ) = SQRT( BIGNUM )
140 VAL( 6 ) = -SQRT( SMLNUM )
143 VAL( 9 ) = -SQRT( BIGNUM )
145 VM( 2 ) = ONE + TWO*EPS
146 CALL SCOPY( 16, VAL( 4 ), 0, T( 1, 1 ), 1 )
160 T( 1, 1 ) = VAL( IA )*VM( IAM )
161 T( 2, 2 ) = VAL( IC )
162 T( 1, 2 ) = VAL( IB )
164 TNRM = MAX( ABS( T( 1, 1 ) ), ABS( T( 2, 2 ) ),
166 CALL SCOPY( 16, T, 1, T1, 1 )
167 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
168 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
169 CALL SLAEXC( .TRUE., 2, T, 4, Q, 4, 1, 1, 1, WORK,
172 $ NINFO( INFO ) = NINFO( INFO ) + 1
173 CALL SHST01( 2, 1, 2, T1, 4, T, 4, Q, 4, WORK, LWORK,
175 RES = RESULT( 1 ) + RESULT( 2 )
177 $ RES = RES + ONE / EPS
178.NE.
IF( T( 1, 1 )T1( 2, 2 ) )
179 $ RES = RES + ONE / EPS
180.NE.
IF( T( 2, 2 )T1( 1, 1 ) )
181 $ RES = RES + ONE / EPS
182.NE.
IF( T( 2, 1 )ZERO )
183 $ RES = RES + ONE / EPS
185.GT.
IF( RESRMAX ) THEN
200 DO 50 IC22 = -1, 1, 2
201 T( 1, 1 ) = VAL( IA )*VM( IAM )
202 T( 1, 2 ) = VAL( IB )
203 T( 1, 3 ) = -TWO*VAL( IB )
205 T( 2, 2 ) = VAL( IC11 )
206 T( 2, 3 ) = VAL( IC12 )
208 T( 3, 2 ) = -VAL( IC21 )
209 T( 3, 3 ) = VAL( IC11 )*REAL( IC22 )
210 TNRM = MAX( ABS( T( 1, 1 ) ),
211 $ ABS( T( 1, 2 ) ), ABS( T( 1, 3 ) ),
212 $ ABS( T( 2, 2 ) ), ABS( T( 2, 3 ) ),
213 $ ABS( T( 3, 2 ) ), ABS( T( 3, 3 ) ) )
214 CALL SCOPY( 16, T, 1, T1, 1 )
215 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
216 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
217 CALL SLAEXC( .TRUE., 3, T, 4, Q, 4, 1, 1, 2,
220 $ NINFO( INFO ) = NINFO( INFO ) + 1
221 CALL SHST01( 3, 1, 3, T1, 4, T, 4, Q, 4,
222 $ WORK, LWORK, RESULT )
223 RES = RESULT( 1 ) + RESULT( 2 )
225.NE.
IF( T1( 1, 1 )T( 3, 3 ) )
226 $ RES = RES + ONE / EPS
227.NE.
IF( T( 3, 1 )ZERO )
228 $ RES = RES + ONE / EPS
229.NE.
IF( T( 3, 2 )ZERO )
230 $ RES = RES + ONE / EPS
231.NE..AND.
IF( T( 2, 1 )0
232.NE.
$ ( T( 1, 1 )T( 2,
233.OR.
$ 2 ) SIGN( ONE, T( 1,
234.EQ.
$ 2 ) )SIGN( ONE, T( 2, 1 ) ) ) )
235 $ RES = RES + ONE / EPS
238.GT.
IF( RESRMAX ) THEN
253 DO 150 IA22 = -1, 1, 2
257 T( 1, 1 ) = VAL( IA11 )
258 T( 1, 2 ) = VAL( IA12 )
259 T( 1, 3 ) = -TWO*VAL( IB )
260 T( 2, 1 ) = -VAL( IA21 )
261 T( 2, 2 ) = VAL( IA11 )*REAL( IA22 )
262 T( 2, 3 ) = VAL( IB )
265 T( 3, 3 ) = VAL( IC )*VM( ICM )
266 TNRM = MAX( ABS( T( 1, 1 ) ),
267 $ ABS( T( 1, 2 ) ), ABS( T( 1, 3 ) ),
268 $ ABS( T( 2, 2 ) ), ABS( T( 2, 3 ) ),
269 $ ABS( T( 3, 2 ) ), ABS( T( 3, 3 ) ) )
270 CALL SCOPY( 16, T, 1, T1, 1 )
271 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
272 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
273 CALL SLAEXC( .TRUE., 3, T, 4, Q, 4, 1, 2, 1,
276 $ NINFO( INFO ) = NINFO( INFO ) + 1
277 CALL SHST01( 3, 1, 3, T1, 4, T, 4, Q, 4,
278 $ WORK, LWORK, RESULT )
279 RES = RESULT( 1 ) + RESULT( 2 )
281.NE.
IF( T1( 3, 3 )T( 1, 1 ) )
282 $ RES = RES + ONE / EPS
283.NE.
IF( T( 2, 1 )ZERO )
284 $ RES = RES + ONE / EPS
285.NE.
IF( T( 3, 1 )ZERO )
286 $ RES = RES + ONE / EPS
287.NE..AND.
IF( T( 3, 2 )0
288.NE.
$ ( T( 2, 2 )T( 3,
289.OR.
$ 3 ) SIGN( ONE, T( 2,
290.EQ.
$ 3 ) )SIGN( ONE, T( 3, 2 ) ) ) )
291 $ RES = RES + ONE / EPS
294.GT.
IF( RESRMAX ) THEN
309 DO 270 IA22 = -1, 1, 2
314 DO 220 IC22 = -1, 1, 2
317 T( 1, 1 ) = VAL( IA11 )*VM( IAM )
318 T( 1, 2 ) = VAL( IA12 )*VM( IAM )
319 T( 1, 3 ) = -TWO*VAL( IB )
320 T( 1, 4 ) = HALF*VAL( IB )
321 T( 2, 1 ) = -T( 1, 2 )*VAL( IA21 )
322 T( 2, 2 ) = VAL( IA11 )*
323 $ REAL( IA22 )*VM( IAM )
324 T( 2, 3 ) = VAL( IB )
325 T( 2, 4 ) = THREE*VAL( IB )
328 T( 3, 3 ) = VAL( IC11 )*
330 T( 3, 4 ) = VAL( IC12 )*
334 T( 4, 3 ) = -T( 3, 4 )*VAL( IC21 )*
336 T( 4, 4 ) = VAL( IC11 )*
346 CALL SCOPY( 16, T, 1, T1, 1 )
347 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
348 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
349 CALL SLAEXC( .TRUE., 4, T, 4, Q, 4,
350 $ 1, 2, 2, WORK, INFO )
352 $ NINFO( INFO ) = NINFO( INFO ) + 1
353 CALL SHST01( 4, 1, 4, T1, 4, T, 4,
356 RES = RESULT( 1 ) + RESULT( 2 )
358.NE.
IF( T( 3, 1 )ZERO )
359 $ RES = RES + ONE / EPS
360.NE.
IF( T( 4, 1 )ZERO )
361 $ RES = RES + ONE / EPS
362.NE.
IF( T( 3, 2 )ZERO )
363 $ RES = RES + ONE / EPS
364.NE.
IF( T( 4, 2 )ZERO )
365 $ RES = RES + ONE / EPS
366.NE..AND.
IF( T( 2, 1 )0
367.NE.
$ ( T( 1, 1 )T( 2,
368.OR.
$ 2 ) SIGN( ONE, T( 1,
369.EQ.
$ 2 ) )SIGN( ONE, T( 2,
370 $ 1 ) ) ) )RES = RES +
372.NE..AND.
IF( T( 4, 3 )0
373.NE.
$ ( T( 3, 3 )T( 4,
374.OR.
$ 4 ) SIGN( ONE, T( 3,
375.EQ.
$ 4 ) )SIGN( ONE, T( 4,
376 $ 3 ) ) ) )RES = RES +
380.GT.
IF( RESRMAX ) THEN
subroutine slaexc(wantq, n, t, ldt, q, ldq, j1, n1, n2, work, info)
SLAEXC swaps adjacent diagonal blocks of a real upper quasi-triangular matrix in Schur canonical form...