00001 subroutine sourceterm_insurf_asymptotic_patch(impt_bin,impt_apt, &
00002 & fnc,sou_in,dsou_in)
00003 use phys_constant, only : long, nnrg
00004 use grid_parameter, only : nrg, ntg, npg, npgxzm
00005 use coordinate_grav_extended, only : rgex
00006
00007 use trigonometry_grav_theta, only : hsinthg
00008 use trigonometry_grav_phi, only : hcosmpg
00009
00010 use make_array_2d
00011 use interface_interpo_binary_to_asymptotic_patch
00012 use interface_interpo_linear_type0_2Dsurf
00013
00014 implicit none
00015 real(long), pointer :: fnc(:,:,:), sou_in(:,:), dsou_in(:,:)
00016 real(long), pointer :: fnc_insurf(:,:), dfnc_insurf(:,:)
00017 integer, intent(IN) :: impt_bin, impt_apt
00018 real(long) :: deriv, val, r5(5), fr5(5), rv
00019 real(long) :: rgex_apt(-2:nnrg+2)
00020 integer :: irg, itg, ipg, ir0, irg0, ii
00021 integer :: ntg_apt, npg_apt, npgxzm_apt
00022 real(long), external :: dfdx_4th
00023
00024 call copy_grid_parameter_from_mpt(impt_apt)
00025 call copy_coordinate_grav_extended_from_mpt(impt_apt)
00026 ntg_apt = ntg
00027 npg_apt = npg
00028 npgxzm_apt = npgxzm
00029 rgex_apt(-2:nrg+2) = rgex(-2:nrg+2)
00030 call copy_grid_parameter_from_mpt(impt_bin)
00031 call copy_coordinate_grav_extended_from_mpt(impt_bin)
00032
00033 call alloc_array2d(fnc_insurf, 0, ntg_apt, 0, npg_apt)
00034 call alloc_array2d(dfnc_insurf, 0, ntg_apt, 0, npg_apt)
00035
00036 do ipg = 0, npg_apt
00037 do itg = 0, ntg_apt
00038 irg = 0
00039 ir0 = irg - 2
00040 do ii = 1, 5
00041 irg0 = ir0 + ii - 1
00042 call interpo_binary_to_asymptotic_patch(fnc,val,irg0,itg,ipg)
00043 r5(ii) = rgex_apt(irg0)
00044 fr5(ii) = val
00045 end do
00046 rv = rgex_apt(irg)
00047 deriv = dfdx_4th(r5,fr5,rv)
00048 fnc_insurf(itg,ipg) = fr5(3)
00049 dfnc_insurf(itg,ipg) = deriv
00050 end do
00051 end do
00052
00053 do ipg = 1, npg_apt
00054 do itg = 1, ntg_apt
00055
00056
00057 call interpo_linear_type0_2Dsurf(val,fnc_insurf,itg,ipg)
00058 sou_in(itg,ipg) = val
00059
00060 call interpo_linear_type0_2Dsurf(val,dfnc_insurf,itg,ipg)
00061 dsou_in(itg,ipg) = val
00062 end do
00063 end do
00064
00065 deallocate(fnc_insurf)
00066 deallocate(dfnc_insurf)
00067 end subroutine sourceterm_insurf_asymptotic_patch