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
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
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