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_dblat1.f 28 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. PROGRAM DCBLAT1
  2. * Test program for the DOUBLE PRECISION Level 1 CBLAS.
  3. * Based upon the original CBLAS test routine together with:
  4. * F06EAF 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 CHECK0, CHECK1, CHECK2, CHECK3, 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, 11
  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.EQ.3) THEN
  36. CALL CHECK0(SFAC)
  37. ELSE IF (ICASE.EQ.7 .OR. ICASE.EQ.8 .OR. ICASE.EQ.9 .OR.
  38. + ICASE.EQ.10) THEN
  39. CALL CHECK1(SFAC)
  40. ELSE IF (ICASE.EQ.1 .OR. ICASE.EQ.2 .OR. ICASE.EQ.5 .OR.
  41. + ICASE.EQ.6) THEN
  42. CALL CHECK2(SFAC)
  43. ELSE IF (ICASE.EQ.4 .OR. ICASE.EQ.11) THEN
  44. CALL CHECK3(SFAC)
  45. END IF
  46. * -- Print
  47. IF (PASS) THEN
  48. WRITE (NOUT,99998)
  49. ELSE
  50. CALL ABORT
  51. END IF
  52. 20 CONTINUE
  53. *
  54. 99999 FORMAT (' Real CBLAS Test Program Results',/1X)
  55. 99998 FORMAT (' ----- PASS -----')
  56. END
  57. SUBROUTINE HEADER
  58. * .. Parameters ..
  59. INTEGER NOUT
  60. PARAMETER (NOUT=6)
  61. * .. Scalars in Common ..
  62. INTEGER ICASE, INCX, INCY, MODE, N
  63. LOGICAL PASS
  64. * .. Local Arrays ..
  65. CHARACTER*15 L(11)
  66. * .. Common blocks ..
  67. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  68. * .. Data statements ..
  69. DATA L(1)/'CBLAS_DDOT'/
  70. DATA L(2)/'CBLAS_DAXPY '/
  71. DATA L(3)/'CBLAS_DROTG '/
  72. DATA L(4)/'CBLAS_DROT '/
  73. DATA L(5)/'CBLAS_DCOPY '/
  74. DATA L(6)/'CBLAS_DSWAP '/
  75. DATA L(7)/'CBLAS_DNRM2 '/
  76. DATA L(8)/'CBLAS_DASUM '/
  77. DATA L(9)/'CBLAS_DSCAL '/
  78. DATA L(10)/'CBLAS_IDAMAX'/
  79. DATA L(11)/'CBLAS_DROTM'/
  80. * .. Executable Statements ..
  81. WRITE (NOUT,99999) ICASE, L(ICASE)
  82. RETURN
  83. *
  84. 99999 FORMAT (/' Test of subprogram number',I3,9X,A15)
  85. END
  86. SUBROUTINE CHECK0(SFAC)
  87. * .. Parameters ..
  88. INTEGER NOUT
  89. PARAMETER (NOUT=6)
  90. * .. Scalar Arguments ..
  91. DOUBLE PRECISION SFAC
  92. * .. Scalars in Common ..
  93. INTEGER ICASE, INCX, INCY, MODE, N
  94. LOGICAL PASS
  95. * .. Local Scalars ..
  96. DOUBLE PRECISION SA, SB, SC, SS
  97. INTEGER K
  98. * .. Local Arrays ..
  99. DOUBLE PRECISION DA1(8), DATRUE(8), DB1(8), DBTRUE(8), DC1(8),
  100. + DS1(8)
  101. * .. External Subroutines ..
  102. EXTERNAL DROTGTEST, STEST1
  103. * .. Common blocks ..
  104. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  105. * .. Data statements ..
  106. DATA DA1/0.3D0, 0.4D0, -0.3D0, -0.4D0, -0.3D0, 0.0D0,
  107. + 0.0D0, 1.0D0/
  108. DATA DB1/0.4D0, 0.3D0, 0.4D0, 0.3D0, -0.4D0, 0.0D0,
  109. + 1.0D0, 0.0D0/
  110. DATA DC1/0.6D0, 0.8D0, -0.6D0, 0.8D0, 0.6D0, 1.0D0,
  111. + 0.0D0, 1.0D0/
  112. DATA DS1/0.8D0, 0.6D0, 0.8D0, -0.6D0, 0.8D0, 0.0D0,
  113. + 1.0D0, 0.0D0/
  114. DATA DATRUE/0.5D0, 0.5D0, 0.5D0, -0.5D0, -0.5D0,
  115. + 0.0D0, 1.0D0, 1.0D0/
  116. DATA DBTRUE/0.0D0, 0.6D0, 0.0D0, -0.6D0, 0.0D0,
  117. + 0.0D0, 1.0D0, 0.0D0/
  118. * .. Executable Statements ..
  119. *
  120. * Compute true values which cannot be prestored
  121. * in decimal notation
  122. *
  123. DBTRUE(1) = 1.0D0/0.6D0
  124. DBTRUE(3) = -1.0D0/0.6D0
  125. DBTRUE(5) = 1.0D0/0.6D0
  126. *
  127. DO 20 K = 1, 8
  128. * .. Set N=K for identification in output if any ..
  129. N = K
  130. IF (ICASE.EQ.3) THEN
  131. * .. DROTGTEST ..
  132. IF (K.GT.8) GO TO 40
  133. SA = DA1(K)
  134. SB = DB1(K)
  135. CALL DROTGTEST(SA,SB,SC,SS)
  136. CALL STEST1(SA,DATRUE(K),DATRUE(K),SFAC)
  137. CALL STEST1(SB,DBTRUE(K),DBTRUE(K),SFAC)
  138. CALL STEST1(SC,DC1(K),DC1(K),SFAC)
  139. CALL STEST1(SS,DS1(K),DS1(K),SFAC)
  140. ELSE
  141. WRITE (NOUT,*) ' Shouldn''t be here in CHECK0'
  142. CALL ABORT
  143. END IF
  144. 20 CONTINUE
  145. 40 RETURN
  146. END
  147. SUBROUTINE CHECK1(SFAC)
  148. * .. Parameters ..
  149. INTEGER NOUT
  150. PARAMETER (NOUT=6)
  151. * .. Scalar Arguments ..
  152. DOUBLE PRECISION SFAC
  153. * .. Scalars in Common ..
  154. INTEGER ICASE, INCX, INCY, MODE, N
  155. LOGICAL PASS
  156. * .. Local Scalars ..
  157. INTEGER I, LEN, NP1
  158. * .. Local Arrays ..
  159. DOUBLE PRECISION DTRUE1(5), DTRUE3(5), DTRUE5(8,5,2), DV(8,5,2),
  160. + SA(10), STEMP(1), STRUE(8), SX(8)
  161. INTEGER ITRUE2(5)
  162. * .. External Functions ..
  163. DOUBLE PRECISION DASUMTEST, DNRM2TEST
  164. INTEGER IDAMAXTEST
  165. EXTERNAL DASUMTEST, DNRM2TEST, IDAMAXTEST
  166. * .. External Subroutines ..
  167. EXTERNAL ITEST1, DSCALTEST, STEST, STEST1
  168. * .. Intrinsic Functions ..
  169. INTRINSIC MAX
  170. * .. Common blocks ..
  171. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  172. * .. Data statements ..
  173. DATA SA/0.3D0, -1.0D0, 0.0D0, 1.0D0, 0.3D0, 0.3D0,
  174. + 0.3D0, 0.3D0, 0.3D0, 0.3D0/
  175. DATA DV/0.1D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0,
  176. + 2.0D0, 2.0D0, 0.3D0, 3.0D0, 3.0D0, 3.0D0, 3.0D0,
  177. + 3.0D0, 3.0D0, 3.0D0, 0.3D0, -0.4D0, 4.0D0,
  178. + 4.0D0, 4.0D0, 4.0D0, 4.0D0, 4.0D0, 0.2D0,
  179. + -0.6D0, 0.3D0, 5.0D0, 5.0D0, 5.0D0, 5.0D0,
  180. + 5.0D0, 0.1D0, -0.3D0, 0.5D0, -0.1D0, 6.0D0,
  181. + 6.0D0, 6.0D0, 6.0D0, 0.1D0, 8.0D0, 8.0D0, 8.0D0,
  182. + 8.0D0, 8.0D0, 8.0D0, 8.0D0, 0.3D0, 9.0D0, 9.0D0,
  183. + 9.0D0, 9.0D0, 9.0D0, 9.0D0, 9.0D0, 0.3D0, 2.0D0,
  184. + -0.4D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0,
  185. + 0.2D0, 3.0D0, -0.6D0, 5.0D0, 0.3D0, 2.0D0,
  186. + 2.0D0, 2.0D0, 0.1D0, 4.0D0, -0.3D0, 6.0D0,
  187. + -0.5D0, 7.0D0, -0.1D0, 3.0D0/
  188. DATA DTRUE1/0.0D0, 0.3D0, 0.5D0, 0.7D0, 0.6D0/
  189. DATA DTRUE3/0.0D0, 0.3D0, 0.7D0, 1.1D0, 1.0D0/
  190. DATA DTRUE5/0.10D0, 2.0D0, 2.0D0, 2.0D0, 2.0D0,
  191. + 2.0D0, 2.0D0, 2.0D0, -0.3D0, 3.0D0, 3.0D0,
  192. + 3.0D0, 3.0D0, 3.0D0, 3.0D0, 3.0D0, 0.0D0, 0.0D0,
  193. + 4.0D0, 4.0D0, 4.0D0, 4.0D0, 4.0D0, 4.0D0,
  194. + 0.20D0, -0.60D0, 0.30D0, 5.0D0, 5.0D0, 5.0D0,
  195. + 5.0D0, 5.0D0, 0.03D0, -0.09D0, 0.15D0, -0.03D0,
  196. + 6.0D0, 6.0D0, 6.0D0, 6.0D0, 0.10D0, 8.0D0,
  197. + 8.0D0, 8.0D0, 8.0D0, 8.0D0, 8.0D0, 8.0D0,
  198. + 0.09D0, 9.0D0, 9.0D0, 9.0D0, 9.0D0, 9.0D0,
  199. + 9.0D0, 9.0D0, 0.09D0, 2.0D0, -0.12D0, 2.0D0,
  200. + 2.0D0, 2.0D0, 2.0D0, 2.0D0, 0.06D0, 3.0D0,
  201. + -0.18D0, 5.0D0, 0.09D0, 2.0D0, 2.0D0, 2.0D0,
  202. + 0.03D0, 4.0D0, -0.09D0, 6.0D0, -0.15D0, 7.0D0,
  203. + -0.03D0, 3.0D0/
  204. DATA ITRUE2/0, 1, 2, 2, 3/
  205. * .. Executable Statements ..
  206. DO 80 INCX = 1, 2
  207. DO 60 NP1 = 1, 5
  208. N = NP1 - 1
  209. LEN = 2*MAX(N,1)
  210. * .. Set vector arguments ..
  211. DO 20 I = 1, LEN
  212. SX(I) = DV(I,NP1,INCX)
  213. 20 CONTINUE
  214. *
  215. IF (ICASE.EQ.7) THEN
  216. * .. DNRM2TEST ..
  217. STEMP(1) = DTRUE1(NP1)
  218. CALL STEST1(DNRM2TEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
  219. ELSE IF (ICASE.EQ.8) THEN
  220. * .. DASUMTEST ..
  221. STEMP(1) = DTRUE3(NP1)
  222. CALL STEST1(DASUMTEST(N,SX,INCX),STEMP(1),STEMP,SFAC)
  223. ELSE IF (ICASE.EQ.9) THEN
  224. * .. DSCALTEST ..
  225. CALL DSCALTEST(N,SA((INCX-1)*5+NP1),SX,INCX)
  226. DO 40 I = 1, LEN
  227. STRUE(I) = DTRUE5(I,NP1,INCX)
  228. 40 CONTINUE
  229. CALL STEST(LEN,SX,STRUE,STRUE,SFAC)
  230. ELSE IF (ICASE.EQ.10) THEN
  231. * .. IDAMAXTEST ..
  232. CALL ITEST1(IDAMAXTEST(N,SX,INCX),ITRUE2(NP1))
  233. ELSE
  234. WRITE (NOUT,*) ' Shouldn''t be here in CHECK1'
  235. CALL ABORT
  236. END IF
  237. 60 CONTINUE
  238. 80 CONTINUE
  239. RETURN
  240. END
  241. SUBROUTINE CHECK2(SFAC)
  242. * .. Parameters ..
  243. INTEGER NOUT
  244. PARAMETER (NOUT=6)
  245. * .. Scalar Arguments ..
  246. DOUBLE PRECISION SFAC
  247. * .. Scalars in Common ..
  248. INTEGER ICASE, INCX, INCY, MODE, N
  249. LOGICAL PASS
  250. * .. Local Scalars ..
  251. DOUBLE PRECISION SA
  252. INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY
  253. * .. Local Arrays ..
  254. DOUBLE PRECISION DT10X(7,4,4), DT10Y(7,4,4), DT7(4,4),
  255. + DT8(7,4,4), DX1(7),
  256. + DY1(7), SSIZE1(4), SSIZE2(14,2), STX(7), STY(7),
  257. + SX(7), SY(7)
  258. INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4)
  259. * .. External Functions ..
  260. EXTERNAL DDOTTEST
  261. DOUBLE PRECISION DDOTTEST
  262. * .. External Subroutines ..
  263. EXTERNAL DAXPYTEST, DCOPYTEST, DSWAPTEST, STEST, STEST1
  264. * .. Intrinsic Functions ..
  265. INTRINSIC ABS, MIN
  266. * .. Common blocks ..
  267. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  268. * .. Data statements ..
  269. DATA SA/0.3D0/
  270. DATA INCXS/1, 2, -2, -1/
  271. DATA INCYS/1, -2, 1, -2/
  272. DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/
  273. DATA NS/0, 1, 2, 4/
  274. DATA DX1/0.6D0, 0.1D0, -0.5D0, 0.8D0, 0.9D0, -0.3D0,
  275. + -0.4D0/
  276. DATA DY1/0.5D0, -0.9D0, 0.3D0, 0.7D0, -0.6D0, 0.2D0,
  277. + 0.8D0/
  278. DATA DT7/0.0D0, 0.30D0, 0.21D0, 0.62D0, 0.0D0,
  279. + 0.30D0, -0.07D0, 0.85D0, 0.0D0, 0.30D0, -0.79D0,
  280. + -0.74D0, 0.0D0, 0.30D0, 0.33D0, 1.27D0/
  281. DATA DT8/0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  282. + 0.0D0, 0.68D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  283. + 0.0D0, 0.0D0, 0.68D0, -0.87D0, 0.0D0, 0.0D0,
  284. + 0.0D0, 0.0D0, 0.0D0, 0.68D0, -0.87D0, 0.15D0,
  285. + 0.94D0, 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0,
  286. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.68D0,
  287. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  288. + 0.35D0, -0.9D0, 0.48D0, 0.0D0, 0.0D0, 0.0D0,
  289. + 0.0D0, 0.38D0, -0.9D0, 0.57D0, 0.7D0, -0.75D0,
  290. + 0.2D0, 0.98D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0,
  291. + 0.0D0, 0.0D0, 0.0D0, 0.68D0, 0.0D0, 0.0D0,
  292. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.35D0, -0.72D0,
  293. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.38D0,
  294. + -0.63D0, 0.15D0, 0.88D0, 0.0D0, 0.0D0, 0.0D0,
  295. + 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  296. + 0.68D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  297. + 0.0D0, 0.68D0, -0.9D0, 0.33D0, 0.0D0, 0.0D0,
  298. + 0.0D0, 0.0D0, 0.68D0, -0.9D0, 0.33D0, 0.7D0,
  299. + -0.75D0, 0.2D0, 1.04D0/
  300. DATA DT10X/0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  301. + 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  302. + 0.0D0, 0.5D0, -0.9D0, 0.0D0, 0.0D0, 0.0D0,
  303. + 0.0D0, 0.0D0, 0.5D0, -0.9D0, 0.3D0, 0.7D0,
  304. + 0.0D0, 0.0D0, 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0,
  305. + 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0,
  306. + 0.0D0, 0.0D0, 0.0D0, 0.3D0, 0.1D0, 0.5D0, 0.0D0,
  307. + 0.0D0, 0.0D0, 0.0D0, 0.8D0, 0.1D0, -0.6D0,
  308. + 0.8D0, 0.3D0, -0.3D0, 0.5D0, 0.6D0, 0.0D0,
  309. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.5D0, 0.0D0,
  310. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, -0.9D0,
  311. + 0.1D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.7D0,
  312. + 0.1D0, 0.3D0, 0.8D0, -0.9D0, -0.3D0, 0.5D0,
  313. + 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  314. + 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  315. + 0.5D0, 0.3D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  316. + 0.5D0, 0.3D0, -0.6D0, 0.8D0, 0.0D0, 0.0D0,
  317. + 0.0D0/
  318. DATA DT10Y/0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  319. + 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  320. + 0.0D0, 0.6D0, 0.1D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  321. + 0.0D0, 0.6D0, 0.1D0, -0.5D0, 0.8D0, 0.0D0,
  322. + 0.0D0, 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  323. + 0.0D0, 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  324. + 0.0D0, 0.0D0, -0.5D0, -0.9D0, 0.6D0, 0.0D0,
  325. + 0.0D0, 0.0D0, 0.0D0, -0.4D0, -0.9D0, 0.9D0,
  326. + 0.7D0, -0.5D0, 0.2D0, 0.6D0, 0.5D0, 0.0D0,
  327. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.6D0, 0.0D0,
  328. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, -0.5D0,
  329. + 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  330. + -0.4D0, 0.9D0, -0.5D0, 0.6D0, 0.0D0, 0.0D0,
  331. + 0.0D0, 0.5D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  332. + 0.0D0, 0.6D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  333. + 0.0D0, 0.6D0, -0.9D0, 0.1D0, 0.0D0, 0.0D0,
  334. + 0.0D0, 0.0D0, 0.6D0, -0.9D0, 0.1D0, 0.7D0,
  335. + -0.5D0, 0.2D0, 0.8D0/
  336. DATA SSIZE1/0.0D0, 0.3D0, 1.6D0, 3.2D0/
  337. DATA SSIZE2/0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  338. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  339. + 0.0D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0,
  340. + 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0,
  341. + 1.17D0, 1.17D0, 1.17D0/
  342. * .. Executable Statements ..
  343. *
  344. DO 120 KI = 1, 4
  345. INCX = INCXS(KI)
  346. INCY = INCYS(KI)
  347. MX = ABS(INCX)
  348. MY = ABS(INCY)
  349. *
  350. DO 100 KN = 1, 4
  351. N = NS(KN)
  352. KSIZE = MIN(2,KN)
  353. LENX = LENS(KN,MX)
  354. LENY = LENS(KN,MY)
  355. * .. Initialize all argument arrays ..
  356. DO 20 I = 1, 7
  357. SX(I) = DX1(I)
  358. SY(I) = DY1(I)
  359. 20 CONTINUE
  360. *
  361. IF (ICASE.EQ.1) THEN
  362. * .. DDOTTEST ..
  363. CALL STEST1(DDOTTEST(N,SX,INCX,SY,INCY),DT7(KN,KI),
  364. + SSIZE1(KN),SFAC)
  365. ELSE IF (ICASE.EQ.2) THEN
  366. * .. DAXPYTEST ..
  367. CALL DAXPYTEST(N,SA,SX,INCX,SY,INCY)
  368. DO 40 J = 1, LENY
  369. STY(J) = DT8(J,KN,KI)
  370. 40 CONTINUE
  371. CALL STEST(LENY,SY,STY,SSIZE2(1,KSIZE),SFAC)
  372. ELSE IF (ICASE.EQ.5) THEN
  373. * .. DCOPYTEST ..
  374. DO 60 I = 1, 7
  375. STY(I) = DT10Y(I,KN,KI)
  376. 60 CONTINUE
  377. CALL DCOPYTEST(N,SX,INCX,SY,INCY)
  378. CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0D0)
  379. ELSE IF (ICASE.EQ.6) THEN
  380. * .. DSWAPTEST ..
  381. CALL DSWAPTEST(N,SX,INCX,SY,INCY)
  382. DO 80 I = 1, 7
  383. STX(I) = DT10X(I,KN,KI)
  384. STY(I) = DT10Y(I,KN,KI)
  385. 80 CONTINUE
  386. CALL STEST(LENX,SX,STX,SSIZE2(1,1),1.0D0)
  387. CALL STEST(LENY,SY,STY,SSIZE2(1,1),1.0D0)
  388. ELSE
  389. WRITE (NOUT,*) ' Shouldn''t be here in CHECK2'
  390. CALL ABORT
  391. END IF
  392. 100 CONTINUE
  393. 120 CONTINUE
  394. RETURN
  395. END
  396. SUBROUTINE CHECK3(SFAC)
  397. * .. Parameters ..
  398. INTEGER NOUT
  399. PARAMETER (NOUT=6)
  400. * .. Scalar Arguments ..
  401. DOUBLE PRECISION SFAC
  402. * .. Scalars in Common ..
  403. INTEGER ICASE, INCX, INCY, MODE, N
  404. LOGICAL PASS
  405. * .. Local Scalars ..
  406. DOUBLE PRECISION SC, SS
  407. INTEGER I, KI, KN, KSIZE, LEN
  408. * .. Local Arrays ..
  409. DOUBLE PRECISION DX(10), DY(10), SSIZE2(10,2), STX(10),
  410. + STY(10), SX(10), SY(10),
  411. + PARAM(5, 4), DPARAM(5)
  412. INTEGER INCXS(7), INCYS(7), NS(5)
  413. * .. External Subroutines ..
  414. EXTERNAL STEST, DROTTEST, DROT
  415. * .. Intrinsic Functions ..
  416. INTRINSIC MIN
  417. * .. Common blocks ..
  418. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  419. * .. Data statements ..
  420. DATA INCXS/1, 1, 2, 2, -2, -1, -2/
  421. DATA INCYS/1, 2, 2, -2, 1, -2, -2/
  422. DATA NS/0, 1, 2, 4, 5/
  423. DATA DX/0.6D0, 0.1D0, -0.5D0, 0.8D0, 0.9D0, -0.3D0,
  424. + -0.4D0, 0.7D0, 0.5D0, 0.2D0/
  425. DATA DY/0.5D0, -0.9D0, 0.3D0, 0.7D0, -0.6D0, 0.2D0,
  426. + 0.8D0, -0.5D0, 0.1D0, -0.3D0/
  427. DATA SC, SS/0.8D0, 0.6D0/
  428. DATA LEN/10/
  429. DATA PARAM/-2.0D0, 1.0D0, 0.0D0, 0.0D0, 1.0D0,
  430. + -1.0D0, 0.2D0, 0.3D0, 0.4D0, 0.5D0,
  431. + 0.0D0, 1.0D0, 0.3D0, 0.4D0, 1.0D0,
  432. + 1.0D0, 0.2D0, -1.0D0, 1.0D0, 0.5D0/
  433. DATA SSIZE2/0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0, 0.0D0,
  434. + 0.0D0, 0.0D0, 0.0D0, 0.0D0, 1.17D0, 1.17D0,
  435. + 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0, 1.17D0,
  436. + 1.17D0, 1.17D0/
  437. * .. Executable Statements ..
  438. *
  439. DO 60 KI = 1, 7
  440. INCX = INCXS(KI)
  441. INCY = INCYS(KI)
  442. *
  443. DO 40 KN = 1, 5
  444. N = NS(KN)
  445. KSIZE = MIN(2,KN)
  446. *
  447. IF (ICASE.EQ.4) THEN
  448. * .. DROTTEST ..
  449. DO 20 I = 1, 10
  450. SX(I) = DX(I)
  451. SY(I) = DY(I)
  452. STX(I) = DX(I)
  453. STY(I) = DY(I)
  454. 20 CONTINUE
  455. CALL DROTTEST(N,SX,INCX,SY,INCY,SC,SS)
  456. CALL DROT(N,STX,INCX,STY,INCY,SC,SS)
  457. CALL STEST(LEN,SX,STX,SSIZE2(1,KSIZE),SFAC)
  458. CALL STEST(LEN,SY,STY,SSIZE2(1,KSIZE),SFAC)
  459. ELSE IF (ICASE.EQ.11) THEN
  460. * .. DROTMTEST ..
  461. DO 90 I = 1, 10
  462. SX(I) = DX(I)
  463. SY(I) = DY(I)
  464. STX(I) = DX(I)
  465. STY(I) = DY(I)
  466. 90 CONTINUE
  467. DO 70 I = 1, 4
  468. DO 80 K = 1, 5
  469. DPARAM(K) = PARAM(K,I)
  470. 80 CONTINUE
  471. CALL DROTMTEST(N,SX,INCX,SY,INCY,DPARAM)
  472. CALL DROTM(N,STX,INCX,STY,INCY,DPARAM)
  473. CALL STEST(LEN,SX,STX,SSIZE2(1,KSIZE),SFAC)
  474. CALL STEST(LEN,SY,STY,SSIZE2(1,KSIZE),SFAC)
  475. 70 CONTINUE
  476. ELSE
  477. WRITE (NOUT,*) ' Shouldn''t be here in CHECK3'
  478. CALL ABORT
  479. END IF
  480. 40 CONTINUE
  481. 60 CONTINUE
  482. RETURN
  483. END
  484. SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC)
  485. * ********************************* STEST **************************
  486. *
  487. * THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO
  488. * SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE
  489. * NEGLIGIBLE.
  490. *
  491. * C. L. LAWSON, JPL, 1974 DEC 10
  492. *
  493. * .. Parameters ..
  494. INTEGER NOUT
  495. PARAMETER (NOUT=6)
  496. * .. Scalar Arguments ..
  497. DOUBLE PRECISION SFAC
  498. INTEGER LEN
  499. * .. Array Arguments ..
  500. DOUBLE PRECISION SCOMP(LEN), SSIZE(LEN), STRUE(LEN)
  501. * .. Scalars in Common ..
  502. INTEGER ICASE, INCX, INCY, MODE, N
  503. LOGICAL PASS
  504. * .. Local Scalars ..
  505. DOUBLE PRECISION SD
  506. INTEGER I
  507. * .. External Functions ..
  508. DOUBLE PRECISION SDIFF
  509. EXTERNAL SDIFF
  510. * .. Intrinsic Functions ..
  511. INTRINSIC ABS
  512. * .. Common blocks ..
  513. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  514. * .. Executable Statements ..
  515. *
  516. DO 40 I = 1, LEN
  517. SD = SCOMP(I) - STRUE(I)
  518. IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0D0)
  519. + GO TO 40
  520. *
  521. * HERE SCOMP(I) IS NOT CLOSE TO STRUE(I).
  522. *
  523. IF ( .NOT. PASS) GO TO 20
  524. * PRINT FAIL MESSAGE AND HEADER.
  525. PASS = .FALSE.
  526. WRITE (NOUT,99999)
  527. WRITE (NOUT,99998)
  528. 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I),
  529. + STRUE(I), SD, SSIZE(I)
  530. 40 CONTINUE
  531. RETURN
  532. *
  533. 99999 FORMAT (' FAIL')
  534. 99998 FORMAT (/' CASE N INCX INCY MODE I ',
  535. + ' COMP(I) TRUE(I) DIFFERENCE',
  536. + ' SIZE(I)',/1X)
  537. 99997 FORMAT (1X,I4,I3,3I5,I3,2D36.8,2D12.4)
  538. END
  539. SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC)
  540. * ************************* STEST1 *****************************
  541. *
  542. * THIS IS AN INTERFACE SUBROUTINE TO ACCOMMODATE THE FORTRAN
  543. * REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE
  544. * ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT.
  545. *
  546. * C.L. LAWSON, JPL, 1978 DEC 6
  547. *
  548. * .. Scalar Arguments ..
  549. DOUBLE PRECISION SCOMP1, SFAC, STRUE1
  550. * .. Array Arguments ..
  551. DOUBLE PRECISION SSIZE(*)
  552. * .. Local Arrays ..
  553. DOUBLE PRECISION SCOMP(1), STRUE(1)
  554. * .. External Subroutines ..
  555. EXTERNAL STEST
  556. * .. Executable Statements ..
  557. *
  558. SCOMP(1) = SCOMP1
  559. STRUE(1) = STRUE1
  560. CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC)
  561. *
  562. RETURN
  563. END
  564. DOUBLE PRECISION FUNCTION SDIFF(SA,SB)
  565. * ********************************* SDIFF **************************
  566. * COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15
  567. *
  568. * .. Scalar Arguments ..
  569. DOUBLE PRECISION SA, SB
  570. * .. Executable Statements ..
  571. SDIFF = SA - SB
  572. RETURN
  573. END
  574. SUBROUTINE ITEST1(ICOMP,ITRUE)
  575. * ********************************* ITEST1 *************************
  576. *
  577. * THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR
  578. * EQUALITY.
  579. * C. L. LAWSON, JPL, 1974 DEC 10
  580. *
  581. * .. Parameters ..
  582. INTEGER NOUT
  583. PARAMETER (NOUT=6)
  584. * .. Scalar Arguments ..
  585. INTEGER ICOMP, ITRUE
  586. * .. Scalars in Common ..
  587. INTEGER ICASE, INCX, INCY, MODE, N
  588. LOGICAL PASS
  589. * .. Local Scalars ..
  590. INTEGER ID
  591. * .. Common blocks ..
  592. COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS
  593. * .. Executable Statements ..
  594. *
  595. IF (ICOMP.EQ.ITRUE) GO TO 40
  596. *
  597. * HERE ICOMP IS NOT EQUAL TO ITRUE.
  598. *
  599. IF ( .NOT. PASS) GO TO 20
  600. * PRINT FAIL MESSAGE AND HEADER.
  601. PASS = .FALSE.
  602. WRITE (NOUT,99999)
  603. WRITE (NOUT,99998)
  604. 20 ID = ICOMP - ITRUE
  605. WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID
  606. 40 CONTINUE
  607. RETURN
  608. *
  609. 99999 FORMAT (' FAIL')
  610. 99998 FORMAT (/' CASE N INCX INCY MODE ',
  611. + ' COMP TRUE DIFFERENCE',
  612. + /1X)
  613. 99997 FORMAT (1X,I4,I3,3I5,2I36,I12)
  614. END
  615. SUBROUTINE DROT(N,DX,INCX,DY,INCY,C,S)
  616. * .. Scalar Arguments ..
  617. DOUBLE PRECISION C,S
  618. INTEGER INCX,INCY,N
  619. * ..
  620. * .. Array Arguments ..
  621. DOUBLE PRECISION DX(*),DY(*)
  622. * ..
  623. * applies a plane rotation.
  624. * jack dongarra, linpack, 3/11/78.
  625. * modified 12/3/93, array(1) declarations changed to array(*)
  626. *
  627. * .. Local Scalars ..
  628. DOUBLE PRECISION DTEMP
  629. INTEGER I,IX,IY
  630. * ..
  631. IF (N.LE.0) RETURN
  632. IF (INCX.EQ.1 .AND. INCY.EQ.1) GO TO 20
  633. IX = 1
  634. IY = 1
  635. IF (INCX.LT.0) IX = (-N+1)*INCX + 1
  636. IF (INCY.LT.0) IY = (-N+1)*INCY + 1
  637. DO 10 I = 1,N
  638. DTEMP = C*DX(IX) + S*DY(IY)
  639. DY(IY) = C*DY(IY) - S*DX(IX)
  640. DX(IX) = DTEMP
  641. IX = IX + INCX
  642. IY = IY + INCY
  643. 10 CONTINUE
  644. RETURN
  645. 20 DO 30 I = 1,N
  646. DTEMP = C*DX(I) + S*DY(I)
  647. DY(I) = C*DY(I) - S*DX(I)
  648. DX(I) = DTEMP
  649. 30 CONTINUE
  650. RETURN
  651. END
  652. SUBROUTINE drotm(N,DX,INCX,DY,INCY,DPARAM)
  653. *
  654. * -- Reference BLAS level1 routine (version 3.8.0) --
  655. * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
  656. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  657. * November 2017
  658. *
  659. * .. Scalar Arguments ..
  660. INTEGER INCX,INCY,N
  661. * ..
  662. * .. Array Arguments ..
  663. DOUBLE PRECISION DPARAM(5),DX(*),DY(*)
  664. * ..
  665. *
  666. * =====================================================================
  667. *
  668. * .. Local Scalars ..
  669. DOUBLE PRECISION DFLAG,DH11,DH12,DH21,DH22,TWO,W,Z,ZERO
  670. INTEGER I,KX,KY,NSTEPS
  671. * ..
  672. * .. Data statements ..
  673. DATA zero,two/0.d0,2.d0/
  674. * ..
  675. *
  676. dflag = dparam(1)
  677. IF (n.LE.0 .OR. (dflag+two.EQ.zero)) RETURN
  678. IF (incx.EQ.incy.AND.incx.GT.0) THEN
  679. *
  680. nsteps = n*incx
  681. IF (dflag.LT.zero) THEN
  682. dh11 = dparam(2)
  683. dh12 = dparam(4)
  684. dh21 = dparam(3)
  685. dh22 = dparam(5)
  686. DO i = 1,nsteps,incx
  687. w = dx(i)
  688. z = dy(i)
  689. dx(i) = w*dh11 + z*dh12
  690. dy(i) = w*dh21 + z*dh22
  691. END DO
  692. ELSE IF (dflag.EQ.zero) THEN
  693. dh12 = dparam(4)
  694. dh21 = dparam(3)
  695. DO i = 1,nsteps,incx
  696. w = dx(i)
  697. z = dy(i)
  698. dx(i) = w + z*dh12
  699. dy(i) = w*dh21 + z
  700. END DO
  701. ELSE
  702. dh11 = dparam(2)
  703. dh22 = dparam(5)
  704. DO i = 1,nsteps,incx
  705. w = dx(i)
  706. z = dy(i)
  707. dx(i) = w*dh11 + z
  708. dy(i) = -w + dh22*z
  709. END DO
  710. END IF
  711. ELSE
  712. kx = 1
  713. ky = 1
  714. IF (incx.LT.0) kx = 1 + (1-n)*incx
  715. IF (incy.LT.0) ky = 1 + (1-n)*incy
  716. *
  717. IF (dflag.LT.zero) THEN
  718. dh11 = dparam(2)
  719. dh12 = dparam(4)
  720. dh21 = dparam(3)
  721. dh22 = dparam(5)
  722. DO i = 1,n
  723. w = dx(kx)
  724. z = dy(ky)
  725. dx(kx) = w*dh11 + z*dh12
  726. dy(ky) = w*dh21 + z*dh22
  727. kx = kx + incx
  728. ky = ky + incy
  729. END DO
  730. ELSE IF (dflag.EQ.zero) THEN
  731. dh12 = dparam(4)
  732. dh21 = dparam(3)
  733. DO i = 1,n
  734. w = dx(kx)
  735. z = dy(ky)
  736. dx(kx) = w + z*dh12
  737. dy(ky) = w*dh21 + z
  738. kx = kx + incx
  739. ky = ky + incy
  740. END DO
  741. ELSE
  742. dh11 = dparam(2)
  743. dh22 = dparam(5)
  744. DO i = 1,n
  745. w = dx(kx)
  746. z = dy(ky)
  747. dx(kx) = w*dh11 + z
  748. dy(ky) = -w + dh22*z
  749. kx = kx + incx
  750. ky = ky + incy
  751. END DO
  752. END IF
  753. END IF
  754. RETURN
  755. END