00001 subroutine source_ang_mom_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, rs, vep, vepxf, vepyf, vepzf
00005 use def_metric_on_SFC_CF
00006 use def_matter_parameter
00007 use def_metric, only : tfkijkij, psi, alph, &
00008 bvxd, bvyd, bvzd
00009 use coordinate_grav_r, only : rg
00010 use trigonometry_grav_theta, only : sinthg, costhg
00011 use trigonometry_grav_phi, only : sinphig, cosphig
00012 use def_vector_phi, only : vec_phif
00013 use make_array_3d
00014 use interface_flgrad_4th_gridpoint
00015 use interface_flgrad_2nd_gridpoint
00016 use interface_interpo_gr2fl
00017 implicit none
00018 real(long), pointer :: souf(:,:,:)
00019 integer :: ir,it,ip
00020 real(long) :: emdw, alphw, psiw, rhow, prew, hhw, utw, ene
00021 real(long) :: rjjx, rjjy, rjjz, rjjphi
00022 real(long) :: zfac, small = 1.0d-15
00023 real(long) :: vphif(1:3)
00024 real(long) :: otermx, otermy, otermz, bvxufw, bvyufw, bvzufw
00025 real(long) :: dxvep, dyvep, dzvep, lam, alphw2
00026
00027 do ip = 0, npf
00028 do it = 0, ntf
00029 do ir = 0, nrf
00030 emdw = emd(ir,it,ip)
00031 if (emdw <= small) emdw = small
00032 psiw = psif(ir,it,ip)
00033 alphw = alphf(ir,it,ip)
00034 bvxufw = bvxdf(ir,it,ip)
00035 bvyufw = bvydf(ir,it,ip)
00036 bvzufw = bvzdf(ir,it,ip)
00037 call peos_q2hprho(emdw, hhw, prew, rhow, ene)
00038
00039 vphif(1) = vec_phif(ir,it,ip,1)
00040 vphif(2) = vec_phif(ir,it,ip,2)
00041 vphif(3) = vec_phif(ir,it,ip,3)
00042 otermx = bvxufw + ome*vphif(1)
00043 otermy = bvyufw + ome*vphif(2)
00044 otermz = bvzufw + ome*vphif(3)
00045 dxvep = vepxf(ir,it,ip)
00046 dyvep = vepyf(ir,it,ip)
00047 dzvep = vepzf(ir,it,ip)
00048
00049 alphw2 = alphw**2
00050 lam = ber + otermx*dxvep + otermy*dyvep + otermz*dzvep
00051 utw = lam/alphw2/hhw
00052
00053 zfac = 1.0d0
00054 if (emdw <= small) zfac = 0.0d0
00055 rjjx = hhw*rhow*alphw*utw**2*psiw**4*otermx
00056 rjjy = hhw*rhow*alphw*utw**2*psiw**4*otermy
00057 rjjz = hhw*rhow*alphw*utw**2*psiw**4*otermz
00058
00059 rjjphi = rjjx*vphif(1) + rjjy*vphif(2) + rjjz*vphif(3)
00060 souf(ir,it,ip) = rjjphi*psiw**6*zfac
00061
00062 end do
00063 end do
00064 end do
00065
00066 end subroutine source_ang_mom_peos_irrot