1*> \brief \b ALAREQ
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*  Definition:
9*  ===========
10*
11*       SUBROUTINE ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
12*
13*       .. Scalar Arguments ..
14*       CHARACTER*3        PATH
15*       INTEGER            NIN, NMATS, NOUT, NTYPES
16*       ..
17*       .. Array Arguments ..
18*       LOGICAL            DOTYPE( * )
19*       ..
20*
21*
22*> \par Purpose:
23*  =============
24*>
25*> \verbatim
26*>
27*> ALAREQ handles input for the LAPACK test program.  It is called
28*> to evaluate the input line which requested NMATS matrix types for
29*> PATH.  The flow of control is as follows:
30*>
31*> If NMATS = NTYPES then
32*>    DOTYPE(1:NTYPES) = .TRUE.
33*> else
34*>    Read the next input line for NMATS matrix types
35*>    Set DOTYPE(I) = .TRUE. for each valid type I
36*> endif
37*> \endverbatim
38*
39*  Arguments:
40*  ==========
41*
42*> \param[in] PATH
43*> \verbatim
44*>          PATH is CHARACTER*3
45*>          An LAPACK path name for testing.
46*> \endverbatim
47*>
48*> \param[in] NMATS
49*> \verbatim
50*>          NMATS is INTEGER
51*>          The number of matrix types to be used in testing this path.
52*> \endverbatim
53*>
54*> \param[out] DOTYPE
55*> \verbatim
56*>          DOTYPE is LOGICAL array, dimension (NTYPES)
57*>          The vector of flags indicating if each type will be tested.
58*> \endverbatim
59*>
60*> \param[in] NTYPES
61*> \verbatim
62*>          NTYPES is INTEGER
63*>          The maximum number of matrix types for this path.
64*> \endverbatim
65*>
66*> \param[in] NIN
67*> \verbatim
68*>          NIN is INTEGER
69*>          The unit number for input.  NIN >= 1.
70*> \endverbatim
71*>
72*> \param[in] NOUT
73*> \verbatim
74*>          NOUT is INTEGER
75*>          The unit number for output.  NOUT >= 1.
76*> \endverbatim
77*
78*  Authors:
79*  ========
80*
81*> \author Univ. of Tennessee
82*> \author Univ. of California Berkeley
83*> \author Univ. of Colorado Denver
84*> \author NAG Ltd.
85*
86*> \date November 2011
87*
88*> \ingroup aux_lin
89*
90*  =====================================================================
91      SUBROUTINE ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
92*
93*  -- LAPACK test routine (version 3.4.0) --
94*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
95*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
96*     November 2011
97*
98*     .. Scalar Arguments ..
99      CHARACTER*3        PATH
100      INTEGER            NIN, NMATS, NOUT, NTYPES
101*     ..
102*     .. Array Arguments ..
103      LOGICAL            DOTYPE( * )
104*     ..
105*
106*  =====================================================================
107*
108*     .. Local Scalars ..
109      LOGICAL            FIRSTT
110      CHARACTER          C1
111      CHARACTER*10       INTSTR
112      CHARACTER*80       LINE
113      INTEGER            I, I1, IC, J, K, LENP, NT
114*     ..
115*     .. Local Arrays ..
116      INTEGER            NREQ( 100 )
117*     ..
118*     .. Intrinsic Functions ..
119      INTRINSIC          LEN
120*     ..
121*     .. Data statements ..
122      DATA               INTSTR / '0123456789' /
123*     ..
124*     .. Executable Statements ..
125*
126      IF( NMATS.GE.NTYPES ) THEN
127*
128*        Test everything if NMATS >= NTYPES.
129*
130         DO 10 I = 1, NTYPES
131            DOTYPE( I ) = .TRUE.
132   10    CONTINUE
133      ELSE
134         DO 20 I = 1, NTYPES
135            DOTYPE( I ) = .FALSE.
136   20    CONTINUE
137         FIRSTT = .TRUE.
138*
139*        Read a line of matrix types if 0 < NMATS < NTYPES.
140*
141         IF( NMATS.GT.0 ) THEN
142            READ( NIN, FMT = '(A80)', END = 90 )LINE
143            LENP = LEN( LINE )
144            I = 0
145            DO 60 J = 1, NMATS
146               NREQ( J ) = 0
147               I1 = 0
148   30          CONTINUE
149               I = I + 1
150               IF( I.GT.LENP ) THEN
151                  IF( J.EQ.NMATS .AND. I1.GT.0 ) THEN
152                     GO TO 60
153                  ELSE
154                     WRITE( NOUT, FMT = 9995 )LINE
155                     WRITE( NOUT, FMT = 9994 )NMATS
156                     GO TO 80
157                  END IF
158               END IF
159               IF( LINE( I: I ).NE.' ' .AND. LINE( I: I ).NE.',' ) THEN
160                  I1 = I
161                  C1 = LINE( I1: I1 )
162*
163*              Check that a valid integer was read
164*
165                  DO 40 K = 1, 10
166                     IF( C1.EQ.INTSTR( K: K ) ) THEN
167                        IC = K - 1
168                        GO TO 50
169                     END IF
170   40             CONTINUE
171                  WRITE( NOUT, FMT = 9996 )I, LINE
172                  WRITE( NOUT, FMT = 9994 )NMATS
173                  GO TO 80
174   50             CONTINUE
175                  NREQ( J ) = 10*NREQ( J ) + IC
176                  GO TO 30
177               ELSE IF( I1.GT.0 ) THEN
178                  GO TO 60
179               ELSE
180                  GO TO 30
181               END IF
182   60       CONTINUE
183         END IF
184         DO 70 I = 1, NMATS
185            NT = NREQ( I )
186            IF( NT.GT.0 .AND. NT.LE.NTYPES ) THEN
187               IF( DOTYPE( NT ) ) THEN
188                  IF( FIRSTT )
189     $               WRITE( NOUT, FMT = * )
190                  FIRSTT = .FALSE.
191                  WRITE( NOUT, FMT = 9997 )NT, PATH
192               END IF
193               DOTYPE( NT ) = .TRUE.
194            ELSE
195               WRITE( NOUT, FMT = 9999 )PATH, NT, NTYPES
196 9999          FORMAT( ' *** Invalid type request for ', A3, ', type  ',
197     $               I4, ': must satisfy  1 <= type <= ', I2 )
198            END IF
199   70    CONTINUE
200   80    CONTINUE
201      END IF
202      RETURN
203*
204   90 CONTINUE
205      WRITE( NOUT, FMT = 9998 )PATH
206 9998 FORMAT( /' *** End of file reached when trying to read matrix ',
207     $      'types for ', A3, /' *** Check that you are requesting the',
208     $      ' right number of types for each path', / )
209 9997 FORMAT( ' *** Warning:  duplicate request of matrix type ', I2,
210     $      ' for ', A3 )
211 9996 FORMAT( //' *** Invalid integer value in column ', I2,
212     $      ' of input', ' line:', /A79 )
213 9995 FORMAT( //' *** Not enough matrix types on input line', /A79 )
214 9994 FORMAT( ' ==> Specify ', I4, ' matrix types on this line or ',
215     $      'adjust NTYPES on previous line' )
216      WRITE( NOUT, FMT = * )
217      STOP
218*
219*     End of ALAREQ
220*
221      END
222