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.

schkaa.F 37 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098
  1. *> \brief \b SCHKAA
  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 SCHKAA
  12. *
  13. *
  14. *> \par Purpose:
  15. * =============
  16. *>
  17. *> \verbatim
  18. *>
  19. *> SCHKAA is the main test program for the REAL 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 REAL 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. *> SGE 11 List types on next line if 0 < NTYPES < 11
  45. *> SGB 8 List types on next line if 0 < NTYPES < 8
  46. *> SGT 12 List types on next line if 0 < NTYPES < 12
  47. *> SPO 9 List types on next line if 0 < NTYPES < 9
  48. *> SPS 9 List types on next line if 0 < NTYPES < 9
  49. *> SPP 9 List types on next line if 0 < NTYPES < 9
  50. *> SPB 8 List types on next line if 0 < NTYPES < 8
  51. *> SPT 12 List types on next line if 0 < NTYPES < 12
  52. *> SSY 10 List types on next line if 0 < NTYPES < 10
  53. *> SSR 10 List types on next line if 0 < NTYPES < 10
  54. *> SSK 10 List types on next line if 0 < NTYPES < 10
  55. *> SSA 10 List types on next line if 0 < NTYPES < 10
  56. *> SS2 10 List types on next line if 0 < NTYPES < 10
  57. *> SSP 10 List types on next line if 0 < NTYPES < 10
  58. *> STR 18 List types on next line if 0 < NTYPES < 18
  59. *> STP 18 List types on next line if 0 < NTYPES < 18
  60. *> STB 17 List types on next line if 0 < NTYPES < 17
  61. *> SQR 8 List types on next line if 0 < NTYPES < 8
  62. *> SRQ 8 List types on next line if 0 < NTYPES < 8
  63. *> SLQ 8 List types on next line if 0 < NTYPES < 8
  64. *> SQL 8 List types on next line if 0 < NTYPES < 8
  65. *> SQP 6 List types on next line if 0 < NTYPES < 6
  66. *> DQK 19 List types on next line if 0 < NTYPES < 19
  67. *> STZ 3 List types on next line if 0 < NTYPES < 3
  68. *> SLS 6 List types on next line if 0 < NTYPES < 6
  69. *> SEQ
  70. *> SQT
  71. *> SQX
  72. *> STS
  73. *> SHH
  74. *> \endverbatim
  75. *
  76. * Parameters:
  77. * ==========
  78. *
  79. *> \verbatim
  80. *> NMAX INTEGER
  81. *> The maximum allowable value for M and N.
  82. *>
  83. *> MAXIN INTEGER
  84. *> The number of different values that can be used for each of
  85. *> M, N, NRHS, NB, NX and RANK
  86. *>
  87. *> MAXRHS INTEGER
  88. *> The maximum number of right hand sides
  89. *>
  90. *> MATMAX INTEGER
  91. *> The maximum number of matrix types to use for testing
  92. *>
  93. *> NIN INTEGER
  94. *> The unit number for input
  95. *>
  96. *> NOUT INTEGER
  97. *> The unit number for output
  98. *> \endverbatim
  99. *
  100. * Authors:
  101. * ========
  102. *
  103. *> \author Univ. of Tennessee
  104. *> \author Univ. of California Berkeley
  105. *> \author Univ. of Colorado Denver
  106. *> \author NAG Ltd.
  107. *
  108. *> \ingroup single_lin
  109. *
  110. * =====================================================================
  111. PROGRAM SCHKAA
  112. *
  113. * -- LAPACK test routine --
  114. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  115. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  116. *
  117. * =====================================================================
  118. *
  119. * .. Parameters ..
  120. INTEGER NMAX
  121. PARAMETER ( NMAX = 132 )
  122. INTEGER MAXIN
  123. PARAMETER ( MAXIN = 12 )
  124. INTEGER MAXRHS
  125. PARAMETER ( MAXRHS = 16 )
  126. INTEGER MATMAX
  127. PARAMETER ( MATMAX = 30 )
  128. INTEGER NIN, NOUT
  129. PARAMETER ( NIN = 5, NOUT = 6 )
  130. INTEGER KDMAX
  131. PARAMETER ( KDMAX = NMAX+( NMAX+1 ) / 4 )
  132. * ..
  133. * .. Local Scalars ..
  134. LOGICAL FATAL, TSTCHK, TSTDRV, TSTERR
  135. CHARACTER C1
  136. CHARACTER*2 C2
  137. CHARACTER*3 PATH
  138. CHARACTER*10 INTSTR
  139. CHARACTER*72 ALINE
  140. INTEGER I, IC, J, K, LA, LAFAC, LDA, NB, NM, NMATS, NN,
  141. $ NNB, NNB2, NNS, NRHS, NTYPES, NRANK,
  142. $ VERS_MAJOR, VERS_MINOR, VERS_PATCH
  143. REAL EPS, S1, S2, THREQ, THRESH
  144. * ..
  145. * .. Local Arrays ..
  146. LOGICAL DOTYPE( MATMAX )
  147. INTEGER IWORK( 25*NMAX ), MVAL( MAXIN ),
  148. $ NBVAL( MAXIN ), NBVAL2( MAXIN ),
  149. $ NSVAL( MAXIN ), NVAL( MAXIN ), NXVAL( MAXIN ),
  150. $ RANKVAL( MAXIN ), PIV( NMAX )
  151. * ..
  152. * .. Allocatable Arrays ..
  153. INTEGER AllocateStatus
  154. REAL, DIMENSION(:), ALLOCATABLE :: RWORK, S
  155. REAL, DIMENSION(:), ALLOCATABLE :: E
  156. REAL, DIMENSION(:,:), ALLOCATABLE :: A, B, WORK
  157. * ..
  158. * .. External Functions ..
  159. LOGICAL LSAME, LSAMEN
  160. REAL SECOND, SLAMCH
  161. EXTERNAL LSAME, LSAMEN, SECOND, SLAMCH
  162. * ..
  163. * .. External Subroutines ..
  164. EXTERNAL ALAREQ, SCHKEQ, SCHKGB, SCHKGE, SCHKGT, SCHKLQ,
  165. $ SCHKORHR_COL, SCHKPB, SCHKPO, SCHKPS, SCHKPP,
  166. $ SCHKPT, SCHKQ3, SCHKQP3RK, SCHKQL, SCHKQR,
  167. $ SCHKRQ, SCHKSP, SCHKSY, SCHKSY_ROOK, SCHKSY_RK,
  168. $ SCHKSY_AA, SCHKTB, SCHKTP, SCHKTR, SCHKTZ,
  169. $ SDRVGB, SDRVGE, SDRVGT, SDRVLS, SDRVPB, SDRVPO,
  170. $ SDRVPP, SDRVPT, SDRVSP, SDRVSY, SDRVSY_ROOK,
  171. $ SDRVSY_RK, SDRVSY_AA, ILAVER, SCHKLQTP, SCHKQRT,
  172. $ SCHKQRTP, SCHKLQT, SCHKTSQR
  173. * ..
  174. * .. Scalars in Common ..
  175. LOGICAL LERR, OK
  176. CHARACTER*32 SRNAMT
  177. INTEGER INFOT, NUNIT
  178. * ..
  179. * .. Arrays in Common ..
  180. INTEGER IPARMS( 100 )
  181. * ..
  182. * .. Common blocks ..
  183. COMMON / CLAENV / IPARMS
  184. COMMON / INFOC / INFOT, NUNIT, OK, LERR
  185. COMMON / SRNAMC / SRNAMT
  186. * ..
  187. * .. Data statements ..
  188. DATA THREQ / 2.0E0 / , INTSTR / '0123456789' /
  189. * ..
  190. * .. Allocate memory dynamically ..
  191. *
  192. ALLOCATE ( A( ( KDMAX+1 )*NMAX, 7 ), STAT = AllocateStatus )
  193. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  194. ALLOCATE ( B( NMAX*MAXRHS, 4 ), STAT = AllocateStatus )
  195. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  196. ALLOCATE ( WORK( NMAX, 3*NMAX+MAXRHS+30 ), STAT = AllocateStatus )
  197. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  198. ALLOCATE ( E( NMAX ), STAT = AllocateStatus )
  199. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  200. ALLOCATE ( S( 2*NMAX ), STAT = AllocateStatus )
  201. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  202. ALLOCATE ( RWORK( 5*NMAX+2*MAXRHS ), STAT = AllocateStatus )
  203. IF (AllocateStatus /= 0) STOP "*** Not enough memory ***"
  204. * ..
  205. * .. Executable Statements ..
  206. *
  207. S1 = SECOND( )
  208. LDA = NMAX
  209. FATAL = .FALSE.
  210. *
  211. * Read a dummy line.
  212. *
  213. READ( NIN, FMT = * )
  214. *
  215. * Report values of parameters.
  216. *
  217. CALL ILAVER( VERS_MAJOR, VERS_MINOR, VERS_PATCH )
  218. WRITE( NOUT, FMT = 9994 ) VERS_MAJOR, VERS_MINOR, VERS_PATCH
  219. *
  220. * Read the values of M
  221. *
  222. READ( NIN, FMT = * )NM
  223. IF( NM.LT.1 ) THEN
  224. WRITE( NOUT, FMT = 9996 )' NM ', NM, 1
  225. NM = 0
  226. FATAL = .TRUE.
  227. ELSE IF( NM.GT.MAXIN ) THEN
  228. WRITE( NOUT, FMT = 9995 )' NM ', NM, MAXIN
  229. NM = 0
  230. FATAL = .TRUE.
  231. END IF
  232. READ( NIN, FMT = * )( MVAL( I ), I = 1, NM )
  233. DO 10 I = 1, NM
  234. IF( MVAL( I ).LT.0 ) THEN
  235. WRITE( NOUT, FMT = 9996 )' M ', MVAL( I ), 0
  236. FATAL = .TRUE.
  237. ELSE IF( MVAL( I ).GT.NMAX ) THEN
  238. WRITE( NOUT, FMT = 9995 )' M ', MVAL( I ), NMAX
  239. FATAL = .TRUE.
  240. END IF
  241. 10 CONTINUE
  242. IF( NM.GT.0 )
  243. $ WRITE( NOUT, FMT = 9993 )'M ', ( MVAL( I ), I = 1, NM )
  244. *
  245. * Read the values of N
  246. *
  247. READ( NIN, FMT = * )NN
  248. IF( NN.LT.1 ) THEN
  249. WRITE( NOUT, FMT = 9996 )' NN ', NN, 1
  250. NN = 0
  251. FATAL = .TRUE.
  252. ELSE IF( NN.GT.MAXIN ) THEN
  253. WRITE( NOUT, FMT = 9995 )' NN ', NN, MAXIN
  254. NN = 0
  255. FATAL = .TRUE.
  256. END IF
  257. READ( NIN, FMT = * )( NVAL( I ), I = 1, NN )
  258. DO 20 I = 1, NN
  259. IF( NVAL( I ).LT.0 ) THEN
  260. WRITE( NOUT, FMT = 9996 )' N ', NVAL( I ), 0
  261. FATAL = .TRUE.
  262. ELSE IF( NVAL( I ).GT.NMAX ) THEN
  263. WRITE( NOUT, FMT = 9995 )' N ', NVAL( I ), NMAX
  264. FATAL = .TRUE.
  265. END IF
  266. 20 CONTINUE
  267. IF( NN.GT.0 )
  268. $ WRITE( NOUT, FMT = 9993 )'N ', ( NVAL( I ), I = 1, NN )
  269. *
  270. * Read the values of NRHS
  271. *
  272. READ( NIN, FMT = * )NNS
  273. IF( NNS.LT.1 ) THEN
  274. WRITE( NOUT, FMT = 9996 )' NNS', NNS, 1
  275. NNS = 0
  276. FATAL = .TRUE.
  277. ELSE IF( NNS.GT.MAXIN ) THEN
  278. WRITE( NOUT, FMT = 9995 )' NNS', NNS, MAXIN
  279. NNS = 0
  280. FATAL = .TRUE.
  281. END IF
  282. READ( NIN, FMT = * )( NSVAL( I ), I = 1, NNS )
  283. DO 30 I = 1, NNS
  284. IF( NSVAL( I ).LT.0 ) THEN
  285. WRITE( NOUT, FMT = 9996 )'NRHS', NSVAL( I ), 0
  286. FATAL = .TRUE.
  287. ELSE IF( NSVAL( I ).GT.MAXRHS ) THEN
  288. WRITE( NOUT, FMT = 9995 )'NRHS', NSVAL( I ), MAXRHS
  289. FATAL = .TRUE.
  290. END IF
  291. 30 CONTINUE
  292. IF( NNS.GT.0 )
  293. $ WRITE( NOUT, FMT = 9993 )'NRHS', ( NSVAL( I ), I = 1, NNS )
  294. *
  295. * Read the values of NB
  296. *
  297. READ( NIN, FMT = * )NNB
  298. IF( NNB.LT.1 ) THEN
  299. WRITE( NOUT, FMT = 9996 )'NNB ', NNB, 1
  300. NNB = 0
  301. FATAL = .TRUE.
  302. ELSE IF( NNB.GT.MAXIN ) THEN
  303. WRITE( NOUT, FMT = 9995 )'NNB ', NNB, MAXIN
  304. NNB = 0
  305. FATAL = .TRUE.
  306. END IF
  307. READ( NIN, FMT = * )( NBVAL( I ), I = 1, NNB )
  308. DO 40 I = 1, NNB
  309. IF( NBVAL( I ).LT.0 ) THEN
  310. WRITE( NOUT, FMT = 9996 )' NB ', NBVAL( I ), 0
  311. FATAL = .TRUE.
  312. END IF
  313. 40 CONTINUE
  314. IF( NNB.GT.0 )
  315. $ WRITE( NOUT, FMT = 9993 )'NB ', ( NBVAL( I ), I = 1, NNB )
  316. *
  317. * Set NBVAL2 to be the set of unique values of NB
  318. *
  319. NNB2 = 0
  320. DO 60 I = 1, NNB
  321. NB = NBVAL( I )
  322. DO 50 J = 1, NNB2
  323. IF( NB.EQ.NBVAL2( J ) )
  324. $ GO TO 60
  325. 50 CONTINUE
  326. NNB2 = NNB2 + 1
  327. NBVAL2( NNB2 ) = NB
  328. 60 CONTINUE
  329. *
  330. * Read the values of NX
  331. *
  332. READ( NIN, FMT = * )( NXVAL( I ), I = 1, NNB )
  333. DO 70 I = 1, NNB
  334. IF( NXVAL( I ).LT.0 ) THEN
  335. WRITE( NOUT, FMT = 9996 )' NX ', NXVAL( I ), 0
  336. FATAL = .TRUE.
  337. END IF
  338. 70 CONTINUE
  339. IF( NNB.GT.0 )
  340. $ WRITE( NOUT, FMT = 9993 )'NX ', ( NXVAL( I ), I = 1, NNB )
  341. *
  342. * Read the values of RANKVAL
  343. *
  344. READ( NIN, FMT = * )NRANK
  345. IF( NN.LT.1 ) THEN
  346. WRITE( NOUT, FMT = 9996 )' NRANK ', NRANK, 1
  347. NRANK = 0
  348. FATAL = .TRUE.
  349. ELSE IF( NN.GT.MAXIN ) THEN
  350. WRITE( NOUT, FMT = 9995 )' NRANK ', NRANK, MAXIN
  351. NRANK = 0
  352. FATAL = .TRUE.
  353. END IF
  354. READ( NIN, FMT = * )( RANKVAL( I ), I = 1, NRANK )
  355. DO I = 1, NRANK
  356. IF( RANKVAL( I ).LT.0 ) THEN
  357. WRITE( NOUT, FMT = 9996 )' RANK ', RANKVAL( I ), 0
  358. FATAL = .TRUE.
  359. ELSE IF( RANKVAL( I ).GT.100 ) THEN
  360. WRITE( NOUT, FMT = 9995 )' RANK ', RANKVAL( I ), 100
  361. FATAL = .TRUE.
  362. END IF
  363. END DO
  364. IF( NRANK.GT.0 )
  365. $ WRITE( NOUT, FMT = 9993 )'RANK % OF N',
  366. $ ( RANKVAL( I ), I = 1, NRANK )
  367. *
  368. * Read the threshold value for the test ratios.
  369. *
  370. READ( NIN, FMT = * )THRESH
  371. WRITE( NOUT, FMT = 9992 )THRESH
  372. *
  373. * Read the flag that indicates whether to test the LAPACK routines.
  374. *
  375. READ( NIN, FMT = * )TSTCHK
  376. *
  377. * Read the flag that indicates whether to test the driver routines.
  378. *
  379. READ( NIN, FMT = * )TSTDRV
  380. *
  381. * Read the flag that indicates whether to test the error exits.
  382. *
  383. READ( NIN, FMT = * )TSTERR
  384. *
  385. IF( FATAL ) THEN
  386. WRITE( NOUT, FMT = 9999 )
  387. STOP
  388. END IF
  389. *
  390. * Calculate and print the machine dependent constants.
  391. *
  392. EPS = SLAMCH( 'Underflow threshold' )
  393. WRITE( NOUT, FMT = 9991 )'underflow', EPS
  394. EPS = SLAMCH( 'Overflow threshold' )
  395. WRITE( NOUT, FMT = 9991 )'overflow ', EPS
  396. EPS = SLAMCH( 'Epsilon' )
  397. WRITE( NOUT, FMT = 9991 )'precision', EPS
  398. WRITE( NOUT, FMT = * )
  399. *
  400. 80 CONTINUE
  401. *
  402. * Read a test path and the number of matrix types to use.
  403. *
  404. READ( NIN, FMT = '(A72)', END = 140 )ALINE
  405. PATH = ALINE( 1: 3 )
  406. NMATS = MATMAX
  407. I = 3
  408. 90 CONTINUE
  409. I = I + 1
  410. IF( I.GT.72 ) THEN
  411. NMATS = MATMAX
  412. GO TO 130
  413. END IF
  414. IF( ALINE( I: I ).EQ.' ' )
  415. $ GO TO 90
  416. NMATS = 0
  417. 100 CONTINUE
  418. C1 = ALINE( I: I )
  419. DO 110 K = 1, 10
  420. IF( C1.EQ.INTSTR( K: K ) ) THEN
  421. IC = K - 1
  422. GO TO 120
  423. END IF
  424. 110 CONTINUE
  425. GO TO 130
  426. 120 CONTINUE
  427. NMATS = NMATS*10 + IC
  428. I = I + 1
  429. IF( I.GT.72 )
  430. $ GO TO 130
  431. GO TO 100
  432. 130 CONTINUE
  433. C1 = PATH( 1: 1 )
  434. C2 = PATH( 2: 3 )
  435. NRHS = NSVAL( 1 )
  436. *
  437. * Check first character for correct precision.
  438. *
  439. IF( .NOT.LSAME( C1, 'Single precision' ) ) THEN
  440. WRITE( NOUT, FMT = 9990 )PATH
  441. *
  442. ELSE IF( NMATS.LE.0 ) THEN
  443. *
  444. * Check for a positive number of tests requested.
  445. *
  446. WRITE( NOUT, FMT = 9989 )PATH
  447. *
  448. ELSE IF( LSAMEN( 2, C2, 'GE' ) ) THEN
  449. *
  450. * GE: general matrices
  451. *
  452. NTYPES = 11
  453. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  454. *
  455. IF( TSTCHK ) THEN
  456. CALL SCHKGE( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
  457. $ NSVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
  458. $ A( 1, 2 ), A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
  459. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  460. ELSE
  461. WRITE( NOUT, FMT = 9989 )PATH
  462. END IF
  463. *
  464. IF( TSTDRV ) THEN
  465. CALL SDRVGE( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  466. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  467. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  468. $ RWORK, IWORK, NOUT )
  469. ELSE
  470. WRITE( NOUT, FMT = 9988 )PATH
  471. END IF
  472. *
  473. ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
  474. *
  475. * GB: general banded matrices
  476. *
  477. LA = ( 2*KDMAX+1 )*NMAX
  478. LAFAC = ( 3*KDMAX+1 )*NMAX
  479. NTYPES = 8
  480. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  481. *
  482. IF( TSTCHK ) THEN
  483. CALL SCHKGB( DOTYPE, NM, MVAL, NN, NVAL, NNB2, NBVAL2, NNS,
  484. $ NSVAL, THRESH, TSTERR, A( 1, 1 ), LA,
  485. $ A( 1, 3 ), LAFAC, B( 1, 1 ), B( 1, 2 ),
  486. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  487. ELSE
  488. WRITE( NOUT, FMT = 9989 )PATH
  489. END IF
  490. *
  491. IF( TSTDRV ) THEN
  492. CALL SDRVGB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  493. $ A( 1, 1 ), LA, A( 1, 3 ), LAFAC, A( 1, 6 ),
  494. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S,
  495. $ WORK, RWORK, IWORK, NOUT )
  496. ELSE
  497. WRITE( NOUT, FMT = 9988 )PATH
  498. END IF
  499. *
  500. ELSE IF( LSAMEN( 2, C2, 'GT' ) ) THEN
  501. *
  502. * GT: general tridiagonal matrices
  503. *
  504. NTYPES = 12
  505. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  506. *
  507. IF( TSTCHK ) THEN
  508. CALL SCHKGT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  509. $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
  510. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  511. ELSE
  512. WRITE( NOUT, FMT = 9989 )PATH
  513. END IF
  514. *
  515. IF( TSTDRV ) THEN
  516. CALL SDRVGT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  517. $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
  518. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  519. ELSE
  520. WRITE( NOUT, FMT = 9988 )PATH
  521. END IF
  522. *
  523. ELSE IF( LSAMEN( 2, C2, 'PO' ) ) THEN
  524. *
  525. * PO: positive definite matrices
  526. *
  527. NTYPES = 9
  528. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  529. *
  530. IF( TSTCHK ) THEN
  531. CALL SCHKPO( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  532. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  533. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  534. $ WORK, RWORK, IWORK, NOUT )
  535. ELSE
  536. WRITE( NOUT, FMT = 9989 )PATH
  537. END IF
  538. *
  539. IF( TSTDRV ) THEN
  540. CALL SDRVPO( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  541. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  542. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  543. $ RWORK, IWORK, NOUT )
  544. ELSE
  545. WRITE( NOUT, FMT = 9988 )PATH
  546. END IF
  547. *
  548. ELSE IF( LSAMEN( 2, C2, 'PS' ) ) THEN
  549. *
  550. * PS: positive semi-definite matrices
  551. *
  552. NTYPES = 9
  553. *
  554. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  555. *
  556. IF( TSTCHK ) THEN
  557. CALL SCHKPS( DOTYPE, NN, NVAL, NNB2, NBVAL2, NRANK,
  558. $ RANKVAL, THRESH, TSTERR, LDA, A( 1, 1 ),
  559. $ A( 1, 2 ), A( 1, 3 ), PIV, WORK, RWORK,
  560. $ NOUT )
  561. ELSE
  562. WRITE( NOUT, FMT = 9989 )PATH
  563. END IF
  564. *
  565. ELSE IF( LSAMEN( 2, C2, 'PP' ) ) THEN
  566. *
  567. * PP: positive definite packed matrices
  568. *
  569. NTYPES = 9
  570. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  571. *
  572. IF( TSTCHK ) THEN
  573. CALL SCHKPP( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  574. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  575. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ), WORK, RWORK,
  576. $ IWORK, NOUT )
  577. ELSE
  578. WRITE( NOUT, FMT = 9989 )PATH
  579. END IF
  580. *
  581. IF( TSTDRV ) THEN
  582. CALL SDRVPP( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  583. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  584. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  585. $ RWORK, IWORK, NOUT )
  586. ELSE
  587. WRITE( NOUT, FMT = 9988 )PATH
  588. END IF
  589. *
  590. ELSE IF( LSAMEN( 2, C2, 'PB' ) ) THEN
  591. *
  592. * PB: positive definite banded matrices
  593. *
  594. NTYPES = 8
  595. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  596. *
  597. IF( TSTCHK ) THEN
  598. CALL SCHKPB( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  599. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  600. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  601. $ WORK, RWORK, IWORK, NOUT )
  602. ELSE
  603. WRITE( NOUT, FMT = 9989 )PATH
  604. END IF
  605. *
  606. IF( TSTDRV ) THEN
  607. CALL SDRVPB( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  608. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  609. $ B( 1, 2 ), B( 1, 3 ), B( 1, 4 ), S, WORK,
  610. $ RWORK, IWORK, NOUT )
  611. ELSE
  612. WRITE( NOUT, FMT = 9988 )PATH
  613. END IF
  614. *
  615. ELSE IF( LSAMEN( 2, C2, 'PT' ) ) THEN
  616. *
  617. * PT: positive definite tridiagonal matrices
  618. *
  619. NTYPES = 12
  620. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  621. *
  622. IF( TSTCHK ) THEN
  623. CALL SCHKPT( DOTYPE, NN, NVAL, NNS, NSVAL, THRESH, TSTERR,
  624. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  625. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
  626. ELSE
  627. WRITE( NOUT, FMT = 9989 )PATH
  628. END IF
  629. *
  630. IF( TSTDRV ) THEN
  631. CALL SDRVPT( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  632. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  633. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, NOUT )
  634. ELSE
  635. WRITE( NOUT, FMT = 9988 )PATH
  636. END IF
  637. *
  638. ELSE IF( LSAMEN( 2, C2, 'SY' ) ) THEN
  639. *
  640. * SY: symmetric indefinite matrices,
  641. * with partial (Bunch-Kaufman) pivoting algorithm
  642. *
  643. NTYPES = 10
  644. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  645. *
  646. IF( TSTCHK ) THEN
  647. CALL SCHKSY( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  648. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  649. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  650. $ WORK, RWORK, IWORK, NOUT )
  651. ELSE
  652. WRITE( NOUT, FMT = 9989 )PATH
  653. END IF
  654. *
  655. IF( TSTDRV ) THEN
  656. CALL SDRVSY( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR, LDA,
  657. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ), B( 1, 1 ),
  658. $ B( 1, 2 ), B( 1, 3 ), WORK, RWORK, IWORK,
  659. $ NOUT )
  660. ELSE
  661. WRITE( NOUT, FMT = 9988 )PATH
  662. END IF
  663. *
  664. ELSE IF( LSAMEN( 2, C2, 'SR' ) ) THEN
  665. *
  666. * SR: symmetric indefinite matrices,
  667. * with bounded Bunch-Kaufman (rook) pivoting algorithm
  668. *
  669. NTYPES = 10
  670. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  671. *
  672. IF( TSTCHK ) THEN
  673. CALL SCHKSY_ROOK(DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  674. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  675. $ A( 1, 3 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  676. $ WORK, RWORK, IWORK, NOUT )
  677. ELSE
  678. WRITE( NOUT, FMT = 9989 )PATH
  679. END IF
  680. *
  681. IF( TSTDRV ) THEN
  682. CALL SDRVSY_ROOK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  683. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  684. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  685. $ WORK, RWORK, IWORK, NOUT )
  686. ELSE
  687. WRITE( NOUT, FMT = 9988 )PATH
  688. END IF
  689. *
  690. ELSE IF( LSAMEN( 2, C2, 'SK' ) ) THEN
  691. *
  692. * SK: symmetric indefinite matrices,
  693. * with bounded Bunch-Kaufman (rook) pivoting algorithm,
  694. * different matrix storage format than SR path version.
  695. *
  696. NTYPES = 10
  697. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  698. *
  699. IF( TSTCHK ) THEN
  700. CALL SCHKSY_RK( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS, NSVAL,
  701. $ THRESH, TSTERR, LDA, A( 1, 1 ), A( 1, 2 ),
  702. $ E, A( 1, 3 ), B( 1, 1 ), B( 1, 2 ),
  703. $ B( 1, 3 ), WORK, RWORK, IWORK, NOUT )
  704. ELSE
  705. WRITE( NOUT, FMT = 9989 )PATH
  706. END IF
  707. *
  708. IF( TSTDRV ) THEN
  709. CALL SDRVSY_RK( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  710. $ LDA, A( 1, 1 ), A( 1, 2 ), E, A( 1, 3 ),
  711. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  712. $ WORK, RWORK, IWORK, NOUT )
  713. ELSE
  714. WRITE( NOUT, FMT = 9988 )PATH
  715. END IF
  716. *
  717. ELSE IF( LSAMEN( 2, C2, 'SA' ) ) THEN
  718. *
  719. * SA: symmetric indefinite matrices,
  720. * with partial (Aasen's) pivoting algorithm
  721. *
  722. NTYPES = 10
  723. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  724. *
  725. IF( TSTCHK ) THEN
  726. CALL SCHKSY_AA( DOTYPE, NN, NVAL, NNB2, NBVAL2, NNS,
  727. $ NSVAL, THRESH, TSTERR, LDA,
  728. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  729. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  730. $ WORK, RWORK, IWORK, NOUT )
  731. ELSE
  732. WRITE( NOUT, FMT = 9989 )PATH
  733. END IF
  734. *
  735. IF( TSTDRV ) THEN
  736. CALL SDRVSY_AA( DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  737. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  738. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  739. $ WORK, RWORK, IWORK, NOUT )
  740. ELSE
  741. WRITE( NOUT, FMT = 9988 )PATH
  742. END IF
  743. *
  744. ELSE IF( LSAMEN( 2, C2, 'S2' ) ) THEN
  745. *
  746. * SA: symmetric indefinite matrices,
  747. * with partial (Aasen's) pivoting algorithm
  748. *
  749. NTYPES = 10
  750. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  751. *
  752. IF( TSTCHK ) THEN
  753. CALL SCHKSY_AA_2STAGE( DOTYPE, NN, NVAL, NNB2, NBVAL2,
  754. $ NNS, NSVAL, THRESH, TSTERR, LDA,
  755. $ A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  756. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  757. $ WORK, RWORK, IWORK, NOUT )
  758. ELSE
  759. WRITE( NOUT, FMT = 9989 )PATH
  760. END IF
  761. *
  762. IF( TSTDRV ) THEN
  763. CALL SDRVSY_AA_2STAGE(
  764. $ DOTYPE, NN, NVAL, NRHS, THRESH, TSTERR,
  765. $ LDA, A( 1, 1 ), A( 1, 2 ), A( 1, 3 ),
  766. $ B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  767. $ WORK, RWORK, IWORK, NOUT )
  768. ELSE
  769. WRITE( NOUT, FMT = 9988 )PATH
  770. END IF
  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 SCHKSP( 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 SDRVSP( 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 SCHKTR( 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 SCHKTP( 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 SCHKTB( 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 SCHKQR( 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 SCHKLQ( 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 SCHKQL( 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 SCHKRQ( 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 SCHKQ3( 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, 'QK' ) ) THEN
  930. *
  931. * QK: truncated QR factorization with pivoting
  932. *
  933. NTYPES = 19
  934. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  935. *
  936. IF( TSTCHK ) THEN
  937. CALL SCHKQP3RK( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL,
  938. $ NNB, NBVAL, NXVAL, THRESH, A( 1, 1 ),
  939. $ A( 1, 2 ), B( 1, 1 ), B( 1, 2 ),
  940. $ B( 1, 3 ), B( 1, 4 ),
  941. $ WORK, IWORK, NOUT )
  942. ELSE
  943. WRITE( NOUT, FMT = 9989 )PATH
  944. END IF
  945. *
  946. ELSE IF( LSAMEN( 2, C2, 'TZ' ) ) THEN
  947. *
  948. * TZ: Trapezoidal matrix
  949. *
  950. NTYPES = 3
  951. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  952. *
  953. IF( TSTCHK ) THEN
  954. CALL SCHKTZ( DOTYPE, NM, MVAL, NN, NVAL, THRESH, TSTERR,
  955. $ A( 1, 1 ), A( 1, 2 ), B( 1, 1 ),
  956. $ B( 1, 3 ), WORK, NOUT )
  957. ELSE
  958. WRITE( NOUT, FMT = 9989 )PATH
  959. END IF
  960. *
  961. ELSE IF( LSAMEN( 2, C2, 'LS' ) ) THEN
  962. *
  963. * LS: Least squares drivers
  964. *
  965. NTYPES = 6
  966. CALL ALAREQ( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  967. *
  968. IF( TSTDRV ) THEN
  969. CALL SDRVLS( DOTYPE, NM, MVAL, NN, NVAL, NNS, NSVAL, NNB,
  970. $ NBVAL, NXVAL, THRESH, TSTERR, A( 1, 1 ),
  971. $ A( 1, 2 ), B( 1, 1 ), B( 1, 2 ), B( 1, 3 ),
  972. $ RWORK, RWORK( NMAX+1 ), NOUT )
  973. ELSE
  974. WRITE( NOUT, FMT = 9988 )PATH
  975. END IF
  976. *
  977. ELSE IF( LSAMEN( 2, C2, 'EQ' ) ) THEN
  978. *
  979. * EQ: Equilibration routines for general and positive definite
  980. * matrices (THREQ should be between 2 and 10)
  981. *
  982. IF( TSTCHK ) THEN
  983. CALL SCHKEQ( THREQ, NOUT )
  984. ELSE
  985. WRITE( NOUT, FMT = 9989 )PATH
  986. END IF
  987. *
  988. ELSE IF( LSAMEN( 2, C2, 'QT' ) ) THEN
  989. *
  990. * QT: QRT routines for general matrices
  991. *
  992. IF( TSTCHK ) THEN
  993. CALL SCHKQRT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  994. $ NBVAL, NOUT )
  995. ELSE
  996. WRITE( NOUT, FMT = 9989 )PATH
  997. END IF
  998. *
  999. ELSE IF( LSAMEN( 2, C2, 'QX' ) ) THEN
  1000. *
  1001. * QX: QRT routines for triangular-pentagonal matrices
  1002. *
  1003. IF( TSTCHK ) THEN
  1004. CALL SCHKQRTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1005. $ NBVAL, NOUT )
  1006. ELSE
  1007. WRITE( NOUT, FMT = 9989 )PATH
  1008. END IF
  1009. *
  1010. ELSE IF( LSAMEN( 2, C2, 'TQ' ) ) THEN
  1011. *
  1012. * TQ: LQT routines for general matrices
  1013. *
  1014. IF( TSTCHK ) THEN
  1015. CALL SCHKLQT( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1016. $ NBVAL, NOUT )
  1017. ELSE
  1018. WRITE( NOUT, FMT = 9989 )PATH
  1019. END IF
  1020. *
  1021. ELSE IF( LSAMEN( 2, C2, 'XQ' ) ) THEN
  1022. *
  1023. * XQ: LQT routines for triangular-pentagonal matrices
  1024. *
  1025. IF( TSTCHK ) THEN
  1026. CALL SCHKLQTP( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1027. $ NBVAL, NOUT )
  1028. ELSE
  1029. WRITE( NOUT, FMT = 9989 )PATH
  1030. END IF
  1031. *
  1032. ELSE IF( LSAMEN( 2, C2, 'TS' ) ) THEN
  1033. *
  1034. * TS: QR routines for tall-skinny matrices
  1035. *
  1036. IF( TSTCHK ) THEN
  1037. CALL SCHKTSQR( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1038. $ NBVAL, NOUT )
  1039. ELSE
  1040. WRITE( NOUT, FMT = 9989 )PATH
  1041. END IF
  1042. *
  1043. ELSE IF( LSAMEN( 2, C2, 'HH' ) ) THEN
  1044. *
  1045. * HH: Householder reconstruction for tall-skinny matrices
  1046. *
  1047. IF( TSTCHK ) THEN
  1048. CALL SCHKORHR_COL( THRESH, TSTERR, NM, MVAL, NN, NVAL, NNB,
  1049. $ NBVAL, NOUT )
  1050. ELSE
  1051. WRITE( NOUT, FMT = 9989 ) PATH
  1052. END IF
  1053. *
  1054. ELSE
  1055. *
  1056. WRITE( NOUT, FMT = 9990 )PATH
  1057. END IF
  1058. *
  1059. * Go back to get another input line.
  1060. *
  1061. GO TO 80
  1062. *
  1063. * Branch to this line when the last record is read.
  1064. *
  1065. 140 CONTINUE
  1066. CLOSE ( NIN )
  1067. S2 = SECOND( )
  1068. WRITE( NOUT, FMT = 9998 )
  1069. WRITE( NOUT, FMT = 9997 )S2 - S1
  1070. *
  1071. DEALLOCATE (A, STAT = AllocateStatus)
  1072. DEALLOCATE (B, STAT = AllocateStatus)
  1073. DEALLOCATE (E, STAT = AllocateStatus)
  1074. DEALLOCATE (S, STAT = AllocateStatus)
  1075. DEALLOCATE (WORK, STAT = AllocateStatus)
  1076. DEALLOCATE (RWORK, STAT = AllocateStatus)
  1077. *
  1078. 9999 FORMAT( / ' Execution not attempted due to input errors' )
  1079. 9998 FORMAT( / ' End of tests' )
  1080. 9997 FORMAT( ' Total time used = ', F12.2, ' seconds', / )
  1081. 9996 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be >=',
  1082. $ I6 )
  1083. 9995 FORMAT( ' Invalid input value: ', A4, '=', I6, '; must be <=',
  1084. $ I6 )
  1085. 9994 FORMAT( ' Tests of the REAL LAPACK routines ',
  1086. $ / ' LAPACK VERSION ', I1, '.', I1, '.', I1,
  1087. $ / / ' The following parameter values will be used:' )
  1088. 9993 FORMAT( 4X, A4, ': ', 10I6, / 11X, 10I6 )
  1089. 9992 FORMAT( / ' Routines pass computational tests if test ratio is ',
  1090. $ 'less than', F8.2, / )
  1091. 9991 FORMAT( ' Relative machine ', A, ' is taken to be', E16.6 )
  1092. 9990 FORMAT( / 1X, A3, ': Unrecognized path name' )
  1093. 9989 FORMAT( / 1X, A3, ' routines were not tested' )
  1094. 9988 FORMAT( / 1X, A3, ' driver routines were not tested' )
  1095. *
  1096. * End of SCHKAA
  1097. *
  1098. END