00001 subroutine source_rest_mass_peos_irrot(souf)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg, nrf, ntf, npf
00004 use def_matter, only : emdg, emd, vep, vepxf, vepyf, vepzf
00005 use def_metric_on_SFC_CF
00006 use def_vector_phi, only : hvec_phif, vec_phif
00007 use def_matter_parameter, only : radi, ber, ome
00008 use def_metric, only : tfkijkij, psi, alph
00009 use make_array_3d
00010 use interface_flgrad_4th_gridpoint
00011 use interface_flgrad_2nd_gridpoint
00012 use interface_interpo_gr2fl
00013 implicit none
00014 real(long),pointer :: souf(:,:,:)
00015 real(long) :: psiwm6
00016 real(long) :: emdw, alphw, psiw, rhow, hhw, utw, rhoHw, esseS
00017 real(long) :: zfac, small = 1.0d-15
00018 real(long) :: otermx, otermy, otermz, prew, ene
00019 real(long) :: dxvep, dyvep, dzvep, lam, alphw2, ovdfc(3)
00020 integer :: ir,it,ip
00021
00022 do ip = 0, npf
00023 do it = 0, ntf
00024 do ir = 0, nrf
00025 emdw = emd(ir,it,ip)
00026 if (emdw <= small) emdw = small
00027 psiw = psif(ir,it,ip)
00028 alphw = alphf(ir,it,ip)
00029 call peos_q2hprho(emdw, hhw, prew, rhow, ene)
00030
00031 ovdfc(1) = bvxdf(ir,it,ip) + ome*vec_phif(ir,it,ip,1)
00032 ovdfc(2) = bvydf(ir,it,ip) + ome*vec_phif(ir,it,ip,2)
00033 ovdfc(3) = bvzdf(ir,it,ip) + ome*vec_phif(ir,it,ip,3)
00034 dxvep = vepxf(ir,it,ip)
00035 dyvep = vepyf(ir,it,ip)
00036 dzvep = vepzf(ir,it,ip)
00037
00038
00039 alphw2 = alphw**2
00040 lam = ber + ovdfc(1)*dxvep + ovdfc(2)*dyvep + ovdfc(3)*dzvep
00041 utw = lam/alphw2/hhw
00042
00043 souf(ir,it,ip) = rhow*alphw*utw*psiw**6
00044 end do
00045 end do
00046 end do
00047
00048 end subroutine source_rest_mass_peos_irrot