00001 subroutine sourceterm_MoC_CF_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, bvxdf, bvydf, bvzdf
00005 use def_matter, only : emd, omef, jomef_int
00006 use def_matter_parameter, only : ber, radi
00007 use def_vector_phi, only : vec_phif
00008 implicit none
00009 real(long), pointer :: souvec(:,:,:,:)
00010 real(long) :: vphif(3)
00011 real(long) :: emdfc, rhofc, prefc, hhfc, ene, utfc, oterm, rjj
00012 real(long) :: psifc, alpfc
00013 real(long) :: bvxdfc, bvydfc, bvzdfc
00014 real(long) :: omefc, jomef_intfc
00015 integer :: ii, irf, itf, ipf
00016
00017
00018
00019
00020 do ii = 1, 3
00021 do ipf = 0, npf
00022 do itf = 0, ntf
00023 do irf = 0, nrf
00024
00025 psifc = psif(irf,itf,ipf)
00026 alpfc = alphf(irf,itf,ipf)
00027 bvxdfc = bvxdf(irf,itf,ipf)
00028 bvydfc = bvydf(irf,itf,ipf)
00029 bvzdfc = bvzdf(irf,itf,ipf)
00030 emdfc = emd(irf,itf,ipf)
00031 omefc = omef(irf,itf,ipf)
00032 jomef_intfc = jomef_int(irf,itf,ipf)
00033 if (irf.eq.nrf) then
00034 emdfc = 0.0d0
00035 end if
00036 call peos_q2hprho(emdfc, hhfc, prefc, rhofc, ene)
00037 utfc = hhfc/ber*exp(jomef_intfc)
00038 vphif(1) = vec_phif(irf,itf,ipf,1)
00039 vphif(2) = vec_phif(irf,itf,ipf,2)
00040 vphif(3) = vec_phif(irf,itf,ipf,3)
00041 oterm = 0.0d0
00042 if (ii == 1) oterm = bvxdfc + omefc*vphif(1)
00043 if (ii == 2) oterm = bvydfc + omefc*vphif(2)
00044 if (ii == 3) oterm = bvzdfc + omefc*vphif(3)
00045 rjj = hhfc*rhofc*alpfc*utfc**2*psifc**4*oterm
00046
00047 souvec(irf,itf,ipf,ii) = radi**2*16.0d0*pi*alpfc*rjj
00048 end do
00049 end do
00050 end do
00051 end do
00052
00053 end subroutine sourceterm_MoC_CF_drot_SFC