160 SUBROUTINE cunt03( RC, MU, MV, N, K, U, LDU, V, LDV, WORK, LWORK,
161 $ RWORK, RESULT, INFO )
169 INTEGER INFO, K, LDU, LDV, LWORK, MU, MV, N
174 COMPLEX U( LDU, * ), V( LDV, * ), WORK( * )
182 parameter( zero = 0.0e0, one = 1.0e0 )
185 INTEGER I, IRC, J, LMX
193 EXTERNAL lsame, icamax, slamch
206 IF(
lsame( rc,
'R' ) )
THEN
208 ELSE IF(
lsame( rc, 'c
' ) ) THEN
215.LT.
ELSE IF( MU0 ) THEN
217.LT.
ELSE IF( MV0 ) THEN
219.LT.
ELSE IF( N0 ) THEN
221.LT..OR..GT.
ELSE IF( K0 KMAX( MU, MV ) ) THEN
223.EQ..AND..LT..OR.
ELSE IF( ( IRC0 LDUMAX( 1, MU ) )
224.EQ..AND..LT.
$ ( IRC1 LDUMAX( 1, N ) ) ) THEN
226.EQ..AND..LT..OR.
ELSE IF( ( IRC0 LDVMAX( 1, MV ) )
227.EQ..AND..LT.
$ ( IRC1 LDVMAX( 1, N ) ) ) THEN
231 CALL XERBLA( 'cunt03', -INFO )
238.EQ..OR..EQ..OR..EQ.
IF( MU0 MV0 N0 )
243 ULP = SLAMCH( 'precision
' )
251 LMX = ICAMAX( N, U( I, 1 ), LDU )
252.EQ.
IF( V( I, LMX )CMPLX( ZERO ) ) THEN
255 SV = ABS( V( I, LMX ) ) / V( I, LMX )
257.EQ.
IF( U( I, LMX )CMPLX( ZERO ) ) THEN
260 SU = ABS( U( I, LMX ) ) / U( I, LMX )
264 RES1 = MAX( RES1, ABS( U( I, J )-S*V( I, J ) ) )
267 RES1 = RES1 / ( REAL( N )*ULP )
271 CALL CUNT01( 'rows
', MV, N, V, LDV, WORK, LWORK, RWORK, RES2 )
279 LMX = ICAMAX( N, U( 1, I ), 1 )
280.EQ.
IF( V( LMX, I )CMPLX( ZERO ) ) THEN
283 SV = ABS( V( LMX, I ) ) / V( LMX, I )
285.EQ.
IF( U( LMX, I )CMPLX( ZERO ) ) THEN
288 SU = ABS( U( LMX, I ) ) / U( LMX, I )
292 RES1 = MAX( RES1, ABS( U( J, I )-S*V( J, I ) ) )
295 RES1 = RES1 / ( REAL( N )*ULP )
299 CALL CUNT01( 'columns
', N, MV, V, LDV, WORK, LWORK, RWORK,
303 RESULT = MIN( MAX( RES1, RES2 ), ONE / ULP )
subroutine cunt03(rc, mu, mv, n, k, u, ldu, v, ldv, work, lwork, rwork, result, info)
CUNT03
subroutine cunt01(rowcol, m, n, u, ldu, work, lwork, rwork, resid)
CUNT01