00001 subroutine source_vep_surface_WL_peos(vpot_v,surp)
00002 use grid_parameter, only : nrf, ntf, npf
00003 use def_metric_on_SFC, only : hxxdf, hxydf, hxzdf, hyydf, hyzdf, hzzdf
00004 use def_matter, only : rs
00005 use def_velocity_potential, only : vep
00006 use interface_interpo_linear_surface_type0
00007 use interface_flgrad_midpoint_surface_type0
00008 implicit none
00009 real(long), pointer :: vpot_v(:,:,:), surp(:,:)
00010 real(long) :: hhxxu, hhxyu, hhxzu, hhyxu, hhyyu, hhyzu,
00011 hhzxu, hhzyu, hhzzu
00012 real(long) :: gamxxu, gamxyu, gamxzu, gamyxu, gamyyu, gamyzu,
00013 gamzxu, gamzyu, gamzzu
00014 real(long) :: dxvep, dyvep, dzvep
00015 integer :: ir, it, ip
00016
00017 ir = nrf
00018 do ip = 1, npf
00019 do it = 1, ntf
00020 call interpo_linear_surface_type0(hhxxu,hxxuf,ir,it,ip)
00021 call interpo_linear_surface_type0(hhxyu,hxyuf,ir,it,ip)
00022 call interpo_linear_surface_type0(hhxzu,hxzuf,ir,it,ip)
00023 call interpo_linear_surface_type0(hhyyu,hyyuf,ir,it,ip)
00024 call interpo_linear_surface_type0(hhyzu,hyzuf,ir,it,ip)
00025 call interpo_linear_surface_type0(hhzzu,hzzuf,ir,it,ip)
00026 hhyxu = hhxyu
00027 hhzxu = hhxzu
00028 hhzyu = hhyzu
00029 gamxxu = hhxxu + 1.0d0
00030 gamxyu = hhxyu
00031 gamxzu = hhxzu
00032 gamyyu = hhyyu + 1.0d0
00033 gamyzu = hhyzu
00034 gamzzu = hhzzu + 1.0d0
00035 gamyxu = gamxyu
00036 gamzxu = gamxzu
00037 gamzyu = gamyzu
00038
00039 call flgrad_midpoint_surface_type0(vpot_v,dxvep,dyvep,dzvep,it,ip)
00040 call calc_surface_normal_midpoint(rs,rnx,rny,rnz,it,ip)
00041
00042 surp(it,ip) = (gamxxu*dxvep + gamxyu*dyvep + gamxzu*dzvep)*rnx &
00043 & + (gamyxu*dxvep + gamyyu*dyvep + gamyzu*dzvep)*rny &
00044 & + (gamzxu*dxvep + gamzyu*dyvep + gamzzu*dzvep)*rnz
00045
00046 end do
00047 end do
00048
00049 end subroutine source_vep_surface_WL_peos