00001 subroutine sourceterm_outsurf_interpo_from_asympto_mpt &
00002 & (impt_bin,impt_apt,fnc,sou_out,dsou_out)
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_binary_in_asympto, only : rb_a, thb_a, phib_a
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_out(:,:), dsou_out(:,:)
00015 real(long), pointer :: fnc_outsurf(:,:), dfnc_outsurf(:,:)
00016 integer, intent(in) :: impt_bin, impt_apt
00017 real(long) :: deriv, val, r5(5), fr5(5), rv, rc, thc, phic
00018 integer :: irg, itg, ipg, ir0, irg0, ii
00019 real(long), external :: dfdx_4th
00020
00021 call alloc_array2d(fnc_outsurf, 0, ntg, 0, npg)
00022 call alloc_array2d(dfnc_outsurf, 0, ntg, 0, npg)
00023
00024 do ipg = 0, npg
00025 do itg = 0, ntg
00026 irg = nrg
00027 ir0 = irg - 2
00028 do ii = 1, 5
00029 irg0 = ir0 + ii - 1
00030 rc = rb_a(irg0,itg,ipg)
00031 thc = thb_a(irg0,itg,ipg)
00032 phic = phib_a(irg0,itg,ipg)
00033 call interpo_patch_to_active_patch_mpt(fnc,val,rc,thc,phic)
00034 r5(ii) = rgex(irg0)
00035 fr5(ii) = val
00036 end do
00037 rv = rgex(irg)
00038 deriv = dfdx_4th(r5,fr5,rv)
00039 fnc_outsurf(itg,ipg) = fr5(3)
00040 dfnc_outsurf(itg,ipg) = deriv
00041 end do
00042 end do
00043
00044
00045 do ipg = 1, npg
00046 do itg = 1, ntg
00047 call interpo_linear_type0_2Dsurf(val,fnc_outsurf,itg,ipg)
00048 sou_out(itg,ipg) = val
00049
00050 call interpo_linear_type0_2Dsurf(val,dfnc_outsurf,itg,ipg)
00051 dsou_out(itg,ipg) = val
00052 end do
00053 end do
00054
00055 deallocate(fnc_outsurf)
00056 deallocate(dfnc_outsurf)
00057 end subroutine sourceterm_outsurf_interpo_from_asympto_mpt