00001 subroutine interpo_flsph2flsfc(flsphv,flv)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg, nrf, ntf, npf
00004 use coordinate_grav_r, only : rg
00005 use def_matter, only : rs
00006 use coordinate_grav_extended, only : irgex_r, itgex_r, ipgex_r, rgex
00007 implicit none
00008 real(long), external :: lagint_4th
00009 real(long), pointer :: flsphv(:,:,:), flv(:,:,:)
00010 real(long) :: x(4), f(4)
00011 real(long) :: rrff, small = 1.0d-14
00012 integer :: irg, irf, itf, ipf, ir0, irf0, irg0, itg0, ipg0, ii
00013
00014 flv(0:nrf,0:ntf,0:npf) = 0.0d0
00015
00016 do ipf = 0, npf
00017 do itf = 0, ntf
00018 do irf = 0, nrf
00019 rrff = rs(itf,ipf)*rg(irf)
00020 ir0 = nrf-3
00021 do irg = 1, nrf
00022 if (rrff.le.rg(irg)) then
00023 ir0 = min0(irg-2,nrf-3)
00024 exit
00025 end if
00026 end do
00027 do ii = 1, 4
00028 irf0 = ir0 + ii - 1
00029 irg0 = irgex_r(irf0)
00030 itg0 = itgex_r(itf,irf0)
00031 ipg0 = ipgex_r(ipf,irf0)
00032 x(ii) = rgex(irf0)
00033 f(ii) = flsphv(irg0,itg0,ipg0)
00034 end do
00035 flv(irf,itf,ipf) = lagint_4th(x,f,rrff)
00036 end do
00037 end do
00038 end do
00039
00040 end subroutine interpo_flsph2flsfc