diff options
Diffstat (limited to 'Ganlib/data/badluk_proc/bessj0.c2m')
| -rw-r--r-- | Ganlib/data/badluk_proc/bessj0.c2m | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/Ganlib/data/badluk_proc/bessj0.c2m b/Ganlib/data/badluk_proc/bessj0.c2m new file mode 100644 index 0000000..e0d0595 --- /dev/null +++ b/Ganlib/data/badluk_proc/bessj0.c2m @@ -0,0 +1,44 @@ + ! "bessj0" function that returns the Bessel function J0(x) for any real x + ! + ! + ! REFERENCE: "Numerical recipes in FORTRAN, + ! The Art of Scientific Computing, Second Edition" + ! Press, Teukolsky, Vetterling, Flannery + ! Cambridge University Press + ! ISBN 0-521-43064-X + ! PAGES: 225 ("FUNCTION bessj0") + ! + ! INPUT: "x" the input argument (REAL) + ! OUTPUT: "bessj0" is the value of J0(x) (REAL) + + REAL bessj0 x ; + REAL ax xx z ; + DOUBLE p1 p2 p3 p4 p5 := 1.D0 -.1098628627D-2 .2734510407D-4 + -.2073370639D-5 .2093887211D-6 ; + DOUBLE q1 q2 q3 q4 q5 := -.1562499995D-1 .1430488765D-3 -.6911147651D-5 + .7621095161D-6 -.934945152D-7 ; + DOUBLE r1 r2 r3 r4 r5 r6 := 57568490574.D0 -13362590354.D0 + 651619640.7D0 -11214424.18D0 77392.33017D0 -184.9052456D0 ; + DOUBLE s1 s2 s3 s4 s5 s6 := 57568490411.D0 1029532985.D0 + 9494680.718D0 59272.64853D0 267.8532712D0 1.D0 ; + DOUBLE y ; + + :: >>x<< ; + IF x ABS 8. < THEN + EVALUATE y := x x * R_TO_D ; + EVALUATE bessj0 := r6 y * r5 + y * r4 + y * r3 + y * r2 + y * r1 + + s6 y * s5 + y * s4 + y * s3 + y * s2 + y * s1 + / + D_TO_R ; + ELSE + EVALUATE ax := x ABS ; + EVALUATE z xx := 8. ax / ax .785398164 - ; + EVALUATE y := z z * R_TO_D ; + EVALUATE bessj0 := p5 y * p4 + y * p3 + y * p2 + y * p1 + + xx COS R_TO_D * + q5 y * q4 + y * q3 + y * q2 + y * q1 + + xx SIN z * R_TO_D * - + .636619772 ax / SQRT R_TO_D * + D_TO_R ; + ENDIF ; + :: <<bessj0>> ; + QUIT " Function *bessj0* XREF " . |
