00001 subroutine sourceterm_MoC_WL_drot_SFC(souvec)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrf, ntf, npf
00004 use def_metric_on_SFC_CF, only : psif, alphf
00005 use def_metric_on_SFC_WL, only : hxxdf, hxydf, hxzdf, hyydf, hyzdf, hzzdf
00006 use def_matter, only : emd, omef, jomef_int
00007 use def_matter_parameter, only : ber, radi
00008 use def_vector_phi, only: vec_phif
00009 implicit none
00010
00011 real(long), pointer :: souvec(:,:,:,:)
00012 real(long) :: vphif(3)
00013 real(long) :: emdfc, rhofc, prefc, hhfc, ene, utfc, oterm, rjj
00014 real(long) :: psifc, alpfc
00015 real(long) :: hxxdfc, hxydfc, hxzdfc, hyxdfc, hyydfc, hyzdfc,
00016 hzxdfc, hzydfc, hzzdfc
00017 real(long) :: omefc, jomef_intfc
00018 integer :: irf, itf, ipf, ii
00019
00020 do ii = 1, 3
00021 do ipf = 0, npf
00022 do itf = 0, ntf
00023 do irf = 0, nrf
00024
00025 hxxdfc = hxxdf(irf,itf,ipf)
00026 hxydfc = hxydf(irf,itf,ipf)
00027 hxzdfc = hxzdf(irf,itf,ipf)
00028 hyydfc = hyydf(irf,itf,ipf)
00029 hyzdfc = hyzdf(irf,itf,ipf)
00030 hzzdfc = hzzdf(irf,itf,ipf)
00031 hyxdfc = hxydfc
00032 hzxdfc = hxzdfc
00033 hzydfc = hyzdfc
00034 psifc = psif(irf,itf,ipf)
00035 alpfc = alphf(irf,itf,ipf)
00036 emdfc = emd(irf,itf,ipf)
00037 omefc = omef(irf,itf,ipf)
00038 jomef_intfc = jomef_int(irf,itf,ipf)
00039
00040 if (irf.eq.nrf) then
00041 emdfc = 0.0d0
00042 end if
00043 call peos_q2hprho(emdfc, hhfc, prefc, rhofc, ene)
00044 utfc = hhfc/ber*exp(jomef_intfc)
00045 vphif(1) = vec_phif(irf,itf,ipf,1)
00046 vphif(2) = vec_phif(irf,itf,ipf,2)
00047 vphif(3) = vec_phif(irf,itf,ipf,3)
00048 oterm = 0.0d0
00049
00050 if (ii == 1) oterm = hxxdfc*omefc*vphif(1) &
00051 & + hxydfc*omefc*vphif(2) &
00052 & + hxzdfc*omefc*vphif(3)
00053 if (ii == 2) oterm = hyxdfc*omefc*vphif(1) &
00054 & + hyydfc*omefc*vphif(2) &
00055 & + hyzdfc*omefc*vphif(3)
00056 if (ii == 3) oterm = hzxdfc*omefc*vphif(1) &
00057 & + hzydfc*omefc*vphif(2) &
00058 & + hzzdfc*omefc*vphif(3)
00059 rjj = hhfc*rhofc*alpfc*utfc**2*psifc**4*oterm
00060
00061 souvec(irf,itf,ipf,ii) = radi**2*16.0d0*pi*alpfc*rjj
00062
00063 end do
00064 end do
00065 end do
00066 end do
00067
00068 end subroutine sourceterm_MoC_WL_drot_SFC