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