00001 subroutine sourceterm_MoC_peos(souvec,sou)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use coordinate_grav_r, only : hrg, rg
00005 use trigonometry_grav_theta, only : hsinthg, hcosthg
00006 use trigonometry_grav_phi, only : hsinphig, hcosphig
00007 use def_metric, only : psi, alph, tfkijkij, bvxd, bvyd, bvzd, tfkij
00008 use def_matter, only : emdg, omeg, jomeg_int
00009 use def_matter_parameter, only : ome, ber, radi
00010 use def_vector_x, only : hvec_xg
00011 use def_vector_phi, only : hvec_phig
00012 use make_array_3d
00013 use interface_grgrad_midpoint
00014 use interface_interpo_linear_type0
00015 implicit none
00016 real(long), pointer :: sou(:,:,:)
00017 real(long), pointer :: souvec(:,:,:,:)
00018 real(long), pointer :: fnc2(:,:,:)
00019 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00020 real(long) :: vphig(3), xxx, yyy, zzz, san, san2
00021 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, oterm, zfac, rjj
00022 real(long) :: psigc, alpgc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00023 real(long) :: bvxdgc, bvydgc, bvzdgc, tfkax, tfkay, tfkaz, ene
00024 real(long) :: omegc, jomeg_intgc
00025 integer :: ii, irg, itg, ipg
00026
00027 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00028 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00029 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00030 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00031
00032 san = 1.0d0/3.0d0
00033 san2= 2.0d0/3.0d0
00034
00035
00036
00037
00038 do ipg = 0, npg
00039 do itg = 0, ntg
00040 do irg = 0, nrg
00041 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alph(irg,itg,ipg)
00042 end do
00043 end do
00044 end do
00045
00046 call grgrad_midpoint(fnc2,grad2x,grad2y,grad2z)
00047
00048 do ii = 1, 3
00049 do ipg = 1, npg
00050 do itg = 1, ntg
00051 do irg = 1, nrg
00052 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00053 call interpo_linear_type0(omegc,omeg,irg,itg,ipg)
00054 call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00055 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00056 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00057 call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00058 call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00059 call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00060 call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00061 afnc2inv = alpgc/fnc2gc
00062 dxafn = grad2x(irg,itg,ipg)
00063 dyafn = grad2y(irg,itg,ipg)
00064 dzafn = grad2z(irg,itg,ipg)
00065 tfkax = tfkij(irg,itg,ipg,ii,1)
00066 tfkay = tfkij(irg,itg,ipg,ii,2)
00067 tfkaz = tfkij(irg,itg,ipg,ii,3)
00068
00069 zfac = 1.0d0
00070 if (emdgc <= 1.0d-15) then
00071 emdgc = 1.0d-15
00072 zfac = 0.0d0
00073 end if
00074 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00075 utgc = hhgc/ber*exp(jomeg_intgc)
00076 vphig(1) = hvec_phig(irg,itg,ipg,1)
00077 vphig(2) = hvec_phig(irg,itg,ipg,2)
00078 vphig(3) = hvec_phig(irg,itg,ipg,3)
00079 oterm = 0.0d0
00080 if (ii == 1) oterm = bvxdgc + omegc*vphig(1)
00081 if (ii == 2) oterm = bvydgc + omegc*vphig(2)
00082 if (ii == 3) oterm = bvzdgc + omegc*vphig(3)
00083
00084 rjj = hhgc*rhogc*alpgc*utgc**2*psigc**4*oterm
00085
00086 souvec(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00087 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00088 & + radi**2*16.0d0*pi*alpgc*rjj*zfac
00089 end do
00090 end do
00091 end do
00092 end do
00093
00094
00095
00096 do ipg = 1, npg
00097 do itg = 1, ntg
00098 do irg = 1, nrg
00099 xxx = hvec_xg(irg,itg,ipg,1)
00100 yyy = hvec_xg(irg,itg,ipg,2)
00101 zzz = hvec_xg(irg,itg,ipg,3)
00102 sou(irg,itg,ipg) = xxx*souvec(irg,itg,ipg,1) &
00103 & + yyy*souvec(irg,itg,ipg,2) &
00104 & + zzz*souvec(irg,itg,ipg,3)
00105 end do
00106 end do
00107 end do
00108
00109 deallocate(fnc2)
00110 deallocate(grad2x)
00111 deallocate(grad2y)
00112 deallocate(grad2z)
00113 end subroutine sourceterm_MoC_peos