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.

dget32.f 18 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. *> \brief \b DGET32
  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 DGET32( RMAX, LMAX, NINFO, KNT )
  12. *
  13. * .. Scalar Arguments ..
  14. * INTEGER KNT, LMAX, NINFO
  15. * DOUBLE PRECISION RMAX
  16. * ..
  17. *
  18. *
  19. *> \par Purpose:
  20. * =============
  21. *>
  22. *> \verbatim
  23. *>
  24. *> DGET32 tests DLASY2, a routine for solving
  25. *>
  26. *> op(TL)*X + ISGN*X*op(TR) = SCALE*B
  27. *>
  28. *> where TL is N1 by N1, TR is N2 by N2, and N1,N2 =1 or 2 only.
  29. *> X and B are N1 by N2, op() is an optional transpose, an
  30. *> ISGN = 1 or -1. SCALE is chosen less than or equal to 1 to
  31. *> avoid overflow in X.
  32. *>
  33. *> The test condition is that the scaled residual
  34. *>
  35. *> norm( op(TL)*X + ISGN*X*op(TR) = SCALE*B )
  36. *> / ( max( ulp*norm(TL), ulp*norm(TR)) * norm(X), SMLNUM )
  37. *>
  38. *> should be on the order of 1. Here, ulp is the machine precision.
  39. *> Also, it is verified that SCALE is less than or equal to 1, and
  40. *> that XNORM = infinity-norm(X).
  41. *> \endverbatim
  42. *
  43. * Arguments:
  44. * ==========
  45. *
  46. *> \param[out] RMAX
  47. *> \verbatim
  48. *> RMAX is DOUBLE PRECISION
  49. *> Value of the largest test ratio.
  50. *> \endverbatim
  51. *>
  52. *> \param[out] LMAX
  53. *> \verbatim
  54. *> LMAX is INTEGER
  55. *> Example number where largest test ratio achieved.
  56. *> \endverbatim
  57. *>
  58. *> \param[out] NINFO
  59. *> \verbatim
  60. *> NINFO is INTEGER
  61. *> Number of examples returned with INFO.NE.0.
  62. *> \endverbatim
  63. *>
  64. *> \param[out] KNT
  65. *> \verbatim
  66. *> KNT is INTEGER
  67. *> Total number of examples tested.
  68. *> \endverbatim
  69. *
  70. * Authors:
  71. * ========
  72. *
  73. *> \author Univ. of Tennessee
  74. *> \author Univ. of California Berkeley
  75. *> \author Univ. of Colorado Denver
  76. *> \author NAG Ltd.
  77. *
  78. *> \date December 2016
  79. *
  80. *> \ingroup double_eig
  81. *
  82. * =====================================================================
  83. SUBROUTINE DGET32( RMAX, LMAX, NINFO, KNT )
  84. *
  85. * -- LAPACK test routine (version 3.7.0) --
  86. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  87. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  88. * December 2016
  89. *
  90. * .. Scalar Arguments ..
  91. INTEGER KNT, LMAX, NINFO
  92. DOUBLE PRECISION RMAX
  93. * ..
  94. *
  95. * =====================================================================
  96. *
  97. * .. Parameters ..
  98. DOUBLE PRECISION ZERO, ONE
  99. PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 )
  100. DOUBLE PRECISION TWO, FOUR, EIGHT
  101. PARAMETER ( TWO = 2.0D0, FOUR = 4.0D0, EIGHT = 8.0D0 )
  102. * ..
  103. * .. Local Scalars ..
  104. LOGICAL LTRANL, LTRANR
  105. INTEGER IB, IB1, IB2, IB3, INFO, ISGN, ITL, ITLSCL,
  106. $ ITR, ITRANL, ITRANR, ITRSCL, N1, N2
  107. DOUBLE PRECISION BIGNUM, DEN, EPS, RES, SCALE, SGN, SMLNUM, TMP,
  108. $ TNRM, XNORM, XNRM
  109. * ..
  110. * .. Local Arrays ..
  111. INTEGER ITVAL( 2, 2, 8 )
  112. DOUBLE PRECISION B( 2, 2 ), TL( 2, 2 ), TR( 2, 2 ), VAL( 3 ),
  113. $ X( 2, 2 )
  114. * ..
  115. * .. External Functions ..
  116. DOUBLE PRECISION DLAMCH
  117. EXTERNAL DLAMCH
  118. * ..
  119. * .. External Subroutines ..
  120. EXTERNAL DLABAD, DLASY2
  121. * ..
  122. * .. Intrinsic Functions ..
  123. INTRINSIC ABS, MAX, MIN, SQRT
  124. * ..
  125. * .. Data statements ..
  126. DATA ITVAL / 8, 4, 2, 1, 4, 8, 1, 2, 2, 1, 8, 4, 1,
  127. $ 2, 4, 8, 9, 4, 2, 1, 4, 9, 1, 2, 2, 1, 9, 4, 1,
  128. $ 2, 4, 9 /
  129. * ..
  130. * .. Executable Statements ..
  131. *
  132. * Get machine parameters
  133. *
  134. EPS = DLAMCH( 'P' )
  135. SMLNUM = DLAMCH( 'S' ) / EPS
  136. BIGNUM = ONE / SMLNUM
  137. CALL DLABAD( SMLNUM, BIGNUM )
  138. *
  139. * Set up test case parameters
  140. *
  141. VAL( 1 ) = SQRT( SMLNUM )
  142. VAL( 2 ) = ONE
  143. VAL( 3 ) = SQRT( BIGNUM )
  144. *
  145. KNT = 0
  146. NINFO = 0
  147. LMAX = 0
  148. RMAX = ZERO
  149. *
  150. * Begin test loop
  151. *
  152. DO 230 ITRANL = 0, 1
  153. DO 220 ITRANR = 0, 1
  154. DO 210 ISGN = -1, 1, 2
  155. SGN = ISGN
  156. LTRANL = ITRANL.EQ.1
  157. LTRANR = ITRANR.EQ.1
  158. *
  159. N1 = 1
  160. N2 = 1
  161. DO 30 ITL = 1, 3
  162. DO 20 ITR = 1, 3
  163. DO 10 IB = 1, 3
  164. TL( 1, 1 ) = VAL( ITL )
  165. TR( 1, 1 ) = VAL( ITR )
  166. B( 1, 1 ) = VAL( IB )
  167. KNT = KNT + 1
  168. CALL DLASY2( LTRANL, LTRANR, ISGN, N1, N2, TL,
  169. $ 2, TR, 2, B, 2, SCALE, X, 2, XNORM,
  170. $ INFO )
  171. IF( INFO.NE.0 )
  172. $ NINFO = NINFO + 1
  173. RES = ABS( ( TL( 1, 1 )+SGN*TR( 1, 1 ) )*
  174. $ X( 1, 1 )-SCALE*B( 1, 1 ) )
  175. IF( INFO.EQ.0 ) THEN
  176. DEN = MAX( EPS*( ( ABS( TR( 1,
  177. $ 1 ) )+ABS( TL( 1, 1 ) ) )*ABS( X( 1,
  178. $ 1 ) ) ), SMLNUM )
  179. ELSE
  180. DEN = SMLNUM*MAX( ABS( X( 1, 1 ) ), ONE )
  181. END IF
  182. RES = RES / DEN
  183. IF( SCALE.GT.ONE )
  184. $ RES = RES + ONE / EPS
  185. RES = RES + ABS( XNORM-ABS( X( 1, 1 ) ) ) /
  186. $ MAX( SMLNUM, XNORM ) / EPS
  187. IF( INFO.NE.0 .AND. INFO.NE.1 )
  188. $ RES = RES + ONE / EPS
  189. IF( RES.GT.RMAX ) THEN
  190. LMAX = KNT
  191. RMAX = RES
  192. END IF
  193. 10 CONTINUE
  194. 20 CONTINUE
  195. 30 CONTINUE
  196. *
  197. N1 = 2
  198. N2 = 1
  199. DO 80 ITL = 1, 8
  200. DO 70 ITLSCL = 1, 3
  201. DO 60 ITR = 1, 3
  202. DO 50 IB1 = 1, 3
  203. DO 40 IB2 = 1, 3
  204. B( 1, 1 ) = VAL( IB1 )
  205. B( 2, 1 ) = -FOUR*VAL( IB2 )
  206. TL( 1, 1 ) = ITVAL( 1, 1, ITL )*
  207. $ VAL( ITLSCL )
  208. TL( 2, 1 ) = ITVAL( 2, 1, ITL )*
  209. $ VAL( ITLSCL )
  210. TL( 1, 2 ) = ITVAL( 1, 2, ITL )*
  211. $ VAL( ITLSCL )
  212. TL( 2, 2 ) = ITVAL( 2, 2, ITL )*
  213. $ VAL( ITLSCL )
  214. TR( 1, 1 ) = VAL( ITR )
  215. KNT = KNT + 1
  216. CALL DLASY2( LTRANL, LTRANR, ISGN, N1, N2,
  217. $ TL, 2, TR, 2, B, 2, SCALE, X,
  218. $ 2, XNORM, INFO )
  219. IF( INFO.NE.0 )
  220. $ NINFO = NINFO + 1
  221. IF( LTRANL ) THEN
  222. TMP = TL( 1, 2 )
  223. TL( 1, 2 ) = TL( 2, 1 )
  224. TL( 2, 1 ) = TMP
  225. END IF
  226. RES = ABS( ( TL( 1, 1 )+SGN*TR( 1, 1 ) )*
  227. $ X( 1, 1 )+TL( 1, 2 )*X( 2, 1 )-
  228. $ SCALE*B( 1, 1 ) )
  229. RES = RES + ABS( ( TL( 2, 2 )+SGN*TR( 1,
  230. $ 1 ) )*X( 2, 1 )+TL( 2, 1 )*
  231. $ X( 1, 1 )-SCALE*B( 2, 1 ) )
  232. TNRM = ABS( TR( 1, 1 ) ) +
  233. $ ABS( TL( 1, 1 ) ) +
  234. $ ABS( TL( 1, 2 ) ) +
  235. $ ABS( TL( 2, 1 ) ) +
  236. $ ABS( TL( 2, 2 ) )
  237. XNRM = MAX( ABS( X( 1, 1 ) ),
  238. $ ABS( X( 2, 1 ) ) )
  239. DEN = MAX( SMLNUM, SMLNUM*XNRM,
  240. $ ( TNRM*EPS )*XNRM )
  241. RES = RES / DEN
  242. IF( SCALE.GT.ONE )
  243. $ RES = RES + ONE / EPS
  244. RES = RES + ABS( XNORM-XNRM ) /
  245. $ MAX( SMLNUM, XNORM ) / EPS
  246. IF( RES.GT.RMAX ) THEN
  247. LMAX = KNT
  248. RMAX = RES
  249. END IF
  250. 40 CONTINUE
  251. 50 CONTINUE
  252. 60 CONTINUE
  253. 70 CONTINUE
  254. 80 CONTINUE
  255. *
  256. N1 = 1
  257. N2 = 2
  258. DO 130 ITR = 1, 8
  259. DO 120 ITRSCL = 1, 3
  260. DO 110 ITL = 1, 3
  261. DO 100 IB1 = 1, 3
  262. DO 90 IB2 = 1, 3
  263. B( 1, 1 ) = VAL( IB1 )
  264. B( 1, 2 ) = -TWO*VAL( IB2 )
  265. TR( 1, 1 ) = ITVAL( 1, 1, ITR )*
  266. $ VAL( ITRSCL )
  267. TR( 2, 1 ) = ITVAL( 2, 1, ITR )*
  268. $ VAL( ITRSCL )
  269. TR( 1, 2 ) = ITVAL( 1, 2, ITR )*
  270. $ VAL( ITRSCL )
  271. TR( 2, 2 ) = ITVAL( 2, 2, ITR )*
  272. $ VAL( ITRSCL )
  273. TL( 1, 1 ) = VAL( ITL )
  274. KNT = KNT + 1
  275. CALL DLASY2( LTRANL, LTRANR, ISGN, N1, N2,
  276. $ TL, 2, TR, 2, B, 2, SCALE, X,
  277. $ 2, XNORM, INFO )
  278. IF( INFO.NE.0 )
  279. $ NINFO = NINFO + 1
  280. IF( LTRANR ) THEN
  281. TMP = TR( 1, 2 )
  282. TR( 1, 2 ) = TR( 2, 1 )
  283. TR( 2, 1 ) = TMP
  284. END IF
  285. TNRM = ABS( TL( 1, 1 ) ) +
  286. $ ABS( TR( 1, 1 ) ) +
  287. $ ABS( TR( 1, 2 ) ) +
  288. $ ABS( TR( 2, 2 ) ) +
  289. $ ABS( TR( 2, 1 ) )
  290. XNRM = ABS( X( 1, 1 ) ) + ABS( X( 1, 2 ) )
  291. RES = ABS( ( ( TL( 1, 1 )+SGN*TR( 1,
  292. $ 1 ) ) )*( X( 1, 1 ) )+
  293. $ ( SGN*TR( 2, 1 ) )*( X( 1, 2 ) )-
  294. $ ( SCALE*B( 1, 1 ) ) )
  295. RES = RES + ABS( ( ( TL( 1, 1 )+SGN*TR( 2,
  296. $ 2 ) ) )*( X( 1, 2 ) )+
  297. $ ( SGN*TR( 1, 2 ) )*( X( 1, 1 ) )-
  298. $ ( SCALE*B( 1, 2 ) ) )
  299. DEN = MAX( SMLNUM, SMLNUM*XNRM,
  300. $ ( TNRM*EPS )*XNRM )
  301. RES = RES / DEN
  302. IF( SCALE.GT.ONE )
  303. $ RES = RES + ONE / EPS
  304. RES = RES + ABS( XNORM-XNRM ) /
  305. $ MAX( SMLNUM, XNORM ) / EPS
  306. IF( RES.GT.RMAX ) THEN
  307. LMAX = KNT
  308. RMAX = RES
  309. END IF
  310. 90 CONTINUE
  311. 100 CONTINUE
  312. 110 CONTINUE
  313. 120 CONTINUE
  314. 130 CONTINUE
  315. *
  316. N1 = 2
  317. N2 = 2
  318. DO 200 ITR = 1, 8
  319. DO 190 ITRSCL = 1, 3
  320. DO 180 ITL = 1, 8
  321. DO 170 ITLSCL = 1, 3
  322. DO 160 IB1 = 1, 3
  323. DO 150 IB2 = 1, 3
  324. DO 140 IB3 = 1, 3
  325. B( 1, 1 ) = VAL( IB1 )
  326. B( 2, 1 ) = -FOUR*VAL( IB2 )
  327. B( 1, 2 ) = -TWO*VAL( IB3 )
  328. B( 2, 2 ) = EIGHT*
  329. $ MIN( VAL( IB1 ), VAL
  330. $ ( IB2 ), VAL( IB3 ) )
  331. TR( 1, 1 ) = ITVAL( 1, 1, ITR )*
  332. $ VAL( ITRSCL )
  333. TR( 2, 1 ) = ITVAL( 2, 1, ITR )*
  334. $ VAL( ITRSCL )
  335. TR( 1, 2 ) = ITVAL( 1, 2, ITR )*
  336. $ VAL( ITRSCL )
  337. TR( 2, 2 ) = ITVAL( 2, 2, ITR )*
  338. $ VAL( ITRSCL )
  339. TL( 1, 1 ) = ITVAL( 1, 1, ITL )*
  340. $ VAL( ITLSCL )
  341. TL( 2, 1 ) = ITVAL( 2, 1, ITL )*
  342. $ VAL( ITLSCL )
  343. TL( 1, 2 ) = ITVAL( 1, 2, ITL )*
  344. $ VAL( ITLSCL )
  345. TL( 2, 2 ) = ITVAL( 2, 2, ITL )*
  346. $ VAL( ITLSCL )
  347. KNT = KNT + 1
  348. CALL DLASY2( LTRANL, LTRANR, ISGN,
  349. $ N1, N2, TL, 2, TR, 2,
  350. $ B, 2, SCALE, X, 2,
  351. $ XNORM, INFO )
  352. IF( INFO.NE.0 )
  353. $ NINFO = NINFO + 1
  354. IF( LTRANR ) THEN
  355. TMP = TR( 1, 2 )
  356. TR( 1, 2 ) = TR( 2, 1 )
  357. TR( 2, 1 ) = TMP
  358. END IF
  359. IF( LTRANL ) THEN
  360. TMP = TL( 1, 2 )
  361. TL( 1, 2 ) = TL( 2, 1 )
  362. TL( 2, 1 ) = TMP
  363. END IF
  364. TNRM = ABS( TR( 1, 1 ) ) +
  365. $ ABS( TR( 2, 1 ) ) +
  366. $ ABS( TR( 1, 2 ) ) +
  367. $ ABS( TR( 2, 2 ) ) +
  368. $ ABS( TL( 1, 1 ) ) +
  369. $ ABS( TL( 2, 1 ) ) +
  370. $ ABS( TL( 1, 2 ) ) +
  371. $ ABS( TL( 2, 2 ) )
  372. XNRM = MAX( ABS( X( 1, 1 ) )+
  373. $ ABS( X( 1, 2 ) ),
  374. $ ABS( X( 2, 1 ) )+
  375. $ ABS( X( 2, 2 ) ) )
  376. RES = ABS( ( ( TL( 1, 1 )+SGN*TR( 1,
  377. $ 1 ) ) )*( X( 1, 1 ) )+
  378. $ ( SGN*TR( 2, 1 ) )*
  379. $ ( X( 1, 2 ) )+( TL( 1, 2 ) )*
  380. $ ( X( 2, 1 ) )-
  381. $ ( SCALE*B( 1, 1 ) ) )
  382. RES = RES + ABS( ( TL( 1, 1 ) )*
  383. $ ( X( 1, 2 ) )+
  384. $ ( SGN*TR( 1, 2 ) )*
  385. $ ( X( 1, 1 ) )+
  386. $ ( SGN*TR( 2, 2 ) )*
  387. $ ( X( 1, 2 ) )+( TL( 1, 2 ) )*
  388. $ ( X( 2, 2 ) )-
  389. $ ( SCALE*B( 1, 2 ) ) )
  390. RES = RES + ABS( ( TL( 2, 1 ) )*
  391. $ ( X( 1, 1 ) )+
  392. $ ( SGN*TR( 1, 1 ) )*
  393. $ ( X( 2, 1 ) )+
  394. $ ( SGN*TR( 2, 1 ) )*
  395. $ ( X( 2, 2 ) )+( TL( 2, 2 ) )*
  396. $ ( X( 2, 1 ) )-
  397. $ ( SCALE*B( 2, 1 ) ) )
  398. RES = RES + ABS( ( ( TL( 2,
  399. $ 2 )+SGN*TR( 2, 2 ) ) )*
  400. $ ( X( 2, 2 ) )+
  401. $ ( SGN*TR( 1, 2 ) )*
  402. $ ( X( 2, 1 ) )+( TL( 2, 1 ) )*
  403. $ ( X( 1, 2 ) )-
  404. $ ( SCALE*B( 2, 2 ) ) )
  405. DEN = MAX( SMLNUM, SMLNUM*XNRM,
  406. $ ( TNRM*EPS )*XNRM )
  407. RES = RES / DEN
  408. IF( SCALE.GT.ONE )
  409. $ RES = RES + ONE / EPS
  410. RES = RES + ABS( XNORM-XNRM ) /
  411. $ MAX( SMLNUM, XNORM ) / EPS
  412. IF( RES.GT.RMAX ) THEN
  413. LMAX = KNT
  414. RMAX = RES
  415. END IF
  416. 140 CONTINUE
  417. 150 CONTINUE
  418. 160 CONTINUE
  419. 170 CONTINUE
  420. 180 CONTINUE
  421. 190 CONTINUE
  422. 200 CONTINUE
  423. 210 CONTINUE
  424. 220 CONTINUE
  425. 230 CONTINUE
  426. *
  427. RETURN
  428. *
  429. * End of DGET32
  430. *
  431. END