3 * =========== DOCUMENTATION ===========
5 * Online html documentation available at
6 * http://www.netlib.org/lapack/explore-html/
11 * SUBROUTINE SGET34( RMAX, LMAX, NINFO, KNT )
13 * .. Scalar Arguments ..
17 * .. Array Arguments ..
27 *> SGET34 tests SLAEXC, a routine for swapping adjacent blocks (either
28 *> 1 by 1 or 2 by 2) on the diagonal of a matrix in real Schur form.
29 *> Thus, SLAEXC computes an orthogonal matrix Q such that
31 *> Q' * [ A B ] * Q = [ C1 B1 ]
34 *> where C1 is similar to C and A1 is similar to A. Both A and C are
35 *> assumed to be in standard form (equal diagonal entries and
36 *> offdiagonal with differing signs) and A1 and C1 are returned with the
39 *> The test code verifies these last last assertions, as well as that
40 *> the residual in the above equation is small.
49 *> Value of the largest test ratio.
55 *> Example number where largest test ratio achieved.
60 *> NINFO is INTEGER array, dimension (2)
61 *> NINFO(J) is the number of examples where INFO=J occurred.
67 *> Total number of examples tested.
73 *> \author Univ. of Tennessee
74 *> \author Univ. of California Berkeley
75 *> \author Univ. of Colorado Denver
78 *> \date November 2011
80 *> \ingroup single_eig
82 * =====================================================================
83 SUBROUTINE SGET34( RMAX, LMAX, NINFO, KNT )
85 * -- LAPACK test routine (version 3.4.0) --
86 * -- LAPACK is a software package provided by Univ. of Tennessee, --
87 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
90 * .. Scalar Arguments ..
94 * .. Array Arguments ..
98 * =====================================================================
102 PARAMETER ( ZERO = 0.0E0, HALF = 0.5E0, ONE = 1.0E0 )
104 PARAMETER ( TWO = 2.0E0, THREE = 3.0E0 )
106 PARAMETER ( LWORK = 32 )
108 * .. Local Scalars ..
109 INTEGER I, IA, IA11, IA12, IA21, IA22, IAM, IB, IC,
110 $ IC11, IC12, IC21, IC22, ICM, INFO, J
111 REAL BIGNUM, EPS, RES, SMLNUM, TNRM
114 REAL Q( 4, 4 ), RESULT( 2 ), T( 4, 4 ), T1( 4, 4 ),
115 $ VAL( 9 ), VM( 2 ), WORK( LWORK )
117 * .. External Functions ..
121 * .. External Subroutines ..
122 EXTERNAL SCOPY, SLAEXC
124 * .. Intrinsic Functions ..
125 INTRINSIC ABS, MAX, REAL, SIGN, SQRT
127 * .. Executable Statements ..
129 * Get machine parameters
132 SMLNUM = SLAMCH( 'S' ) / EPS
133 BIGNUM = ONE / SMLNUM
134 CALL SLABAD( SMLNUM, BIGNUM )
136 * Set up test case parameters
139 VAL( 2 ) = SQRT( SMLNUM )
142 VAL( 5 ) = SQRT( BIGNUM )
143 VAL( 6 ) = -SQRT( SMLNUM )
146 VAL( 9 ) = -SQRT( BIGNUM )
148 VM( 2 ) = ONE + TWO*EPS
149 CALL SCOPY( 16, VAL( 4 ), 0, T( 1, 1 ), 1 )
163 T( 1, 1 ) = VAL( IA )*VM( IAM )
164 T( 2, 2 ) = VAL( IC )
165 T( 1, 2 ) = VAL( IB )
167 TNRM = MAX( ABS( T( 1, 1 ) ), ABS( T( 2, 2 ) ),
169 CALL SCOPY( 16, T, 1, T1, 1 )
170 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
171 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
172 CALL SLAEXC( .TRUE., 2, T, 4, Q, 4, 1, 1, 1, WORK,
175 $ NINFO( INFO ) = NINFO( INFO ) + 1
176 CALL SHST01( 2, 1, 2, T1, 4, T, 4, Q, 4, WORK, LWORK,
178 RES = RESULT( 1 ) + RESULT( 2 )
180 $ RES = RES + ONE / EPS
181 IF( T( 1, 1 ).NE.T1( 2, 2 ) )
182 $ RES = RES + ONE / EPS
183 IF( T( 2, 2 ).NE.T1( 1, 1 ) )
184 $ RES = RES + ONE / EPS
185 IF( T( 2, 1 ).NE.ZERO )
186 $ RES = RES + ONE / EPS
188 IF( RES.GT.RMAX ) THEN
203 DO 50 IC22 = -1, 1, 2
204 T( 1, 1 ) = VAL( IA )*VM( IAM )
205 T( 1, 2 ) = VAL( IB )
206 T( 1, 3 ) = -TWO*VAL( IB )
208 T( 2, 2 ) = VAL( IC11 )
209 T( 2, 3 ) = VAL( IC12 )
211 T( 3, 2 ) = -VAL( IC21 )
212 T( 3, 3 ) = VAL( IC11 )*REAL( IC22 )
213 TNRM = MAX( ABS( T( 1, 1 ) ),
214 $ ABS( T( 1, 2 ) ), ABS( T( 1, 3 ) ),
215 $ ABS( T( 2, 2 ) ), ABS( T( 2, 3 ) ),
216 $ ABS( T( 3, 2 ) ), ABS( T( 3, 3 ) ) )
217 CALL SCOPY( 16, T, 1, T1, 1 )
218 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
219 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
220 CALL SLAEXC( .TRUE., 3, T, 4, Q, 4, 1, 1, 2,
223 $ NINFO( INFO ) = NINFO( INFO ) + 1
224 CALL SHST01( 3, 1, 3, T1, 4, T, 4, Q, 4,
225 $ WORK, LWORK, RESULT )
226 RES = RESULT( 1 ) + RESULT( 2 )
228 IF( T1( 1, 1 ).NE.T( 3, 3 ) )
229 $ RES = RES + ONE / EPS
230 IF( T( 3, 1 ).NE.ZERO )
231 $ RES = RES + ONE / EPS
232 IF( T( 3, 2 ).NE.ZERO )
233 $ RES = RES + ONE / EPS
234 IF( T( 2, 1 ).NE.0 .AND.
235 $ ( T( 1, 1 ).NE.T( 2,
236 $ 2 ) .OR. SIGN( ONE, T( 1,
237 $ 2 ) ).EQ.SIGN( ONE, T( 2, 1 ) ) ) )
238 $ RES = RES + ONE / EPS
241 IF( RES.GT.RMAX ) THEN
256 DO 150 IA22 = -1, 1, 2
260 T( 1, 1 ) = VAL( IA11 )
261 T( 1, 2 ) = VAL( IA12 )
262 T( 1, 3 ) = -TWO*VAL( IB )
263 T( 2, 1 ) = -VAL( IA21 )
264 T( 2, 2 ) = VAL( IA11 )*REAL( IA22 )
265 T( 2, 3 ) = VAL( IB )
268 T( 3, 3 ) = VAL( IC )*VM( ICM )
269 TNRM = MAX( ABS( T( 1, 1 ) ),
270 $ ABS( T( 1, 2 ) ), ABS( T( 1, 3 ) ),
271 $ ABS( T( 2, 2 ) ), ABS( T( 2, 3 ) ),
272 $ ABS( T( 3, 2 ) ), ABS( T( 3, 3 ) ) )
273 CALL SCOPY( 16, T, 1, T1, 1 )
274 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
275 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
276 CALL SLAEXC( .TRUE., 3, T, 4, Q, 4, 1, 2, 1,
279 $ NINFO( INFO ) = NINFO( INFO ) + 1
280 CALL SHST01( 3, 1, 3, T1, 4, T, 4, Q, 4,
281 $ WORK, LWORK, RESULT )
282 RES = RESULT( 1 ) + RESULT( 2 )
284 IF( T1( 3, 3 ).NE.T( 1, 1 ) )
285 $ RES = RES + ONE / EPS
286 IF( T( 2, 1 ).NE.ZERO )
287 $ RES = RES + ONE / EPS
288 IF( T( 3, 1 ).NE.ZERO )
289 $ RES = RES + ONE / EPS
290 IF( T( 3, 2 ).NE.0 .AND.
291 $ ( T( 2, 2 ).NE.T( 3,
292 $ 3 ) .OR. SIGN( ONE, T( 2,
293 $ 3 ) ).EQ.SIGN( ONE, T( 3, 2 ) ) ) )
294 $ RES = RES + ONE / EPS
297 IF( RES.GT.RMAX ) THEN
312 DO 270 IA22 = -1, 1, 2
317 DO 220 IC22 = -1, 1, 2
320 T( 1, 1 ) = VAL( IA11 )*VM( IAM )
321 T( 1, 2 ) = VAL( IA12 )*VM( IAM )
322 T( 1, 3 ) = -TWO*VAL( IB )
323 T( 1, 4 ) = HALF*VAL( IB )
324 T( 2, 1 ) = -T( 1, 2 )*VAL( IA21 )
325 T( 2, 2 ) = VAL( IA11 )*
326 $ REAL( IA22 )*VM( IAM )
327 T( 2, 3 ) = VAL( IB )
328 T( 2, 4 ) = THREE*VAL( IB )
331 T( 3, 3 ) = VAL( IC11 )*
333 T( 3, 4 ) = VAL( IC12 )*
337 T( 4, 3 ) = -T( 3, 4 )*VAL( IC21 )*
339 T( 4, 4 ) = VAL( IC11 )*
349 CALL SCOPY( 16, T, 1, T1, 1 )
350 CALL SCOPY( 16, VAL( 1 ), 0, Q, 1 )
351 CALL SCOPY( 4, VAL( 3 ), 0, Q, 5 )
352 CALL SLAEXC( .TRUE., 4, T, 4, Q, 4,
353 $ 1, 2, 2, WORK, INFO )
355 $ NINFO( INFO ) = NINFO( INFO ) + 1
356 CALL SHST01( 4, 1, 4, T1, 4, T, 4,
359 RES = RESULT( 1 ) + RESULT( 2 )
361 IF( T( 3, 1 ).NE.ZERO )
362 $ RES = RES + ONE / EPS
363 IF( T( 4, 1 ).NE.ZERO )
364 $ RES = RES + ONE / EPS
365 IF( T( 3, 2 ).NE.ZERO )
366 $ RES = RES + ONE / EPS
367 IF( T( 4, 2 ).NE.ZERO )
368 $ RES = RES + ONE / EPS
369 IF( T( 2, 1 ).NE.0 .AND.
370 $ ( T( 1, 1 ).NE.T( 2,
371 $ 2 ) .OR. SIGN( ONE, T( 1,
372 $ 2 ) ).EQ.SIGN( ONE, T( 2,
373 $ 1 ) ) ) )RES = RES +
375 IF( T( 4, 3 ).NE.0 .AND.
376 $ ( T( 3, 3 ).NE.T( 4,
377 $ 4 ) .OR. SIGN( ONE, T( 3,
378 $ 4 ) ).EQ.SIGN( ONE, T( 4,
379 $ 3 ) ) ) )RES = RES +
383 IF( RES.GT.RMAX ) THEN