00001 subroutine source_ang_mom_WL(soug,souf)
00002 use phys_constant, only : long
00003 use grid_parameter, only : nrg, ntg, npg, nrf, ntf, npf
00004 use coordinate_grav_r, only : rg, hrg
00005 use trigonometry_grav_theta, only : sinthg, costhg, hsinthg, hcosthg
00006 use trigonometry_grav_phi, only : sinphig, cosphig, hsinphig, hcosphig
00007 use def_matter, only : emdg, emd, rs
00008 use def_matter_parameter
00009 use def_metric, only : psi, alph, bvxd, bvyd, bvzd, tfkij, tfkijkij
00010 use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu, &
00011 & hxxd, hxyd, hxzd, hyyd, hyzd, hzzd
00012 use def_metric_on_SFC_WL
00013 use def_dvphi
00014 use make_array_3d
00015 use interface_interpo_gr2fl
00016 use interface_interpo_linear_type0
00017 use interface_grgrad1g_midpoint
00018 use def_vector_phi, only : hvec_phig, vec_phif
00019 implicit none
00020 real(long), pointer :: soug(:,:,:), souf(:,:,:)
00021 integer :: ir,it,ip
00022 real(long) :: emdw, alphw, psiw, rhow, prew, hhw, utw, ene
00023 real(long) :: rjjx, rjjy, rjjz, rjjphi
00024 real(long) :: zfac, small = 1.0d-15
00025 real(long) :: vphif(1:3)
00026 real(long) :: otermx, otermy, otermz, bvxdfw, bvydfw, bvzdfw
00027 real(long) :: hhxxdf, hhxydf, hhxzdf, hhyxdf, hhyydf, hhyzdf,
00028 hhzxdf, hhzydf, hhzzdf
00029 real(long) :: hxxuc, hxyuc, hxzuc, hyyuc, hyzuc, hzzuc
00030 real(long) :: gamu(3,3)
00031 real(long) :: aijvpp, aij(1:3,1:3), vphig(1:3), grad1(1:3),
00032 dhu(1:3,1:3,1:3), psigc
00033 integer :: ipg, itg, irg, ia, ib
00034
00035 dphiu(1:3,1:3) = 0.0d0
00036 dphiu(1,2) =-1.0d0
00037 dphiu(2,1) = 1.0d0
00038
00039 do ipg = 1, npg
00040 do itg = 1, ntg
00041 do irg = 1, nrg
00042 call interpo_linear_type0(hxxuc,hxxu,irg,itg,ipg)
00043 call interpo_linear_type0(hxyuc,hxyu,irg,itg,ipg)
00044 call interpo_linear_type0(hxzuc,hxzu,irg,itg,ipg)
00045 call interpo_linear_type0(hyyuc,hyyu,irg,itg,ipg)
00046 call interpo_linear_type0(hyzuc,hyzu,irg,itg,ipg)
00047 call interpo_linear_type0(hzzuc,hzzu,irg,itg,ipg)
00048 gamu(1,1) = hxxuc + 1.0d0
00049 gamu(1,2) = hxyuc
00050 gamu(1,3) = hxzuc
00051 gamu(2,2) = hyyuc + 1.0d0
00052 gamu(2,3) = hyzuc
00053 gamu(3,3) = hzzuc + 1.0d0
00054 gamu(2,1) = gamu(1,2)
00055 gamu(3,1) = gamu(1,3)
00056 gamu(3,2) = gamu(2,3)
00057 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00058 aij(1:3,1:3) = tfkij(irg,itg,ipg,1:3,1:3)
00059 vphig(1) = hvec_phig(irg,itg,ipg,1)
00060 vphig(2) = hvec_phig(irg,itg,ipg,2)
00061 vphig(3) = hvec_phig(irg,itg,ipg,3)
00062 call grgrad1g_midpoint(hxxu,grad1,irg,itg,ipg)
00063 dhu(1,1,1:3) = grad1(1:3)
00064 call grgrad1g_midpoint(hxyu,grad1,irg,itg,ipg)
00065 dhu(1,2,1:3) = grad1(1:3)
00066 dhu(2,1,1:3) = grad1(1:3)
00067 call grgrad1g_midpoint(hxzu,grad1,irg,itg,ipg)
00068 dhu(1,3,1:3) = grad1(1:3)
00069 dhu(3,1,1:3) = grad1(1:3)
00070 call grgrad1g_midpoint(hyyu,grad1,irg,itg,ipg)
00071 dhu(2,2,1:3) = grad1(1:3)
00072 call grgrad1g_midpoint(hyzu,grad1,irg,itg,ipg)
00073 dhu(2,3,1:3) = grad1(1:3)
00074 dhu(3,2,1:3) = grad1(1:3)
00075 call grgrad1g_midpoint(hzzu,grad1,irg,itg,ipg)
00076 dhu(3,3,1:3) = grad1(1:3)
00077 aijvpp = 0.0d0
00078 do ib = 1, 3
00079 do ia = 1, 3
00080 aijvpp = aijvpp - 0.5d0*( aij(ia,ib)*vphig(1)*dhu(ia,ib,1) &
00081 & + aij(ia,ib)*vphig(2)*dhu(ia,ib,2) &
00082 & + aij(ia,ib)*vphig(3)*dhu(ia,ib,3) ) &
00083 & + aij(ia,ib)*gamu(ia,1)*dphiu(ib,1) &
00084 & + aij(ia,ib)*gamu(ia,2)*dphiu(ib,2) &
00085 & + aij(ia,ib)*gamu(ia,3)*dphiu(ib,3)
00086 end do
00087 end do
00088 soug(irg,itg,ipg) = aijvpp*psigc**6
00089 end do
00090 end do
00091 end do
00092
00093 do ip = 0, npf
00094 do it = 0, ntf
00095 do ir = 0, nrf
00096 emdw = emd(ir,it,ip)
00097 if (emdw <= small) emdw = small
00098 psiw = psif(ir,it,ip)
00099 alphw = alphf(ir,it,ip)
00100 bvxdfw = bvxdf(ir,it,ip)
00101 bvydfw = bvydf(ir,it,ip)
00102 bvzdfw = bvzdf(ir,it,ip)
00103 call peos_q2hprho(emdw, hhw, prew, rhow, ene)
00104
00105 utw = hhw/ber
00106
00107 vphif(1) = vec_phif(ir,it,ip,1)
00108 vphif(2) = vec_phif(ir,it,ip,2)
00109 vphif(3) = vec_phif(ir,it,ip,3)
00110
00111 hhxxdf = hxxdf(ir,it,ip)
00112 hhxydf = hxydf(ir,it,ip)
00113 hhxzdf = hxzdf(ir,it,ip)
00114 hhyydf = hyydf(ir,it,ip)
00115 hhyzdf = hyzdf(ir,it,ip)
00116 hhzzdf = hzzdf(ir,it,ip)
00117 hhyxdf = hhxydf
00118 hhzxdf = hhxzdf
00119 hhzydf = hhyzdf
00120
00121 otermx = bvxdfw + ome*vphif(1) &
00122 & + hhxxdf*ome*vphif(1) &
00123 & + hhxydf*ome*vphif(2) &
00124 & + hhxzdf*ome*vphif(3)
00125 otermy = bvydfw + ome*vphif(2) &
00126 & + hhyxdf*ome*vphif(1) &
00127 & + hhyydf*ome*vphif(2) &
00128 & + hhyzdf*ome*vphif(3)
00129 otermz = bvzdfw + ome*vphif(3) &
00130 & + hhzxdf*ome*vphif(1) &
00131 & + hhzydf*ome*vphif(2) &
00132 & + hhzzdf*ome*vphif(3)
00133
00134 zfac = 1.0d0
00135 if (emdw <= small) zfac = 0.0d0
00136 rjjx = hhw*rhow*alphw*utw**2*psiw**4*otermx
00137 rjjy = hhw*rhow*alphw*utw**2*psiw**4*otermy
00138 rjjz = hhw*rhow*alphw*utw**2*psiw**4*otermz
00139
00140 rjjphi = rjjx*vphif(1) + rjjy*vphif(2) + rjjz*vphif(3)
00141 souf(ir,it,ip) = rjjphi*psiw**6*zfac
00142
00143 end do
00144 end do
00145 end do
00146
00147 end subroutine source_ang_mom_WL