Commit 27d3b84d60230bacdb38e98a757dab3815f5ff2a
1 parent
93f1019c07
Exists in
master
and in
3 other branches
git-svn-id: https://lxsd.femto-st.fr/svn/fvn@36 b657c933-2333-4658-acf2-d3c7c2708721
Showing 15 changed files with 591 additions and 0 deletions Inline Diff
- fvn_test/Makefile
- fvn_test/init_random_seed.f90
- fvn_test/test_akima.f90
- fvn_test/test_det.f90
- fvn_test/test_integ.f90
- fvn_test/test_inter1d.f90
- fvn_test/test_inter2d.f90
- fvn_test/test_inter3d.f90
- fvn_test/test_lsp.f90
- fvn_test/test_matcon.f90
- fvn_test/test_matev.f90
- fvn_test/test_matinv.f90
- fvn_test/test_muller.f90
- fvn_test/test_sparse.f90
- fvn_test/test_specfunc.f90
fvn_test/Makefile
| File was created | 1 | |||
| 2 | include $(BTREE)/Make.inc | |||
| 3 | ||||
| 4 | programs = test_fac test_matinv test_specfunc \ | |||
| 5 | test_det test_matcon test_matev test_sparse test_inter1d \ | |||
| 6 | test_inter2d test_inter3d test_akima test_lsp test_muller \ | |||
| 7 | test_integ | |||
| 8 | ||||
| 9 | prog:$(programs) | |||
| 10 | ||||
| 11 | clean: | |||
| 12 | rm -f {*.o,*.oo,*.ipo,*.a,*.mod} | |||
| 13 | rm -f $(programs) | |||
| 14 |
fvn_test/init_random_seed.f90
| File was created | 1 | ! As the norm stated for random_seed "If no argument is present, the processor assigns a | ||
| 2 | ! processor-dependent value to the seed." | |||
| 3 | ! It seems that there are different possible interpretations for this : | |||
| 4 | ! In gfortran a call to random_seed without arguments will initialize to a default value | |||
| 5 | ! which will always be the same. | |||
| 6 | ! In Portland fortran, a call to random_seed without arguments will initialize with something | |||
| 7 | ! machine and time dependant | |||
| 8 | ! Unfortunately as the underlying algorithm are (or at least can be) different in each | |||
| 9 | ! compiler, we cannot generalize the use of this initialization provided in gfortran | |||
| 10 | ! documentation | |||
| 11 | SUBROUTINE init_random_seed() | |||
| 12 | INTEGER :: i, n, clock | |||
| 13 | INTEGER, DIMENSION(:), ALLOCATABLE :: seed | |||
| 14 | logical :: gfortran=.false. | |||
| 15 | ! | |||
| 16 | ! Set gfortran to .true. if using gfortran to obtain the desired behaviour | |||
| 17 | ! | |||
| 18 | if (gfortran) then | |||
| 19 | CALL RANDOM_SEED(size = n) | |||
| 20 | ALLOCATE(seed(n)) | |||
| 21 | ||||
| 22 | CALL SYSTEM_CLOCK(COUNT=clock) | |||
| 23 | ||||
| 24 | seed = clock + 37 * (/ (i - 1, i = 1, n) /) | |||
| 25 | CALL RANDOM_SEED(PUT = seed) | |||
| 26 | ||||
| 27 | DEALLOCATE(seed) | |||
| 28 | else |
fvn_test/test_akima.f90
| File was created | 1 | program akima | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer :: nbpoints,nppoints,i | |||
| 5 | real(8),dimension(:),allocatable :: x_d,y_d,breakpoints_d | |||
| 6 | real(8),dimension(:,:),allocatable :: coeff_fvn_d | |||
| 7 | real(8) :: xstep_d,xp_d,ty_d,fvn_y_d | |||
| 8 | open(2,file='fvn_akima_double.dat') | |||
| 9 | open(3,file='fvn_akima_breakpoints_double.dat') | |||
| 10 | nbpoints=30 | |||
| 11 | allocate(x_d(nbpoints)) | |||
| 12 | allocate(y_d(nbpoints)) | |||
| 13 | allocate(breakpoints_d(nbpoints)) | |||
| 14 | allocate(coeff_fvn_d(4,nbpoints)) | |||
| 15 | xstep_d=20./dfloat(nbpoints) | |||
| 16 | do i=1,nbpoints | |||
| 17 | x_d(i)=-10.+dfloat(i)*xstep_d | |||
| 18 | y_d(i)=dsin(x_d(i)) | |||
| 19 | write(3,44) x_d(i),y_d(i) | |||
| 20 | end do | |||
| 21 | close(3) | |||
| 22 | call fvn_akima(nbpoints,x_d,y_d,breakpoints_d,coeff_fvn_d) | |||
| 23 | nppoints=1000 | |||
| 24 | xstep_d=22./dfloat(nppoints) | |||
| 25 | do i=1,nppoints | |||
| 26 | xp_d=-11.+dfloat(i)*xstep_d | |||
| 27 | ty_d=dsin(xp_d) | |||
| 28 | fvn_y_d=fvn_spline_eval(xp_d,nbpoints-1,breakpoints_d,coeff_fvn_d) | |||
| 29 | write(2,44) xp_d,ty_d,fvn_y_d | |||
| 30 | end do | |||
| 31 | close(2) | |||
| 32 | deallocate(coeff_fvn_d,breakpoints_d,y_d,x_d) | |||
| 33 | write(*,*) "All done, plot results with gnuplot using command :" | |||
| 34 | write(*,*) "pl 'fvn_akima_double.dat' u 1:2 w l,'fvn_akima_breakpoints_double.dat' w p" | |||
| 35 | ||||
| 36 | 44 FORMAT(4(1X,1PE22.14)) |
fvn_test/test_det.f90
| File was created | 1 | program test_det | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | real(8),dimension(3,3) :: a | |||
| 5 | real(8) :: deta | |||
| 6 | integer :: status,i | |||
| 7 | ||||
| 8 | call init_random_seed() | |||
| 9 | call random_number(a) | |||
| 10 | a=a*100 | |||
| 11 | deta=fvn_det(3,a,status) | |||
| 12 | do i=1,3 | |||
| 13 | write (*,'(3(f15.5))') a(i,:) | |||
| 14 | end do | |||
| 15 | write (*,*) | |||
| 16 | write (*,*) "Det = ",deta,"Status = ",status |
fvn_test/test_integ.f90
| File was created | 1 | program integ | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | real(8), external :: f1,f2,g,h | |||
| 5 | real(8) :: a,b,epsabs,epsrel,abserr,res | |||
| 6 | integer :: key,ier | |||
| 7 | a=0. | |||
| 8 | b=1. | |||
| 9 | epsabs=1d-8 | |||
| 10 | epsrel=1d-8 | |||
| 11 | key=2 | |||
| 12 | call fvn_integ_1_gk(f1,a,b,epsabs,epsrel,key,res,abserr,ier) | |||
| 13 | write(*,*) "Integration of x*x between 0 and 1 : " | |||
| 14 | write(*,*) res | |||
| 15 | call fvn_integ_2_gk(f2,a,b,g,h,epsabs,epsrel,key,res,abserr,ier) | |||
| 16 | write(*,*) "Integration of x*y between 0 and 1 on both x and y : " | |||
| 17 | write(*,*) res | |||
| 18 | ||||
| 19 | end program | |||
| 20 | function f1(x) | |||
| 21 | implicit none | |||
| 22 | real(8) :: x,f1 | |||
| 23 | f1=x*x | |||
| 24 | end function | |||
| 25 | function f2(x,y) | |||
| 26 | implicit none | |||
| 27 | real(8) :: x,y,f2 | |||
| 28 | f2=x*y | |||
| 29 | end function | |||
| 30 | function g(x) | |||
| 31 | implicit none | |||
| 32 | real(8) :: x,g | |||
| 33 | g=0. | |||
| 34 | end function | |||
| 35 | function h(x) | |||
| 36 | implicit none | |||
| 37 | real(8) :: x,h | |||
| 38 | h=1. |
fvn_test/test_inter1d.f90
| File was created | 1 | program inter1d | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer(kind=4),parameter :: ndata=33 | |||
| 5 | integer(kind=4) :: i,nout | |||
| 6 | real(kind=8) :: f,fdata(ndata),h,pi,q,sin,x,xdata(ndata) | |||
| 7 | real(kind=8) ::tv | |||
| 8 | intrinsic sin | |||
| 9 | f(x)=sin(x) | |||
| 10 | xdata(1)=0. | |||
| 11 | fdata(1)=f(xdata(1)) | |||
| 12 | h=1./32. | |||
| 13 | do i=2,ndata | |||
| 14 | xdata(i)=xdata(i-1)+h | |||
| 15 | fdata(i)=f(xdata(i)) | |||
| 16 | end do | |||
| 17 | call init_random_seed() | |||
| 18 | call random_number(x) | |||
| 19 | q=fvn_quad_interpol(x,ndata,xdata,fdata) | |||
| 20 | tv=f(x) | |||
| 21 | write(*,'("x y z ",1(f8.5))') x | |||
| 22 | write(*,'("Calculated (real) value :",f8.5)') tv | |||
| 23 | write(*,'("fvn interpolation : ",f8.5)') q | |||
| 24 | write(*,'("Relative fvn error :",e12.5)') abs((q-tv)/tv) | |||
| 25 | end program |
fvn_test/test_inter2d.f90
| File was created | 1 | program inter2d | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer(kind=4),parameter :: nx=21,ny=42 | |||
| 5 | integer(kind=4) :: i,j | |||
| 6 | real(kind=8) :: f,fdata(nx,ny),dble,pi,q,sin,x,xdata(nx),y,ydata(ny) | |||
| 7 | real(kind=8) :: tv | |||
| 8 | intrinsic dble,sin | |||
| 9 | f(x,y)=sin(x+2.*y) | |||
| 10 | do i=1,nx | |||
| 11 | xdata(i)=dble(i-1)/dble(nx-1) | |||
| 12 | end do | |||
| 13 | do i=1,ny | |||
| 14 | ydata(i)=dble(i-1)/dble(ny-1) | |||
| 15 | end do | |||
| 16 | do i=1,nx | |||
| 17 | do j=1,ny | |||
| 18 | fdata(i,j)=f(xdata(i),ydata(j)) | |||
| 19 | end do | |||
| 20 | end do | |||
| 21 | call init_random_seed() | |||
| 22 | call random_number(x) | |||
| 23 | call random_number(y) | |||
| 24 | q=fvn_quad_2d_interpol(x,y,nx,xdata,ny,ydata,fdata) | |||
| 25 | tv=f(x,y) | |||
| 26 | write(*,'("x y z ",2(f8.5))') x,y | |||
| 27 | write(*,'("Calculated (real) value :",f8.5)') tv | |||
| 28 | write(*,'("fvn interpolation : ",f8.5)') q | |||
| 29 | write(*,'("Relative fvn error :",e12.5)') abs((q-tv)/tv) | |||
| 30 | end program |
fvn_test/test_inter3d.f90
| File was created | 1 | program test_inter3d | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer(kind=4),parameter :: nx=21,ny=42,nz=18 | |||
| 5 | integer(kind=4) :: i,j,k | |||
| 6 | real(kind=8) :: f,fdata(nx,ny,nz),dble,pi,q,sin,x,xdata(nx),y,ydata(ny),z,zdata(nz) | |||
| 7 | real(kind=8) :: tv | |||
| 8 | intrinsic dble,sin | |||
| 9 | f(x,y,z)=sin(x+2.*y+3.*z) | |||
| 10 | do i=1,nx | |||
| 11 | xdata(i)=2.*(dble(i-1)/dble(nx-1)) | |||
| 12 | end do | |||
| 13 | do i=1,ny | |||
| 14 | ydata(i)=2.*(dble(i-1)/dble(ny-1)) | |||
| 15 | end do | |||
| 16 | do i=1,nz | |||
| 17 | zdata(i)=2.*(dble(i-1)/dble(nz-1)) | |||
| 18 | end do | |||
| 19 | do i=1,nx | |||
| 20 | do j=1,ny | |||
| 21 | do k=1,nz | |||
| 22 | fdata(i,j,k)=f(xdata(i),ydata(j),zdata(k)) | |||
| 23 | end do | |||
| 24 | end do | |||
| 25 | end do | |||
| 26 | call init_random_seed() | |||
| 27 | call random_number(x) | |||
| 28 | call random_number(y) | |||
| 29 | call random_number(z) | |||
| 30 | q=fvn_quad_3d_interpol(x,y,z,nx,xdata,ny,ydata,nz,zdata,fdata) | |||
| 31 | tv=f(x,y,z) | |||
| 32 | write(*,'("x y z ",3(f8.5))') x,y,z | |||
| 33 | write(*,'("Calculated (real) value :",f8.5)') tv | |||
| 34 | write(*,'("fvn interpolation : ",f8.5)') q | |||
| 35 | write(*,'("Relative fvn error :",e12.5)') abs((q-tv)/tv) | |||
| 36 | end program |
fvn_test/test_lsp.f90
| File was created | 1 | program lsp | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer,parameter :: npoints=13,deg=3 | |||
| 5 | integer :: status,i | |||
| 6 | real(kind=8) :: xm(npoints),ym(npoints),xstep,xc,yc | |||
| 7 | real(kind=8) :: coeff(deg+1) | |||
| 8 | xm = (/ -3.8,-2.7,-2.2,-1.9,-1.1,-0.7,0.5,1.7,2.,2.8,3.2,3.8,4. /) | |||
| 9 | ym = (/ -3.1,-2.,-0.9,0.8,1.8,0.4,2.1,1.8,3.2,2.8,3.9,5.2,7.5 /) | |||
| 10 | open(2,file='fvn_lsp_double_mesure.dat') | |||
| 11 | open(3,file='fvn_lsp_double_poly.dat') | |||
| 12 | do i=1,npoints | |||
| 13 | write(2,44) xm(i),ym(i) | |||
| 14 | end do | |||
| 15 | close(2) | |||
| 16 | call fvn_lspoly(npoints,xm,ym,deg,coeff,status) | |||
| 17 | xstep=(xm(npoints)-xm(1))/1000. | |||
| 18 | do i=1,1000 | |||
| 19 | xc=xm(1)+(i-1)*xstep | |||
| 20 | yc=poly(xc,coeff) | |||
| 21 | write(3,44) xc,yc | |||
| 22 | end do | |||
| 23 | close(3) | |||
| 24 | write(*,*) "All done, plot results with gnuplot using command :" | |||
| 25 | write(*,*) "pl 'fvn_lsp_double_mesure.dat' u 1:2 w p,'fvn_lsp_double_poly.dat' u 1:2 w l" | |||
| 26 | 44 FORMAT(4(1X,1PE22.14)) | |||
| 27 | contains | |||
| 28 | function poly(x,coeff) | |||
| 29 | implicit none | |||
| 30 | real(8) :: x | |||
| 31 | real(8) :: coeff(deg+1) | |||
| 32 | real(8) :: poly | |||
| 33 | integer :: i | |||
| 34 | poly=0. | |||
| 35 | do i=1,deg+1 | |||
| 36 | poly=poly+coeff(i)*x**(i-1) | |||
| 37 | end do | |||
| 38 | end function | |||
| 39 | end program |
fvn_test/test_matcon.f90
| File was created | 1 | program test_matcon | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | real(8),dimension(3,3) :: a | |||
| 5 | real(8) :: rcond | |||
| 6 | integer :: status,i | |||
| 7 | call init_random_seed() | |||
| 8 | call random_number(a) | |||
| 9 | a=a*100 | |||
| 10 | call fvn_matcon(3,a,rcond,status) | |||
| 11 | write(*,*) "Reasonnably conditionned matrix" | |||
| 12 | do i=1,3 | |||
| 13 | write (*,'(3(e12.5))') a(i,:) | |||
| 14 | end do | |||
| 15 | write (*,*) | |||
| 16 | write (*,*) "Cond = ",rcond | |||
| 17 | write (*,*) | |||
| 18 | write (*,*) | |||
| 19 | a(1,1)=a(1,1)*1d9 | |||
| 20 | write(*,*) "Badly conditionned matrix" | |||
| 21 | do i=1,3 | |||
| 22 | write (*,'(3(e12.5))') a(i,:) | |||
| 23 | end do | |||
| 24 | call fvn_matcon(3,a,rcond,status) | |||
| 25 | write (*,*) | |||
| 26 | write (*,*) "Cond = ",rcond | |||
| 27 |
fvn_test/test_matev.f90
| File was created | 1 | program test_matev | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | real(8),dimension(3,3) :: a | |||
| 5 | complex(8),dimension(3) :: evala | |||
| 6 | complex(8),dimension(3,3) :: eveca | |||
| 7 | integer :: status,i,j | |||
| 8 | call init_random_seed() | |||
| 9 | call random_number(a) | |||
| 10 | a=a*100 | |||
| 11 | call fvn_matev(3,a,evala,eveca,status) | |||
| 12 | ||||
| 13 | write(*,*) "The matrix :" | |||
| 14 | write (*,'(3(e12.5))') a | |||
| 15 | write (*,*) | |||
| 16 | do i=1,3 | |||
| 17 | write(*,'("Eigenvalue ",I3," : (",e12.5,",",e12.5,") ")') i,evala(i) | |||
| 18 | write(*,*) "Associated Eigenvector :" | |||
| 19 | do j=1,3 | |||
| 20 | write(*,'("(",e12.5,",",e12.5,") ")') eveca(j,i) | |||
| 21 | end do | |||
| 22 | write(*,*) | |||
| 23 | end do |
fvn_test/test_matinv.f90
| File was created | 1 | program test_matinv | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer(4), parameter :: n=3 | |||
| 5 | integer(4) :: status,i | |||
| 6 | complex(8),dimension(n,n) :: m,im,prod | |||
| 7 | real(8),dimension(n,n) :: rtmp,itmp | |||
| 8 | character(len=80) :: fmreal,fmcmplx | |||
| 9 | ||||
| 10 | fmcmplx='(3("(",f8.5,",",f8.5,") "))' | |||
| 11 | ||||
| 12 | ! initialize pseudo random generator | |||
| 13 | call init_random_seed() | |||
| 14 | ! fill real and imaginary part | |||
| 15 | call random_number(rtmp) | |||
| 16 | call random_number(itmp) | |||
| 17 | ! create the complex matrix (fvn_i is defined in the fvn module) | |||
| 18 | m=rtmp+fvn_i*itmp | |||
| 19 | write(*,*) "Matrix M" | |||
| 20 | do i=1,n | |||
| 21 | write(*,fmcmplx) m(i,:) | |||
| 22 | end do | |||
| 23 | ||||
| 24 | ! Invertion | |||
| 25 | call fvn_matinv(n,m,im) | |||
| 26 | write(*,*) "Inverse of M" | |||
| 27 | do i=1,n | |||
| 28 | write(*,fmcmplx) im(i,:) | |||
| 29 | end do | |||
| 30 | ||||
| 31 | ! Result should be identity matrix | |||
| 32 | write(*,*) "Product of M and inverse of M :" | |||
| 33 | prod=matmul(m,im) |
fvn_test/test_muller.f90
| File was created | 1 | program muller | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer :: i,info | |||
| 5 | complex(8),dimension(10) :: roots | |||
| 6 | integer,dimension(10) :: infer | |||
| 7 | complex(8), external :: f | |||
| 8 | ||||
| 9 | real(8) :: eps1 | |||
| 10 | eps1=1.d-10 | |||
| 11 | call fvn_muller(f,1.d-12,1.d-10,0,0,10,roots,200,infer,info) | |||
| 12 | write(*,*) "Error code :",info | |||
| 13 | do i=1,10 | |||
| 14 | write(*,*) roots(i),infer(i) | |||
| 15 | enddo | |||
| 16 | end program | |||
| 17 | ||||
| 18 | function f(x) | |||
| 19 | complex(8) :: x,f |
fvn_test/test_sparse.f90
| File was created | 1 | program test_sparse | ||
| 2 | use fvn | |||
| 3 | implicit none | |||
| 4 | integer(4), parameter :: nz=12 | |||
| 5 | integer(4), parameter :: n=5 | |||
| 6 | real(8),dimension(nz) :: A | |||
| 7 | real(8),dimension(n,n) :: As | |||
| 8 | integer(4),dimension(nz) :: Ti,Tj | |||
| 9 | real(8),dimension(n) :: B,x | |||
| 10 | integer(4) :: status,i | |||
| 11 | ! Description of the matrix in triplet form | |||
| 12 | A = (/ 2.,3.,3.,-1.,4.,4.,-3.,1.,2.,2.,6.,1. /) | |||
| 13 | B = (/ 8., 45., -3., 3., 19./) | |||
| 14 | Ti = (/ 1,2,1,3,5,2,3,4,5,3,2,5 /) | |||
| 15 | Tj = (/ 1,1,2,2,2,3,3,3,3,4,5,5 /) | |||
| 16 | ||||
| 17 | ! Reconstruction of the matrix in standard form | |||
| 18 | ! just needed for printing the matrix here | |||
| 19 | As=0. | |||
| 20 | do i=1,nz | |||
| 21 | As(Ti(i),Tj(i))=A(i) | |||
| 22 | end do | |||
| 23 | write(*,*) "Matrix in standard representation :" | |||
| 24 | do i=1,5 | |||
| 25 | write(*,'(5f8.4)') As(i,:) | |||
| 26 | end do | |||
| 27 | write(*,*) | |||
| 28 | write(*,'("Right hand side :",5f8.4)') B | |||
| 29 | ||||
| 30 | !specific routine that will be used here | |||
| 31 | !call fvn_di_sparse_solve(n,nz,A,Ti,Tj,B,x,status) | |||
| 32 | call fvn_sparse_solve(n,nz,A,Ti,Tj,B,x,status) | |||
| 33 | write(*,'("Solution :",5f8.4)') x |
fvn_test/test_specfunc.f90
| File was created | 1 | program test_specfunc | ||
| 2 | use fvn_fnlib | |||
| 3 | implicit none | |||
| 4 | integer,parameter :: npoints=200 | |||
| 5 | integer :: i | |||
| 6 | real(8), dimension(npoints) :: j0 | |||
| 7 | real(8) :: xmin,xmax,xstep,x,y | |||
| 8 | ||||
| 9 | ! bsj0 | |||
| 10 | xmin=-20. | |||
| 11 | xmax=20. | |||
| 12 | xstep=(xmax-xmin)/dble(npoints) | |||
| 13 | open(2,file='bsj0.dat') | |||
| 14 | do i=1,npoints | |||
| 15 | x=xmin+i*xstep | |||
| 16 | y=bsj0(x) | |||
| 17 | write(2,'(2e22.14)') x,y | |||
| 18 | end do | |||
| 19 | close(2) | |||
| 20 | ||||
| 21 | ! bsj1 | |||
| 22 | xmin=-20. | |||
| 23 | xmax=20. | |||
| 24 | xstep=(xmax-xmin)/dble(npoints) | |||
| 25 | open(2,file='bsj1.dat') | |||
| 26 | do i=1,npoints | |||
| 27 | x=xmin+i*xstep | |||
| 28 | y=bsj1(x) | |||
| 29 | write(2,'(2e22.14)') x,y | |||
| 30 | end do | |||
| 31 | close(2) | |||
| 32 | ||||
| 33 | !bsi0 | |||
| 34 | xmin=-4. | |||
| 35 | xmax=4. | |||
| 36 | xstep=(xmax-xmin)/dble(npoints) | |||
| 37 | open(2,file='bsi0.dat') | |||
| 38 | do i=1,npoints | |||
| 39 | x=xmin+i*xstep | |||
| 40 | y=bsi0(x) | |||
| 41 | write(2,'(2e22.14)') x,y | |||
| 42 | end do | |||
| 43 | close(2) | |||
| 44 | ||||
| 45 | !bsi1 | |||
| 46 | xmin=-4. | |||
| 47 | xmax=4. | |||
| 48 | xstep=(xmax-xmin)/dble(npoints) | |||
| 49 | open(2,file='bsi1.dat') | |||
| 50 | do i=1,npoints | |||
| 51 | x=xmin+i*xstep | |||
| 52 | y=bsi1(x) | |||
| 53 | write(2,'(2e22.14)') x,y | |||
| 54 | end do | |||
| 55 | close(2) | |||
| 56 | ||||
| 57 | !bsy0 | |||
| 58 | xmin=0. | |||
| 59 | xmax=20. | |||
| 60 | xstep=(xmax-xmin)/dble(npoints) | |||
| 61 | open(2,file='bsy0.dat') | |||
| 62 | do i=1,npoints | |||
| 63 | x=xmin+i*xstep | |||
| 64 | y=bsy0(x) | |||
| 65 | write(2,'(2e22.14)') x,y | |||
| 66 | end do | |||
| 67 | close(2) | |||
| 68 | ||||
| 69 | !bsy1 | |||
| 70 | xmin=0. | |||
| 71 | xmax=20. | |||
| 72 | xstep=(xmax-xmin)/dble(npoints) | |||
| 73 | open(2,file='bsy1.dat') | |||
| 74 | do i=1,npoints | |||
| 75 | x=xmin+i*xstep | |||
| 76 | y=bsy1(x) | |||
| 77 | write(2,'(2e22.14)') x,y | |||
| 78 | end do | |||
| 79 | close(2) | |||
| 80 | ||||
| 81 | !bsk0 | |||
| 82 | xmin=0. | |||
| 83 | xmax=4. | |||
| 84 | xstep=(xmax-xmin)/dble(npoints) | |||
| 85 | open(2,file='bsk0.dat') | |||
| 86 | do i=1,npoints | |||
| 87 | x=xmin+i*xstep | |||
| 88 | y=bsk0(x) | |||
| 89 | write(2,'(2e22.14)') x,y | |||
| 90 | end do | |||
| 91 | close(2) | |||
| 92 | ||||
| 93 | !bsk1 | |||
| 94 | xmin=0. | |||
| 95 | xmax=4. | |||
| 96 | xstep=(xmax-xmin)/dble(npoints) | |||
| 97 | open(2,file='bsk1.dat') | |||
| 98 | do i=1,npoints | |||
| 99 | x=xmin+i*xstep | |||
| 100 | y=bsk1(x) | |||
| 101 | write(2,'(2e22.14)') x,y | |||
| 102 | end do | |||
| 103 | close(2) | |||
| 104 | ||||
| 105 | !erf | |||
| 106 | xmin=-4. | |||
| 107 | xmax=4. | |||
| 108 | xstep=(xmax-xmin)/dble(npoints) | |||
| 109 | open(2,file='erf.dat') | |||
| 110 | do i=1,npoints | |||
| 111 | x=xmin+i*xstep | |||
| 112 | y=erf(x) | |||
| 113 | write(2,'(2e22.14)') x,y | |||
| 114 | end do | |||
| 115 | close(2) | |||
| 116 | ||||
| 117 | ! gamma | |||
| 118 | xmin=-3. | |||
| 119 | xmax=7. | |||
| 120 | xstep=(xmax-xmin)/2000. | |||
| 121 | open(2,file='gamma.dat') | |||
| 122 | do i=1,2000 | |||
| 123 | x=xmin+i*xstep | |||
| 124 | if ((abs(x-nint(x)) >= 1d-6) .or. x>0. )then | |||
| 125 | y=gamma(x) | |||
| 126 | write(2,'(2e22.14)') x,y | |||
| 127 | end if | |||
| 128 | end do | |||
| 129 | close(2) | |||
| 130 | ||||
| 131 | ! 1/gamma | |||
| 132 | xmin=-3. | |||
| 133 | xmax=7. | |||
| 134 | xstep=(xmax-xmin)/dble(npoints) | |||
| 135 | open(2,file='gamr.dat') | |||
| 136 | do i=1,npoints | |||
| 137 | x=xmin+i*xstep | |||
| 138 | y=gamr(x) | |||
| 139 | write(2,'(2e22.14)') x,y | |||
| 140 | end do | |||
| 141 | close(2) | |||
| 142 | ||||
| 143 | ! ei | |||
| 144 | xmin=0. | |||
| 145 | xmax=1. | |||
| 146 | xstep=(xmax-xmin)/dble(npoints) | |||
| 147 | open(2,file='ei.dat') | |||
| 148 | do i=1,npoints | |||
| 149 | x=xmin+i*xstep | |||
| 150 | y=ei(x) | |||
| 151 | write(2,'(2e22.14)') x,y | |||
| 152 | end do | |||
| 153 | close(2) |