00001 subroutine sourceterm_trfreeG_drot_SFC(souten)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrf, ntf, npf
00004 use def_metric_on_SFC_CF, only : psif, bvxdf, bvydf, bvzdf
00005 use def_metric_on_SFC_WL, only : hxxdf, hxydf, hxzdf, hyydf, hyzdf, hzzdf, &
00006 & hxxuf, hxyuf, hxzuf, hyyuf, hyzuf, hzzuf
00007
00008 use def_matter, only : emd, omef, jomef_int
00009 use def_matter_parameter, only : ber, radi
00010 use def_vector_phi, only : vec_phif
00011 implicit none
00012 real(long), pointer :: souten(:,:,:,:)
00013 real(long) :: gamu(1:3,1:3), gamd(1:3,1:3)
00014 real(long) :: sab(1:3,1:3), ovd(1:3), vphif(1:3)
00015
00016 real(long) :: emdfc, hhfc, prefc, psifc, rhofc,
00017 san, utfc, omefc, jomef_intfc, &
00018 psifc4, sgam, tfsab, trsab, ene, &
00019 bvxfc, bvyfc, bvzfc
00020 integer :: irf, itf, ipf, ia, ib, ic
00021
00022
00023
00024 san = 1.0d0/3.0d0
00025
00026 do ipf = 0, npf
00027 do itf = 0, ntf
00028 do irf = 0, nrf
00029
00030 gamu(1,1) = hxxuf(irf,itf,ipf) + 1.0d0
00031 gamu(1,2) = hxyuf(irf,itf,ipf)
00032 gamu(1,3) = hxzuf(irf,itf,ipf)
00033 gamu(2,2) = hyyuf(irf,itf,ipf) + 1.0d0
00034 gamu(2,3) = hyzuf(irf,itf,ipf)
00035 gamu(3,3) = hzzuf(irf,itf,ipf) + 1.0d0
00036 gamu(2,1) = gamu(1,2)
00037 gamu(3,1) = gamu(1,3)
00038 gamu(3,2) = gamu(2,3)
00039
00040 gamd(1,1) = hxxdf(irf,itf,ipf) + 1.0d0
00041 gamd(1,2) = hxydf(irf,itf,ipf)
00042 gamd(1,3) = hxzdf(irf,itf,ipf)
00043 gamd(2,2) = hyydf(irf,itf,ipf) + 1.0d0
00044 gamd(2,3) = hyzdf(irf,itf,ipf)
00045 gamd(3,3) = hzzdf(irf,itf,ipf) + 1.0d0
00046 gamd(2,1) = gamd(1,2)
00047 gamd(3,1) = gamd(1,3)
00048 gamd(3,2) = gamd(2,3)
00049
00050 bvxfc = bvxdf(irf,itf,ipf)
00051 bvyfc = bvydf(irf,itf,ipf)
00052 bvzfc = bvzdf(irf,itf,ipf)
00053
00054 psifc = psif(irf,itf,ipf)
00055 psifc4 = psifc**4
00056 emdfc = emd(irf,itf,ipf)
00057 omefc = omef(irf,itf,ipf)
00058 jomef_intfc = jomef_int(irf,itf,ipf)
00059 if (irf.eq.nrf) then
00060 emdfc = 0.0d0
00061 end if
00062 call peos_q2hprho(emdfc,hhfc,prefc,rhofc,ene)
00063 utfc = hhfc/ber*exp(jomef_intfc)
00064 vphif(1) = vec_phif(irf,itf,ipf,1)
00065 vphif(2) = vec_phif(irf,itf,ipf,2)
00066 vphif(3) = vec_phif(irf,itf,ipf,3)
00067
00068 ovd(1) = bvxfc + gamd(1,1)*omefc*vphif(1) &
00069 & + gamd(1,2)*omefc*vphif(2) &
00070 & + gamd(1,3)*omefc*vphif(3)
00071 ovd(2) = bvyfc + gamd(2,1)*omefc*vphif(1) &
00072 & + gamd(2,2)*omefc*vphif(2) &
00073 & + gamd(2,3)*omefc*vphif(3)
00074 ovd(3) = bvzfc + gamd(3,1)*omefc*vphif(1) &
00075 & + gamd(3,2)*omefc*vphif(2) &
00076 & + gamd(3,3)*omefc*vphif(3)
00077
00078 do ic = 1, 6
00079 ia = 1 + ic/4 + ic/6
00080 ib = ic - (ic/4)*2 - ic/6
00081
00082 sab(ia,ib) = hhfc*rhofc*utfc**2*psifc4**2*ovd(ia)*ovd(ib)
00083 end do
00084
00085 sab(2,1) = sab(1,2)
00086 sab(3,1) = sab(1,3)
00087 sab(3,2) = sab(2,3)
00088
00089 trsab = 0.0d0
00090 do ib = 1, 3
00091 do ia = 1, 3
00092 trsab = trsab + gamu(ia,ib) * sab(ia,ib)
00093 end do
00094 end do
00095
00096 do ic = 1, 6
00097 ia = 1 + ic/4 + ic/6
00098 ib = ic - (ic/4)*2 - ic/6
00099 sgam = san*gamd(ia,ib)
00100 tfsab = sab(ia,ib) - sgam*trsab
00101 souten(irf,itf,ipf,ic) = 2.0d0*(- radi**2*8.0d0*pi*tfsab)
00102 end do
00103 end do
00104 end do
00105 end do
00106
00107 end subroutine sourceterm_trfreeG_drot_SFC