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, ntgeq
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 : emd, rs, utf, omef
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_SEM_tensor, only : jmd
00013 use def_metric_on_SFC_CF
00014 use def_metric_on_SFC_WL
00015 use def_dvphi
00016 use make_array_3d
00017 use interface_interpo_gr2fl
00018 use interface_interpo_linear_type0
00019 use interface_grgrad1g_midpoint
00020 use def_vector_phi, only : hvec_phig, vec_phif
00021 implicit none
00022 real(long), pointer :: soug(:,:,:), souf(:,:,:)
00023 integer :: ir,it,ip
00024 real(long) :: emdw, alphw, psiw, rhow, prew, hhw, utw, omew, ene
00025 real(long) :: rjjx, rjjy, rjjz, rjjphi
00026 real(long) :: zfac, small = 1.0d-15
00027 real(long) :: vphif(1:3)
00028 real(long) :: otermx, otermy, otermz, bvxdfw, bvydfw, bvzdfw
00029 real(long) :: hhxxdf, hhxydf, hhxzdf, hhyxdf, hhyydf, hhyzdf,
00030 hhzxdf, hhzydf, hhzzdf
00031 real(long) :: hxxuc, hxyuc, hxzuc, hyyuc, hyzuc, hzzuc
00032 real(long) :: gamu(3,3)
00033 real(long) :: aijvpp, aij(1:3,1:3), vphig(1:3), grad1(1:3),
00034 dhu(1:3,1:3,1:3), psigc
00035 integer :: ipg, itg, irg, ia, ib
00036
00037 dphiu(1:3,1:3) = 0.0d0
00038 dphiu(1,2) =-1.0d0
00039 dphiu(2,1) = 1.0d0
00040
00041 do ipg = 1, npg
00042 do itg = 1, ntg
00043 do irg = 1, nrg
00044 call interpo_linear_type0(hxxuc,hxxu,irg,itg,ipg)
00045 call interpo_linear_type0(hxyuc,hxyu,irg,itg,ipg)
00046 call interpo_linear_type0(hxzuc,hxzu,irg,itg,ipg)
00047 call interpo_linear_type0(hyyuc,hyyu,irg,itg,ipg)
00048 call interpo_linear_type0(hyzuc,hyzu,irg,itg,ipg)
00049 call interpo_linear_type0(hzzuc,hzzu,irg,itg,ipg)
00050 gamu(1,1) = hxxuc + 1.0d0
00051 gamu(1,2) = hxyuc
00052 gamu(1,3) = hxzuc
00053 gamu(2,2) = hyyuc + 1.0d0
00054 gamu(2,3) = hyzuc
00055 gamu(3,3) = hzzuc + 1.0d0
00056 gamu(2,1) = gamu(1,2)
00057 gamu(3,1) = gamu(1,3)
00058 gamu(3,2) = gamu(2,3)
00059 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00060 aij(1:3,1:3) = tfkij(irg,itg,ipg,1:3,1:3)
00061 vphig(1) = hvec_phig(irg,itg,ipg,1)
00062 vphig(2) = hvec_phig(irg,itg,ipg,2)
00063 vphig(3) = hvec_phig(irg,itg,ipg,3)
00064 call grgrad1g_midpoint(hxxu,grad1,irg,itg,ipg)
00065 dhu(1,1,1:3) = grad1(1:3)
00066 call grgrad1g_midpoint(hxyu,grad1,irg,itg,ipg)
00067 dhu(1,2,1:3) = grad1(1:3)
00068 dhu(2,1,1:3) = grad1(1:3)
00069 call grgrad1g_midpoint(hxzu,grad1,irg,itg,ipg)
00070 dhu(1,3,1:3) = grad1(1:3)
00071 dhu(3,1,1:3) = grad1(1:3)
00072 call grgrad1g_midpoint(hyyu,grad1,irg,itg,ipg)
00073 dhu(2,2,1:3) = grad1(1:3)
00074 call grgrad1g_midpoint(hyzu,grad1,irg,itg,ipg)
00075 dhu(2,3,1:3) = grad1(1:3)
00076 dhu(3,2,1:3) = grad1(1:3)
00077 call grgrad1g_midpoint(hzzu,grad1,irg,itg,ipg)
00078 dhu(3,3,1:3) = grad1(1:3)
00079 aijvpp = 0.0d0
00080 do ib = 1, 3
00081 do ia = 1, 3
00082 aijvpp = aijvpp - 0.5d0*( aij(ia,ib)*vphig(1)*dhu(ia,ib,1) &
00083 & + aij(ia,ib)*vphig(2)*dhu(ia,ib,2) &
00084 & + aij(ia,ib)*vphig(3)*dhu(ia,ib,3) ) &
00085 & + aij(ia,ib)*gamu(ia,1)*dphiu(ib,1) &
00086 & + aij(ia,ib)*gamu(ia,2)*dphiu(ib,2) &
00087 & + aij(ia,ib)*gamu(ia,3)*dphiu(ib,3)
00088 end do
00089 end do
00090 soug(irg,itg,ipg) = aijvpp*psigc**6
00091 end do
00092 end do
00093 end do
00094
00095 do ip = 0, npf
00096 do it = 0, ntf
00097 do ir = 0, nrf
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 psiw = psif(ir,it,ip)
00147 vphif(1) = vec_phif(ir,it,ip,1)
00148 vphif(2) = vec_phif(ir,it,ip,2)
00149 vphif(3) = vec_phif(ir,it,ip,3)
00150 rjjx = jmd(ir,it,ip,1)
00151 rjjy = jmd(ir,it,ip,2)
00152 rjjz = jmd(ir,it,ip,3)
00153
00154 rjjphi = rjjx*vphif(1) + rjjy*vphif(2) + rjjz*vphif(3)
00155 souf(ir,it,ip) = rjjphi*psiw**6
00156
00157 end do
00158 end do
00159 end do
00160
00161 end subroutine source_ang_mom_WL