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 37 kB

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