87 SUBROUTINE dget36( RMAX, LMAX, NINFO, KNT, NIN )
94 INTEGER KNT, LMAX, NIN
104 DOUBLE PRECISION ZERO, ONE
105 parameter( zero = 0.0d0, one = 1.0d0 )
107 parameter( ldt = 10, lwork = 2*ldt*ldt )
110 INTEGER I, IFST, IFST1, IFST2, IFSTSV, ILST, ILST1,
111 $ ILST2, ILSTSV, INFO1, INFO2, J, LOC, N
112 DOUBLE PRECISION EPS, RES
115 DOUBLE PRECISION Q( LDT, LDT ), RESULT( 2 ), T1( LDT, LDT ),
116 $ T2( LDT, LDT ), TMP( LDT, LDT ), WORK( LWORK )
119 DOUBLE PRECISION DLAMCH
141 READ( nin, fmt = * )n, ifst, ilst
146 READ( nin, fmt = * )( tmp( i, j ), j = 1, n )
148 CALL dlacpy(
'F', n, n, tmp, ldt, t1, ldt )
149 CALL dlacpy(
'F', n, n, tmp, ldt, t2, ldt )
160 CALL dlaset(
'Full', n, n, zero, one, q, ldt )
161 CALL dtrexc(
'N', n, t1, ldt, q, ldt, ifst1, ilst1, work, info1 )
164 IF( i.EQ.j .AND. q( i, j ).NE.one )
165 $ res = res + one / eps
166 IF( i.NE.j .AND. q( i, j ).NE.zero )
167 $ res = res + one / eps
173 CALL dlaset(
'Full', n, n, zero, one, q, ldt )
174 CALL dtrexc(
'V', n, t2, ldt, q, ldt, ifst2, ilst2, work, info2 )
180 IF( t1( i, j ).NE.t2( i, j ) )
181 $ res = res + one / eps
185 $ res = res + one / eps
187 $ res = res + one / eps
189 $ res = res + one / eps
193 IF( info2.NE.0 )
THEN
194 ninfo( info2 ) = ninfo( info2 ) + 1
196 IF( abs( ifst2-ifstsv ).GT.1 )
197 $ res = res + one / eps
198 IF( abs( ilst2-ilstsv ).GT.1 )
199 $ res = res + one / eps
204 CALL dhst01( n, 1, n, tmp, ldt, t2, ldt, q, ldt, work, lwork,
206 res = res + result( 1 ) + result( 2 )
212 IF( t2( loc+1, loc ).NE.zero )
THEN
216 IF( t2( loc, loc+1 ).EQ.zero .OR. t2( loc, loc ).NE.
217 $ t2( loc+1, loc+1 ) .OR. sign( one, t2( loc, loc+1 ) ).EQ.
218 $ sign( one, t2( loc+1, loc ) ) )res = res + one / eps
220 IF( t2( i, loc ).NE.zero )
221 $ res = res + one / res
222 IF( t2( i, loc+1 ).NE.zero )
223 $ res = res + one / res
231 IF( t2( i, loc ).NE.zero )
232 $ res = res + one / res
238 IF( res.GT.rmax )
THEN
subroutine dget36(rmax, lmax, ninfo, knt, nin)
DGET36
subroutine dhst01(n, ilo, ihi, a, lda, h, ldh, q, ldq, work, lwork, result)
DHST01
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dlaset(uplo, m, n, alpha, beta, a, lda)
DLASET initializes the off-diagonal elements and the diagonal elements of a matrix to given values.
subroutine dtrexc(compq, n, t, ldt, q, ldq, ifst, ilst, work, info)
DTREXC