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.

schkeq.f 16 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. *> \brief \b SCHKEQ
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * SUBROUTINE SCHKEQ( THRESH, NOUT )
  12. *
  13. * .. Scalar Arguments ..
  14. * INTEGER NOUT
  15. * REAL THRESH
  16. * ..
  17. *
  18. *
  19. *> \par Purpose:
  20. * =============
  21. *>
  22. *> \verbatim
  23. *>
  24. *> SCHKEQ tests SGEEQU, SGBEQU, SPOEQU, SPPEQU and SPBEQU
  25. *> \endverbatim
  26. *
  27. * Arguments:
  28. * ==========
  29. *
  30. *> \param[in] THRESH
  31. *> \verbatim
  32. *> THRESH is REAL
  33. *> Threshold for testing routines. Should be between 2 and 10.
  34. *> \endverbatim
  35. *>
  36. *> \param[in] NOUT
  37. *> \verbatim
  38. *> NOUT is INTEGER
  39. *> The unit number for output.
  40. *> \endverbatim
  41. *
  42. * Authors:
  43. * ========
  44. *
  45. *> \author Univ. of Tennessee
  46. *> \author Univ. of California Berkeley
  47. *> \author Univ. of Colorado Denver
  48. *> \author NAG Ltd.
  49. *
  50. *> \ingroup single_lin
  51. *
  52. * =====================================================================
  53. SUBROUTINE SCHKEQ( THRESH, NOUT )
  54. *
  55. * -- LAPACK test routine --
  56. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  57. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  58. *
  59. * .. Scalar Arguments ..
  60. INTEGER NOUT
  61. REAL THRESH
  62. * ..
  63. *
  64. * =====================================================================
  65. *
  66. * .. Parameters ..
  67. REAL ZERO, ONE, TEN
  68. PARAMETER ( ZERO = 0.0E0, ONE = 1.0E+0, TEN = 1.0E1 )
  69. INTEGER NSZ, NSZB
  70. PARAMETER ( NSZ = 5, NSZB = 3*NSZ-2 )
  71. INTEGER NSZP, NPOW
  72. PARAMETER ( NSZP = ( NSZ*( NSZ+1 ) ) / 2,
  73. $ NPOW = 2*NSZ+1 )
  74. * ..
  75. * .. Local Scalars ..
  76. LOGICAL OK
  77. CHARACTER*3 PATH
  78. INTEGER I, INFO, J, KL, KU, M, N
  79. REAL CCOND, EPS, NORM, RATIO, RCMAX, RCMIN, RCOND
  80. * ..
  81. * .. Local Arrays ..
  82. REAL A( NSZ, NSZ ), AB( NSZB, NSZ ), AP( NSZP ),
  83. $ C( NSZ ), POW( NPOW ), R( NSZ ), RESLTS( 5 ),
  84. $ RPOW( NPOW )
  85. * ..
  86. * .. External Functions ..
  87. REAL SLAMCH
  88. EXTERNAL SLAMCH
  89. * ..
  90. * .. External Subroutines ..
  91. EXTERNAL SGBEQU, SGEEQU, SPBEQU, SPOEQU, SPPEQU
  92. * ..
  93. * .. Intrinsic Functions ..
  94. INTRINSIC ABS, MAX, MIN
  95. * ..
  96. * .. Executable Statements ..
  97. *
  98. PATH( 1:1 ) = 'Single precision'
  99. PATH( 2:3 ) = 'EQ'
  100. *
  101. EPS = SLAMCH( 'P' )
  102. DO 10 I = 1, 5
  103. RESLTS( I ) = ZERO
  104. 10 CONTINUE
  105. DO 20 I = 1, NPOW
  106. POW( I ) = TEN**( I-1 )
  107. RPOW( I ) = ONE / POW( I )
  108. 20 CONTINUE
  109. *
  110. * Test SGEEQU
  111. *
  112. DO 80 N = 0, NSZ
  113. DO 70 M = 0, NSZ
  114. *
  115. DO 40 J = 1, NSZ
  116. DO 30 I = 1, NSZ
  117. IF( I.LE.M .AND. J.LE.N ) THEN
  118. A( I, J ) = POW( I+J+1 )*( -1 )**( I+J )
  119. ELSE
  120. A( I, J ) = ZERO
  121. END IF
  122. 30 CONTINUE
  123. 40 CONTINUE
  124. *
  125. CALL SGEEQU( M, N, A, NSZ, R, C, RCOND, CCOND, NORM, INFO )
  126. *
  127. IF( INFO.NE.0 ) THEN
  128. RESLTS( 1 ) = ONE
  129. ELSE
  130. IF( N.NE.0 .AND. M.NE.0 ) THEN
  131. RESLTS( 1 ) = MAX( RESLTS( 1 ),
  132. $ ABS( ( RCOND-RPOW( M ) ) / RPOW( M ) ) )
  133. RESLTS( 1 ) = MAX( RESLTS( 1 ),
  134. $ ABS( ( CCOND-RPOW( N ) ) / RPOW( N ) ) )
  135. RESLTS( 1 ) = MAX( RESLTS( 1 ),
  136. $ ABS( ( NORM-POW( N+M+1 ) ) / POW( N+M+
  137. $ 1 ) ) )
  138. DO 50 I = 1, M
  139. RESLTS( 1 ) = MAX( RESLTS( 1 ),
  140. $ ABS( ( R( I )-RPOW( I+N+1 ) ) /
  141. $ RPOW( I+N+1 ) ) )
  142. 50 CONTINUE
  143. DO 60 J = 1, N
  144. RESLTS( 1 ) = MAX( RESLTS( 1 ),
  145. $ ABS( ( C( J )-POW( N-J+1 ) ) /
  146. $ POW( N-J+1 ) ) )
  147. 60 CONTINUE
  148. END IF
  149. END IF
  150. *
  151. 70 CONTINUE
  152. 80 CONTINUE
  153. *
  154. * Test with zero rows and columns
  155. *
  156. DO 90 J = 1, NSZ
  157. A( MAX( NSZ-1, 1 ), J ) = ZERO
  158. 90 CONTINUE
  159. CALL SGEEQU( NSZ, NSZ, A, NSZ, R, C, RCOND, CCOND, NORM, INFO )
  160. IF( INFO.NE.MAX( NSZ-1, 1 ) )
  161. $ RESLTS( 1 ) = ONE
  162. *
  163. DO 100 J = 1, NSZ
  164. A( MAX( NSZ-1, 1 ), J ) = ONE
  165. 100 CONTINUE
  166. DO 110 I = 1, NSZ
  167. A( I, MAX( NSZ-1, 1 ) ) = ZERO
  168. 110 CONTINUE
  169. CALL SGEEQU( NSZ, NSZ, A, NSZ, R, C, RCOND, CCOND, NORM, INFO )
  170. IF( INFO.NE.NSZ+MAX( NSZ-1, 1 ) )
  171. $ RESLTS( 1 ) = ONE
  172. RESLTS( 1 ) = RESLTS( 1 ) / EPS
  173. *
  174. * Test SGBEQU
  175. *
  176. DO 250 N = 0, NSZ
  177. DO 240 M = 0, NSZ
  178. DO 230 KL = 0, MAX( M-1, 0 )
  179. DO 220 KU = 0, MAX( N-1, 0 )
  180. *
  181. DO 130 J = 1, NSZ
  182. DO 120 I = 1, NSZB
  183. AB( I, J ) = ZERO
  184. 120 CONTINUE
  185. 130 CONTINUE
  186. DO 150 J = 1, N
  187. DO 140 I = 1, M
  188. IF( I.LE.MIN( M, J+KL ) .AND. I.GE.
  189. $ MAX( 1, J-KU ) .AND. J.LE.N ) THEN
  190. AB( KU+1+I-J, J ) = POW( I+J+1 )*
  191. $ ( -1 )**( I+J )
  192. END IF
  193. 140 CONTINUE
  194. 150 CONTINUE
  195. *
  196. CALL SGBEQU( M, N, KL, KU, AB, NSZB, R, C, RCOND,
  197. $ CCOND, NORM, INFO )
  198. *
  199. IF( INFO.NE.0 ) THEN
  200. IF( .NOT.( ( N+KL.LT.M .AND. INFO.EQ.N+KL+1 ) .OR.
  201. $ ( M+KU.LT.N .AND. INFO.EQ.2*M+KU+1 ) ) ) THEN
  202. RESLTS( 2 ) = ONE
  203. END IF
  204. ELSE
  205. IF( N.NE.0 .AND. M.NE.0 ) THEN
  206. *
  207. RCMIN = R( 1 )
  208. RCMAX = R( 1 )
  209. DO 160 I = 1, M
  210. RCMIN = MIN( RCMIN, R( I ) )
  211. RCMAX = MAX( RCMAX, R( I ) )
  212. 160 CONTINUE
  213. RATIO = RCMIN / RCMAX
  214. RESLTS( 2 ) = MAX( RESLTS( 2 ),
  215. $ ABS( ( RCOND-RATIO ) / RATIO ) )
  216. *
  217. RCMIN = C( 1 )
  218. RCMAX = C( 1 )
  219. DO 170 J = 1, N
  220. RCMIN = MIN( RCMIN, C( J ) )
  221. RCMAX = MAX( RCMAX, C( J ) )
  222. 170 CONTINUE
  223. RATIO = RCMIN / RCMAX
  224. RESLTS( 2 ) = MAX( RESLTS( 2 ),
  225. $ ABS( ( CCOND-RATIO ) / RATIO ) )
  226. *
  227. RESLTS( 2 ) = MAX( RESLTS( 2 ),
  228. $ ABS( ( NORM-POW( N+M+1 ) ) /
  229. $ POW( N+M+1 ) ) )
  230. DO 190 I = 1, M
  231. RCMAX = ZERO
  232. DO 180 J = 1, N
  233. IF( I.LE.J+KL .AND. I.GE.J-KU ) THEN
  234. RATIO = ABS( R( I )*POW( I+J+1 )*
  235. $ C( J ) )
  236. RCMAX = MAX( RCMAX, RATIO )
  237. END IF
  238. 180 CONTINUE
  239. RESLTS( 2 ) = MAX( RESLTS( 2 ),
  240. $ ABS( ONE-RCMAX ) )
  241. 190 CONTINUE
  242. *
  243. DO 210 J = 1, N
  244. RCMAX = ZERO
  245. DO 200 I = 1, M
  246. IF( I.LE.J+KL .AND. I.GE.J-KU ) THEN
  247. RATIO = ABS( R( I )*POW( I+J+1 )*
  248. $ C( J ) )
  249. RCMAX = MAX( RCMAX, RATIO )
  250. END IF
  251. 200 CONTINUE
  252. RESLTS( 2 ) = MAX( RESLTS( 2 ),
  253. $ ABS( ONE-RCMAX ) )
  254. 210 CONTINUE
  255. END IF
  256. END IF
  257. *
  258. 220 CONTINUE
  259. 230 CONTINUE
  260. 240 CONTINUE
  261. 250 CONTINUE
  262. RESLTS( 2 ) = RESLTS( 2 ) / EPS
  263. *
  264. * Test SPOEQU
  265. *
  266. DO 290 N = 0, NSZ
  267. *
  268. DO 270 I = 1, NSZ
  269. DO 260 J = 1, NSZ
  270. IF( I.LE.N .AND. J.EQ.I ) THEN
  271. A( I, J ) = POW( I+J+1 )*( -1 )**( I+J )
  272. ELSE
  273. A( I, J ) = ZERO
  274. END IF
  275. 260 CONTINUE
  276. 270 CONTINUE
  277. *
  278. CALL SPOEQU( N, A, NSZ, R, RCOND, NORM, INFO )
  279. *
  280. IF( INFO.NE.0 ) THEN
  281. RESLTS( 3 ) = ONE
  282. ELSE
  283. IF( N.NE.0 ) THEN
  284. RESLTS( 3 ) = MAX( RESLTS( 3 ),
  285. $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) )
  286. RESLTS( 3 ) = MAX( RESLTS( 3 ),
  287. $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+
  288. $ 1 ) ) )
  289. DO 280 I = 1, N
  290. RESLTS( 3 ) = MAX( RESLTS( 3 ),
  291. $ ABS( ( R( I )-RPOW( I+1 ) ) / RPOW( I+
  292. $ 1 ) ) )
  293. 280 CONTINUE
  294. END IF
  295. END IF
  296. 290 CONTINUE
  297. A( MAX( NSZ-1, 1 ), MAX( NSZ-1, 1 ) ) = -ONE
  298. CALL SPOEQU( NSZ, A, NSZ, R, RCOND, NORM, INFO )
  299. IF( INFO.NE.MAX( NSZ-1, 1 ) )
  300. $ RESLTS( 3 ) = ONE
  301. RESLTS( 3 ) = RESLTS( 3 ) / EPS
  302. *
  303. * Test SPPEQU
  304. *
  305. DO 360 N = 0, NSZ
  306. *
  307. * Upper triangular packed storage
  308. *
  309. DO 300 I = 1, ( N*( N+1 ) ) / 2
  310. AP( I ) = ZERO
  311. 300 CONTINUE
  312. DO 310 I = 1, N
  313. AP( ( I*( I+1 ) ) / 2 ) = POW( 2*I+1 )
  314. 310 CONTINUE
  315. *
  316. CALL SPPEQU( 'U', N, AP, R, RCOND, NORM, INFO )
  317. *
  318. IF( INFO.NE.0 ) THEN
  319. RESLTS( 4 ) = ONE
  320. ELSE
  321. IF( N.NE.0 ) THEN
  322. RESLTS( 4 ) = MAX( RESLTS( 4 ),
  323. $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) )
  324. RESLTS( 4 ) = MAX( RESLTS( 4 ),
  325. $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+
  326. $ 1 ) ) )
  327. DO 320 I = 1, N
  328. RESLTS( 4 ) = MAX( RESLTS( 4 ),
  329. $ ABS( ( R( I )-RPOW( I+1 ) ) / RPOW( I+
  330. $ 1 ) ) )
  331. 320 CONTINUE
  332. END IF
  333. END IF
  334. *
  335. * Lower triangular packed storage
  336. *
  337. DO 330 I = 1, ( N*( N+1 ) ) / 2
  338. AP( I ) = ZERO
  339. 330 CONTINUE
  340. J = 1
  341. DO 340 I = 1, N
  342. AP( J ) = POW( 2*I+1 )
  343. J = J + ( N-I+1 )
  344. 340 CONTINUE
  345. *
  346. CALL SPPEQU( 'L', N, AP, R, RCOND, NORM, INFO )
  347. *
  348. IF( INFO.NE.0 ) THEN
  349. RESLTS( 4 ) = ONE
  350. ELSE
  351. IF( N.NE.0 ) THEN
  352. RESLTS( 4 ) = MAX( RESLTS( 4 ),
  353. $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) )
  354. RESLTS( 4 ) = MAX( RESLTS( 4 ),
  355. $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+
  356. $ 1 ) ) )
  357. DO 350 I = 1, N
  358. RESLTS( 4 ) = MAX( RESLTS( 4 ),
  359. $ ABS( ( R( I )-RPOW( I+1 ) ) / RPOW( I+
  360. $ 1 ) ) )
  361. 350 CONTINUE
  362. END IF
  363. END IF
  364. *
  365. 360 CONTINUE
  366. I = ( NSZ*( NSZ+1 ) ) / 2 - 2
  367. AP( I ) = -ONE
  368. CALL SPPEQU( 'L', NSZ, AP, R, RCOND, NORM, INFO )
  369. IF( INFO.NE.MAX( NSZ-1, 1 ) )
  370. $ RESLTS( 4 ) = ONE
  371. RESLTS( 4 ) = RESLTS( 4 ) / EPS
  372. *
  373. * Test SPBEQU
  374. *
  375. DO 460 N = 0, NSZ
  376. DO 450 KL = 0, MAX( N-1, 0 )
  377. *
  378. * Test upper triangular storage
  379. *
  380. DO 380 J = 1, NSZ
  381. DO 370 I = 1, NSZB
  382. AB( I, J ) = ZERO
  383. 370 CONTINUE
  384. 380 CONTINUE
  385. DO 390 J = 1, N
  386. AB( KL+1, J ) = POW( 2*J+1 )
  387. 390 CONTINUE
  388. *
  389. CALL SPBEQU( 'U', N, KL, AB, NSZB, R, RCOND, NORM, INFO )
  390. *
  391. IF( INFO.NE.0 ) THEN
  392. RESLTS( 5 ) = ONE
  393. ELSE
  394. IF( N.NE.0 ) THEN
  395. RESLTS( 5 ) = MAX( RESLTS( 5 ),
  396. $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) )
  397. RESLTS( 5 ) = MAX( RESLTS( 5 ),
  398. $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+
  399. $ 1 ) ) )
  400. DO 400 I = 1, N
  401. RESLTS( 5 ) = MAX( RESLTS( 5 ),
  402. $ ABS( ( R( I )-RPOW( I+1 ) ) /
  403. $ RPOW( I+1 ) ) )
  404. 400 CONTINUE
  405. END IF
  406. END IF
  407. IF( N.NE.0 ) THEN
  408. AB( KL+1, MAX( N-1, 1 ) ) = -ONE
  409. CALL SPBEQU( 'U', N, KL, AB, NSZB, R, RCOND, NORM, INFO )
  410. IF( INFO.NE.MAX( N-1, 1 ) )
  411. $ RESLTS( 5 ) = ONE
  412. END IF
  413. *
  414. * Test lower triangular storage
  415. *
  416. DO 420 J = 1, NSZ
  417. DO 410 I = 1, NSZB
  418. AB( I, J ) = ZERO
  419. 410 CONTINUE
  420. 420 CONTINUE
  421. DO 430 J = 1, N
  422. AB( 1, J ) = POW( 2*J+1 )
  423. 430 CONTINUE
  424. *
  425. CALL SPBEQU( 'L', N, KL, AB, NSZB, R, RCOND, NORM, INFO )
  426. *
  427. IF( INFO.NE.0 ) THEN
  428. RESLTS( 5 ) = ONE
  429. ELSE
  430. IF( N.NE.0 ) THEN
  431. RESLTS( 5 ) = MAX( RESLTS( 5 ),
  432. $ ABS( ( RCOND-RPOW( N ) ) / RPOW( N ) ) )
  433. RESLTS( 5 ) = MAX( RESLTS( 5 ),
  434. $ ABS( ( NORM-POW( 2*N+1 ) ) / POW( 2*N+
  435. $ 1 ) ) )
  436. DO 440 I = 1, N
  437. RESLTS( 5 ) = MAX( RESLTS( 5 ),
  438. $ ABS( ( R( I )-RPOW( I+1 ) ) /
  439. $ RPOW( I+1 ) ) )
  440. 440 CONTINUE
  441. END IF
  442. END IF
  443. IF( N.NE.0 ) THEN
  444. AB( 1, MAX( N-1, 1 ) ) = -ONE
  445. CALL SPBEQU( 'L', N, KL, AB, NSZB, R, RCOND, NORM, INFO )
  446. IF( INFO.NE.MAX( N-1, 1 ) )
  447. $ RESLTS( 5 ) = ONE
  448. END IF
  449. 450 CONTINUE
  450. 460 CONTINUE
  451. RESLTS( 5 ) = RESLTS( 5 ) / EPS
  452. OK = ( RESLTS( 1 ).LE.THRESH ) .AND.
  453. $ ( RESLTS( 2 ).LE.THRESH ) .AND.
  454. $ ( RESLTS( 3 ).LE.THRESH ) .AND.
  455. $ ( RESLTS( 4 ).LE.THRESH ) .AND. ( RESLTS( 5 ).LE.THRESH )
  456. WRITE( NOUT, FMT = * )
  457. IF( OK ) THEN
  458. WRITE( NOUT, FMT = 9999 )PATH
  459. ELSE
  460. IF( RESLTS( 1 ).GT.THRESH )
  461. $ WRITE( NOUT, FMT = 9998 )RESLTS( 1 ), THRESH
  462. IF( RESLTS( 2 ).GT.THRESH )
  463. $ WRITE( NOUT, FMT = 9997 )RESLTS( 2 ), THRESH
  464. IF( RESLTS( 3 ).GT.THRESH )
  465. $ WRITE( NOUT, FMT = 9996 )RESLTS( 3 ), THRESH
  466. IF( RESLTS( 4 ).GT.THRESH )
  467. $ WRITE( NOUT, FMT = 9995 )RESLTS( 4 ), THRESH
  468. IF( RESLTS( 5 ).GT.THRESH )
  469. $ WRITE( NOUT, FMT = 9994 )RESLTS( 5 ), THRESH
  470. END IF
  471. 9999 FORMAT( 1X, 'All tests for ', A3,
  472. $ ' routines passed the threshold' )
  473. 9998 FORMAT( ' SGEEQU failed test with value ', E10.3, ' exceeding',
  474. $ ' threshold ', E10.3 )
  475. 9997 FORMAT( ' SGBEQU failed test with value ', E10.3, ' exceeding',
  476. $ ' threshold ', E10.3 )
  477. 9996 FORMAT( ' SPOEQU failed test with value ', E10.3, ' exceeding',
  478. $ ' threshold ', E10.3 )
  479. 9995 FORMAT( ' SPPEQU failed test with value ', E10.3, ' exceeding',
  480. $ ' threshold ', E10.3 )
  481. 9994 FORMAT( ' SPBEQU failed test with value ', E10.3, ' exceeding',
  482. $ ' threshold ', E10.3 )
  483. RETURN
  484. *
  485. * End of SCHKEQ
  486. *
  487. END