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.

c_zblat1.f 32 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. PROGRAM ZCBLAT1
  2. * Test program for the COMPLEX*16 Level 1 CBLAS.
  3. * Based upon the original CBLAS test routine together with:
  4. * F06GAF Example Program Text
  5. * .. Parameters ..
  6. INTEGER NOUT
  7. PARAMETER (NOUT=6)
  8. * .. Scalars in Common ..
  9. INTEGER ICASE, INCX, INCY, MODE, N
  10. LOGICAL PASS
  11. * .. Local Scalars ..
  12. DOUBLE PRECISION SFAC
  13. INTEGER IC
  14. * .. External Subroutines ..
  15. EXTERNAL CHECK1, CHECK2, HEADER
  16. * .. Common blocks ..
  17. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  18. * .. Data statements ..
  19. DATA SFAC/9.765625D-4/
  20. * .. Executable Statements ..
  21. WRITE (NOUT,99999)
  22. DO 20 IC = 1, 10
  23. ICASE = IC
  24. CALL HEADER
  25. *
  26. * Initialize PASS, INCX, INCY, and MODE for a new case.
  27. * The value 9999 for INCX, INCY or MODE will appear in the
  28. * detailed output, if any, for cases that do not involve
  29. * these parameters.
  30. *
  31. PASS = .TRUE.
  32. INCX = 9999
  33. INCY = 9999
  34. MODE = 9999
  35. IF (ICASE.LE.5) THEN
  36. CALL CHECK2(SFAC)
  37. ELSE IF (ICASE.GE.6) THEN
  38. CALL CHECK1(SFAC)
  39. END IF
  40. * -- Print
  41. IF (PASS) THEN
  42. WRITE (NOUT,99998)
  43. ELSE
  44. CALL ABORT
  45. END IF
  46. 20 CONTINUE
  47. *
  48. 99999 FORMAT (' Complex CBLAS Test Program Results',/1X)
  49. 99998 FORMAT (' ----- PASS -----')
  50. END
  51. SUBROUTINE HEADER
  52. * .. Parameters ..
  53. INTEGER NOUT
  54. PARAMETER (NOUT=6)
  55. * .. Scalars in Common ..
  56. INTEGER ICASE, INCX, INCY, MODE, N
  57. LOGICAL PASS
  58. * .. Local Arrays ..
  59. CHARACTER*15 L(10)
  60. * .. Common blocks ..
  61. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  62. * .. Data statements ..
  63. DATA L(1)/'CBLAS_ZDOTC'/
  64. DATA L(2)/'CBLAS_ZDOTU'/
  65. DATA L(3)/'CBLAS_ZAXPY'/
  66. DATA L(4)/'CBLAS_ZCOPY'/
  67. DATA L(5)/'CBLAS_ZSWAP'/
  68. DATA L(6)/'CBLAS_DZNRM2'/
  69. DATA L(7)/'CBLAS_DZASUM'/
  70. DATA L(8)/'CBLAS_ZSCAL'/
  71. DATA L(9)/'CBLAS_ZDSCAL'/
  72. DATA L(10)/'CBLAS_IZAMAX'/
  73. * .. Executable Statements ..
  74. WRITE (NOUT,99999) ICASE, L(ICASE)
  75. RETURN
  76. *
  77. 99999 FORMAT (/' Test of subprogram number',I3,9X,A15)
  78. END
  79. SUBROUTINE CHECK1(SFAC)
  80. * .. Parameters ..
  81. INTEGER NOUT
  82. PARAMETER (NOUT=6)
  83. * .. Scalar Arguments ..
  84. DOUBLE PRECISION SFAC
  85. * .. Scalars in Common ..
  86. INTEGER ICASE, INCX, INCY, MODE, N
  87. LOGICAL PASS
  88. * .. Local Scalars ..
  89. COMPLEX*16 CA
  90. DOUBLE PRECISION SA
  91. INTEGER I, J, LEN, NP1
  92. * .. Local Arrays ..
  93. COMPLEX*16 CTRUE5(8,5,2), CTRUE6(8,5,2), CV(8,5,2), CX(8),
  94. + MWPCS(5), MWPCT(5)
  95. DOUBLE PRECISION STRUE2(5), STRUE4(5)
  96. INTEGER ITRUE3(5)
  97. * .. External Functions ..
  98. DOUBLE PRECISION DZASUMTEST, DZNRM2TEST
  99. INTEGER IZAMAXTEST
  100. EXTERNAL DZASUMTEST, DZNRM2TEST, IZAMAXTEST
  101. * .. External Subroutines ..
  102. EXTERNAL ZSCALTEST, ZDSCALTEST, CTEST, ITEST1, STEST1
  103. * .. Intrinsic Functions ..
  104. INTRINSIC MAX
  105. * .. Common blocks ..
  106. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  107. * .. Data statements ..
  108. DATA SA, CA/0.3D0, (0.4D0,-0.7D0)/
  109. DATA ((CV(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0),
  110. + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
  111. + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
  112. + (1.0D0,2.0D0), (0.3D0,-0.4D0), (3.0D0,4.0D0),
  113. + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
  114. + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
  115. + (0.1D0,-0.3D0), (0.5D0,-0.1D0), (5.0D0,6.0D0),
  116. + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
  117. + (5.0D0,6.0D0), (5.0D0,6.0D0), (0.1D0,0.1D0),
  118. + (-0.6D0,0.1D0), (0.1D0,-0.3D0), (7.0D0,8.0D0),
  119. + (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
  120. + (7.0D0,8.0D0), (0.3D0,0.1D0), (0.1D0,0.4D0),
  121. + (0.4D0,0.1D0), (0.1D0,0.2D0), (2.0D0,3.0D0),
  122. + (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0)/
  123. DATA ((CV(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0),
  124. + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
  125. + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
  126. + (4.0D0,5.0D0), (0.3D0,-0.4D0), (6.0D0,7.0D0),
  127. + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
  128. + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
  129. + (0.1D0,-0.3D0), (8.0D0,9.0D0), (0.5D0,-0.1D0),
  130. + (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
  131. + (2.0D0,5.0D0), (2.0D0,5.0D0), (0.1D0,0.1D0),
  132. + (3.0D0,6.0D0), (-0.6D0,0.1D0), (4.0D0,7.0D0),
  133. + (0.1D0,-0.3D0), (7.0D0,2.0D0), (7.0D0,2.0D0),
  134. + (7.0D0,2.0D0), (0.3D0,0.1D0), (5.0D0,8.0D0),
  135. + (0.1D0,0.4D0), (6.0D0,9.0D0), (0.4D0,0.1D0),
  136. + (8.0D0,3.0D0), (0.1D0,0.2D0), (9.0D0,4.0D0)/
  137. DATA STRUE2/0.0D0, 0.5D0, 0.6D0, 0.7D0, 0.7D0/
  138. DATA STRUE4/0.0D0, 0.7D0, 1.0D0, 1.3D0, 1.7D0/
  139. DATA ((CTRUE5(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0),
  140. + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
  141. + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
  142. + (1.0D0,2.0D0), (-0.16D0,-0.37D0), (3.0D0,4.0D0),
  143. + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
  144. + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
  145. + (-0.17D0,-0.19D0), (0.13D0,-0.39D0),
  146. + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
  147. + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
  148. + (0.11D0,-0.03D0), (-0.17D0,0.46D0),
  149. + (-0.17D0,-0.19D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
  150. + (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
  151. + (0.19D0,-0.17D0), (0.32D0,0.09D0),
  152. + (0.23D0,-0.24D0), (0.18D0,0.01D0),
  153. + (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0),
  154. + (2.0D0,3.0D0)/
  155. DATA ((CTRUE5(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0),
  156. + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
  157. + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
  158. + (4.0D0,5.0D0), (-0.16D0,-0.37D0), (6.0D0,7.0D0),
  159. + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
  160. + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
  161. + (-0.17D0,-0.19D0), (8.0D0,9.0D0),
  162. + (0.13D0,-0.39D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
  163. + (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
  164. + (0.11D0,-0.03D0), (3.0D0,6.0D0),
  165. + (-0.17D0,0.46D0), (4.0D0,7.0D0),
  166. + (-0.17D0,-0.19D0), (7.0D0,2.0D0), (7.0D0,2.0D0),
  167. + (7.0D0,2.0D0), (0.19D0,-0.17D0), (5.0D0,8.0D0),
  168. + (0.32D0,0.09D0), (6.0D0,9.0D0),
  169. + (0.23D0,-0.24D0), (8.0D0,3.0D0),
  170. + (0.18D0,0.01D0), (9.0D0,4.0D0)/
  171. DATA ((CTRUE6(I,J,1),I=1,8),J=1,5)/(0.1D0,0.1D0),
  172. + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
  173. + (1.0D0,2.0D0), (1.0D0,2.0D0), (1.0D0,2.0D0),
  174. + (1.0D0,2.0D0), (0.09D0,-0.12D0), (3.0D0,4.0D0),
  175. + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
  176. + (3.0D0,4.0D0), (3.0D0,4.0D0), (3.0D0,4.0D0),
  177. + (0.03D0,-0.09D0), (0.15D0,-0.03D0),
  178. + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
  179. + (5.0D0,6.0D0), (5.0D0,6.0D0), (5.0D0,6.0D0),
  180. + (0.03D0,0.03D0), (-0.18D0,0.03D0),
  181. + (0.03D0,-0.09D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
  182. + (7.0D0,8.0D0), (7.0D0,8.0D0), (7.0D0,8.0D0),
  183. + (0.09D0,0.03D0), (0.03D0,0.12D0),
  184. + (0.12D0,0.03D0), (0.03D0,0.06D0), (2.0D0,3.0D0),
  185. + (2.0D0,3.0D0), (2.0D0,3.0D0), (2.0D0,3.0D0)/
  186. DATA ((CTRUE6(I,J,2),I=1,8),J=1,5)/(0.1D0,0.1D0),
  187. + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
  188. + (4.0D0,5.0D0), (4.0D0,5.0D0), (4.0D0,5.0D0),
  189. + (4.0D0,5.0D0), (0.09D0,-0.12D0), (6.0D0,7.0D0),
  190. + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
  191. + (6.0D0,7.0D0), (6.0D0,7.0D0), (6.0D0,7.0D0),
  192. + (0.03D0,-0.09D0), (8.0D0,9.0D0),
  193. + (0.15D0,-0.03D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
  194. + (2.0D0,5.0D0), (2.0D0,5.0D0), (2.0D0,5.0D0),
  195. + (0.03D0,0.03D0), (3.0D0,6.0D0),
  196. + (-0.18D0,0.03D0), (4.0D0,7.0D0),
  197. + (0.03D0,-0.09D0), (7.0D0,2.0D0), (7.0D0,2.0D0),
  198. + (7.0D0,2.0D0), (0.09D0,0.03D0), (5.0D0,8.0D0),
  199. + (0.03D0,0.12D0), (6.0D0,9.0D0), (0.12D0,0.03D0),
  200. + (8.0D0,3.0D0), (0.03D0,0.06D0), (9.0D0,4.0D0)/
  201. DATA ITRUE3/0, 1, 2, 2, 2/
  202. * .. Executable Statements ..
  203. DO 60 INCX = 1, 2
  204. DO 40 NP1 = 1, 5
  205. N = NP1 - 1
  206. LEN = 2*MAX(N,1)
  207. * .. Set vector arguments ..
  208. DO 20 I = 1, LEN
  209. CX(I) = CV(I,NP1,INCX)
  210. 20 CONTINUE
  211. IF (ICASE.EQ.6) THEN
  212. * .. DZNRM2TEST ..
  213. CALL STEST1(DZNRM2TEST(N,CX,INCX),STRUE2(NP1),
  214. + STRUE2(NP1),SFAC)
  215. ELSE IF (ICASE.EQ.7) THEN
  216. * .. DZASUMTEST ..
  217. CALL STEST1(DZASUMTEST(N,CX,INCX),STRUE4(NP1),
  218. + STRUE4(NP1),SFAC)
  219. ELSE IF (ICASE.EQ.8) THEN
  220. * .. ZSCALTEST ..
  221. CALL ZSCALTEST(N,CA,CX,INCX)
  222. CALL CTEST(LEN,CX,CTRUE5(1,NP1,INCX),CTRUE5(1,NP1,INCX),
  223. + SFAC)
  224. ELSE IF (ICASE.EQ.9) THEN
  225. * .. ZDSCALTEST ..
  226. CALL ZDSCALTEST(N,SA,CX,INCX)
  227. CALL CTEST(LEN,CX,CTRUE6(1,NP1,INCX),CTRUE6(1,NP1,INCX),
  228. + SFAC)
  229. ELSE IF (ICASE.EQ.10) THEN
  230. * .. IZAMAXTEST ..
  231. CALL ITEST1(IZAMAXTEST(N,CX,INCX),ITRUE3(NP1))
  232. ELSE
  233. WRITE (NOUT,*) ' Shouldn''t be here in CHECK1'
  234. CALL ABORT
  235. END IF
  236. *
  237. 40 CONTINUE
  238. 60 CONTINUE
  239. *
  240. INCX = 1
  241. IF (ICASE.EQ.8) THEN
  242. * ZSCALTEST
  243. * Add a test for alpha equal to zero.
  244. CA = (0.0D0,0.0D0)
  245. DO 80 I = 1, 5
  246. MWPCT(I) = (0.0D0,0.0D0)
  247. MWPCS(I) = (1.0D0,1.0D0)
  248. 80 CONTINUE
  249. CALL ZSCALTEST(5,CA,CX,INCX)
  250. CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
  251. ELSE IF (ICASE.EQ.9) THEN
  252. * ZDSCALTEST
  253. * Add a test for alpha equal to zero.
  254. SA = 0.0D0
  255. DO 100 I = 1, 5
  256. MWPCT(I) = (0.0D0,0.0D0)
  257. MWPCS(I) = (1.0D0,1.0D0)
  258. 100 CONTINUE
  259. CALL ZDSCALTEST(5,SA,CX,INCX)
  260. CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
  261. * Add a test for alpha equal to one.
  262. SA = 1.0D0
  263. DO 120 I = 1, 5
  264. MWPCT(I) = CX(I)
  265. MWPCS(I) = CX(I)
  266. 120 CONTINUE
  267. CALL ZDSCALTEST(5,SA,CX,INCX)
  268. CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
  269. * Add a test for alpha equal to minus one.
  270. SA = -1.0D0
  271. DO 140 I = 1, 5
  272. MWPCT(I) = -CX(I)
  273. MWPCS(I) = -CX(I)
  274. 140 CONTINUE
  275. CALL ZDSCALTEST(5,SA,CX,INCX)
  276. CALL CTEST(5,CX,MWPCT,MWPCS,SFAC)
  277. END IF
  278. RETURN
  279. END
  280. SUBROUTINE CHECK2(SFAC)
  281. * .. Parameters ..
  282. INTEGER NOUT
  283. PARAMETER (NOUT=6)
  284. * .. Scalar Arguments ..
  285. DOUBLE PRECISION SFAC
  286. * .. Scalars in Common ..
  287. INTEGER ICASE, INCX, INCY, MODE, N
  288. LOGICAL PASS
  289. * .. Local Scalars ..
  290. COMPLEX*16 CA,ZTEMP
  291. INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY
  292. * .. Local Arrays ..
  293. COMPLEX*16 CDOT(1), CSIZE1(4), CSIZE2(7,2), CSIZE3(14),
  294. + CT10X(7,4,4), CT10Y(7,4,4), CT6(4,4), CT7(4,4),
  295. + CT8(7,4,4), CX(7), CX1(7), CY(7), CY1(7)
  296. INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4)
  297. * .. External Functions ..
  298. EXTERNAL ZDOTCTEST, ZDOTUTEST
  299. * .. External Subroutines ..
  300. EXTERNAL ZAXPYTEST, ZCOPYTEST, ZSWAPTEST, CTEST
  301. * .. Intrinsic Functions ..
  302. INTRINSIC ABS, MIN
  303. * .. Common blocks ..
  304. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  305. * .. Data statements ..
  306. DATA CA/(0.4D0,-0.7D0)/
  307. DATA INCXS/1, 2, -2, -1/
  308. DATA INCYS/1, -2, 1, -2/
  309. DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/
  310. DATA NS/0, 1, 2, 4/
  311. DATA CX1/(0.7D0,-0.8D0), (-0.4D0,-0.7D0),
  312. + (-0.1D0,-0.9D0), (0.2D0,-0.8D0),
  313. + (-0.9D0,-0.4D0), (0.1D0,0.4D0), (-0.6D0,0.6D0)/
  314. DATA CY1/(0.6D0,-0.6D0), (-0.9D0,0.5D0),
  315. + (0.7D0,-0.6D0), (0.1D0,-0.5D0), (-0.1D0,-0.2D0),
  316. + (-0.5D0,-0.3D0), (0.8D0,-0.7D0)/
  317. DATA ((CT8(I,J,1),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  318. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  319. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  320. + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  321. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  322. + (0.0D0,0.0D0), (0.32D0,-1.41D0),
  323. + (-1.55D0,0.5D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  324. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  325. + (0.32D0,-1.41D0), (-1.55D0,0.5D0),
  326. + (0.03D0,-0.89D0), (-0.38D0,-0.96D0),
  327. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
  328. DATA ((CT8(I,J,2),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  329. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  330. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  331. + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  332. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  333. + (0.0D0,0.0D0), (-0.07D0,-0.89D0),
  334. + (-0.9D0,0.5D0), (0.42D0,-1.41D0), (0.0D0,0.0D0),
  335. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  336. + (0.78D0,0.06D0), (-0.9D0,0.5D0),
  337. + (0.06D0,-0.13D0), (0.1D0,-0.5D0),
  338. + (-0.77D0,-0.49D0), (-0.5D0,-0.3D0),
  339. + (0.52D0,-1.51D0)/
  340. DATA ((CT8(I,J,3),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  341. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  342. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  343. + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  344. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  345. + (0.0D0,0.0D0), (-0.07D0,-0.89D0),
  346. + (-1.18D0,-0.31D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  347. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  348. + (0.78D0,0.06D0), (-1.54D0,0.97D0),
  349. + (0.03D0,-0.89D0), (-0.18D0,-1.31D0),
  350. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
  351. DATA ((CT8(I,J,4),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  352. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  353. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  354. + (0.32D0,-1.41D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  355. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  356. + (0.0D0,0.0D0), (0.32D0,-1.41D0), (-0.9D0,0.5D0),
  357. + (0.05D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  358. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.32D0,-1.41D0),
  359. + (-0.9D0,0.5D0), (0.05D0,-0.6D0), (0.1D0,-0.5D0),
  360. + (-0.77D0,-0.49D0), (-0.5D0,-0.3D0),
  361. + (0.32D0,-1.16D0)/
  362. DATA CT7/(0.0D0,0.0D0), (-0.06D0,-0.90D0),
  363. + (0.65D0,-0.47D0), (-0.34D0,-1.22D0),
  364. + (0.0D0,0.0D0), (-0.06D0,-0.90D0),
  365. + (-0.59D0,-1.46D0), (-1.04D0,-0.04D0),
  366. + (0.0D0,0.0D0), (-0.06D0,-0.90D0),
  367. + (-0.83D0,0.59D0), (0.07D0,-0.37D0),
  368. + (0.0D0,0.0D0), (-0.06D0,-0.90D0),
  369. + (-0.76D0,-1.15D0), (-1.33D0,-1.82D0)/
  370. DATA CT6/(0.0D0,0.0D0), (0.90D0,0.06D0),
  371. + (0.91D0,-0.77D0), (1.80D0,-0.10D0),
  372. + (0.0D0,0.0D0), (0.90D0,0.06D0), (1.45D0,0.74D0),
  373. + (0.20D0,0.90D0), (0.0D0,0.0D0), (0.90D0,0.06D0),
  374. + (-0.55D0,0.23D0), (0.83D0,-0.39D0),
  375. + (0.0D0,0.0D0), (0.90D0,0.06D0), (1.04D0,0.79D0),
  376. + (1.95D0,1.22D0)/
  377. DATA ((CT10X(I,J,1),I=1,7),J=1,4)/(0.7D0,-0.8D0),
  378. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  379. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  380. + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  381. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  382. + (0.0D0,0.0D0), (0.6D0,-0.6D0), (-0.9D0,0.5D0),
  383. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  384. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.6D0,-0.6D0),
  385. + (-0.9D0,0.5D0), (0.7D0,-0.6D0), (0.1D0,-0.5D0),
  386. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
  387. DATA ((CT10X(I,J,2),I=1,7),J=1,4)/(0.7D0,-0.8D0),
  388. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  389. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  390. + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  391. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  392. + (0.0D0,0.0D0), (0.7D0,-0.6D0), (-0.4D0,-0.7D0),
  393. + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  394. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.8D0,-0.7D0),
  395. + (-0.4D0,-0.7D0), (-0.1D0,-0.2D0),
  396. + (0.2D0,-0.8D0), (0.7D0,-0.6D0), (0.1D0,0.4D0),
  397. + (0.6D0,-0.6D0)/
  398. DATA ((CT10X(I,J,3),I=1,7),J=1,4)/(0.7D0,-0.8D0),
  399. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  400. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  401. + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  402. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  403. + (0.0D0,0.0D0), (-0.9D0,0.5D0), (-0.4D0,-0.7D0),
  404. + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  405. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.1D0,-0.5D0),
  406. + (-0.4D0,-0.7D0), (0.7D0,-0.6D0), (0.2D0,-0.8D0),
  407. + (-0.9D0,0.5D0), (0.1D0,0.4D0), (0.6D0,-0.6D0)/
  408. DATA ((CT10X(I,J,4),I=1,7),J=1,4)/(0.7D0,-0.8D0),
  409. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  410. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  411. + (0.6D0,-0.6D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  412. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  413. + (0.0D0,0.0D0), (0.6D0,-0.6D0), (0.7D0,-0.6D0),
  414. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  415. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.6D0,-0.6D0),
  416. + (0.7D0,-0.6D0), (-0.1D0,-0.2D0), (0.8D0,-0.7D0),
  417. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0)/
  418. DATA ((CT10Y(I,J,1),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  419. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  420. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  421. + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  422. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  423. + (0.0D0,0.0D0), (0.7D0,-0.8D0), (-0.4D0,-0.7D0),
  424. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  425. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.7D0,-0.8D0),
  426. + (-0.4D0,-0.7D0), (-0.1D0,-0.9D0),
  427. + (0.2D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  428. + (0.0D0,0.0D0)/
  429. DATA ((CT10Y(I,J,2),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  430. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  431. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  432. + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  433. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  434. + (0.0D0,0.0D0), (-0.1D0,-0.9D0), (-0.9D0,0.5D0),
  435. + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  436. + (0.0D0,0.0D0), (0.0D0,0.0D0), (-0.6D0,0.6D0),
  437. + (-0.9D0,0.5D0), (-0.9D0,-0.4D0), (0.1D0,-0.5D0),
  438. + (-0.1D0,-0.9D0), (-0.5D0,-0.3D0),
  439. + (0.7D0,-0.8D0)/
  440. DATA ((CT10Y(I,J,3),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  441. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  442. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  443. + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  444. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  445. + (0.0D0,0.0D0), (-0.1D0,-0.9D0), (0.7D0,-0.8D0),
  446. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  447. + (0.0D0,0.0D0), (0.0D0,0.0D0), (-0.6D0,0.6D0),
  448. + (-0.9D0,-0.4D0), (-0.1D0,-0.9D0),
  449. + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  450. + (0.0D0,0.0D0)/
  451. DATA ((CT10Y(I,J,4),I=1,7),J=1,4)/(0.6D0,-0.6D0),
  452. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  453. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  454. + (0.7D0,-0.8D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  455. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  456. + (0.0D0,0.0D0), (0.7D0,-0.8D0), (-0.9D0,0.5D0),
  457. + (-0.4D0,-0.7D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  458. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.7D0,-0.8D0),
  459. + (-0.9D0,0.5D0), (-0.4D0,-0.7D0), (0.1D0,-0.5D0),
  460. + (-0.1D0,-0.9D0), (-0.5D0,-0.3D0),
  461. + (0.2D0,-0.8D0)/
  462. DATA CSIZE1/(0.0D0,0.0D0), (0.9D0,0.9D0),
  463. + (1.63D0,1.73D0), (2.90D0,2.78D0)/
  464. DATA CSIZE3/(0.0D0,0.0D0), (0.0D0,0.0D0),
  465. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  466. + (0.0D0,0.0D0), (0.0D0,0.0D0), (1.17D0,1.17D0),
  467. + (1.17D0,1.17D0), (1.17D0,1.17D0),
  468. + (1.17D0,1.17D0), (1.17D0,1.17D0),
  469. + (1.17D0,1.17D0), (1.17D0,1.17D0)/
  470. DATA CSIZE2/(0.0D0,0.0D0), (0.0D0,0.0D0),
  471. + (0.0D0,0.0D0), (0.0D0,0.0D0), (0.0D0,0.0D0),
  472. + (0.0D0,0.0D0), (0.0D0,0.0D0), (1.54D0,1.54D0),
  473. + (1.54D0,1.54D0), (1.54D0,1.54D0),
  474. + (1.54D0,1.54D0), (1.54D0,1.54D0),
  475. + (1.54D0,1.54D0), (1.54D0,1.54D0)/
  476. * .. Executable Statements ..
  477. DO 60 KI = 1, 4
  478. INCX = INCXS(KI)
  479. INCY = INCYS(KI)
  480. MX = ABS(INCX)
  481. MY = ABS(INCY)
  482. *
  483. DO 40 KN = 1, 4
  484. N = NS(KN)
  485. KSIZE = MIN(2,KN)
  486. LENX = LENS(KN,MX)
  487. LENY = LENS(KN,MY)
  488. * .. initialize all argument arrays ..
  489. DO 20 I = 1, 7
  490. CX(I) = CX1(I)
  491. CY(I) = CY1(I)
  492. 20 CONTINUE
  493. IF (ICASE.EQ.1) THEN
  494. * .. ZDOTCTEST ..
  495. CALL ZDOTCTEST(N,CX,INCX,CY,INCY,ZTEMP)
  496. CDOT(1) = ZTEMP
  497. CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC)
  498. ELSE IF (ICASE.EQ.2) THEN
  499. * .. ZDOTUTEST ..
  500. CALL ZDOTUTEST(N,CX,INCX,CY,INCY,ZTEMP)
  501. CDOT(1) = ZTEMP
  502. CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC)
  503. ELSE IF (ICASE.EQ.3) THEN
  504. * .. ZAXPYTEST ..
  505. CALL ZAXPYTEST(N,CA,CX,INCX,CY,INCY)
  506. CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC)
  507. ELSE IF (ICASE.EQ.4) THEN
  508. * .. ZCOPYTEST ..
  509. CALL ZCOPYTEST(N,CX,INCX,CY,INCY)
  510. CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0)
  511. ELSE IF (ICASE.EQ.5) THEN
  512. * .. ZSWAPTEST ..
  513. CALL ZSWAPTEST(N,CX,INCX,CY,INCY)
  514. CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0D0)
  515. CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0D0)
  516. ELSE
  517. WRITE (NOUT,*) ' Shouldn''t be here in CHECK2'
  518. CALL ABORT
  519. END IF
  520. *
  521. 40 CONTINUE
  522. 60 CONTINUE
  523. RETURN
  524. END
  525. SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC)
  526. * ********************************* STEST **************************
  527. *
  528. * THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO
  529. * SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE
  530. * NEGLIGIBLE.
  531. *
  532. * C. L. LAWSON, JPL, 1974 DEC 10
  533. *
  534. * .. Parameters ..
  535. INTEGER NOUT
  536. PARAMETER (NOUT=6)
  537. * .. Scalar Arguments ..
  538. DOUBLE PRECISION SFAC
  539. INTEGER LEN
  540. * .. Array Arguments ..
  541. DOUBLE PRECISION SCOMP(LEN), SSIZE(LEN), STRUE(LEN)
  542. * .. Scalars in Common ..
  543. INTEGER ICASE, INCX, INCY, MODE, N
  544. LOGICAL PASS
  545. * .. Local Scalars ..
  546. DOUBLE PRECISION SD
  547. INTEGER I
  548. * .. External Functions ..
  549. DOUBLE PRECISION SDIFF
  550. EXTERNAL SDIFF
  551. * .. Intrinsic Functions ..
  552. INTRINSIC ABS
  553. * .. Common blocks ..
  554. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  555. * .. Executable Statements ..
  556. *
  557. DO 40 I = 1, LEN
  558. SD = SCOMP(I) - STRUE(I)
  559. IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0D0)
  560. + GO TO 40
  561. *
  562. * HERE SCOMP(I) IS NOT CLOSE TO STRUE(I).
  563. *
  564. IF ( .NOT. PASS) GO TO 20
  565. * PRINT FAIL MESSAGE AND HEADER.
  566. PASS = .FALSE.
  567. WRITE (NOUT,99999)
  568. WRITE (NOUT,99998)
  569. 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I),
  570. + STRUE(I), SD, SSIZE(I)
  571. 40 CONTINUE
  572. RETURN
  573. *
  574. 99999 FORMAT (' FAIL')
  575. 99998 FORMAT (/' CASE N INCX INCY MODE I ',
  576. + ' COMP(I) TRUE(I) DIFFERENCE',
  577. + ' SIZE(I)',/1X)
  578. 99997 FORMAT (1X,I4,I3,3I5,I3,2D36.8,2D12.4)
  579. END
  580. SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC)
  581. * ************************* STEST1 *****************************
  582. *
  583. * THIS IS AN INTERFACE SUBROUTINE TO ACCOMMODATE THE FORTRAN
  584. * REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE
  585. * ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT.
  586. *
  587. * C.L. LAWSON, JPL, 1978 DEC 6
  588. *
  589. * .. Scalar Arguments ..
  590. DOUBLE PRECISION SCOMP1, SFAC, STRUE1
  591. * .. Array Arguments ..
  592. DOUBLE PRECISION SSIZE(*)
  593. * .. Local Arrays ..
  594. DOUBLE PRECISION SCOMP(1), STRUE(1)
  595. * .. External Subroutines ..
  596. EXTERNAL STEST
  597. * .. Executable Statements ..
  598. *
  599. SCOMP(1) = SCOMP1
  600. STRUE(1) = STRUE1
  601. CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC)
  602. *
  603. RETURN
  604. END
  605. DOUBLE PRECISION FUNCTION SDIFF(SA,SB)
  606. * ********************************* SDIFF **************************
  607. * COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15
  608. *
  609. * .. Scalar Arguments ..
  610. DOUBLE PRECISION SA, SB
  611. * .. Executable Statements ..
  612. SDIFF = SA - SB
  613. RETURN
  614. END
  615. SUBROUTINE CTEST(LEN,CCOMP,CTRUE,CSIZE,SFAC)
  616. * **************************** CTEST *****************************
  617. *
  618. * C.L. LAWSON, JPL, 1978 DEC 6
  619. *
  620. * .. Scalar Arguments ..
  621. DOUBLE PRECISION SFAC
  622. INTEGER LEN
  623. * .. Array Arguments ..
  624. COMPLEX*16 CCOMP(LEN), CSIZE(LEN), CTRUE(LEN)
  625. * .. Local Scalars ..
  626. INTEGER I
  627. * .. Local Arrays ..
  628. DOUBLE PRECISION SCOMP(20), SSIZE(20), STRUE(20)
  629. * .. External Subroutines ..
  630. EXTERNAL STEST
  631. * .. Intrinsic Functions ..
  632. INTRINSIC DIMAG, DBLE
  633. * .. Executable Statements ..
  634. DO 20 I = 1, LEN
  635. SCOMP(2*I-1) = DBLE(CCOMP(I))
  636. SCOMP(2*I) = DIMAG(CCOMP(I))
  637. STRUE(2*I-1) = DBLE(CTRUE(I))
  638. STRUE(2*I) = DIMAG(CTRUE(I))
  639. SSIZE(2*I-1) = DBLE(CSIZE(I))
  640. SSIZE(2*I) = DIMAG(CSIZE(I))
  641. 20 CONTINUE
  642. *
  643. CALL STEST(2*LEN,SCOMP,STRUE,SSIZE,SFAC)
  644. RETURN
  645. END
  646. SUBROUTINE ITEST1(ICOMP,ITRUE)
  647. * ********************************* ITEST1 *************************
  648. *
  649. * THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR
  650. * EQUALITY.
  651. * C. L. LAWSON, JPL, 1974 DEC 10
  652. *
  653. * .. Parameters ..
  654. INTEGER NOUT
  655. PARAMETER (NOUT=6)
  656. * .. Scalar Arguments ..
  657. INTEGER ICOMP, ITRUE
  658. * .. Scalars in Common ..
  659. INTEGER ICASE, INCX, INCY, MODE, N
  660. LOGICAL PASS
  661. * .. Local Scalars ..
  662. INTEGER ID
  663. * .. Common blocks ..
  664. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  665. * .. Executable Statements ..
  666. IF (ICOMP.EQ.ITRUE) GO TO 40
  667. *
  668. * HERE ICOMP IS NOT EQUAL TO ITRUE.
  669. *
  670. IF ( .NOT. PASS) GO TO 20
  671. * PRINT FAIL MESSAGE AND HEADER.
  672. PASS = .FALSE.
  673. WRITE (NOUT,99999)
  674. WRITE (NOUT,99998)
  675. 20 ID = ICOMP - ITRUE
  676. WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID
  677. 40 CONTINUE
  678. RETURN
  679. *
  680. 99999 FORMAT (' FAIL')
  681. 99998 FORMAT (/' CASE N INCX INCY MODE ',
  682. + ' COMP TRUE DIFFERENCE',
  683. + /1X)
  684. 99997 FORMAT (1X,I4,I3,3I5,2I36,I12)
  685. END