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