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.

cerrhex.f 13 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. *> \brief \b CERRHEX
  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 CERRHE( PATH, NUNIT )
  12. *
  13. * .. Scalar Arguments ..
  14. * CHARACTER*3 PATH
  15. * INTEGER NUNIT
  16. * ..
  17. *
  18. *
  19. *> \par Purpose:
  20. * =============
  21. *>
  22. *> \verbatim
  23. *>
  24. *> CERRHE tests the error exits for the COMPLEX routines
  25. *> for Hermitian indefinite matrices.
  26. *>
  27. *> Note that this file is used only when the XBLAS are available,
  28. *> otherwise cerrhe.f defines this subroutine.
  29. *> \endverbatim
  30. *
  31. * Arguments:
  32. * ==========
  33. *
  34. *> \param[in] PATH
  35. *> \verbatim
  36. *> PATH is CHARACTER*3
  37. *> The LAPACK path name for the routines to be tested.
  38. *> \endverbatim
  39. *>
  40. *> \param[in] NUNIT
  41. *> \verbatim
  42. *> NUNIT is INTEGER
  43. *> The unit number for output.
  44. *> \endverbatim
  45. *
  46. * Authors:
  47. * ========
  48. *
  49. *> \author Univ. of Tennessee
  50. *> \author Univ. of California Berkeley
  51. *> \author Univ. of Colorado Denver
  52. *> \author NAG Ltd.
  53. *
  54. *> \date November 2011
  55. *
  56. *> \ingroup complex_lin
  57. *
  58. * =====================================================================
  59. SUBROUTINE CERRHE( PATH, NUNIT )
  60. *
  61. * -- LAPACK test routine (version 3.4.0) --
  62. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  63. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  64. * November 2011
  65. *
  66. * .. Scalar Arguments ..
  67. CHARACTER*3 PATH
  68. INTEGER NUNIT
  69. * ..
  70. *
  71. * =====================================================================
  72. *
  73. *
  74. * .. Parameters ..
  75. INTEGER NMAX
  76. PARAMETER ( NMAX = 4 )
  77. * ..
  78. * .. Local Scalars ..
  79. CHARACTER EQ
  80. CHARACTER*2 C2
  81. INTEGER I, INFO, J, N_ERR_BNDS, NPARAMS
  82. REAL ANRM, RCOND, BERR
  83. * ..
  84. * .. Local Arrays ..
  85. INTEGER IP( NMAX )
  86. REAL R( NMAX ), R1( NMAX ), R2( NMAX ),
  87. $ S( NMAX ), ERR_BNDS_N( NMAX, 3 ),
  88. $ ERR_BNDS_C( NMAX, 3 ), PARAMS( 1 )
  89. COMPLEX A( NMAX, NMAX ), AF( NMAX, NMAX ), B( NMAX ),
  90. $ W( 2*NMAX ), X( NMAX )
  91. * ..
  92. * .. External Functions ..
  93. LOGICAL LSAMEN
  94. EXTERNAL LSAMEN
  95. * ..
  96. * .. External Subroutines ..
  97. EXTERNAL ALAESM, CHECON, CHERFS, CHETF2, CHETRF, CHETRI,
  98. $ CHETRI2, CHETRS, CHKXER, CHPCON, CHPRFS,
  99. $ CHPTRF, CHPTRI, CHPTRS, CHERFSX
  100. * ..
  101. * .. Scalars in Common ..
  102. LOGICAL LERR, OK
  103. CHARACTER*32 SRNAMT
  104. INTEGER INFOT, NOUT
  105. * ..
  106. * .. Common blocks ..
  107. COMMON / INFOC / INFOT, NOUT, OK, LERR
  108. COMMON / SRNAMC / SRNAMT
  109. * ..
  110. * .. Intrinsic Functions ..
  111. INTRINSIC CMPLX, REAL
  112. * ..
  113. * .. Executable Statements ..
  114. *
  115. NOUT = NUNIT
  116. WRITE( NOUT, FMT = * )
  117. C2 = PATH( 2: 3 )
  118. *
  119. * Set the variables to innocuous values.
  120. *
  121. DO 20 J = 1, NMAX
  122. DO 10 I = 1, NMAX
  123. A( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
  124. AF( I, J ) = CMPLX( 1. / REAL( I+J ), -1. / REAL( I+J ) )
  125. 10 CONTINUE
  126. B( J ) = 0.
  127. R1( J ) = 0.
  128. R2( J ) = 0.
  129. W( J ) = 0.
  130. X( J ) = 0.
  131. S( J ) = 0.
  132. IP( J ) = J
  133. 20 CONTINUE
  134. ANRM = 1.0
  135. OK = .TRUE.
  136. *
  137. * Test error exits of the routines that use the diagonal pivoting
  138. * factorization of a Hermitian indefinite matrix.
  139. *
  140. IF( LSAMEN( 2, C2, 'HE' ) ) THEN
  141. *
  142. * CHETRF
  143. *
  144. SRNAMT = 'CHETRF'
  145. INFOT = 1
  146. CALL CHETRF( '/', 0, A, 1, IP, W, 1, INFO )
  147. CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
  148. INFOT = 2
  149. CALL CHETRF( 'U', -1, A, 1, IP, W, 1, INFO )
  150. CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
  151. INFOT = 4
  152. CALL CHETRF( 'U', 2, A, 1, IP, W, 4, INFO )
  153. CALL CHKXER( 'CHETRF', INFOT, NOUT, LERR, OK )
  154. *
  155. * CHETF2
  156. *
  157. SRNAMT = 'CHETF2'
  158. INFOT = 1
  159. CALL CHETF2( '/', 0, A, 1, IP, INFO )
  160. CALL CHKXER( 'CHETF2', INFOT, NOUT, LERR, OK )
  161. INFOT = 2
  162. CALL CHETF2( 'U', -1, A, 1, IP, INFO )
  163. CALL CHKXER( 'CHETF2', INFOT, NOUT, LERR, OK )
  164. INFOT = 4
  165. CALL CHETF2( 'U', 2, A, 1, IP, INFO )
  166. CALL CHKXER( 'CHETF2', INFOT, NOUT, LERR, OK )
  167. *
  168. * CHETRI
  169. *
  170. SRNAMT = 'CHETRI'
  171. INFOT = 1
  172. CALL CHETRI( '/', 0, A, 1, IP, W, INFO )
  173. CALL CHKXER( 'CHETRI', INFOT, NOUT, LERR, OK )
  174. INFOT = 2
  175. CALL CHETRI( 'U', -1, A, 1, IP, W, INFO )
  176. CALL CHKXER( 'CHETRI', INFOT, NOUT, LERR, OK )
  177. INFOT = 4
  178. CALL CHETRI( 'U', 2, A, 1, IP, W, INFO )
  179. CALL CHKXER( 'CHETRI', INFOT, NOUT, LERR, OK )
  180. *
  181. * CHETRI2
  182. *
  183. SRNAMT = 'CHETRI2'
  184. INFOT = 1
  185. CALL CHETRI2( '/', 0, A, 1, IP, W, 1, INFO )
  186. CALL CHKXER( 'CHETRI2', INFOT, NOUT, LERR, OK )
  187. INFOT = 2
  188. CALL CHETRI2( 'U', -1, A, 1, IP, W, 1, INFO )
  189. CALL CHKXER( 'CHETRI2', INFOT, NOUT, LERR, OK )
  190. INFOT = 4
  191. CALL CHETRI2( 'U', 2, A, 1, IP, W, 1, INFO )
  192. CALL CHKXER( 'CHETRI2', INFOT, NOUT, LERR, OK )
  193. *
  194. * CHETRS
  195. *
  196. SRNAMT = 'CHETRS'
  197. INFOT = 1
  198. CALL CHETRS( '/', 0, 0, A, 1, IP, B, 1, INFO )
  199. CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
  200. INFOT = 2
  201. CALL CHETRS( 'U', -1, 0, A, 1, IP, B, 1, INFO )
  202. CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
  203. INFOT = 3
  204. CALL CHETRS( 'U', 0, -1, A, 1, IP, B, 1, INFO )
  205. CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
  206. INFOT = 5
  207. CALL CHETRS( 'U', 2, 1, A, 1, IP, B, 2, INFO )
  208. CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
  209. INFOT = 8
  210. CALL CHETRS( 'U', 2, 1, A, 2, IP, B, 1, INFO )
  211. CALL CHKXER( 'CHETRS', INFOT, NOUT, LERR, OK )
  212. *
  213. * CHERFS
  214. *
  215. SRNAMT = 'CHERFS'
  216. INFOT = 1
  217. CALL CHERFS( '/', 0, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2, W,
  218. $ R, INFO )
  219. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  220. INFOT = 2
  221. CALL CHERFS( 'U', -1, 0, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
  222. $ W, R, INFO )
  223. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  224. INFOT = 3
  225. CALL CHERFS( 'U', 0, -1, A, 1, AF, 1, IP, B, 1, X, 1, R1, R2,
  226. $ W, R, INFO )
  227. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  228. INFOT = 5
  229. CALL CHERFS( 'U', 2, 1, A, 1, AF, 2, IP, B, 2, X, 2, R1, R2, W,
  230. $ R, INFO )
  231. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  232. INFOT = 7
  233. CALL CHERFS( 'U', 2, 1, A, 2, AF, 1, IP, B, 2, X, 2, R1, R2, W,
  234. $ R, INFO )
  235. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  236. INFOT = 10
  237. CALL CHERFS( 'U', 2, 1, A, 2, AF, 2, IP, B, 1, X, 2, R1, R2, W,
  238. $ R, INFO )
  239. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  240. INFOT = 12
  241. CALL CHERFS( 'U', 2, 1, A, 2, AF, 2, IP, B, 2, X, 1, R1, R2, W,
  242. $ R, INFO )
  243. CALL CHKXER( 'CHERFS', INFOT, NOUT, LERR, OK )
  244. *
  245. * CHECON
  246. *
  247. SRNAMT = 'CHECON'
  248. INFOT = 1
  249. CALL CHECON( '/', 0, A, 1, IP, ANRM, RCOND, W, INFO )
  250. CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
  251. INFOT = 2
  252. CALL CHECON( 'U', -1, A, 1, IP, ANRM, RCOND, W, INFO )
  253. CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
  254. INFOT = 4
  255. CALL CHECON( 'U', 2, A, 1, IP, ANRM, RCOND, W, INFO )
  256. CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
  257. INFOT = 6
  258. CALL CHECON( 'U', 1, A, 1, IP, -ANRM, RCOND, W, INFO )
  259. CALL CHKXER( 'CHECON', INFOT, NOUT, LERR, OK )
  260. *
  261. * CHERFSX
  262. *
  263. N_ERR_BNDS = 3
  264. NPARAMS = 0
  265. SRNAMT = 'CHERFSX'
  266. INFOT = 1
  267. CALL CHERFSX( '/', EQ, 0, 0, A, 1, AF, 1, IP, S, B, 1, X, 1,
  268. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  269. $ PARAMS, W, R, INFO )
  270. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  271. INFOT = 2
  272. CALL CHERFSX( 'U', EQ, -1, 0, A, 1, AF, 1, IP, S, B, 1, X, 1,
  273. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  274. $ PARAMS, W, R, INFO )
  275. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  276. EQ = 'N'
  277. INFOT = 3
  278. CALL CHERFSX( 'U', EQ, -1, 0, A, 1, AF, 1, IP, S, B, 1, X, 1,
  279. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  280. $ PARAMS, W, R, INFO )
  281. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  282. INFOT = 4
  283. CALL CHERFSX( 'U', EQ, 0, -1, A, 1, AF, 1, IP, S, B, 1, X, 1,
  284. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  285. $ PARAMS, W, R, INFO )
  286. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  287. INFOT = 6
  288. CALL CHERFSX( 'U', EQ, 2, 1, A, 1, AF, 2, IP, S, B, 2, X, 2,
  289. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  290. $ PARAMS, W, R, INFO )
  291. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  292. INFOT = 8
  293. CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 1, IP, S, B, 2, X, 2,
  294. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  295. $ PARAMS, W, R, INFO )
  296. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  297. INFOT = 12
  298. CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 1, X, 2,
  299. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  300. $ PARAMS, W, R, INFO )
  301. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  302. INFOT = 14
  303. CALL CHERFSX( 'U', EQ, 2, 1, A, 2, AF, 2, IP, S, B, 2, X, 1,
  304. $ RCOND, BERR, N_ERR_BNDS, ERR_BNDS_N, ERR_BNDS_C, NPARAMS,
  305. $ PARAMS, W, R, INFO )
  306. CALL CHKXER( 'CHERFSX', INFOT, NOUT, LERR, OK )
  307. *
  308. * Test error exits of the routines that use the diagonal pivoting
  309. * factorization of a Hermitian indefinite packed matrix.
  310. *
  311. ELSE IF( LSAMEN( 2, C2, 'HP' ) ) THEN
  312. *
  313. * CHPTRF
  314. *
  315. SRNAMT = 'CHPTRF'
  316. INFOT = 1
  317. CALL CHPTRF( '/', 0, A, IP, INFO )
  318. CALL CHKXER( 'CHPTRF', INFOT, NOUT, LERR, OK )
  319. INFOT = 2
  320. CALL CHPTRF( 'U', -1, A, IP, INFO )
  321. CALL CHKXER( 'CHPTRF', INFOT, NOUT, LERR, OK )
  322. *
  323. * CHPTRI
  324. *
  325. SRNAMT = 'CHPTRI'
  326. INFOT = 1
  327. CALL CHPTRI( '/', 0, A, IP, W, INFO )
  328. CALL CHKXER( 'CHPTRI', INFOT, NOUT, LERR, OK )
  329. INFOT = 2
  330. CALL CHPTRI( 'U', -1, A, IP, W, INFO )
  331. CALL CHKXER( 'CHPTRI', INFOT, NOUT, LERR, OK )
  332. *
  333. * CHPTRS
  334. *
  335. SRNAMT = 'CHPTRS'
  336. INFOT = 1
  337. CALL CHPTRS( '/', 0, 0, A, IP, B, 1, INFO )
  338. CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
  339. INFOT = 2
  340. CALL CHPTRS( 'U', -1, 0, A, IP, B, 1, INFO )
  341. CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
  342. INFOT = 3
  343. CALL CHPTRS( 'U', 0, -1, A, IP, B, 1, INFO )
  344. CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
  345. INFOT = 7
  346. CALL CHPTRS( 'U', 2, 1, A, IP, B, 1, INFO )
  347. CALL CHKXER( 'CHPTRS', INFOT, NOUT, LERR, OK )
  348. *
  349. * CHPRFS
  350. *
  351. SRNAMT = 'CHPRFS'
  352. INFOT = 1
  353. CALL CHPRFS( '/', 0, 0, A, AF, IP, B, 1, X, 1, R1, R2, W, R,
  354. $ INFO )
  355. CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
  356. INFOT = 2
  357. CALL CHPRFS( 'U', -1, 0, A, AF, IP, B, 1, X, 1, R1, R2, W, R,
  358. $ INFO )
  359. CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
  360. INFOT = 3
  361. CALL CHPRFS( 'U', 0, -1, A, AF, IP, B, 1, X, 1, R1, R2, W, R,
  362. $ INFO )
  363. CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
  364. INFOT = 8
  365. CALL CHPRFS( 'U', 2, 1, A, AF, IP, B, 1, X, 2, R1, R2, W, R,
  366. $ INFO )
  367. CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
  368. INFOT = 10
  369. CALL CHPRFS( 'U', 2, 1, A, AF, IP, B, 2, X, 1, R1, R2, W, R,
  370. $ INFO )
  371. CALL CHKXER( 'CHPRFS', INFOT, NOUT, LERR, OK )
  372. *
  373. * CHPCON
  374. *
  375. SRNAMT = 'CHPCON'
  376. INFOT = 1
  377. CALL CHPCON( '/', 0, A, IP, ANRM, RCOND, W, INFO )
  378. CALL CHKXER( 'CHPCON', INFOT, NOUT, LERR, OK )
  379. INFOT = 2
  380. CALL CHPCON( 'U', -1, A, IP, ANRM, RCOND, W, INFO )
  381. CALL CHKXER( 'CHPCON', INFOT, NOUT, LERR, OK )
  382. INFOT = 5
  383. CALL CHPCON( 'U', 1, A, IP, -ANRM, RCOND, W, INFO )
  384. CALL CHKXER( 'CHPCON', INFOT, NOUT, LERR, OK )
  385. END IF
  386. *
  387. * Print a summary line.
  388. *
  389. CALL ALAESM( PATH, OK, NOUT )
  390. *
  391. RETURN
  392. *
  393. * End of CERRHE
  394. *
  395. END