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.

alarqg.f 6.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. *> \brief \b ALARQG
  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 ALARQG( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  12. *
  13. * .. Scalar Arguments ..
  14. * CHARACTER*3 PATH
  15. * INTEGER NIN, NMATS, NOUT, NTYPES
  16. * ..
  17. * .. Array Arguments ..
  18. * LOGICAL DOTYPE( * )
  19. * ..
  20. *
  21. *
  22. *> \par Purpose:
  23. * =============
  24. *>
  25. *> \verbatim
  26. *>
  27. *> ALARQG handles input for the LAPACK test program. It is called
  28. *> to evaluate the input line which requested NMATS matrix types for
  29. *> PATH. The flow of control is as follows:
  30. *>
  31. *> IF NMATS = NTYPES THEN
  32. *> DOTYPE(1:NTYPES) = .TRUE.
  33. *> ELSE
  34. *> Read the next input line for NMATS matrix types
  35. *> Set DOTYPE(I) = .TRUE. for each valid type I
  36. *> END IF
  37. *> \endverbatim
  38. *
  39. * Arguments:
  40. * ==========
  41. *
  42. *> \param[in] PATH
  43. *> \verbatim
  44. *> PATH is CHARACTER*3
  45. *> An LAPACK path name for testing.
  46. *> \endverbatim
  47. *>
  48. *> \param[in] NMATS
  49. *> \verbatim
  50. *> NMATS is INTEGER
  51. *> The number of matrix types to be used in testing this path.
  52. *> \endverbatim
  53. *>
  54. *> \param[out] DOTYPE
  55. *> \verbatim
  56. *> DOTYPE is LOGICAL array, dimension (NTYPES)
  57. *> The vector of flags indicating if each type will be tested.
  58. *> \endverbatim
  59. *>
  60. *> \param[in] NTYPES
  61. *> \verbatim
  62. *> NTYPES is INTEGER
  63. *> The maximum number of matrix types for this path.
  64. *> \endverbatim
  65. *>
  66. *> \param[in] NIN
  67. *> \verbatim
  68. *> NIN is INTEGER
  69. *> The unit number for input. NIN >= 1.
  70. *> \endverbatim
  71. *>
  72. *> \param[in] NOUT
  73. *> \verbatim
  74. *> NOUT is INTEGER
  75. *> The unit number for output. NOUT >= 1.
  76. *> \endverbatim
  77. *
  78. * Authors:
  79. * ========
  80. *
  81. *> \author Univ. of Tennessee
  82. *> \author Univ. of California Berkeley
  83. *> \author Univ. of Colorado Denver
  84. *> \author NAG Ltd.
  85. *
  86. *> \ingroup aux_eig
  87. *
  88. * =====================================================================
  89. SUBROUTINE ALARQG( PATH, NMATS, DOTYPE, NTYPES, NIN, NOUT )
  90. *
  91. * -- LAPACK test routine --
  92. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  93. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  94. *
  95. * .. Scalar Arguments ..
  96. CHARACTER*3 PATH
  97. INTEGER NIN, NMATS, NOUT, NTYPES
  98. * ..
  99. * .. Array Arguments ..
  100. LOGICAL DOTYPE( * )
  101. * ..
  102. *
  103. * ======================================================================
  104. *
  105. * .. Local Scalars ..
  106. LOGICAL FIRSTT
  107. CHARACTER C1
  108. CHARACTER*10 INTSTR
  109. CHARACTER*80 LINE
  110. INTEGER I, I1, IC, J, K, LENP, NT
  111. * ..
  112. * .. Local Arrays ..
  113. INTEGER NREQ( 100 )
  114. * ..
  115. * .. Intrinsic Functions ..
  116. INTRINSIC LEN
  117. * ..
  118. * .. Data statements ..
  119. DATA INTSTR / '0123456789' /
  120. * ..
  121. * .. Executable Statements ..
  122. *
  123. IF( NMATS.GE.NTYPES ) THEN
  124. *
  125. * Test everything if NMATS >= NTYPES.
  126. *
  127. DO 10 I = 1, NTYPES
  128. DOTYPE( I ) = .TRUE.
  129. 10 CONTINUE
  130. ELSE
  131. DO 20 I = 1, NTYPES
  132. DOTYPE( I ) = .FALSE.
  133. 20 CONTINUE
  134. FIRSTT = .TRUE.
  135. *
  136. * Read a line of matrix types if 0 < NMATS < NTYPES.
  137. *
  138. IF( NMATS.GT.0 ) THEN
  139. READ( NIN, FMT = '(A80)', END = 90 )LINE
  140. LENP = LEN( LINE )
  141. I = 0
  142. DO 60 J = 1, NMATS
  143. NREQ( J ) = 0
  144. I1 = 0
  145. 30 CONTINUE
  146. I = I + 1
  147. IF( I.GT.LENP ) THEN
  148. IF( J.EQ.NMATS .AND. I1.GT.0 ) THEN
  149. GO TO 60
  150. ELSE
  151. WRITE( NOUT, FMT = 9995 )LINE
  152. WRITE( NOUT, FMT = 9994 )NMATS
  153. GO TO 80
  154. END IF
  155. END IF
  156. IF( LINE( I: I ).NE.' ' .AND. LINE( I: I ).NE.',' ) THEN
  157. I1 = I
  158. C1 = LINE( I1: I1 )
  159. *
  160. * Check that a valid integer was read
  161. *
  162. DO 40 K = 1, 10
  163. IF( C1.EQ.INTSTR( K: K ) ) THEN
  164. IC = K - 1
  165. GO TO 50
  166. END IF
  167. 40 CONTINUE
  168. WRITE( NOUT, FMT = 9996 )I, LINE
  169. WRITE( NOUT, FMT = 9994 )NMATS
  170. GO TO 80
  171. 50 CONTINUE
  172. NREQ( J ) = 10*NREQ( J ) + IC
  173. GO TO 30
  174. ELSE IF( I1.GT.0 ) THEN
  175. GO TO 60
  176. ELSE
  177. GO TO 30
  178. END IF
  179. 60 CONTINUE
  180. END IF
  181. DO 70 I = 1, NMATS
  182. NT = NREQ( I )
  183. IF( NT.GT.0 .AND. NT.LE.NTYPES ) THEN
  184. IF( DOTYPE( NT ) ) THEN
  185. IF( FIRSTT )
  186. $ WRITE( NOUT, FMT = * )
  187. FIRSTT = .FALSE.
  188. WRITE( NOUT, FMT = 9997 )NT, PATH
  189. END IF
  190. DOTYPE( NT ) = .TRUE.
  191. ELSE
  192. WRITE( NOUT, FMT = 9999 )PATH, NT, NTYPES
  193. 9999 FORMAT( ' *** Invalid type request for ', A3, ', type ',
  194. $ I4, ': must satisfy 1 <= type <= ', I2 )
  195. END IF
  196. 70 CONTINUE
  197. 80 CONTINUE
  198. END IF
  199. RETURN
  200. *
  201. 90 CONTINUE
  202. WRITE( NOUT, FMT = 9998 )PATH
  203. 9998 FORMAT( /' *** End of file reached when trying to read matrix ',
  204. $ 'types for ', A3, /' *** Check that you are requesting the',
  205. $ ' right number of types for each path', / )
  206. 9997 FORMAT( ' *** Warning: duplicate request of matrix type ', I2,
  207. $ ' for ', A3 )
  208. 9996 FORMAT( //' *** Invalid integer value in column ', I2,
  209. $ ' of input', ' line:', /A79 )
  210. 9995 FORMAT( //' *** Not enough matrix types on input line', /A79 )
  211. 9994 FORMAT( ' ==> Specify ', I4, ' matrix types on this line or ',
  212. $ 'adjust NTYPES on previous line' )
  213. WRITE( NOUT, FMT = * )
  214. STOP
  215. *
  216. * End of ALARQG
  217. *
  218. END