1       SUBROUTINE ALADHD( IOUNIT, PATH )
  2 *
  3 *  -- LAPACK test routine (version 3.1) --
  4 *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
  5 *     November 2006
  6 *
  7 *     .. Scalar Arguments ..
  8       CHARACTER*3        PATH
  9       INTEGER            IOUNIT
 10 *     ..
 11 *
 12 *  Purpose
 13 *  =======
 14 *
 15 *  ALADHD prints header information for the driver routines test paths.
 16 *
 17 *  Arguments
 18 *  =========
 19 *
 20 *  IOUNIT  (input) INTEGER
 21 *          The unit number to which the header information should be
 22 *          printed.
 23 *
 24 *  PATH    (input) CHARACTER*3
 25 *          The name of the path for which the header information is to
 26 *          be printed.  Current paths are
 27 *             _GE:  General matrices
 28 *             _GB:  General band
 29 *             _GT:  General Tridiagonal
 30 *             _PO:  Symmetric or Hermitian positive definite
 31 *             _PS:  Symmetric or Hermitian positive semi-definite
 32 *             _PP:  Symmetric or Hermitian positive definite packed
 33 *             _PB:  Symmetric or Hermitian positive definite band
 34 *             _PT:  Symmetric or Hermitian positive definite tridiagonal
 35 *             _SY:  Symmetric indefinite
 36 *             _SP:  Symmetric indefinite packed
 37 *             _HE:  (complex) Hermitian indefinite
 38 *             _HP:  (complex) Hermitian indefinite packed
 39 *          The first character must be one of S, D, C, or Z (C or Z only
 40 *          if complex).
 41 *
 42 *     .. Local Scalars ..
 43       LOGICAL            CORZ, SORD
 44       CHARACTER          C1, C3
 45       CHARACTER*2        P2
 46       CHARACTER*9        SYM
 47 *     ..
 48 *     .. External Functions ..
 49       LOGICAL            LSAME, LSAMEN
 50       EXTERNAL           LSAME, LSAMEN
 51 *     ..
 52 *     .. Executable Statements ..
 53 *
 54       IF( IOUNIT.LE.0 )
 55      $   RETURN
 56       C1 = PATH( 11 )
 57       C3 = PATH( 33 )
 58       P2 = PATH( 23 )
 59       SORD = LSAME( C1, 'S' ) .OR. LSAME( C1, 'D' )
 60       CORZ = LSAME( C1, 'C' ) .OR. LSAME( C1, 'Z' )
 61       IF.NOT.( SORD .OR. CORZ ) )
 62      $   RETURN
 63 *
 64       IF( LSAMEN( 2, P2, 'GE' ) ) THEN
 65 *
 66 *        GE: General dense
 67 *
 68          WRITE( IOUNIT, FMT = 9999 )PATH
 69          WRITE( IOUNIT, FMT = '( '' Matrix types:'' )' )
 70          WRITE( IOUNIT, FMT = 9989 )
 71          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
 72          WRITE( IOUNIT, FMT = 9981 )1
 73          WRITE( IOUNIT, FMT = 9980 )2
 74          WRITE( IOUNIT, FMT = 9979 )3
 75          WRITE( IOUNIT, FMT = 9978 )4
 76          WRITE( IOUNIT, FMT = 9977 )5
 77          WRITE( IOUNIT, FMT = 9976 )6
 78          WRITE( IOUNIT, FMT = 9972 )7
 79          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
 80 *
 81       ELSE IF( LSAMEN( 2, P2, 'GB' ) ) THEN
 82 *
 83 *        GB: General band
 84 *
 85          WRITE( IOUNIT, FMT = 9998 )PATH
 86          WRITE( IOUNIT, FMT = '( '' Matrix types:'' )' )
 87          WRITE( IOUNIT, FMT = 9988 )
 88          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
 89          WRITE( IOUNIT, FMT = 9981 )1
 90          WRITE( IOUNIT, FMT = 9980 )2
 91          WRITE( IOUNIT, FMT = 9979 )3
 92          WRITE( IOUNIT, FMT = 9978 )4
 93          WRITE( IOUNIT, FMT = 9977 )5
 94          WRITE( IOUNIT, FMT = 9976 )6
 95          WRITE( IOUNIT, FMT = 9972 )7
 96          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
 97 *
 98       ELSE IF( LSAMEN( 2, P2, 'GT' ) ) THEN
 99 *
100 *        GT: General tridiagonal
101 *
102          WRITE( IOUNIT, FMT = 9997 )PATH
103          WRITE( IOUNIT, FMT = 9987 )
104          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
105          WRITE( IOUNIT, FMT = 9981 )1
106          WRITE( IOUNIT, FMT = 9980 )2
107          WRITE( IOUNIT, FMT = 9979 )3
108          WRITE( IOUNIT, FMT = 9978 )4
109          WRITE( IOUNIT, FMT = 9977 )5
110          WRITE( IOUNIT, FMT = 9976 )6
111          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
112 *
113       ELSE IF( LSAMEN( 2, P2, 'PO' ) .OR. LSAMEN( 2, P2, 'PP' )
114      $         .OR. LSAMEN( 2, P2, 'PS' ) ) THEN
115 *
116 *        PO: Positive definite full
117 *        PS: Positive definite full
118 *        PP: Positive definite packed
119 *
120          IF( SORD ) THEN
121             SYM = 'Symmetric'
122          ELSE
123             SYM = 'Hermitian'
124          END IF
125          IF( LSAME( C3, 'O' ) ) THEN
126             WRITE( IOUNIT, FMT = 9996 )PATH, SYM
127          ELSE
128             WRITE( IOUNIT, FMT = 9995 )PATH, SYM
129          END IF
130          WRITE( IOUNIT, FMT = '( '' Matrix types:'' )' )
131          WRITE( IOUNIT, FMT = 9985 )PATH
132          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
133          WRITE( IOUNIT, FMT = 9975 )1
134          WRITE( IOUNIT, FMT = 9980 )2
135          WRITE( IOUNIT, FMT = 9979 )3
136          WRITE( IOUNIT, FMT = 9978 )4
137          WRITE( IOUNIT, FMT = 9977 )5
138          WRITE( IOUNIT, FMT = 9976 )6
139          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
140 *
141       ELSE IF( LSAMEN( 2, P2, 'PB' ) ) THEN
142 *
143 *        PB: Positive definite band
144 *
145          IF( SORD ) THEN
146             WRITE( IOUNIT, FMT = 9994 )PATH, 'Symmetric'
147          ELSE
148             WRITE( IOUNIT, FMT = 9994 )PATH, 'Hermitian'
149          END IF
150          WRITE( IOUNIT, FMT = '( '' Matrix types:'' )' )
151          WRITE( IOUNIT, FMT = 9984 )PATH
152          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
153          WRITE( IOUNIT, FMT = 9975 )1
154          WRITE( IOUNIT, FMT = 9980 )2
155          WRITE( IOUNIT, FMT = 9979 )3
156          WRITE( IOUNIT, FMT = 9978 )4
157          WRITE( IOUNIT, FMT = 9977 )5
158          WRITE( IOUNIT, FMT = 9976 )6
159          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
160 *
161       ELSE IF( LSAMEN( 2, P2, 'PT' ) ) THEN
162 *
163 *        PT: Positive definite tridiagonal
164 *
165          IF( SORD ) THEN
166             WRITE( IOUNIT, FMT = 9993 )PATH, 'Symmetric'
167          ELSE
168             WRITE( IOUNIT, FMT = 9993 )PATH, 'Hermitian'
169          END IF
170          WRITE( IOUNIT, FMT = 9986 )
171          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
172          WRITE( IOUNIT, FMT = 9973 )1
173          WRITE( IOUNIT, FMT = 9980 )2
174          WRITE( IOUNIT, FMT = 9979 )3
175          WRITE( IOUNIT, FMT = 9978 )4
176          WRITE( IOUNIT, FMT = 9977 )5
177          WRITE( IOUNIT, FMT = 9976 )6
178          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
179 *
180       ELSE IF( LSAMEN( 2, P2, 'SY' ) .OR. LSAMEN( 2, P2, 'SP' ) ) THEN
181 *
182 *        SY: Symmetric indefinite full
183 *        SP: Symmetric indefinite packed
184 *
185          IF( LSAME( C3, 'Y' ) ) THEN
186             WRITE( IOUNIT, FMT = 9992 )PATH, 'Symmetric'
187          ELSE
188             WRITE( IOUNIT, FMT = 9991 )PATH, 'Symmetric'
189          END IF
190          WRITE( IOUNIT, FMT = '( '' Matrix types:'' )' )
191          IF( SORD ) THEN
192             WRITE( IOUNIT, FMT = 9983 )
193          ELSE
194             WRITE( IOUNIT, FMT = 9982 )
195          END IF
196          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
197          WRITE( IOUNIT, FMT = 9974 )1
198          WRITE( IOUNIT, FMT = 9980 )2
199          WRITE( IOUNIT, FMT = 9979 )3
200          WRITE( IOUNIT, FMT = 9977 )4
201          WRITE( IOUNIT, FMT = 9978 )5
202          WRITE( IOUNIT, FMT = 9976 )6
203          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
204 *
205       ELSE IF( LSAMEN( 2, P2, 'HE' ) .OR. LSAMEN( 2, P2, 'HP' ) ) THEN
206 *
207 *        HE: Hermitian indefinite full
208 *        HP: Hermitian indefinite packed
209 *
210          IF( LSAME( C3, 'E' ) ) THEN
211             WRITE( IOUNIT, FMT = 9992 )PATH, 'Hermitian'
212          ELSE
213             WRITE( IOUNIT, FMT = 9991 )PATH, 'Hermitian'
214          END IF
215          WRITE( IOUNIT, FMT = '( '' Matrix types:'' )' )
216          WRITE( IOUNIT, FMT = 9983 )
217          WRITE( IOUNIT, FMT = '( '' Test ratios:'' )' )
218          WRITE( IOUNIT, FMT = 9974 )1
219          WRITE( IOUNIT, FMT = 9980 )2
220          WRITE( IOUNIT, FMT = 9979 )3
221          WRITE( IOUNIT, FMT = 9977 )4
222          WRITE( IOUNIT, FMT = 9978 )5
223          WRITE( IOUNIT, FMT = 9976 )6
224          WRITE( IOUNIT, FMT = '( '' Messages:'' )' )
225 *
226       ELSE
227 *
228 *        Print error message if no header is available.
229 *
230          WRITE( IOUNIT, FMT = 9990 )PATH
231       END IF
232 *
233 *     First line of header
234 *
235  9999 FORMAT/ 1X, A3, ' drivers:  General dense matrices' )
236  9998 FORMAT/ 1X, A3, ' drivers:  General band matrices' )
237  9997 FORMAT/ 1X, A3, ' drivers:  General tridiagonal' )
238  9996 FORMAT/ 1X, A3, ' drivers:  ', A9,
239      $      ' positive definite matrices' )
240  9995 FORMAT/ 1X, A3, ' drivers:  ', A9,
241      $      ' positive definite packed matrices' )
242  9994 FORMAT/ 1X, A3, ' drivers:  ', A9,
243      $      ' positive definite band matrices' )
244  9993 FORMAT/ 1X, A3, ' drivers:  ', A9,
245      $      ' positive definite tridiagonal' )
246  9992 FORMAT/ 1X, A3, ' drivers:  ', A9, ' indefinite matrices' )
247  9991 FORMAT/ 1X, A3, ' drivers:  ', A9,
248      $      ' indefinite packed matrices' )
249  9990 FORMAT/ 1X, A3, ':  No header available' )
250 *
251 *     GE matrix types
252 *
253  9989 FORMAT4X'1. Diagonal'24X'7. Last n/2 columns zero'/ 4X,
254      $      '2. Upper triangular'16X,
255      $      '8. Random, CNDNUM = sqrt(0.1/EPS)'/ 4X,
256      $      '3. Lower triangular'16X'9. Random, CNDNUM = 0.1/EPS',
257      $      / 4X'4. Random, CNDNUM = 2'13X,
258      $      '10. Scaled near underflow'/ 4X'5. First column zero',
259      $      14X'11. Scaled near overflow'/ 4X,
260      $      '6. Last column zero' )
261 *
262 *     GB matrix types
263 *
264  9988 FORMAT4X'1. Random, CNDNUM = 2'14X,
265      $      '5. Random, CNDNUM = sqrt(0.1/EPS)'/ 4X,
266      $      '2. First column zero'15X'6. Random, CNDNUM = 0.1/EPS',
267      $      / 4X'3. Last column zero'16X,
268      $      '7. Scaled near underflow'/ 4X,
269      $      '4. Last n/2 columns zero'11X'8. Scaled near overflow' )
270 *
271 *     GT matrix types
272 *
273  9987 FORMAT' Matrix types (1-6 have specified condition numbers):',
274      $      / 4X'1. Diagonal'24X'7. Random, unspecified CNDNUM',
275      $      / 4X'2. Random, CNDNUM = 2'14X'8. First column zero',
276      $      / 4X'3. Random, CNDNUM = sqrt(0.1/EPS)'2X,
277      $      '9. Last column zero'/ 4X'4. Random, CNDNUM = 0.1/EPS',
278      $      7X'10. Last n/2 columns zero'/ 4X,
279      $      '5. Scaled near underflow'10X,
280      $      '11. Scaled near underflow'/ 4X,
281      $      '6. Scaled near overflow'11X'12. Scaled near overflow' )
282 *
283 *     PT matrix types
284 *
285  9986 FORMAT' Matrix types (1-6 have specified condition numbers):',
286      $      / 4X'1. Diagonal'24X'7. Random, unspecified CNDNUM',
287      $      / 4X'2. Random, CNDNUM = 2'14X,
288      $      '8. First row and column zero'/ 4X,
289      $      '3. Random, CNDNUM = sqrt(0.1/EPS)'2X,
290      $      '9. Last row and column zero'/ 4X,
291      $      '4. Random, CNDNUM = 0.1/EPS'7X,
292      $      '10. Middle row and column zero'/ 4X,
293      $      '5. Scaled near underflow'10X,
294      $      '11. Scaled near underflow'/ 4X,
295      $      '6. Scaled near overflow'11X'12. Scaled near overflow' )
296 *
297 *     PO, PP matrix types
298 *
299  9985 FORMAT4X'1. Diagonal'24X,
300      $      '6. Random, CNDNUM = sqrt(0.1/EPS)'/ 4X,
301      $      '2. Random, CNDNUM = 2'14X'7. Random, CNDNUM = 0.1/EPS',
302      $      / 3X'*3. First row and column zero'7X,
303      $      '8. Scaled near underflow'/ 3X,
304      $      '*4. Last row and column zero'8X,
305      $      '9. Scaled near overflow'/ 3X,
306      $      '*5. Middle row and column zero'/ 3X,
307      $      '(* - tests error exits from ', A3,
308      $      'TRF, no test ratios are computed)' )
309 *
310 *     PB matrix types
311 *
312  9984 FORMAT4X'1. Random, CNDNUM = 2'14X,
313      $      '5. Random, CNDNUM = sqrt(0.1/EPS)'/ 3X,
314      $      '*2. First row and column zero'7X,
315      $      '6. Random, CNDNUM = 0.1/EPS'/ 3X,
316      $      '*3. Last row and column zero'8X,
317      $      '7. Scaled near underflow'/ 3X,
318      $      '*4. Middle row and column zero'6X,
319      $      '8. Scaled near overflow'/ 3X,
320      $      '(* - tests error exits from ', A3,
321      $      'TRF, no test ratios are computed)' )
322 *
323 *     SSY, SSP, CHE, CHP matrix types
324 *
325  9983 FORMAT4X'1. Diagonal'24X,
326      $      '6. Last n/2 rows and columns zero'/ 4X,
327      $      '2. Random, CNDNUM = 2'14X,
328      $      '7. Random, CNDNUM = sqrt(0.1/EPS)'/ 4X,
329      $      '3. First row and column zero'7X,
330      $      '8. Random, CNDNUM = 0.1/EPS'/ 4X,
331      $      '4. Last row and column zero'8X,
332      $      '9. Scaled near underflow'/ 4X,
333      $      '5. Middle row and column zero'5X,
334      $      '10. Scaled near overflow' )
335 *
336 *     CSY, CSP matrix types
337 *
338  9982 FORMAT4X'1. Diagonal'24X,
339      $      '7. Random, CNDNUM = sqrt(0.1/EPS)'/ 4X,
340      $      '2. Random, CNDNUM = 2'14X'8. Random, CNDNUM = 0.1/EPS',
341      $      / 4X'3. First row and column zero'7X,
342      $      '9. Scaled near underflow'/ 4X,
343      $      '4. Last row and column zero'7X,
344      $      '10. Scaled near overflow'/ 4X,
345      $      '5. Middle row and column zero'5X,
346      $      '11. Block diagonal matrix'/ 4X,
347      $      '6. Last n/2 rows and columns zero' )
348 *
349 *     Test ratios
350 *
351  9981 FORMAT3X, I2, ': norm( L * U - A )  / ( N * norm(A) * EPS )' )
352  9980 FORMAT3X, I2, ': norm( B - A * X )  / ',
353      $      '( norm(A) * norm(X) * EPS )' )
354  9979 FORMAT3X, I2, ': norm( X - XACT )   / ',
355      $      '( norm(XACT) * CNDNUM * EPS )' )
356  9978 FORMAT3X, I2, ': norm( X - XACT )   / ',
357      $      '( norm(XACT) * (error bound) )' )
358  9977 FORMAT3X, I2, ': (backward error)   / EPS' )
359  9976 FORMAT3X, I2, ': RCOND * CNDNUM - 1.0' )
360  9975 FORMAT3X, I2, ': norm( U'' * U - A ) / ( N * norm(A) * EPS )',
361      $      ', or'/ 7X'norm( L * L'' - A ) / ( N * norm(A) * EPS )'
362      $       )
363  9974 FORMAT3X, I2, ': norm( U*D*U'' - A ) / ( N * norm(A) * EPS )',
364      $      ', or'/ 7X'norm( L*D*L'' - A ) / ( N * norm(A) * EPS )'
365      $       )
366  9973 FORMAT3X, I2, ': norm( U''*D*U - A ) / ( N * norm(A) * EPS )',
367      $      ', or'/ 7X'norm( L*D*L'' - A ) / ( N * norm(A) * EPS )'
368      $       )
369  9972 FORMAT3X, I2, ': abs( WORK(1) - RPVGRW ) /',
370      $      ' ( max( WORK(1), RPVGRW ) * EPS )' )
371 *
372       RETURN
373 *
374 *     End of ALADHD
375 *
376       END