00001 include '../Module/phys_constant.f90'
00002 include '../Module/def_matter.f90'
00003 include '../Module/def_matter_parameter.f90'
00004 include '../Module/def_quantities.f90'
00005 include '../Module/grid_parameter.f90'
00006 include '../Module/coordinate_grav_r.f90'
00007 include '../Module/coordinate_grav_phi.f90'
00008 include '../Module/coordinate_grav_theta.f90'
00009 include '../Module/coordinate_grav_extended.f90'
00010 include '../Module/make_array_1d.f90'
00011 include '../Module/make_array_2d.f90'
00012 include '../Module/make_array_3d.f90'
00013 include '../Module/make_array_4d.f90'
00014 include '../Module/make_array_5d.f90'
00015 include '../Module/trigonometry_grav_theta.f90'
00016 include '../Module/trigonometry_grav_phi.f90'
00017
00018 include '../Module_interface/interface_grgrad_4th_gridpoint_bhex.f90'
00019 include '../Subroutine/grgrad_4th_gridpoint_bhex.f90'
00020 include '../Module_interface/interface_grgrad_4th_gridpoint.f90'
00021 include '../Subroutine/grgrad_4th_gridpoint.f90'
00022
00023 include '.././Subroutine/grgrad_4th.f90'
00024 include '.././Function/dfdx_4th.f90'
00025
00026
00027 program main
00028 implicit none
00029 call coordinate_patch_kit_grav
00030 call fncdiff
00031 end program main
00032 subroutine coordinate_patch_kit_grav
00033 use grid_parameter
00034 use coordinate_grav_r
00035 use coordinate_grav_phi
00036 use coordinate_grav_theta
00037 use coordinate_grav_extended
00038 use trigonometry_grav_theta
00039 use trigonometry_grav_phi
00040 implicit none
00041
00042 call read_parameter
00043 call grid_r
00044 call grid_theta
00045 call trig_grav_theta
00046 call grid_phi
00047 call allocate_trig_grav_mphi
00048 call trig_grav_phi
00049 call grid_extended
00050 end subroutine coordinate_patch_kit_grav
00051
00052 subroutine fncdiff
00053 use grid_parameter
00054 use coordinate_grav_r
00055 use coordinate_grav_phi
00056 use coordinate_grav_theta
00057 use coordinate_grav_extended
00058 use trigonometry_grav_theta
00059 use trigonometry_grav_phi
00060 use make_array_3d
00061 use interface_grgrad_4th_gridpoint_bhex
00062 implicit none
00063 real(8), pointer :: fnc(:,:,:)
00064 real(8) :: x, y, z, dfdx, dfdy, dfdz
00065 real(8) :: df1, df2, df3, e1, e2, e3, error, small = 1.0d-14
00066 integer :: irg, itg, ipg
00067
00068 call alloc_array3d(fnc,0,nrg,0,ntg,0,npg)
00069 do irg = 0, 30
00070 do itg = 0, ntg
00071 do ipg = 0, npg
00072 x = rg(irg)*sinthg(itg)*cosphig(ipg)
00073 y = rg(irg)*sinthg(itg)*sinphig(ipg)
00074 z = rg(irg)*costhg(itg)
00075 fnc(irg,itg,ipg) = ((x**4 + 1)*y + y**3)*dcos(z)
00076 end do
00077 end do
00078 end do
00079
00080 do ipg = 0, npg
00081 do itg = 0, ntg
00082 do irg = 0, 5
00083
00084 x = rg(irg)*sinthg(itg)*cosphig(ipg)
00085 y = rg(irg)*sinthg(itg)*sinphig(ipg)
00086 z = rg(irg)*costhg(itg)
00087
00088 call grgrad_4th_gridpoint_bhex(fnc,dfdx,dfdy,dfdz,irg,itg,ipg)
00089
00090 write(6,*) irg,itg,ipg
00091 write(6,20) x,y,z
00092 write(6,20) dfdx,dfdy,dfdz
00093
00094 df1 = 4*x**3*y*Cos(z)
00095 df2 = (1 + x**4 + 3*y**2)*Cos(z)
00096 df3 = -(((1 + x**4)*y + y**3)*Sin(z))
00097
00098 e1 = 0.0d0
00099 e2 = 0.0d0
00100 e3 = 0.0d0
00101 error = 0.0d0
00102 if (dabs(df1)+dabs(dfdx).ge.small) &
00103 e1 = dabs(df1-dfdx)/(dabs(df1)+dabs(dfdx))
00104 if (dabs(df2)+dabs(dfdy).ge.small) &
00105 e2 = dabs(df2-dfdy)/(dabs(df2)+dabs(dfdz))
00106 if (dabs(df3)+dabs(dfdz).ge.small) &
00107 e3 = dabs(df3-dfdz)/(dabs(df3)+dabs(dfdy))
00108 error = dmax1(e1,e2,e3)
00109 write(6,20) df1,df2,df3
00110 write(6,20) e1,e2,e3,error
00111 end do
00112 end do
00113 end do
00114
00115 20 format(1p,6e12.4)
00116 end subroutine fncdiff