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

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