1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
|
SUBROUTINE IB01OY( NS, NMAX, N, SV, INFO )
C
C RELEASE 4.0, WGS COPYRIGHT 2000.
C
C PURPOSE
C
C To ask for user's confirmation of the system order found by
C SLICOT Library routine IB01OD. This routine may be modified,
C but its interface must be preserved.
C
C ARGUMENTS
C
C Input/Output Parameters
C
C NS (input) INTEGER
C The number of singular values. NS > 0.
C
C NMAX (input) INTEGER
C The maximum value of the system order. 0 <= NMAX <= NS.
C
C N (input/output) INTEGER
C On entry, the estimate of the system order computed by
C IB01OD routine. 0 <= N <= NS.
C On exit, the user's estimate of the system order, which
C could be identical with the input value of N.
C Note that the output value of N should be less than
C or equal to NMAX.
C
C SV (input) DOUBLE PRECISION array, dimension ( NS )
C The singular values, in descending order, used for
C determining the system order.
C
C Error Indicator
C
C INFO INTEGER
C = 0: successful exit;
C < 0: if INFO = -i, the i-th argument had an illegal
C value.
C
C CONTRIBUTORS
C
C V. Sima, Research Institute for Informatics, Bucharest, Aug. 1999.
C
C REVISIONS
C
C -
C
C KEYWORDS
C
C Identification, parameter estimation, singular values, structure
C identification.
C
C *********************************************************************
C
C .. Parameters ..
INTEGER INTRMN, OUTRMN
PARAMETER ( INTRMN = 5, OUTRMN = 6 )
C INTRMN is the unit number for the (terminal) input device.
C OUTRMN is the unit number for the (terminal) output device.
C ..
C .. Scalar Arguments ..
INTEGER INFO, N, NMAX, NS
C ..
C .. Array Arguments ..
DOUBLE PRECISION SV( * )
C ..
C .. Local Scalars ..
LOGICAL YES
INTEGER I
CHARACTER ANS
C ..
C .. External Functions ..
LOGICAL LSAME
EXTERNAL LSAME
C ..
C .. External Subroutines ..
EXTERNAL XERBLA
C
C .. Executable Statements ..
C
C Check the scalar input parameters.
C
INFO = 0
IF( NS.LE.0 ) THEN
INFO = -1
ELSE IF( NMAX.LT.0 .OR. NMAX.GT.NS ) THEN
INFO = -2
ELSE IF( N.LT.0 .OR. N.GT.NS ) THEN
INFO = -3
END IF
C
IF( INFO.NE.0 ) THEN
CALL XERBLA( 'IB01OY', -INFO )
RETURN
END IF
C
WRITE( OUTRMN, '(/'' Singular values (in descending order) used'',
$ '' to estimate the system order:'', //
$ (5D15.8) )' ) ( SV(I), I = 1, NS )
WRITE( OUTRMN, '(/'' Estimated order of the system, n = '', I5 )'
$ ) N
WRITE( OUTRMN, '(/'' Do you want this value of n to be used'',
$ '' to determine the system matrices?'' )' )
C
10 CONTINUE
WRITE( OUTRMN, '(/'' Type "yes" or "no": '' )' )
READ ( INTRMN, '( A )' ) ANS
YES = LSAME( ANS, 'Y' )
IF( YES ) THEN
IF( N.LE.NMAX ) THEN
C
C The value of n is adequate and has been confirmed.
C
RETURN
ELSE
C
C The estimated value of n is not acceptable.
C
WRITE( OUTRMN, '(/'' n should be less than or equal'',
$ '' to '', I5 )' ) NMAX
WRITE( OUTRMN, '( '' (It may be useful to restart'',
$ '' with a larger tolerance.)'' )' )
GO TO 20
END IF
C
ELSE IF( LSAME( ANS, 'N' ) ) THEN
GO TO 20
ELSE
C
C Wrong answer should be re-entered.
C
GO TO 10
END IF
C
C Enter the desired value of n.
C
20 CONTINUE
WRITE( OUTRMN,'(/'' Enter the desired value of n (n <= '', I5,
$ ''); n = '' )' ) NMAX
READ ( INTRMN, * ) N
IF ( N.LT.0 ) THEN
C
C The specified value of n is not acceptable.
C
WRITE( OUTRMN, '(/'' n should be larger than zero.'' )' )
GO TO 20
ELSE IF ( N.GT.NMAX ) THEN
C
C The specified value of n is not acceptable.
C
WRITE( OUTRMN, '(/'' n should be less than or equal to '',
$ I5 )' ) NMAX
GO TO 20
END IF
C
RETURN
C
C *** Last line of IB01OY ***
END
|