00001 subroutine sourceterm_MoC_CF_with_divshift_peos_irrot(souvec)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use def_metric
00005 use def_bh_parameter, only : ome_bh
00006 use def_matter, only : emdg, omeg, vepxg, vepyg, vepzg, jomeg_int
00007 use def_matter_parameter, only : ome, ber, radi
00008 use def_vector_x
00009 use def_vector_phi
00010 use make_array_3d
00011 use make_array_4d
00012 use interface_interpo_linear_type0
00013 use interface_grgrad_4th_gridpoint
00014 use interface_grgrad_midpoint_r3rd_nsbh
00015 use interface_grgrad_midpoint_r3rd_type0_ns
00016 use interface_dadbscalar_3rd2nd_type0
00017
00018 implicit none
00019 real(long), pointer :: souvec(:,:,:,:), ddivBeta(:,:,:,:)
00020 real(long), pointer :: fnc2(:,:,:), divBeta(:,:,:), gradtrK(:,:,:,:)
00021 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00022 real(long) :: vphig(3), san, san2, san4, ovdgc(3), lam
00023 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, oterm, zfac, rjj
00024 real(long) :: psigc, alpgc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00025 real(long) :: bvxdgc, bvydgc, bvzdgc, tfkax, tfkay, tfkaz, dtrK, ene
00026 real(long) :: omegc, jomeg_intgc
00027
00028 real(long) :: ovxu, ovyu, ovzu, vepxgc, vepygc, vepzgc
00029 real(long) :: dbxdx,dbxdy,dbxdz, dbydx,dbydy,dbydz, dbzdx,dbzdy,dbzdz
00030 real(long) :: d2bvx(3,3), d2bvy(3,3), d2bvz(3,3)
00031 integer :: ii, irg, itg, ipg, impt
00032
00033 call alloc_array3d(fnc2,0,nrg,0,ntg,0,npg)
00034 call alloc_array3d(grad2x,1,nrg,1,ntg,1,npg)
00035 call alloc_array3d(grad2y,1,nrg,1,ntg,1,npg)
00036 call alloc_array3d(grad2z,1,nrg,1,ntg,1,npg)
00037 call alloc_array3d(divBeta,0,nrg,0,ntg,0,npg)
00038 call alloc_array4d(ddivBeta,1,nrg,1,ntg,1,npg,1,3)
00039 call alloc_array4d(gradtrK,1,nrg,1,ntg,1,npg,1,3)
00040
00041 san = 1.0d0/3.0d0
00042 san2= 2.0d0/3.0d0
00043 san4= 4.0d0/3.0d0
00044
00045
00046
00047
00048 call grgrad_midpoint(trk_grid,grad2x,grad2y,grad2z)
00049 gradtrK(1:nrg,1:ntg,1:npg,1) = grad2x(1:nrg,1:ntg,1:npg)
00050 gradtrK(1:nrg,1:ntg,1:npg,2) = grad2y(1:nrg,1:ntg,1:npg)
00051 gradtrK(1:nrg,1:ntg,1:npg,3) = grad2z(1:nrg,1:ntg,1:npg)
00052
00053 do ipg = 0, npg
00054 do itg = 0, ntg
00055 do irg = 0, nrg
00056
00057
00058 psigc = psi(irg,itg,ipg)
00059 alpgc = alph(irg,itg,ipg)
00060 if (alpgc.le.0.0d0) alpgc = 1.0d-20
00061 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alpgc
00062 call grgrad_4th_gridpoint(bvxd,dbxdx,dbxdy,dbxdz,irg,itg,ipg)
00063 call grgrad_4th_gridpoint(bvyd,dbydx,dbydy,dbydz,irg,itg,ipg)
00064 call grgrad_4th_gridpoint(bvzd,dbzdx,dbzdy,dbzdz,irg,itg,ipg)
00065
00066 divBeta(irg,itg,ipg) = dbxdx + dbydy + dbzdz
00067
00068
00069
00070
00071
00072
00073 end do
00074 end do
00075 end do
00076
00077 call grgrad_midpoint_r3rd_nsbh(fnc2,grad2x,grad2y,grad2z,'ns')
00078
00079 do ipg = 1, npg
00080 do itg = 1, ntg
00081 do irg = 1, nrg
00082 call grgrad_midpoint_r3rd_type0_ns(divBeta,dxafn,dyafn,dzafn,irg,itg,ipg)
00083 ddivBeta(irg,itg,ipg,1) = dxafn
00084 ddivBeta(irg,itg,ipg,2) = dyafn
00085 ddivBeta(irg,itg,ipg,3) = dzafn
00086
00087
00088
00089
00090
00091
00092 end do
00093 end do
00094 end do
00095
00096 do ii = 1, 3
00097 do ipg = 1, npg
00098 do itg = 1, ntg
00099 do irg = 1, nrg
00100 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00101 call interpo_linear_type0(vepxgc ,vepxg ,irg,itg,ipg)
00102 call interpo_linear_type0(vepygc ,vepyg ,irg,itg,ipg)
00103 call interpo_linear_type0(vepzgc ,vepzg ,irg,itg,ipg)
00104 call interpo_linear_type0(omegc,omeg,irg,itg,ipg)
00105 call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00106 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00107 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00108 call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00109 call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00110 call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00111 call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00112 afnc2inv = alpgc/fnc2gc
00113
00114 dxafn = grad2x(irg,itg,ipg)
00115 dyafn = grad2y(irg,itg,ipg)
00116 dzafn = grad2z(irg,itg,ipg)
00117 tfkax = tfkij(irg,itg,ipg,ii,1)
00118 tfkay = tfkij(irg,itg,ipg,ii,2)
00119 tfkaz = tfkij(irg,itg,ipg,ii,3)
00120 dtrK = gradtrK(irg,itg,ipg,ii)
00121
00122 zfac = 1.0d0
00123 if (emdgc <= 1.0d-15) then
00124 emdgc = 1.0d-15
00125 zfac = 0.0d0
00126 end if
00127 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00128
00129 vphig(1) = hvec_phig(irg,itg,ipg,1)
00130 vphig(2) = hvec_phig(irg,itg,ipg,2)
00131 vphig(3) = hvec_phig(irg,itg,ipg,3)
00132
00133 ovdgc(1) = bvxdgc + ome*vphig(1)
00134 ovdgc(2) = bvydgc + ome*vphig(2)
00135 ovdgc(3) = bvzdgc + ome*vphig(3)
00136
00137 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00138 utgc = lam/hhgc/alpgc/alpgc
00139
00140 oterm = 0.0d0
00141 if (ii == 1) oterm = vepxgc
00142 if (ii == 2) oterm = vepygc
00143 if (ii == 3) oterm = vepzgc
00144
00145 rjj = rhogc*alpgc*utgc*oterm
00146
00147 souvec(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00148 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00149 & + san4*alpgc*dtrK &
00150 & - san*ddivBeta(irg,itg,ipg,ii) &
00151 & + radi**2*16.0d0*pi*alpgc*rjj*zfac
00152
00153 end do
00154 end do
00155 end do
00156 end do
00157
00158 deallocate(fnc2)
00159 deallocate(grad2x)
00160 deallocate(grad2y)
00161 deallocate(grad2z)
00162 deallocate(divBeta)
00163 deallocate(ddivBeta)
00164 deallocate(gradtrK)
00165
00166 end subroutine sourceterm_MoC_CF_with_divshift_peos_irrot