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