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 7.6 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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
  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. *> \date November 2011
  73. *
  74. *> \ingroup single_eig
  75. *
  76. * =====================================================================
  77. SUBROUTINE SCHKEC( THRESH, TSTERR, NIN, NOUT )
  78. *
  79. * -- LAPACK test routine (version 3.4.0) --
  80. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  81. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  82. * November 2011
  83. *
  84. * .. Scalar Arguments ..
  85. LOGICAL TSTERR
  86. INTEGER NIN, NOUT
  87. REAL THRESH
  88. * ..
  89. *
  90. * =====================================================================
  91. *
  92. * .. Local Scalars ..
  93. LOGICAL OK
  94. CHARACTER*3 PATH
  95. INTEGER KLAEXC, KLALN2, KLANV2, KLAQTR, KLASY2, KTREXC,
  96. $ KTRSEN, KTRSNA, KTRSYL, LLAEXC, LLALN2, LLANV2,
  97. $ LLAQTR, LLASY2, LTREXC, LTRSYL, NLANV2, NLAQTR,
  98. $ NLASY2, NTESTS, NTRSYL
  99. REAL EPS, RLAEXC, RLALN2, RLANV2, RLAQTR, RLASY2,
  100. $ RTREXC, RTRSYL, SFMIN
  101. * ..
  102. * .. Local Arrays ..
  103. INTEGER LTRSEN( 3 ), LTRSNA( 3 ), NLAEXC( 2 ),
  104. $ NLALN2( 2 ), NTREXC( 3 ), NTRSEN( 3 ),
  105. $ NTRSNA( 3 )
  106. REAL RTRSEN( 3 ), RTRSNA( 3 )
  107. * ..
  108. * .. External Subroutines ..
  109. EXTERNAL SERREC, SGET31, SGET32, SGET33, SGET34, SGET35,
  110. $ SGET36, SGET37, SGET38, SGET39
  111. * ..
  112. * .. External Functions ..
  113. REAL SLAMCH
  114. EXTERNAL SLAMCH
  115. * ..
  116. * .. Executable Statements ..
  117. *
  118. PATH( 1: 1 ) = 'Single precision'
  119. PATH( 2: 3 ) = 'EC'
  120. EPS = SLAMCH( 'P' )
  121. SFMIN = SLAMCH( 'S' )
  122. *
  123. * Print header information
  124. *
  125. WRITE( NOUT, FMT = 9989 )
  126. WRITE( NOUT, FMT = 9988 )EPS, SFMIN
  127. WRITE( NOUT, FMT = 9987 )THRESH
  128. *
  129. * Test error exits if TSTERR is .TRUE.
  130. *
  131. IF( TSTERR )
  132. $ CALL SERREC( PATH, NOUT )
  133. *
  134. OK = .TRUE.
  135. CALL SGET31( RLALN2, LLALN2, NLALN2, KLALN2 )
  136. IF( RLALN2.GT.THRESH .OR. NLALN2( 1 ).NE.0 ) THEN
  137. OK = .FALSE.
  138. WRITE( NOUT, FMT = 9999 )RLALN2, LLALN2, NLALN2, KLALN2
  139. END IF
  140. *
  141. CALL SGET32( RLASY2, LLASY2, NLASY2, KLASY2 )
  142. IF( RLASY2.GT.THRESH ) THEN
  143. OK = .FALSE.
  144. WRITE( NOUT, FMT = 9998 )RLASY2, LLASY2, NLASY2, KLASY2
  145. END IF
  146. *
  147. CALL SGET33( RLANV2, LLANV2, NLANV2, KLANV2 )
  148. IF( RLANV2.GT.THRESH .OR. NLANV2.NE.0 ) THEN
  149. OK = .FALSE.
  150. WRITE( NOUT, FMT = 9997 )RLANV2, LLANV2, NLANV2, KLANV2
  151. END IF
  152. *
  153. CALL SGET34( RLAEXC, LLAEXC, NLAEXC, KLAEXC )
  154. IF( RLAEXC.GT.THRESH .OR. NLAEXC( 2 ).NE.0 ) THEN
  155. OK = .FALSE.
  156. WRITE( NOUT, FMT = 9996 )RLAEXC, LLAEXC, NLAEXC, KLAEXC
  157. END IF
  158. *
  159. CALL SGET35( RTRSYL, LTRSYL, NTRSYL, KTRSYL )
  160. IF( RTRSYL.GT.THRESH ) THEN
  161. OK = .FALSE.
  162. WRITE( NOUT, FMT = 9995 )RTRSYL, LTRSYL, NTRSYL, KTRSYL
  163. END IF
  164. *
  165. CALL SGET36( RTREXC, LTREXC, NTREXC, KTREXC, NIN )
  166. IF( RTREXC.GT.THRESH .OR. NTREXC( 3 ).GT.0 ) THEN
  167. OK = .FALSE.
  168. WRITE( NOUT, FMT = 9994 )RTREXC, LTREXC, NTREXC, KTREXC
  169. END IF
  170. *
  171. CALL SGET37( RTRSNA, LTRSNA, NTRSNA, KTRSNA, NIN )
  172. IF( RTRSNA( 1 ).GT.THRESH .OR. RTRSNA( 2 ).GT.THRESH .OR.
  173. $ NTRSNA( 1 ).NE.0 .OR. NTRSNA( 2 ).NE.0 .OR. NTRSNA( 3 ).NE.0 )
  174. $ THEN
  175. OK = .FALSE.
  176. WRITE( NOUT, FMT = 9993 )RTRSNA, LTRSNA, NTRSNA, KTRSNA
  177. END IF
  178. *
  179. CALL SGET38( RTRSEN, LTRSEN, NTRSEN, KTRSEN, NIN )
  180. IF( RTRSEN( 1 ).GT.THRESH .OR. RTRSEN( 2 ).GT.THRESH .OR.
  181. $ NTRSEN( 1 ).NE.0 .OR. NTRSEN( 2 ).NE.0 .OR. NTRSEN( 3 ).NE.0 )
  182. $ THEN
  183. OK = .FALSE.
  184. WRITE( NOUT, FMT = 9992 )RTRSEN, LTRSEN, NTRSEN, KTRSEN
  185. END IF
  186. *
  187. CALL SGET39( RLAQTR, LLAQTR, NLAQTR, KLAQTR )
  188. IF( RLAQTR.GT.THRESH ) THEN
  189. OK = .FALSE.
  190. WRITE( NOUT, FMT = 9991 )RLAQTR, LLAQTR, NLAQTR, KLAQTR
  191. END IF
  192. *
  193. NTESTS = KLALN2 + KLASY2 + KLANV2 + KLAEXC + KTRSYL + KTREXC +
  194. $ KTRSNA + KTRSEN + KLAQTR
  195. IF( OK )
  196. $ WRITE( NOUT, FMT = 9990 )PATH, NTESTS
  197. *
  198. RETURN
  199. 9999 FORMAT( ' Error in SLALN2: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  200. $ 'INFO=', 2I8, ' KNT=', I8 )
  201. 9998 FORMAT( ' Error in SLASY2: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  202. $ 'INFO=', I8, ' KNT=', I8 )
  203. 9997 FORMAT( ' Error in SLANV2: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  204. $ 'INFO=', I8, ' KNT=', I8 )
  205. 9996 FORMAT( ' Error in SLAEXC: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  206. $ 'INFO=', 2I8, ' KNT=', I8 )
  207. 9995 FORMAT( ' Error in STRSYL: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  208. $ 'INFO=', I8, ' KNT=', I8 )
  209. 9994 FORMAT( ' Error in STREXC: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  210. $ 'INFO=', 3I8, ' KNT=', I8 )
  211. 9993 FORMAT( ' Error in STRSNA: RMAX =', 3E12.3, / ' LMAX = ', 3I8,
  212. $ ' NINFO=', 3I8, ' KNT=', I8 )
  213. 9992 FORMAT( ' Error in STRSEN: RMAX =', 3E12.3, / ' LMAX = ', 3I8,
  214. $ ' NINFO=', 3I8, ' KNT=', I8 )
  215. 9991 FORMAT( ' Error in SLAQTR: RMAX =', E12.3, / ' LMAX = ', I8, ' N',
  216. $ 'INFO=', I8, ' KNT=', I8 )
  217. 9990 FORMAT( / 1X, 'All tests for ', A3, ' routines passed the thresh',
  218. $ 'old ( ', I6, ' tests run)' )
  219. 9989 FORMAT( ' Tests of the Nonsymmetric eigenproblem condition estim',
  220. $ 'ation routines', / ' SLALN2, SLASY2, SLANV2, SLAEXC, STRS',
  221. $ 'YL, STREXC, STRSNA, STRSEN, SLAQTR', / )
  222. 9988 FORMAT( ' Relative machine precision (EPS) = ', E16.6, / ' Safe ',
  223. $ 'minimum (SFMIN) = ', E16.6, / )
  224. 9987 FORMAT( ' Routines pass computational tests if test ratio is les',
  225. $ 's than', F8.2, / / )
  226. *
  227. * End of SCHKEC
  228. *
  229. END