00001 subroutine source_adm_mass_WL(soug,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
00005   use def_matter_parameter, only : radi, ber
00006   use def_metric, only     : psi, alph, tfkijkij
00007   use def_metric_hij, only : hxxu, hxyu, hxzu, hyyu, hyzu, hzzu
00008   use def_metric_on_SFC_WL, only : psif, alphf
00009   use def_ricci_tensor, only : rab
00010   use make_array_3d
00011   use interface_interpo_gr2fl
00012   use interface_interpo_linear_type0
00013   implicit none
00014   real(long), pointer :: soug(:,:,:)
00015   real(long), pointer :: souf(:,:,:)
00016   integer     ::   irg, itg, ipg, irf, itf, ipf, ia, ib
00017   real(long)  ::   psiwm7
00018   real(long)  ::   emdw, alphw, psiw, rhow, prew, hhw, utw, rhoHw
00019   real(long)  ::   epsilonw, alutw
00020   real(long)  ::   zfac, small = 1.0d-15
00021   real(long)  ::   rics, ric(1:3,1:3), gamu(1:3,1:3), 
00022                   hxxuc, hxyuc, hxzuc, hyyuc, hyzuc, hzzuc
00023 
00024   do ipg = 1, npg
00025     do itg = 1, ntg
00026       do irg = 1, nrg
00027         call interpo_linear_type0(psiw,psi,irg,itg,ipg)
00028         call interpo_linear_type0(hxxuc,hxxu,irg,itg,ipg)
00029         call interpo_linear_type0(hxyuc,hxyu,irg,itg,ipg)
00030         call interpo_linear_type0(hxzuc,hxzu,irg,itg,ipg)
00031         call interpo_linear_type0(hyyuc,hyyu,irg,itg,ipg)
00032         call interpo_linear_type0(hyzuc,hyzu,irg,itg,ipg)
00033         call interpo_linear_type0(hzzuc,hzzu,irg,itg,ipg)
00034         gamu(1,1) = hxxuc + 1.0d0
00035         gamu(1,2) = hxyuc
00036         gamu(1,3) = hxzuc
00037         gamu(2,2) = hyyuc + 1.0d0
00038         gamu(2,3) = hyzuc
00039         gamu(3,3) = hzzuc + 1.0d0
00040         gamu(2,1) = gamu(1,2)
00041         gamu(3,1) = gamu(1,3)
00042         gamu(3,2) = gamu(2,3)
00043         ric(1,1) = rab(irg,itg,ipg,1)
00044         ric(1,2) = rab(irg,itg,ipg,2)
00045         ric(1,3) = rab(irg,itg,ipg,3)
00046         ric(2,2) = rab(irg,itg,ipg,4)
00047         ric(2,3) = rab(irg,itg,ipg,5)
00048         ric(3,3) = rab(irg,itg,ipg,6)
00049         ric(2,1) = ric(1,2)
00050         ric(3,1) = ric(3,1)
00051         ric(3,2) = ric(2,3)
00052         rics = 0.0d0
00053         do ib = 1, 3
00054           do ia = 1, 3
00055             rics = rics + gamu(ia,ib)*ric(ia,ib)
00056           end do
00057         end do
00058         soug(irg,itg,ipg) = - 0.125d0*psiw*rics &
00059         &                   + 0.125d0*psiw**5*tfkijkij(irg,itg,ipg)
00060       end do
00061     end do
00062   end do
00063 
00064   do ipf = 0, npf
00065     do itf = 0, ntf
00066       do irf = 0, nrf
00067         emdw = emd(irf,itf,ipf)
00068         if (emdw <= small) emdw = small
00069         psiw = psif(irf,itf,ipf)
00070         alphw = alphf(irf,itf,ipf)
00071         call peos_q2hprho(emdw, hhw, prew, rhow, epsilonw)
00072         utw = hhw/ber
00073 
00074         alutw = alphw*utw
00075 
00076 
00077         souf(irf,itf,ipf) = 2.0d0*pi*psiw**5  &
00078         &  *(epsilonw*alutw**2 + prew*(alutw-1.0d0)*(alutw+1.0d0))
00079       end do
00080     end do
00081   end do
00082 
00083 end subroutine source_adm_mass_WL