00001 subroutine sourceterm_insurf_asympto_interpo_from_mpt &
00002 & (impt_bin,impt_apt,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
00006 use grid_points_asymptotic_patch, only : ra, tha, phia
00007 use trigonometry_grav_theta, only : hsinthg
00008 use trigonometry_grav_phi, only : hcosmpg
00009 use make_array_2d
00010 use interface_interpo_patch_to_active_patch_mpt
00011 use interface_interpo_linear_type0_2Dsurf
00012
00013 implicit none
00014 real(long), pointer :: fnc(:,:,:), sou_in(:,:), dsou_in(:,:)
00015 real(long), pointer :: fnc_insurf(:,:), dfnc_insurf(:,:)
00016 real(long) :: rc, thc, phic
00017 integer, intent(in) :: impt_bin, impt_apt
00018 real(long) :: deriv, val, r5(5), fr5(5), rv
00019 integer :: irg, itg, ipg, ir0, irg0, ii
00020 real(long), external :: dfdx_4th
00021
00022 call alloc_array2d(fnc_insurf, 0, ntg, 0, npg)
00023 call alloc_array2d(dfnc_insurf, 0, ntg, 0, npg)
00024
00025 do ipg = 0, npg
00026 do itg = 0, ntg
00027 irg = 0
00028 ir0 = irg - 2
00029 do ii = 1, 5
00030 irg0 = ir0 + ii - 1
00031 rc = ra(irg0,itg,ipg)
00032 thc = tha(irg0,itg,ipg)
00033 phic = phia(irg0,itg,ipg)
00034 call interpo_patch_to_active_patch_mpt(fnc,val,rc,thc,phic)
00035 r5(ii) = rgex(irg0)
00036 fr5(ii) = val
00037 end do
00038 rv = rgex(irg)
00039 deriv = dfdx_4th(r5,fr5,rv)
00040 fnc_insurf(itg,ipg) = fr5(3)
00041 dfnc_insurf(itg,ipg) = deriv
00042 end do
00043 end do
00044
00045
00046 do ipg = 1, npg
00047 do itg = 1, ntg
00048 call interpo_linear_type0_2Dsurf(val,fnc_insurf,itg,ipg)
00049 sou_in(itg,ipg) = val
00050
00051 call interpo_linear_type0_2Dsurf(val,dfnc_insurf,itg,ipg)
00052 dsou_in(itg,ipg) = val
00053 end do
00054 end do
00055
00056 deallocate(fnc_insurf)
00057 deallocate(dfnc_insurf)
00058 end subroutine sourceterm_insurf_asympto_interpo_from_mpt