LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages

◆ sget40()

subroutine sget40 ( real rmax,
integer lmax,
integer, dimension( 2 ) ninfo,
integer knt,
integer nin )

SGET40

Purpose:
!> !> SGET40 tests STGEXC, a routine for swapping adjacent blocks (either !> 1 by 1 or 2 by 2) on the diagonal of a pencil in real generalized Schur form. !> Thus, STGEXC computes an orthogonal matrices Q and Z such that !> !> Q' * ( [ A B ], [ D E ] ) * Z = ( [ C1 B1 ], [ F1 E1 ] ) !> ( [ 0 C ] [ F ] ) ( [ 0 A1 ] [ D1] ) !> !> where (C1,F1) is similar to (C,F) and (A1,D1) is similar to (A,D). !> Both (A,D) and (C,F) are assumed to be in standard form !> and (A1,D1) and (C1,F1) are returned with the !> same properties. !>
Parameters
[out]RMAX
!> RMAX is REAL !> Value of the largest test ratio. !>
[out]LMAX
!> LMAX is INTEGER !> Example number where largest test ratio achieved. !>
[out]NINFO
!> NINFO is INTEGER array, dimension (2) !> NINFO( 1 ) = STGEXC without accumulation returned INFO nonzero !> NINFO( 2 ) = STGEXC with accumulation returned INFO nonzero !>
[out]KNT
!> KNT is INTEGER !> Total number of examples tested. !>
[in]NIN
!> NIN is INTEGER !> Input logical unit number. !>
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.

Definition at line 84 of file sget40.f.

85*
86* -- LAPACK test routine --
87* -- LAPACK is a software package provided by Univ. of Tennessee, --
88* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
89*
90* .. Scalar Arguments ..
91 INTEGER KNT, LMAX, NIN
92 REAL RMAX
93* ..
94* .. Array Arguments ..
95 INTEGER NINFO( 2 )
96* ..
97*
98* =====================================================================
99*
100* .. Parameters ..
101 REAL ZERO, ONE
102 parameter( zero = 0.0, one = 1.0 )
103 INTEGER LDT, LWORK
104 parameter( ldt = 10, lwork = 100 + 4*ldt + 16 )
105* ..
106* .. Local Scalars ..
107 INTEGER I, IFST, IFST1, IFST2, IFSTSV, ILST, ILST1,
108 $ ILST2, ILSTSV, J, LOC, N
109 REAL EPS, RES
110* ..
111* .. Local Arrays ..
112 REAL Q( LDT, LDT ), Z( LDT, LDT ), RESULT( 4 ),
113 $ T( LDT, LDT ), T1( LDT, LDT ), T2( LDT, LDT ),
114 $ S( LDT, LDT ), S1( LDT, LDT ), S2( LDT, LDT ),
115 $ TMP( LDT, LDT ), WORK( LWORK )
116* ..
117* .. External Functions ..
118 REAL SLAMCH
119 EXTERNAL slamch
120* ..
121* .. External Subroutines ..
122 EXTERNAL sget51, slacpy, slaset, stgexc
123* ..
124* .. Intrinsic Functions ..
125 INTRINSIC abs, sign
126* ..
127* .. Executable Statements ..
128*
129 eps = slamch( 'P' )
130 rmax = zero
131 lmax = 0
132 knt = 0
133 ninfo( 1 ) = 0
134 ninfo( 2 ) = 0
135*
136* Read input data until N=0
137*
138 10 CONTINUE
139 READ( nin, fmt = * )n, ifst, ilst
140 IF( n.EQ.0 )
141 $ RETURN
142 knt = knt + 1
143 DO 20 i = 1, n
144 READ( nin, fmt = * )( tmp( i, j ), j = 1, n )
145 20 CONTINUE
146 CALL slacpy( 'F', n, n, tmp, ldt, t, ldt )
147 CALL slacpy( 'F', n, n, tmp, ldt, t1, ldt )
148 CALL slacpy( 'F', n, n, tmp, ldt, t2, ldt )
149 DO 25 i = 1, n
150 READ( nin, fmt = * )( tmp( i, j ), j = 1, n )
151 25 CONTINUE
152 CALL slacpy( 'F', n, n, tmp, ldt, s, ldt )
153 CALL slacpy( 'F', n, n, tmp, ldt, s1, ldt )
154 CALL slacpy( 'F', n, n, tmp, ldt, s2, ldt )
155 ifstsv = ifst
156 ilstsv = ilst
157 ifst1 = ifst
158 ilst1 = ilst
159 ifst2 = ifst
160 ilst2 = ilst
161 res = zero
162*
163* Test without accumulating Q and Z
164*
165 CALL slaset( 'Full', n, n, zero, one, q, ldt )
166 CALL slaset( 'Full', n, n, zero, one, z, ldt )
167 CALL stgexc( .false., .false., n, t1, ldt, s1, ldt, q, ldt,
168 $ z, ldt, ifst1, ilst1, work, lwork, ninfo( 1 ) )
169 DO 40 i = 1, n
170 DO 30 j = 1, n
171 IF( i.EQ.j .AND. q( i, j ).NE.one )
172 $ res = res + one / eps
173 IF( i.NE.j .AND. q( i, j ).NE.zero )
174 $ res = res + one / eps
175 IF( i.EQ.j .AND. z( i, j ).NE.one )
176 $ res = res + one / eps
177 IF( i.NE.j .AND. z( i, j ).NE.zero )
178 $ res = res + one / eps
179 30 CONTINUE
180 40 CONTINUE
181*
182* Test with accumulating Q
183*
184 CALL slaset( 'Full', n, n, zero, one, q, ldt )
185 CALL slaset( 'Full', n, n, zero, one, z, ldt )
186 CALL stgexc( .true., .true., n, t2, ldt, s2, ldt, q, ldt,
187 $ z, ldt, ifst2, ilst2, work, lwork, ninfo( 2 ) )
188*
189* Compare T1 with T2 and S1 with S2
190*
191 DO 60 i = 1, n
192 DO 50 j = 1, n
193 IF( t1( i, j ).NE.t2( i, j ) )
194 $ res = res + one / eps
195 IF( s1( i, j ).NE.s2( i, j ) )
196 $ res = res + one / eps
197 50 CONTINUE
198 60 CONTINUE
199 IF( ifst1.NE.ifst2 )
200 $ res = res + one / eps
201 IF( ilst1.NE.ilst2 )
202 $ res = res + one / eps
203 IF( ninfo( 1 ).NE.ninfo( 2 ) )
204 $ res = res + one / eps
205*
206* Test orthogonality of Q and Z and backward error on T2 and S2
207*
208 CALL sget51( 1, n, t, ldt, t2, ldt, q, ldt, z, ldt, work,
209 $ result( 1 ) )
210 CALL sget51( 1, n, s, ldt, s2, ldt, q, ldt, z, ldt, work,
211 $ result( 2 ) )
212 CALL sget51( 3, n, t, ldt, t2, ldt, q, ldt, q, ldt, work,
213 $ result( 3 ) )
214 CALL sget51( 3, n, t, ldt, t2, ldt, z, ldt, z, ldt, work,
215 $ result( 4 ) )
216 res = res + result( 1 ) + result( 2 ) + result( 3 ) + result( 4 )
217*
218* Read next matrix pair
219*
220 GO TO 10
221*
222* End of SGET40
223*
subroutine slacpy(uplo, m, n, a, lda, b, ldb)
SLACPY copies all or part of one two-dimensional array to another.
Definition slacpy.f:101
real function slamch(cmach)
SLAMCH
Definition slamch.f:68
subroutine slaset(uplo, m, n, alpha, beta, a, lda)
SLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
Definition slaset.f:108
subroutine stgexc(wantq, wantz, n, a, lda, b, ldb, q, ldq, z, ldz, ifst, ilst, work, lwork, info)
STGEXC
Definition stgexc.f:218
subroutine sget51(itype, n, a, lda, b, ldb, u, ldu, v, ldv, work, result)
SGET51
Definition sget51.f:149
Here is the call graph for this function:
Here is the caller graph for this function: