00001 
00002 subroutine interpo_lag4th_2Dsurf(val,fnc,tv,pv)
00003   use phys_constant, only : long
00004   use grid_parameter, only : ntg, npg
00005   use coordinate_grav_extended
00006   implicit none
00007   real(long), intent(out) :: val
00008   real(long), intent(in)  :: tv, pv
00009   real(long), pointer :: fnc(:,:)
00010   real(long) ::  th4(4), phi4(4), ft4(4), fp4(4)
00011   integer :: itg, ipg, itgex, ipgex
00012   integer :: it0, ip0, itg0 , ipg0, ii, jj, kk
00013   real(long), external :: lagint_4th
00014 
00015   do itg = 0, ntg+1
00016     if (tv.lt.thgex(itg).and.tv.ge.thgex(itg-1)) it0 = itg-2
00017   end do
00018   do ipg = 0, npg+1
00019     if (pv.lt.phigex(ipg).and.pv.ge.phigex(ipg-1)) ip0 = ipg-2
00020   end do
00021 
00022   do ii = 1, 4
00023     itg0 = it0 + ii - 1
00024     ipg0 = ip0 + ii - 1
00025     th4(ii) = thgex(itg0)
00026     phi4(ii) = phigex(ipg0)
00027   end do
00028 
00029   do kk = 1, 4
00030     ipg0 = ip0 + kk - 1
00031     do jj = 1, 4
00032       itg0 = it0 + jj - 1
00033       itgex = itgex_th(itg0)
00034       ipgex = ipgex_th(ipgex_phi(ipg0),itg0)
00035       ft4(jj) = fnc(itgex,ipgex)
00036     end do
00037     fp4(kk) = lagint_4th(th4,ft4,tv)
00038   end do
00039   val = lagint_4th(phi4,fp4,pv)
00040 
00041 end subroutine interpo_lag4th_2Dsurf