You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

dchkaa.F 36 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  1. *> \brief \b DCHKAA
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * PROGRAM DCHKAA
  12. *
  13. *
  14. *> \par Purpose:
  15. * =============
  16. *>
  17. *> \verbatim
  18. *>
  19. *> DCHKAA is the main test program for the DOUBLE PRECISION LAPACK
  20. *> linear equation routines
  21. *>
  22. *> The program must be driven by a short data file. The first 15 records
  23. *> (not including the first comment line) specify problem dimensions
  24. *> and program options using list-directed input. The remaining lines
  25. *> specify the LAPACK test paths and the number of matrix types to use
  26. *> in testing. An annotated example of a data file can be obtained by
  27. *> deleting the first 3 characters from the following 40 lines:
  28. *> Data file for testing DOUBLE PRECISION LAPACK linear eqn. routines
  29. *> 7 Number of values of M
  30. *> 0 1 2 3 5 10 16 Values of M (row dimension)
  31. *> 7 Number of values of N
  32. *> 0 1 2 3 5 10 16 Values of N (column dimension)
  33. *> 1 Number of values of NRHS
  34. *> 2 Values of NRHS (number of right hand sides)
  35. *> 5 Number of values of NB
  36. *> 1 3 3 3 20 Values of NB (the blocksize)
  37. *> 1 0 5 9 1 Values of NX (crossover point)
  38. *> 3 Number of values of RANK
  39. *> 30 50 90 Values of rank (as a % of N)
  40. *> 20.0 Threshold value of test ratio
  41. *> T Put T to test the LAPACK routines
  42. *> T Put T to test the driver routines
  43. *> T Put T to test the error exits
  44. *> DGE 11 List types on next line if 0 < NTYPES < 11
  45. *> DGB 8 List types on next line if 0 < NTYPES < 8
  46. *> DGT 12 List types on next line if 0 < NTYPES < 12
  47. *> DPO 9 List types on next line if 0 < NTYPES < 9
  48. *> DPS 9 List types on next line if 0 < NTYPES < 9
  49. *> DPP 9 List types on next line if 0 < NTYPES < 9
  50. *> DPB 8 List types on next line if 0 < NTYPES < 8
  51. *> DPT 12 List types on next line if 0 < NTYPES < 12
  52. *> DSY 10 List types on next line if 0 < NTYPES < 10
  53. *> DSR 10 List types on next line if 0 < NTYPES < 10
  54. *> DSK 10 List types on next line if 0 < NTYPES < 10
  55. *> DSA 10 List types on next line if 0 < NTYPES < 10
  56. *> DS2 10 List types on next line if 0 < NTYPES < 10
  57. *> DSP 10 List types on next line if 0 < NTYPES < 10
  58. *> DTR 18 List types on next line if 0 < NTYPES < 18
  59. *> DTP 18 List types on next line if 0 < NTYPES < 18
  60. *> DTB 17 List types on next line if 0 < NTYPES < 17
  61. *> DQR 8 List types on next line if 0 < NTYPES < 8
  62. *> DRQ 8 List types on next line if 0 < NTYPES < 8
  63. *> DLQ 8 List types on next line if 0 < NTYPES < 8
  64. *> DQL 8 List types on next line if 0 < NTYPES < 8
  65. *> DQP 6 List types on next line if 0 < NTYPES < 6
  66. *> DTZ 3 List types on next line if 0 < NTYPES < 3
  67. *> DLS 6 List types on next line if 0 < NTYPES < 6
  68. *> DEQ
  69. *> DQT
  70. *> DQX
  71. *> DTQ
  72. *> DXQ
  73. *> DTS
  74. *> DHH
  75. *> \endverbatim
  76. *
  77. * Parameters:
  78. * ==========
  79. *
  80. *> \verbatim
  81. *> NMAX INTEGER
  82. *> The maximum allowable value for M and N.
  83. *>
  84. *> MAXIN INTEGER
  85. *> The number of different values that can be used for each of
  86. *> M, N, NRHS, NB, NX and RANK
  87. *>
  88. *> MAXRHS INTEGER
  89. *> The maximum number of right hand sides
  90. *>
  91. *> MATMAX INTEGER
  92. *> The maximum number of matrix types to use for testing
  93. *>
  94. *> NIN INTEGER
  95. *> The unit number for input
  96. *>
  97. *> NOUT INTEGER
  98. *> The unit number for output
  99. *> \endverbatim
  100. *
  101. * Authors:
  102. * ========
  103. *
  104. *> \author Univ. of Tennessee
  105. *> \author Univ. of California Berkeley
  106. *> \author Univ. of Colorado Denver
  107. *> \author NAG Ltd.
  108. *
  109. *> \ingroup double_lin
  110. *
  111. * =====================================================================
  112. PROGRAM DCHKAA
  113. *
  114. * -- LAPACK test routine --
  115. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  116. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  117. *
  118. * =====================================================================
  119. *
  120. * .. Parameters ..
  121. INTEGER NMAX
  122. PARAMETER ( NMAX = 132 )
  123. INTEGER MAXIN
  124. PARAMETER ( MAXIN = 12 )
  125. INTEGER MAXRHS
  126. PARAMETER ( MAXRHS = 16 )
  127. INTEGER MATMAX
  128. PARAMETER ( MATMAX = 30 )
  129. INTEGER NIN, NOUT
  130. PARAMETER ( NIN = 5, NOUT = 6 )
  131. INTEGER KDMAX
  132. PARAMETER ( KDMAX = NMAX+( NMAX+1 ) / 4 )
  133. * ..
  134. * .. Local Scalars ..
  135. LOGICAL FATAL, TSTCHK, TSTDRV, TSTERR
  136. CHARACTER C1
  137. CHARACTER*2 C2
  138. CHARACTER*3 PATH
  139. CHARACTER*10 INTSTR
  140. CHARACTER*72 ALINE
  141. INTEGER I, IC, J, K, LA, LAFAC, LDA, NB, NM, NMATS, NN,
  142. $ NNB, NNB2, NNS, NRHS, NTYPES, NRANK,
  143. $ VERS_MAJOR, VERS_MINOR, VERS_PATCH
  144. DOUBLE PRECISION EPS, S1, S2, THREQ, THRESH
  145. * ..
  146. * .. Local Arrays ..
  147. LOGICAL DOTYPE( MATMAX )
  148. INTEGER IWORK( 25*NMAX ), MVAL( MAXIN ),
  149. $ NBVAL( MAXIN ), NBVAL2( MAXIN ),
  150. $ NSVAL( MAXIN ), NVAL( MAXIN ), NXVAL( MAXIN ),
  151. $ RANKVAL( MAXIN ), PIV( NMAX )
  152. DOUBLE PRECISION E( NMAX ), S( 2*NMAX )
  153. * ..
  154. * .. Allocatable Arrays ..
  155. INTEGER AllocateStatus
  156. DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RWORK
  157. DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: A, B, WORK
  158. * ..
  159. * .. External Functions ..
  160. LOGICAL LSAME, LSAMEN
  161. DOUBLE PRECISION DLAMCH, DSECND
  162. EXTERNAL LSAME, LSAMEN, DLAMCH, DSECND
  163. * ..
  164. * .. External Subroutines ..
  165. EXTERNAL ALAREQ, DCHKEQ, DCHKGB, DCHKGE, DCHKGT, DCHKLQ,
  166. $ DCHKORHR_COL, DCHKPB, DCHKPO, DCHKPS, DCHKPP,
  167. $ DCHKPT, DCHKQ3, DCHKQL, DCHKQR, DCHKRQ, DCHKSP,
  168. $ DCHKSY, DCHKSY_ROOK, DCHKSY_RK, DCHKSY_AA,
  169. $ DCHKTB, DCHKTP, DCHKTR, DCHKTZ, DDRVGB, DDRVGE,
  170. $ DDRVGT, DDRVLS, DDRVPB, DDRVPO, DDRVPP, DDRVPT,
  171. $ DDRVSP, DDRVSY, DDRVSY_ROOK, DDRVSY_RK,
  172. $ DDRVSY_AA, ILAVER, DCHKLQTP, DCHKQRT, DCHKQRTP,
  173. $ DCHKLQT,DCHKTSQR
  174. * ..
  175. * .. Scalars in Common ..
  176. LOGICAL LERR, OK
  177. CHARACTER*32 SRNAMT
  178. INTEGER INFOT, NUNIT
  179. * ..
  180. * .. Arrays in Common ..
  181. INTEGER IPARMS( 100 )
  182. * ..
  183. * .. Common blocks ..
  184. COMMON / INFOC / INFOT, NUNIT, OK, LERR
  185. COMMON / SRNAMC / SRNAMT
  186. COMMON / CLAENV / IPARMS
  187. * ..
  188. * .. Data statements ..
  189. DATA THREQ / 2.0D0 / , INTSTR / '0123456789' /
  190. * ..
  191. * ..
  192. * .. Allocate memory dynamically ..
  193. *
  194. ALLOCATE ( A( ( KDMAX+1 )*NMAX, 7 ), STAT = AllocateStatus )
  195. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  196. ALLOCATE ( B( NMAX*MAXRHS, 4 ), STAT = AllocateStatus )
  197. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  198. ALLOCATE ( WORK( NMAX, 3*NMAX+MAXRHS+30 ), STAT = AllocateStatus )
  199. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  200. ALLOCATE ( RWORK( 5*NMAX+2*MAXRHS ), STAT = AllocateStatus )
  201. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  202. *
  203. * .. Executable Statements ..
  204. *
  205. S1 = DSECND( )
  206. LDA = NMAX
  207. FATAL = .FALSE.
  208. *
  209. * Read a dummy line.
  210. *
  211. READ( NIN, FMT = * )
  212. *
  213. * Report values of parameters.
  214. *
  215. CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
  216. WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
  217. *
  218. * Read the values of M
  219. *
  220. READ( NIN, FMT = * )NM
  221. IF( NM.LT.1 ) THEN
  222. WRITE( NOUT, FMT = 9996 )' NM ', NM, 1
  223. NM = 0
  224. FATAL = .TRUE.
  225. ELSE IF( NM.GT.MAXIN ) THEN
  226. WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN
  227. NM = 0
  228. FATAL = .TRUE.
  229. END IF
  230. READ( NIN, FMT = * )( MVAL( I ), I = 1, NM )
  231. DO 10 I = 1, NM
  232. IF( MVAL( I ).LT.0 ) THEN
  233. WRITE( NOUT, FMT = 9996 )' M ', MVAL( I ), 0
  234. FATAL = .TRUE.
  235. ELSE IF( MVAL( I ).GT.NMAX ) THEN
  236. WRITE( NOUT, FMT = 9995 )' M ', MVAL( I ), NMAX
  237. FATAL = .TRUE.
  238. END IF
  239. 10 CONTINUE
  240. IF( NM.GT.0 )
  241. $ WRITE( NOUT, FMT = 9993 )'M ', ( MVAL( I ), I = 1, NM )
  242. *
  243. * Read the values of N
  244. *
  245. READ( NIN, FMT = * )NN
  246. IF( NN.LT.1 ) THEN
  247. WRITE( NOUT, FMT = 9996 )' NN ', NN, 1
  248. NN = 0
  249. FATAL = .TRUE.
  250. ELSE IF( NN.GT.MAXIN ) THEN
  251. WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN
  252. NN = 0
  253. FATAL = .TRUE.
  254. END IF
  255. READ( NIN, FMT = * )( NVAL( I ), I = 1, NN )
  256. DO 20 I = 1, NN
  257. IF( NVAL( I ).LT.0 ) THEN
  258. WRITE( NOUT, FMT = 9996 )' N ', NVAL( I ), 0
  259. FATAL = .TRUE.
  260. ELSE IF( NVAL( I ).GT.NMAX ) THEN
  261. WRITE( NOUT, FMT = 9995 )' N ', NVAL( I ), NMAX
  262. FATAL = .TRUE.
  263. END IF
  264. 20 CONTINUE
  265. IF( NN.GT.0 )
  266. $ WRITE( NOUT, FMT = 9993 )'N ', ( NVAL( I ), I = 1, NN )
  267. *
  268. * Read the values of NRHS
  269. *
  270. READ( NIN, FMT = * )NNS
  271. IF( NNS.LT.1 ) THEN
  272. WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1
  273. NNS = 0
  274. FATAL = .TRUE.
  275. ELSE IF( NNS.GT.MAXIN ) THEN
  276. WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN
  277. NNS = 0
  278. FATAL = .TRUE.
  279. END IF
  280. READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS )
  281. DO 30 I = 1, NNS
  282. IF( NSVAL( I ).LT.0 ) THEN
  283. WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0
  284. FATAL = .TRUE.
  285. ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN
  286. WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS
  287. FATAL = .TRUE.
  288. END IF
  289. 30 CONTINUE
  290. IF( NNS.GT.0 )
  291. $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS )
  292. *
  293. * Read the values of NB
  294. *
  295. READ( NIN, FMT = * )NNB
  296. IF( NNB.LT.1 ) THEN
  297. WRITE( NOUT, FMT = 9996 )'NNB ', NNB, 1
  298. NNB = 0
  299. FATAL = .TRUE.
  300. ELSE IF( NNB.GT.MAXIN ) THEN
  301. WRITE( NOUT, FMT = 9995 )'NNB ', NNB, MAXIN
  302. NNB = 0
  303. FATAL = .TRUE.
  304. END IF
  305. READ( NIN, FMT = * )( NBVAL( I ), I = 1, NNB )
  306. DO 40 I = 1, NNB
  307. IF( NBVAL( I ).LT.0 ) THEN
  308. WRITE( NOUT, FMT = 9996 )' NB ', NBVAL( I ), 0
  309. FATAL = .TRUE.
  310. END IF
  311. 40 CONTINUE
  312. IF( NNB.GT.0 )
  313. $ WRITE( NOUT, FMT = 9993 )'NB ', ( NBVAL( I ), I = 1, NNB )
  314. *
  315. * Set NBVAL2 to be the set of unique values of NB
  316. *
  317. NNB2 = 0
  318. DO 60 I = 1, NNB
  319. NB = NBVAL( I )
  320. DO 50 J = 1, NNB2
  321. IF( NB.EQ.NBVAL2( J ) )
  322. $ GO TO 60
  323. 50 CONTINUE
  324. NNB2 = NNB2 + 1
  325. NBVAL2( NNB2 ) = NB
  326. 60 CONTINUE
  327. *
  328. * Read the values of NX
  329. *
  330. READ( NIN, FMT = * )( NXVAL( I ), I = 1, NNB )
  331. DO 70 I = 1, NNB
  332. IF( NXVAL( I ).LT.0 ) THEN
  333. WRITE( NOUT, FMT = 9996 )' NX ', NXVAL( I ), 0
  334. FATAL = .TRUE.
  335. END IF
  336. 70 CONTINUE
  337. IF( NNB.GT.0 )
  338. $ WRITE( NOUT, FMT = 9993 )'NX ', ( NXVAL( I ), I = 1, NNB )
  339. *
  340. * Read the values of RANKVAL
  341. *
  342. READ( NIN, FMT = * )NRANK
  343. IF( NN.LT.1 ) THEN
  344. WRITE( NOUT, FMT = 9996 )' NRANK ', NRANK, 1
  345. NRANK = 0
  346. FATAL = .TRUE.
  347. ELSE IF( NN.GT.MAXIN ) THEN
  348. WRITE( NOUT, FMT = 9995 )' NRANK ', NRANK, MAXIN
  349. NRANK = 0
  350. FATAL = .TRUE.
  351. END IF
  352. READ( NIN, FMT = * )( RANKVAL( I ), I = 1, NRANK )
  353. DO I = 1, NRANK
  354. IF( RANKVAL( I ).LT.0 ) THEN
  355. WRITE( NOUT, FMT = 9996 )' RANK ', RANKVAL( I ), 0
  356. FATAL = .TRUE.
  357. ELSE IF( RANKVAL( I ).GT.100 ) THEN
  358. WRITE( NOUT, FMT = 9995 )' RANK ', RANKVAL( I ), 100
  359. FATAL = .TRUE.
  360. END IF
  361. END DO
  362. IF( NRANK.GT.0 )
  363. $ WRITE( NOUT, FMT = 9993 )'RANK % OF N',
  364. $ ( RANKVAL( I ), I = 1, NRANK )
  365. *
  366. * Read the threshold value for the test ratios.
  367. *
  368. READ( NIN, FMT = * )THRESH
  369. WRITE( NOUT, FMT = 9992 )THRESH
  370. *
  371. * Read the flag that indicates whether to test the LAPACK routines.
  372. *
  373. READ( NIN, FMT = * )TSTCHK
  374. *
  375. * Read the flag that indicates whether to test the driver routines.
  376. *
  377. READ( NIN, FMT = * )TSTDRV
  378. *
  379. * Read the flag that indicates whether to test the error exits.
  380. *
  381. READ( NIN, FMT = * )TSTERR
  382. *
  383. IF( FATAL ) THEN
  384. WRITE( NOUT, FMT = 9999 )
  385. STOP
  386. END IF
  387. *
  388. * Calculate and print the machine dependent constants.
  389. *
  390. EPS = DLAMCH( 'Underflow threshold' )
  391. WRITE( NOUT, FMT = 9991 )'underflow', EPS
  392. EPS = DLAMCH( 'Overflow threshold' )
  393. WRITE( NOUT, FMT = 9991 )'overflow ', EPS
  394. EPS = DLAMCH( 'Epsilon' )
  395. WRITE( NOUT, FMT = 9991 )'precision', EPS
  396. WRITE( NOUT, FMT = * )
  397. *
  398. 80 CONTINUE
  399. *
  400. * Read a test path and the number of matrix types to use.
  401. *
  402. READ( NIN, FMT = '(A72)', END = 140 )ALINE
  403. PATH = ALINE( 1: 3 )
  404. NMATS = MATMAX
  405. I = 3
  406. 90 CONTINUE
  407. I = I + 1
  408. IF( I.GT.72 ) THEN
  409. NMATS = MATMAX
  410. GO TO 130
  411. END IF
  412. IF( ALINE( I: I ).EQ.' ' )
  413. $ GO TO 90
  414. NMATS = 0
  415. 100 CONTINUE
  416. C1 = ALINE( I: I )
  417. DO 110 K = 1, 10
  418. IF( C1.EQ.INTSTR( K: K ) ) THEN
  419. IC = K - 1
  420. GO TO 120
  421. END IF
  422. 110 CONTINUE
  423. GO TO 130
  424. 120 CONTINUE
  425. NMATS = NMATS*10 + IC
  426. I = I + 1
  427. IF( I.GT.72 )
  428. $ GO TO 130
  429. GO TO 100
  430. 130 CONTINUE
  431. C1 = PATH( 1: 1 )
  432. C2 = PATH( 2: 3 )
  433. NRHS = NSVAL( 1 )
  434. *
  435. * Check first character for correct precision.
  436. *
  437. IF( .NOT.LSAME( C1, 'Double precision' ) ) THEN
  438. WRITE( NOUT, FMT = 9990 )PATH
  439. *
  440. ELSE IF( NMATS.LE.0 ) THEN
  441. *
  442. * Check for a positive number of tests requested.
  443. *
  444. WRITE( NOUT, FMT = 9989 )PATH
  445. *
  446. ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
  447. *
  448. * GE: general matrices
  449. *
  450. NTYPES = 11
  451. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  452. *
  453. IF( TSTCHK ) THEN
  454. CALL DCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
  455. $ NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
  456. $ A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
  457. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  458. ELSE
  459. WRITE( NOUT, FMT = 9989 )PATH
  460. END IF
  461. *
  462. IF( TSTDRV ) THEN
  463. CALL DDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  464. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  465. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  466. $ RWORK, IWORK, NOUT )
  467. ELSE
  468. WRITE( NOUT, FMT = 9988 )PATH
  469. END IF
  470. *
  471. ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
  472. *
  473. * GB: general banded matrices
  474. *
  475. LA = ( 2*KDMAX+1 )*NMAX
  476. LAFAC = ( 3*KDMAX+1 )*NMAX
  477. NTYPES = 8
  478. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  479. *
  480. IF( TSTCHK ) THEN
  481. CALL DCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
  482. $ NSVAL, THRESH, TSTERR, A( 1, 1 ), LA,
  483. $ A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ),
  484. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  485. ELSE
  486. WRITE( NOUT, FMT = 9989 )PATH
  487. END IF
  488. *
  489. IF( TSTDRV ) THEN
  490. CALL DDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  491. $ A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ),
  492. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S,
  493. $ WORK, RWORK, IWORK, NOUT )
  494. ELSE
  495. WRITE( NOUT, FMT = 9988 )PATH
  496. END IF
  497. *
  498. ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN
  499. *
  500. * GT: general tridiagonal matrices
  501. *
  502. NTYPES = 12
  503. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  504. *
  505. IF( TSTCHK ) THEN
  506. CALL DCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  507. $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
  508. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  509. ELSE
  510. WRITE( NOUT, FMT = 9989 )PATH
  511. END IF
  512. *
  513. IF( TSTDRV ) THEN
  514. CALL DDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  515. $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
  516. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  517. ELSE
  518. WRITE( NOUT, FMT = 9988 )PATH
  519. END IF
  520. *
  521. ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN
  522. *
  523. * PO: positive definite matrices
  524. *
  525. NTYPES = 9
  526. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  527. *
  528. IF( TSTCHK ) THEN
  529. CALL DCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  530. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  531. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  532. $ WORK, RWORK, IWORK, NOUT )
  533. ELSE
  534. WRITE( NOUT, FMT = 9989 )PATH
  535. END IF
  536. *
  537. IF( TSTDRV ) THEN
  538. CALL DDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  539. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  540. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  541. $ RWORK, IWORK, NOUT )
  542. ELSE
  543. WRITE( NOUT, FMT = 9988 )PATH
  544. END IF
  545. *
  546. ELSE IF( LSAMEN( 2, C2, 'PS' ) ) THEN
  547. *
  548. * PS: positive semi-definite matrices
  549. *
  550. NTYPES = 9
  551. *
  552. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  553. *
  554. IF( TSTCHK ) THEN
  555. CALL DCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK,
  556. $ RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
  557. $ A( 1, 2 ), A( 1, 3 ), PIV, WORK, RWORK,
  558. $ NOUT )
  559. ELSE
  560. WRITE( NOUT, FMT = 9989 )PATH
  561. END IF
  562. *
  563. ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN
  564. *
  565. * PP: positive definite packed matrices
  566. *
  567. NTYPES = 9
  568. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  569. *
  570. IF( TSTCHK ) THEN
  571. CALL DCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  572. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  573. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
  574. $ IWORK, NOUT )
  575. ELSE
  576. WRITE( NOUT, FMT = 9989 )PATH
  577. END IF
  578. *
  579. IF( TSTDRV ) THEN
  580. CALL DDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  581. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  582. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  583. $ RWORK, IWORK, NOUT )
  584. ELSE
  585. WRITE( NOUT, FMT = 9988 )PATH
  586. END IF
  587. *
  588. ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
  589. *
  590. * PB: positive definite banded matrices
  591. *
  592. NTYPES = 8
  593. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  594. *
  595. IF( TSTCHK ) THEN
  596. CALL DCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  597. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  598. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  599. $ WORK, RWORK, IWORK, NOUT )
  600. ELSE
  601. WRITE( NOUT, FMT = 9989 )PATH
  602. END IF
  603. *
  604. IF( TSTDRV ) THEN
  605. CALL DDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  606. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  607. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  608. $ RWORK, IWORK, NOUT )
  609. ELSE
  610. WRITE( NOUT, FMT = 9988 )PATH
  611. END IF
  612. *
  613. ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
  614. *
  615. * PT: positive definite tridiagonal matrices
  616. *
  617. NTYPES = 12
  618. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  619. *
  620. IF( TSTCHK ) THEN
  621. CALL DCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  622. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  623. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
  624. ELSE
  625. WRITE( NOUT, FMT = 9989 )PATH
  626. END IF
  627. *
  628. IF( TSTDRV ) THEN
  629. CALL DDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  630. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  631. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
  632. ELSE
  633. WRITE( NOUT, FMT = 9988 )PATH
  634. END IF
  635. *
  636. ELSE IF( LSAMEN( 2, C2, 'SY' ) ) THEN
  637. *
  638. * SY: symmetric indefinite matrices,
  639. * with partial (Bunch-Kaufman) pivoting algorithm
  640. *
  641. NTYPES = 10
  642. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  643. *
  644. IF( TSTCHK ) THEN
  645. CALL DCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  646. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  647. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  648. $ WORK, RWORK, IWORK, NOUT )
  649. ELSE
  650. WRITE( NOUT, FMT = 9989 )PATH
  651. END IF
  652. *
  653. IF( TSTDRV ) THEN
  654. CALL DDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  655. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  656. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
  657. $ NOUT )
  658. ELSE
  659. WRITE( NOUT, FMT = 9988 )PATH
  660. END IF
  661. *
  662. ELSE IF( LSAMEN( 2, C2, 'SR' ) ) THEN
  663. *
  664. * SR: symmetric indefinite matrices,
  665. * with bounded Bunch-Kaufman (rook) pivoting algorithm
  666. *
  667. NTYPES = 10
  668. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  669. *
  670. IF( TSTCHK ) THEN
  671. CALL DCHKSY_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  672. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  673. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  674. $ WORK, RWORK, IWORK, NOUT )
  675. ELSE
  676. WRITE( NOUT, FMT = 9989 )PATH
  677. END IF
  678. *
  679. IF( TSTDRV ) THEN
  680. CALL DDRVSY_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  681. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  682. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  683. $ WORK, RWORK, IWORK, NOUT )
  684. ELSE
  685. WRITE( NOUT, FMT = 9988 )PATH
  686. END IF
  687. *
  688. ELSE IF( LSAMEN( 2, C2, 'SK' ) ) THEN
  689. *
  690. * SK: symmetric indefinite matrices,
  691. * with bounded Bunch-Kaufman (rook) pivoting algorithm,
  692. * different matrix storage format than SR path version.
  693. *
  694. NTYPES = 10
  695. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  696. *
  697. IF( TSTCHK ) THEN
  698. CALL DCHKSY_RK( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  699. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  700. $ E, A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
  701. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  702. ELSE
  703. WRITE( NOUT, FMT = 9989 )PATH
  704. END IF
  705. *
  706. IF( TSTDRV ) THEN
  707. CALL DDRVSY_RK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  708. $ LDA, A( 1, 1 ), A( 1, 2 ), E, A( 1, 3 ),
  709. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  710. $ WORK, RWORK, IWORK, NOUT )
  711. ELSE
  712. WRITE( NOUT, FMT = 9988 )PATH
  713. END IF
  714. *
  715. ELSE IF( LSAMEN( 2, C2, 'SA' ) ) THEN
  716. *
  717. * SA: symmetric indefinite matrices,
  718. * with partial (Aasen's) pivoting algorithm
  719. *
  720. NTYPES = 10
  721. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  722. *
  723. IF( TSTCHK ) THEN
  724. CALL DCHKSY_AA( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS,
  725. $ NSVAL, THRESH, TSTERR, LDA,
  726. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  727. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  728. $ WORK, RWORK, IWORK, NOUT )
  729. ELSE
  730. WRITE( NOUT, FMT = 9989 )PATH
  731. END IF
  732. *
  733. IF( TSTDRV ) THEN
  734. CALL DDRVSY_AA( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  735. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  736. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  737. $ WORK, RWORK, IWORK, NOUT )
  738. ELSE
  739. WRITE( NOUT, FMT = 9988 )PATH
  740. END IF
  741. *
  742. *
  743. ELSE IF( LSAMEN( 2, C2, 'S2' ) ) THEN
  744. *
  745. * SA: symmetric indefinite matrices,
  746. * with partial (Aasen's) pivoting algorithm
  747. *
  748. NTYPES = 10
  749. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  750. *
  751. IF( TSTCHK ) THEN
  752. CALL DCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB2, NBVAL2,
  753. $ NNS, NSVAL, THRESH, TSTERR, LDA,
  754. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  755. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  756. $ WORK, RWORK, IWORK, NOUT )
  757. ELSE
  758. WRITE( NOUT, FMT = 9989 )PATH
  759. END IF
  760. *
  761. IF( TSTDRV ) THEN
  762. CALL DDRVSY_AA_2STAGE(
  763. $ DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  764. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  765. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  766. $ WORK, RWORK, IWORK, NOUT )
  767. ELSE
  768. WRITE( NOUT, FMT = 9988 )PATH
  769. END IF
  770. *
  771. *
  772. ELSE IF( LSAMEN( 2, C2, 'SP' ) ) THEN
  773. *
  774. * SP: symmetric indefinite packed matrices,
  775. * with partial (Bunch-Kaufman) pivoting algorithm
  776. *
  777. NTYPES = 10
  778. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  779. *
  780. IF( TSTCHK ) THEN
  781. CALL DCHKSP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  782. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  783. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
  784. $ IWORK, NOUT )
  785. ELSE
  786. WRITE( NOUT, FMT = 9989 )PATH
  787. END IF
  788. *
  789. IF( TSTDRV ) THEN
  790. CALL DDRVSP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  791. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  792. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
  793. $ NOUT )
  794. ELSE
  795. WRITE( NOUT, FMT = 9988 )PATH
  796. END IF
  797. *
  798. ELSE IF( LSAMEN( 2, C2, 'TR' ) ) THEN
  799. *
  800. * TR: triangular matrices
  801. *
  802. NTYPES = 18
  803. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  804. *
  805. IF( TSTCHK ) THEN
  806. CALL DCHKTR( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  807. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  808. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
  809. $ IWORK, NOUT )
  810. ELSE
  811. WRITE( NOUT, FMT = 9989 )PATH
  812. END IF
  813. *
  814. ELSE IF( LSAMEN( 2, C2, 'TP' ) ) THEN
  815. *
  816. * TP: triangular packed matrices
  817. *
  818. NTYPES = 18
  819. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  820. *
  821. IF( TSTCHK ) THEN
  822. CALL DCHKTP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  823. $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
  824. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
  825. $ NOUT )
  826. ELSE
  827. WRITE( NOUT, FMT = 9989 )PATH
  828. END IF
  829. *
  830. ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
  831. *
  832. * TB: triangular banded matrices
  833. *
  834. NTYPES = 17
  835. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  836. *
  837. IF( TSTCHK ) THEN
  838. CALL DCHKTB( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  839. $ LDA, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
  840. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
  841. $ NOUT )
  842. ELSE
  843. WRITE( NOUT, FMT = 9989 )PATH
  844. END IF
  845. *
  846. ELSE IF( LSAMEN( 2, C2, 'QR' ) ) THEN
  847. *
  848. * QR: QR factorization
  849. *
  850. NTYPES = 8
  851. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  852. *
  853. IF( TSTCHK ) THEN
  854. CALL DCHKQR( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
  855. $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
  856. $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
  857. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
  858. $ WORK, RWORK, IWORK, NOUT )
  859. ELSE
  860. WRITE( NOUT, FMT = 9989 )PATH
  861. END IF
  862. *
  863. ELSE IF( LSAMEN( 2, C2, 'LQ' ) ) THEN
  864. *
  865. * LQ: LQ factorization
  866. *
  867. NTYPES = 8
  868. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  869. *
  870. IF( TSTCHK ) THEN
  871. CALL DCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
  872. $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
  873. $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
  874. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
  875. $ WORK, RWORK, NOUT )
  876. ELSE
  877. WRITE( NOUT, FMT = 9989 )PATH
  878. END IF
  879. *
  880. ELSE IF( LSAMEN( 2, C2, 'QL' ) ) THEN
  881. *
  882. * QL: QL factorization
  883. *
  884. NTYPES = 8
  885. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  886. *
  887. IF( TSTCHK ) THEN
  888. CALL DCHKQL( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
  889. $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
  890. $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
  891. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
  892. $ WORK, RWORK, NOUT )
  893. ELSE
  894. WRITE( NOUT, FMT = 9989 )PATH
  895. END IF
  896. *
  897. ELSE IF( LSAMEN( 2, C2, 'RQ' ) ) THEN
  898. *
  899. * RQ: RQ factorization
  900. *
  901. NTYPES = 8
  902. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  903. *
  904. IF( TSTCHK ) THEN
  905. CALL DCHKRQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
  906. $ NRHS, THRESH, TSTERR, NMAX, A( 1, 1 ),
  907. $ A( 1, 2 ), A( 1, 3 ), A( 1, 4 ), A( 1, 5 ),
  908. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ),
  909. $ WORK, RWORK, IWORK, NOUT )
  910. ELSE
  911. WRITE( NOUT, FMT = 9989 )PATH
  912. END IF
  913. *
  914. ELSE IF( LSAMEN( 2, C2, 'QP' ) ) THEN
  915. *
  916. * QP: QR factorization with pivoting
  917. *
  918. NTYPES = 6
  919. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  920. *
  921. IF( TSTCHK ) THEN
  922. CALL DCHKQ3( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL,
  923. $ THRESH, A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
  924. $ B( 1, 3 ), WORK, IWORK, NOUT )
  925. ELSE
  926. WRITE( NOUT, FMT = 9989 )PATH
  927. END IF
  928. *
  929. ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN
  930. *
  931. * TZ: Trapezoidal matrix
  932. *
  933. NTYPES = 3
  934. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  935. *
  936. IF( TSTCHK ) THEN
  937. CALL DCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
  938. $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
  939. $ B( 1, 3 ), WORK, NOUT )
  940. ELSE
  941. WRITE( NOUT, FMT = 9989 )PATH
  942. END IF
  943. *
  944. ELSE IF( LSAMEN( 2, C2, 'LS' ) ) THEN
  945. *
  946. * LS: Least squares drivers
  947. *
  948. NTYPES = 6
  949. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  950. *
  951. IF( TSTDRV ) THEN
  952. CALL DDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
  953. $ NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ),
  954. $ A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  955. $ RWORK, RWORK( NMAX+1 ), NOUT )
  956. ELSE
  957. WRITE( NOUT, FMT = 9988 )PATH
  958. END IF
  959. *
  960. ELSE IF( LSAMEN( 2, C2, 'EQ' ) ) THEN
  961. *
  962. * EQ: Equilibration routines for general and positive definite
  963. * matrices (THREQ should be between 2 and 10)
  964. *
  965. IF( TSTCHK ) THEN
  966. CALL DCHKEQ( THREQ, NOUT )
  967. ELSE
  968. WRITE( NOUT, FMT = 9989 )PATH
  969. END IF
  970. *
  971. ELSE IF( LSAMEN( 2, C2, 'QT' ) ) THEN
  972. *
  973. * QT: QRT routines for general matrices
  974. *
  975. IF( TSTCHK ) THEN
  976. CALL DCHKQRT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  977. $ NBVAL, NOUT )
  978. ELSE
  979. WRITE( NOUT, FMT = 9989 )PATH
  980. END IF
  981. *
  982. ELSE IF( LSAMEN( 2, C2, 'QX' ) ) THEN
  983. *
  984. * QX: QRT routines for triangular-pentagonal matrices
  985. *
  986. IF( TSTCHK ) THEN
  987. CALL DCHKQRTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  988. $ NBVAL, NOUT )
  989. ELSE
  990. WRITE( NOUT, FMT = 9989 )PATH
  991. END IF
  992. *
  993. ELSE IF( LSAMEN( 2, C2, 'TQ' ) ) THEN
  994. *
  995. * TQ: LQT routines for general matrices
  996. *
  997. IF( TSTCHK ) THEN
  998. CALL DCHKLQT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  999. $ NBVAL, NOUT )
  1000. ELSE
  1001. WRITE( NOUT, FMT = 9989 )PATH
  1002. END IF
  1003. *
  1004. ELSE IF( LSAMEN( 2, C2, 'XQ' ) ) THEN
  1005. *
  1006. * XQ: LQT routines for triangular-pentagonal matrices
  1007. *
  1008. IF( TSTCHK ) THEN
  1009. CALL DCHKLQTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1010. $ NBVAL, NOUT )
  1011. ELSE
  1012. WRITE( NOUT, FMT = 9989 )PATH
  1013. END IF
  1014. *
  1015. ELSE IF( LSAMEN( 2, C2, 'TS' ) ) THEN
  1016. *
  1017. * TS: QR routines for tall-skinny matrices
  1018. *
  1019. IF( TSTCHK ) THEN
  1020. CALL DCHKTSQR( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1021. $ NBVAL, NOUT )
  1022. ELSE
  1023. WRITE( NOUT, FMT = 9989 )PATH
  1024. END IF
  1025. *
  1026. ELSE IF( LSAMEN( 2, C2, 'HH' ) ) THEN
  1027. *
  1028. * HH: Householder reconstruction for tall-skinny matrices
  1029. *
  1030. IF( TSTCHK ) THEN
  1031. CALL DCHKORHR_COL( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1032. $ NBVAL, NOUT )
  1033. ELSE
  1034. WRITE( NOUT, FMT = 9989 ) PATH
  1035. END IF
  1036. *
  1037. ELSE
  1038. *
  1039. WRITE( NOUT, FMT = 9990 )PATH
  1040. END IF
  1041. *
  1042. * Go back to get another input line.
  1043. *
  1044. GO TO 80
  1045. *
  1046. * Branch to this line when the last record is read.
  1047. *
  1048. 140 CONTINUE
  1049. CLOSE ( NIN )
  1050. S2 = DSECND( )
  1051. WRITE( NOUT, FMT = 9998 )
  1052. WRITE( NOUT, FMT = 9997 )S2 - S1
  1053. *
  1054. DEALLOCATE (A, STAT = AllocateStatus)
  1055. DEALLOCATE (B, STAT = AllocateStatus)
  1056. DEALLOCATE (WORK, STAT = AllocateStatus)
  1057. DEALLOCATE (RWORK, STAT = AllocateStatus)
  1058. *
  1059. 9999 FORMAT( / ' Execution not attempted due to input errors' )
  1060. 9998 FORMAT( / ' End of tests' )
  1061. 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / )
  1062. 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=',
  1063. $ I6 )
  1064. 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=',
  1065. $ I6 )
  1066. 9994 FORMAT( ' Tests of the DOUBLE PRECISION LAPACK routines ',
  1067. $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
  1068. $ / / ' The following parameter values will be used:' )
  1069. 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 )
  1070. 9992 FORMAT( / ' Routines pass computational tests if test ratio is ',
  1071. $ 'less than', F8.2, / )
  1072. 9991 FORMAT( ' Relative machine ', A, ' is taken to be', D16.6 )
  1073. 9990 FORMAT( / 1X, A3, ': Unrecognized path name' )
  1074. 9989 FORMAT( / 1X, A3, ' routines were not tested' )
  1075. 9988 FORMAT( / 1X, A3, ' driver routines were not tested' )
  1076. *
  1077. * End of DCHKAA
  1078. *
  1079. END