diff --git a/books/bookvol10.5.pamphlet b/books/bookvol10.5.pamphlet index 5fbcb2a..9a76229 100644 --- a/books/bookvol10.5.pamphlet +++ b/books/bookvol10.5.pamphlet @@ -761,6 +761,8 @@ c NEW \begin{chunk}{dcabs1 example} program dcabs1EX +* Tim Daly April 23, 2012 +* unit tests for BLAS dcabs1 double complex a,b,c,d a=COMPLEX(2.1,2.1) b=(3.1D2,4.1D3) @@ -1434,6 +1436,103 @@ c \end{chunk} +\begin{chunk}{dasum example} + program dasumEX +* Tim Daly April 24, 2012 +* unit tests for BLAS dasum + double precision a(6) + double precision b + a = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0 /) + write(6,100)a(1),a(2),a(3) + 100 format("a(1)=",f6.3," a(2)=",f6.3," a(3)=",f6.3) + write(6,200)a(4),a(5),a(6) + 200 format("a(4)=",f6.3," a(5)=",f6.3," a(6)=",f6.3) + d=dasum(3,a,-1) + write(6,300)d + 300 format("d=",f6.3," should be 0.0, negative index") + d=dasum(3,a,0) + write(6,301)d + 301 format("d=",f6.3," should be 0.0, zero increment") + d=dasum(-11,a,1) + write(6,302)d + 302 format("d=",f6.3," should be 0.0, negative elements") + d=dasum(0,a,1) + write(6,303)d + 303 format("d=",f6.3," should be 0.0, no elements") + d=dasum(1,a,1) + write(6,304)d + 304 format("d=",f6.3," should be 1.0") + d=dasum(2,a,1) + write(6,305)d + 305 format("d=",f6.3," should be 3.0 = 1.0+2.0") + d=dasum(3,a,1) + write(6,306)d + 306 format("d=",f6.3," should be 6.0 = 1.0+2.0+3.0") + d=dasum(4,a,1) + write(6,307)d + 307 format("d=",f6.3," should be 10.0 = 1.0+2.0+3.0+4.0") + d=dasum(5,a,1) + write(6,308)d + 308 format("d=",f6.3," should be 15.0 = 1.0+2.0+3.0+4.0+5.0") + d=dasum(6,a,1) + write(6,309)d + 309 format("d=",f6.3," should be 21.0 = 1.0+2.0+3.0+4.0+5.0+6.0") + d=dasum(7,a,1) + write(6,310)d + 310 format("d=",f6.3," should be 21.0 = 1.0+2.0+3.0+4.0+5.0+6.0") + d=dasum(1,a,2) + write(6,311)d + 311 format("d=",f6.3," should be 1.0 = 1.0") + d=dasum(2,a,2) + write(6,312)d + 312 format("d=",f6.3," should be 4.0 = 1.0+3.0") + d=dasum(3,a,2) + write(6,313)d + 313 format("d=",f6.3," should be 9.0 = 1.0+3.0+5.0") + d=dasum(4,a,2) + write(6,314)d + 314 format("d=",f6.3," should be 9.0 = 1.0+3.0+5.0") + d=dasum(1,a,3) + write(6,315)d + 315 format("d=",f6.3," should be 1.0 = 1.0") + d=dasum(2,a,3) + write(6,316)d + 316 format("d=",f6.3," should be 5.0 = 1.0+4.0") + d=dasum(3,a,3) + write(6,317)d + 317 format("d=",f6.3," should be 5.0 = 1.0+4.0") + d=dasum(1,a,4) + write(6,318)d + 318 format("d=",f6.3," should be 1.0 = 1.0") + d=dasum(2,a,4) + write(6,319)d + 319 format("d=",f6.3," should be 6.0 = 1.0+5.0") + d=dasum(3,a,4) + write(6,320)d + 320 format("d=",f6.3," should be 6.0 = 1.0+5.0") + d=dasum(1,a,5) + write(6,321)d + 321 format("d=",f6.3," should be 1.0 = 1.0") + d=dasum(2,a,5) + write(6,322)d + 322 format("d=",f6.3," should be 7.0 = 1.0+6.0") + d=dasum(3,a,5) + write(6,323)d + 323 format("d=",f6.3," should be 7.0 = 1.0+6.0") + d=dasum(1,a,6) + write(6,324)d + 324 format("d=",f6.3," should be 1.0 = 1.0") + d=dasum(2,a,6) + write(6,325)d + 325 format("d=",f6.3," should be 1.0 = 1.0") + d=dasum(1,a,7) + write(6,326)d + 326 format("d=",f6.3," should be 1.0 = 1.0") + stop + end + +\end{chunk} + \begin{chunk}{BLAS 1 dasum} (defun dasum (n dx incx) (declare (type (simple-array double-float (*)) dx) (type fixnum incx n)) @@ -1512,6 +1611,11 @@ b:PRIMARR(DFLOAT):=[ [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0] ] --R Type: PrimitiveArray(DoubleFloat) --E 6 +\end{chunk} +Note that Axiom properly handles array indexes that are out of bounds. +The BLAS daxpy routine cannot check this condition. +\begin{chunk}{daxpy.input} + --S 7 of 22 daxpy(8,2.0,a,1,b,1) --R @@ -1850,6 +1954,70 @@ c \end{chunk} +\begin{chunk}{daxpy example} + program daxpyEX +* Tim Daly April 24, 2012 +* unit tests for BLAS daxpy (a*x+y) + double precision a(7) + double precision b(7) + double precision c(7) + a = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + write(6,100)a(1),a(2),a(3) + 100 format("a(1)=",f6.3," a(2)=",f6.3," a(3)=",f6.3) + write(6,101)a(4),a(5),a(6) + 101 format("a(4)=",f6.3," a(5)=",f6.3," a(6)=",f6.3) + write(6,102)b(1),b(2),b(3) + 102 format("b(1)=",f6.3," b(2)=",f6.3," b(3)=",f6.3) + write(6,103)b(4),b(5),b(6) + 103 format("b(4)=",f6.3," b(5)=",f6.3," b(6)=",f6.3) + call daxpy(3,2.0d0,a,1,b,1) + write(6,200) + 200 format(/,"t200 is (/ 3.0, 6.0, 9.0, 4.0, 5.0, 6.0, 7.0 /)") + write(6,201)b(1),b(2),b(3) + 201 format("b(1)=",f6.3," b(2)=",f6.3," b(3)=",f6.3) + write(6,202)b(4),b(5),b(6),b(7) + 202 format("b(4)=",f6.3," b(5)=",f6.3," b(6)=",f6.3," b(7)=",f6.3) + write(6,300) + 300 format(/,"t300 is (/ 3.0, 6.0, 9.0, 12.0, 15.0, 18.0, 21.0 /)") + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + call daxpy(7,2.0d0,a,1,b,1) + write(6,201)b(1),b(2),b(3) + write(6,202)b(4),b(5),b(6),b(7) + write(6,302) + 302 format(/,"t302 is (/ 3.0, 2.0, 3.0, 12.0, 5.0, 6.0, 21.0 /)") + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + call daxpy(3,2.0d0,a,3,b,3) + write(6,201)b(1),b(2),b(3) + write(6,202)b(4),b(5),b(6),b(7) + write(6,303) + 303 format(/,"t303 is (/ 3.0, 2.0, 9.0, 4.0, 15.0, 6.0, 21.0 /)") + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + call daxpy(4,2.0d0,a,2,b,2) + write(6,201)b(1),b(2),b(3) + write(6,202)b(4),b(5),b(6),b(7) + write(6,305) + 305 format(/,"t305 is (/ 3.0, 2.0, 9.0, 4.0, 15.0, 6.0, 7.0 /)") + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + call daxpy(3,2.0d0,a,2,b,2) + write(6,201)b(1),b(2),b(3) + write(6,202)b(4),b(5),b(6),b(7) + write(6,306) + 306 format(/,"t306 is (/ -1.0, 2.0, -1.0, 4.0, -1.0, 6.0, 7.0 /)") + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + call daxpy(3,-2.0d0,a,1,b,2) + write(6,201)b(1),b(2),b(3) + write(6,202)b(4),b(5),b(6),b(7) + write(6,307) + 307 format(/,"t307 is (/ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 /)") + b = (/ 1.0D0, 2.0D0, 3.0D0, 4.0D0, 5.0D0, 6.0D0, 7.0D0 /) + call daxpy(3,0.0d0,a,1,b,2) + write(6,201)b(1),b(2),b(3) + write(6,202)b(4),b(5),b(6),b(7) + stop + end +\end{chunk} + \begin{chunk}{BLAS 1 daxpy} (defun daxpy (n da dx incx dy incy) (declare (type (simple-array double-float) dx dy) @@ -1889,6 +2057,32 @@ c dy) \end{chunk} + +\begin{chunk}{BLAS 1 daxpy lisp test} +(setq a (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 3 2.0d0 a 1 b 1) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 7 2.0d0 a 1 b 1) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 8 2.0d0 a 1 b 1) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 3 2.0d0 a 3 b 3) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 4 2.0d0 a 2 b 2) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 5 2.0d0 a 2 b 2) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 3 2.0d0 a 2 b 2) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 3 -2.0d0 a 2 b 2) +(setq a (vector 1.0d0 2.0d0 3.0d0)) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0)) +(daxpy 3 -2.0d0 a 1 b 2) +(setq b (vector 1.0d0 2.0d0 3.0d0 4.0d0 5.0d0 6.0d0 7.0d0)) +(daxpy 3 0.0d0 a 1 b 2) + +\end{chunk} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{dcopy BLAS} %\pagehead{dcopy}{dcopy} diff --git a/changelog b/changelog index b27312b..2893cef 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,5 @@ +20120425 tpd src/axiom-website/patches.html 20120425.01.tpd.patch +20120425 tpd books/bookvol10.5 BLAS1 daxpy test cases 20120423 tpd src/axiom-website/patches.html 20120423.01.tpd.patch 20120423 tpd books/bookvol10.5 add missing lapack routines 20120422 tpd src/axiom-website/patches.html 20120422.01.tpd.patch diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index 7c28148..03e5e07 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -3888,5 +3888,7 @@ src/input/cohen.input Joel Cohen algebra example
books/bookvol10.5 add LAPACK reference code
20120423.01.tpd.patch books/bookvol10.5 add missing lapack routines
+20120425.01.tpd.patch +books/bookvol10.5 BLAS1 daxpy test cases