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.

schkec.f 8.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. *> \brief \b SCHKEC
  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 SCHKEC( THRESH, TSTERR, NIN, NOUT )
  12. *
  13. * .. Scalar Arguments ..
  14. * LOGICAL TSTERR
  15. * INTEGER NIN, NOUT
  16. * REAL THRESH
  17. * ..
  18. *
  19. *
  20. *> \par Purpose:
  21. * =============
  22. *>
  23. *> \verbatim
  24. *>
  25. *> SCHKEC tests eigen- condition estimation routines
  26. *> SLALN2, SLASY2, SLANV2, SLAQTR, SLAEXC,
  27. *> STRSYL, STREXC, STRSNA, STRSEN, STGEXC
  28. *>
  29. *> In all cases, the routine runs through a fixed set of numerical
  30. *> examples, subjects them to various tests, and compares the test
  31. *> results to a threshold THRESH. In addition, STREXC, STRSNA and STRSEN
  32. *> are tested by reading in precomputed examples from a file (on input
  33. *> unit NIN). Output is written to output unit NOUT.
  34. *> \endverbatim
  35. *
  36. * Arguments:
  37. * ==========
  38. *
  39. *> \param[in] THRESH
  40. *> \verbatim
  41. *> THRESH is REAL
  42. *> Threshold for residual tests. A computed test ratio passes
  43. *> the threshold if it is less than THRESH.
  44. *> \endverbatim
  45. *>
  46. *> \param[in] TSTERR
  47. *> \verbatim
  48. *> TSTERR is LOGICAL
  49. *> Flag that indicates whether error exits are to be tested.
  50. *> \endverbatim
  51. *>
  52. *> \param[in] NIN
  53. *> \verbatim
  54. *> NIN is INTEGER
  55. *> The logical unit number for input.
  56. *> \endverbatim
  57. *>
  58. *> \param[in] NOUT
  59. *> \verbatim
  60. *> NOUT is INTEGER
  61. *> The logical unit number for output.
  62. *> \endverbatim
  63. *
  64. * Authors:
  65. * ========
  66. *
  67. *> \author Univ. of Tennessee
  68. *> \author Univ. of California Berkeley
  69. *> \author Univ. of Colorado Denver
  70. *> \author NAG Ltd.
  71. *
  72. *> \ingroup single_eig
  73. *
  74. * =====================================================================
  75. SUBROUTINE SCHKEC( THRESH, TSTERR, NIN, NOUT )
  76. *
  77. * -- LAPACK test routine --
  78. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  79. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  80. *
  81. * .. Scalar Arguments ..
  82. LOGICAL TSTERR
  83. INTEGER NIN, NOUT
  84. REAL THRESH
  85. * ..
  86. *
  87. * =====================================================================
  88. *
  89. * .. Local Scalars ..
  90. LOGICAL OK
  91. CHARACTER*3 PATH
  92. INTEGER KLAEXC, KLALN2, KLANV2, KLAQTR, KLASY2, KTREXC,
  93. $ KTRSEN, KTRSNA, KTRSYL, KTRSYL3, LLAEXC,
  94. $ LLALN2, LLANV2, LLAQTR, LLASY2, LTREXC, LTRSYL,
  95. $ NLANV2, NLAQTR, NLASY2, NTESTS, NTRSYL, KTGEXC,
  96. $ LTGEXC
  97. REAL EPS, RLAEXC, RLALN2, RLANV2, RLAQTR, RLASY2,
  98. $ RTREXC, SFMIN, RTGEXC
  99. * ..
  100. * .. Local Arrays ..
  101. INTEGER FTRSYL( 3 ), ITRSYL( 2 ), LTRSEN( 3 ),
  102. $ LTRSNA( 3 ), NLAEXC( 2 ), NLALN2( 2 ),
  103. $ NTGEXC( 2 ), NTREXC( 3 ), NTRSEN( 3 ),
  104. $ NTRSNA( 3 )
  105. REAL RTRSEN( 3 ), RTRSNA( 3 ), RTRSYL( 2 )
  106. * ..
  107. * .. External Subroutines ..
  108. EXTERNAL SERREC, SGET31, SGET32, SGET33, SGET34, SGET35,
  109. $ SGET36, SGET37, SGET38, SGET39, SGET40, SSYL01
  110. * ..
  111. * .. External Functions ..
  112. REAL SLAMCH
  113. EXTERNAL SLAMCH
  114. * ..
  115. * .. Executable Statements ..
  116. *
  117. PATH( 1: 1 ) = 'Single precision'
  118. PATH( 2: 3 ) = 'EC'
  119. EPS = SLAMCH( 'P' )
  120. SFMIN = SLAMCH( 'S' )
  121. *
  122. * Print header information
  123. *
  124. WRITE( NOUT, FMT = 9989 )
  125. WRITE( NOUT, FMT = 9988 )EPS, SFMIN
  126. WRITE( NOUT, FMT = 9987 )THRESH
  127. *
  128. * Test error exits if TSTERR is .TRUE.
  129. *
  130. IF( TSTERR )
  131. $ CALL SERREC( PATH, NOUT )
  132. *
  133. OK = .TRUE.
  134. CALL SGET31( RLALN2, LLALN2, NLALN2, KLALN2 )
  135. IF( RLALN2.GT.THRESH .OR. NLALN2( 1 ).NE.0 ) THEN
  136. OK = .FALSE.
  137. WRITE( NOUT, FMT = 9999 )RLALN2, LLALN2, NLALN2, KLALN2
  138. END IF
  139. *
  140. CALL SGET32( RLASY2, LLASY2, NLASY2, KLASY2 )
  141. IF( RLASY2.GT.THRESH ) THEN
  142. OK = .FALSE.
  143. WRITE( NOUT, FMT = 9998 )RLASY2, LLASY2, NLASY2, KLASY2
  144. END IF
  145. *
  146. CALL SGET33( RLANV2, LLANV2, NLANV2, KLANV2 )
  147. IF( RLANV2.GT.THRESH .OR. NLANV2.NE.0 ) THEN
  148. OK = .FALSE.
  149. WRITE( NOUT, FMT = 9997 )RLANV2, LLANV2, NLANV2, KLANV2
  150. END IF
  151. *
  152. CALL SGET34( RLAEXC, LLAEXC, NLAEXC, KLAEXC )
  153. IF( RLAEXC.GT.THRESH .OR. NLAEXC( 2 ).NE.0 ) THEN
  154. OK = .FALSE.
  155. WRITE( NOUT, FMT = 9996 )RLAEXC, LLAEXC, NLAEXC, KLAEXC
  156. END IF
  157. *
  158. CALL SGET35( RTRSYL( 1 ), LTRSYL, NTRSYL, KTRSYL )
  159. IF( RTRSYL( 1 ).GT.THRESH ) THEN
  160. OK = .FALSE.
  161. WRITE( NOUT, FMT = 9995 )RTRSYL( 1 ), LTRSYL, NTRSYL, KTRSYL
  162. END IF
  163. *
  164. CALL SSYL01( THRESH, FTRSYL, RTRSYL, ITRSYL, KTRSYL3 )
  165. IF( FTRSYL( 1 ).GT.0 ) THEN
  166. OK = .FALSE.
  167. WRITE( NOUT, FMT = 9970 )FTRSYL( 1 ), RTRSYL( 1 ), THRESH
  168. END IF
  169. IF( FTRSYL( 2 ).GT.0 ) THEN
  170. OK = .FALSE.
  171. WRITE( NOUT, FMT = 9971 )FTRSYL( 2 ), RTRSYL( 2 ), THRESH
  172. END IF
  173. IF( FTRSYL( 3 ).GT.0 ) THEN
  174. OK = .FALSE.
  175. WRITE( NOUT, FMT = 9972 )FTRSYL( 3 )
  176. END IF
  177. *
  178. CALL SGET36( RTREXC, LTREXC, NTREXC, KTREXC, NIN )
  179. IF( RTREXC.GT.THRESH .OR. NTREXC( 3 ).GT.0 ) THEN
  180. OK = .FALSE.
  181. WRITE( NOUT, FMT = 9994 )RTREXC, LTREXC, NTREXC, KTREXC
  182. END IF
  183. *
  184. CALL SGET37( RTRSNA, LTRSNA, NTRSNA, KTRSNA, NIN )
  185. IF( RTRSNA( 1 ).GT.THRESH .OR. RTRSNA( 2 ).GT.THRESH .OR.
  186. $ NTRSNA( 1 ).NE.0 .OR. NTRSNA( 2 ).NE.0 .OR. NTRSNA( 3 ).NE.0 )
  187. $ THEN
  188. OK = .FALSE.
  189. WRITE( NOUT, FMT = 9993 )RTRSNA, LTRSNA, NTRSNA, KTRSNA
  190. END IF
  191. *
  192. CALL SGET38( RTRSEN, LTRSEN, NTRSEN, KTRSEN, NIN )
  193. IF( RTRSEN( 1 ).GT.THRESH .OR. RTRSEN( 2 ).GT.THRESH .OR.
  194. $ NTRSEN( 1 ).NE.0 .OR. NTRSEN( 2 ).NE.0 .OR. NTRSEN( 3 ).NE.0 )
  195. $ THEN
  196. OK = .FALSE.
  197. WRITE( NOUT, FMT = 9992 )RTRSEN, LTRSEN, NTRSEN, KTRSEN
  198. END IF
  199. *
  200. CALL SGET39( RLAQTR, LLAQTR, NLAQTR, KLAQTR )
  201. IF( RLAQTR.GT.THRESH ) THEN
  202. OK = .FALSE.
  203. WRITE( NOUT, FMT = 9991 )RLAQTR, LLAQTR, NLAQTR, KLAQTR
  204. END IF
  205. *
  206. CALL SGET40( RTGEXC, LTGEXC, NTGEXC, KTGEXC, NIN )
  207. IF( RTGEXC.GT.THRESH ) THEN
  208. OK = .FALSE.
  209. WRITE( NOUT, FMT = 9986 )RTGEXC, LTGEXC, NTGEXC, KTGEXC
  210. END IF
  211. *
  212. NTESTS = KLALN2 + KLASY2 + KLANV2 + KLAEXC + KTRSYL + KTREXC +
  213. $ KTRSNA + KTRSEN + KLAQTR
  214. IF( OK )
  215. $ WRITE( NOUT, FMT = 9990 )PATH, NTESTS
  216. *
  217. RETURN
  218. 9999 FORMAT( ' Error in SLALN2: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  219. $ 'INFO=', 2I8, ' KNT=', I8 )
  220. 9998 FORMAT( ' Error in SLASY2: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  221. $ 'INFO=', I8, ' KNT=', I8 )
  222. 9997 FORMAT( ' Error in SLANV2: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  223. $ 'INFO=', I8, ' KNT=', I8 )
  224. 9996 FORMAT( ' Error in SLAEXC: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  225. $ 'INFO=', 2I8, ' KNT=', I8 )
  226. 9995 FORMAT( ' Error in STRSYL: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  227. $ 'INFO=', I8, ' KNT=', I8 )
  228. 9994 FORMAT( ' Error in STREXC: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  229. $ 'INFO=', 3I8, ' KNT=', I8 )
  230. 9993 FORMAT( ' Error in STRSNA: RMAX =', 3E12.3, / ' LMAX = ', 3I8,
  231. $ ' NINFO=', 3I8, ' KNT=', I8 )
  232. 9992 FORMAT( ' Error in STRSEN: RMAX =', 3E12.3, / ' LMAX = ', 3I8,
  233. $ ' NINFO=', 3I8, ' KNT=', I8 )
  234. 9991 FORMAT( ' Error in SLAQTR: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  235. $ 'INFO=', I8, ' KNT=', I8 )
  236. 9990 FORMAT( / 1X, 'All tests for ', A3, ' routines passed the thresh',
  237. $ 'old ( ', I6, ' tests run)' )
  238. 9989 FORMAT( ' Tests of the Nonsymmetric eigenproblem condition estim',
  239. $ 'ation routines', / ' SLALN2, SLASY2, SLANV2, SLAEXC, STRS',
  240. $ 'YL, STREXC, STRSNA, STRSEN, SLAQTR', / )
  241. 9988 FORMAT( ' Relative machine precision (EPS) = ', E16.6, / ' Safe ',
  242. $ 'minimum (SFMIN) = ', E16.6, / )
  243. 9987 FORMAT( ' Routines pass computational tests if test ratio is les',
  244. $ 's than', F8.2, / / )
  245. 9986 FORMAT( ' Error in STGEXC: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  246. $ 'INFO=', 2I8, ' KNT=', I8 )
  247. 9972 FORMAT( 'STRSYL and STRSYL3 compute an inconsistent result ',
  248. $ 'factor in ', I8, ' tests.')
  249. 9971 FORMAT( 'Error in STRSYL3: ', I8, ' tests fail the threshold.', /
  250. $ 'Maximum test ratio =', D12.3, ' threshold =', D12.3 )
  251. 9970 FORMAT( 'Error in STRSYL: ', I8, ' tests fail the threshold.', /
  252. $ 'Maximum test ratio =', D12.3, ' threshold =', D12.3 )
  253. *
  254. * End of SCHKEC
  255. *
  256. END