File: specfun_01.f90

package info (click to toggle)
lfortran 0.60.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 58,412 kB
  • sloc: cpp: 173,406; f90: 80,491; python: 17,586; ansic: 9,610; yacc: 2,356; sh: 1,401; fortran: 895; makefile: 37; javascript: 15
file content (45 lines) | stat: -rw-r--r-- 1,096 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
subroutine rcty_(n,x)
   implicit double precision (a-h,o-z)
   dimension ry(0:n),dy(0:n)
   nm=n
   if (x.lt.1.0d-60) then
      do 10 k=0,n
         ry(k)=-1.0d+300
10    dy(k)=1.0d+300
      ry(0)=-1.0d0
      dy(0)=0.0d0
      return
   endif
   ry(0)=-dcos(x)
   ry(1)=ry(0)/x-dsin(x)
   rf0=ry(0)
   rf1=ry(1)
   do 15 k=2,n
      rf2=(2.0d0*k-1.0d0)*rf1/x-rf0
      if (dabs(rf2).gt.1.0d+300) go to 20
      ry(k)=rf2
      rf0=rf1
15 rf1=rf2
20 nm=k-1
   dy(0)=dsin(x)
   do 25 k=1,nm
25 dy(k)=-k*ry(k)/x+ry(k-1)

   if (abs(ry(0) - (-0.98006657784124163)) > 1e-7) error stop
   if (abs(ry(1) - (-5.0990022200012692)) > 1e-6) error stop
   if (abs(ry(2) - (-75.504966722177798)) > 1e-6) error stop
   if (abs(dy(0) - (0.19866933079506122)) > 1e-8) error stop
   if (abs(dy(1) - (24.514944522165102)) > 1e-6) error stop
   if (abs(dy(2) - (749.95066500177666)) > 1e-4) error stop
   if (nm /= 2) error stop

   print *, "ry = ", ry
   print *, "dy = ", dy
   print *, "nm = ", nm
   return
end

program specfun_01
   implicit double precision (a-h,o-z)
   call rcty_(2, 0.2d0)
end program