00001 subroutine violation_midpoint_MoC_CF_peos_irrot(MoC_vio,cobj)
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
00011 use make_array_3d
00012 use make_array_4d
00013 use interface_interpo_linear_type0
00014 use interface_grgrad_4th_gridpoint
00015 use interface_grgrad_4th_gridpoint_bhex
00016 use interface_grgrad_midpoint_r3rd_nsbh
00017 use interface_grgrad_midpoint_r3rd_type0_ns
00018 use interface_grgrad_midpoint_r3rd_type0_bh
00019 use interface_dadbscalar_3rd2nd_type0
00020
00021 implicit none
00022 real(long), pointer :: MoC_vio(:,:,:,:), ddivBeta(:,:,:,:), Lapla_beta(:,:,:,:)
00023 real(long), pointer :: fnc2(:,:,:), divBeta(:,:,:)
00024 real(long), pointer :: grad2x(:,:,:), grad2y(:,:,:), grad2z(:,:,:)
00025 real(long), pointer :: dbvxddx(:,:,:), dbvxddy(:,:,:), dbvxddz(:,:,:)
00026 real(long), pointer :: dbvyddx(:,:,:), dbvyddy(:,:,:), dbvyddz(:,:,:)
00027 real(long), pointer :: dbvzddx(:,:,:), dbvzddy(:,:,:), dbvzddz(:,:,:)
00028
00029 real(long) :: d2bxdxx, d2bxdxy, d2bxdxz
00030 real(long) :: d2bxdyx, d2bxdyy, d2bxdyz
00031 real(long) :: d2bxdzx, d2bxdzy, d2bxdzz
00032 real(long) :: d2bydxx, d2bydxy, d2bydxz
00033 real(long) :: d2bydyx, d2bydyy, d2bydyz
00034 real(long) :: d2bydzx, d2bydzy, d2bydzz
00035 real(long) :: d2bzdxx, d2bzdxy, d2bzdxz
00036 real(long) :: d2bzdyx, d2bzdyy, d2bzdyz
00037 real(long) :: d2bzdzx, d2bzdzy, d2bzdzz
00038
00039 real(long) :: vphig(3), san, san2, ovdgc(3), lam
00040 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, oterm, zfac, rjj
00041 real(long) :: psigc, alpgc, fnc2gc, afnc2inv, dxafn, dyafn, dzafn
00042 real(long) :: bvxdgc, bvydgc, bvzdgc, tfkax, tfkay, tfkaz, ene
00043 real(long) :: omegc, jomeg_intgc
00044
00045 real(long) :: ovxu, ovyu, ovzu, vepxgc, vepygc, vepzgc
00046 real(long) :: dbxdx,dbxdy,dbxdz, dbydx,dbydy,dbydz, dbzdx,dbzdy,dbzdz
00047 integer :: ii, irg, itg, ipg, impt
00048 real(long) :: wxgc, wygc, wzgc, psigc4, psigcp, alpgc2, dvep2, wdvep, w2,
00049 wterm, uih2, hut
00050 character(len=2), intent(in) :: cobj
00051
00052 call alloc_array3d(fnc2 ,0,nrg,0,ntg,0,npg)
00053 call alloc_array3d(grad2x ,1,nrg,1,ntg,1,npg)
00054 call alloc_array3d(grad2y ,1,nrg,1,ntg,1,npg)
00055 call alloc_array3d(grad2z ,1,nrg,1,ntg,1,npg)
00056 call alloc_array3d(divBeta,0,nrg,0,ntg,0,npg)
00057
00058 call alloc_array3d(dbvxddx,0,nrg,0,ntg,0,npg)
00059 call alloc_array3d(dbvxddy,0,nrg,0,ntg,0,npg)
00060 call alloc_array3d(dbvxddz,0,nrg,0,ntg,0,npg)
00061
00062 call alloc_array3d(dbvyddx,0,nrg,0,ntg,0,npg)
00063 call alloc_array3d(dbvyddy,0,nrg,0,ntg,0,npg)
00064 call alloc_array3d(dbvyddz,0,nrg,0,ntg,0,npg)
00065
00066 call alloc_array3d(dbvzddx,0,nrg,0,ntg,0,npg)
00067 call alloc_array3d(dbvzddy,0,nrg,0,ntg,0,npg)
00068 call alloc_array3d(dbvzddz,0,nrg,0,ntg,0,npg)
00069
00070 call alloc_array4d(Lapla_beta,1,nrg,1,ntg,1,npg,1,3)
00071 call alloc_array4d(ddivBeta ,1,nrg,1,ntg,1,npg,1,3)
00072
00073 san = 1.0d0/3.0d0
00074 san2= 2.0d0/3.0d0
00075
00076
00077
00078
00079 if (cobj=='ns') then
00080
00081 do ipg = 0, npg
00082 do itg = 0, ntg
00083 do irg = 0, nrg
00084 psigc = psi(irg,itg,ipg)
00085 alpgc = alph(irg,itg,ipg)
00086 if (alpgc.le.0.0d0) alpgc = 1.0d-20
00087 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alpgc
00088 call grgrad_4th_gridpoint(bvxd,dbxdx,dbxdy,dbxdz,irg,itg,ipg)
00089 call grgrad_4th_gridpoint(bvyd,dbydx,dbydy,dbydz,irg,itg,ipg)
00090 call grgrad_4th_gridpoint(bvzd,dbzdx,dbzdy,dbzdz,irg,itg,ipg)
00091
00092 divBeta(irg,itg,ipg) = dbxdx + dbydy + dbzdz
00093
00094 dbvxddx(irg,itg,ipg) = dbxdx
00095 dbvxddy(irg,itg,ipg) = dbxdy
00096 dbvxddz(irg,itg,ipg) = dbxdz
00097
00098 dbvyddx(irg,itg,ipg) = dbydx
00099 dbvyddy(irg,itg,ipg) = dbydy
00100 dbvyddz(irg,itg,ipg) = dbydz
00101
00102 dbvzddx(irg,itg,ipg) = dbzdx
00103 dbvzddy(irg,itg,ipg) = dbzdy
00104 dbvzddz(irg,itg,ipg) = dbzdz
00105 end do
00106 end do
00107 end do
00108
00109 call grgrad_midpoint_r3rd_nsbh(fnc2,grad2x,grad2y,grad2z,'ns')
00110
00111 do ipg = 1, npg
00112 do itg = 1, ntg
00113 do irg = 1, nrg
00114 call grgrad_midpoint_r3rd_type0_ns(divBeta,dxafn,dyafn,dzafn,irg,itg,ipg)
00115 ddivBeta(irg,itg,ipg,1) = dxafn
00116 ddivBeta(irg,itg,ipg,2) = dyafn
00117 ddivBeta(irg,itg,ipg,3) = dzafn
00118
00119 call grgrad_midpoint_r3rd_type0_ns(dbvxddx,d2bxdxx,d2bxdxy,d2bxdxz,irg,itg,ipg)
00120 call grgrad_midpoint_r3rd_type0_ns(dbvxddy,d2bxdyx,d2bxdyy,d2bxdyz,irg,itg,ipg)
00121 call grgrad_midpoint_r3rd_type0_ns(dbvxddz,d2bxdzx,d2bxdzy,d2bxdzz,irg,itg,ipg)
00122 Lapla_beta(irg,itg,ipg,1) = d2bxdxx + d2bxdyy + d2bxdzz
00123
00124 call grgrad_midpoint_r3rd_type0_ns(dbvyddx,d2bydxx,d2bydxy,d2bydxz,irg,itg,ipg)
00125 call grgrad_midpoint_r3rd_type0_ns(dbvyddy,d2bydyx,d2bydyy,d2bydyz,irg,itg,ipg)
00126 call grgrad_midpoint_r3rd_type0_ns(dbvyddz,d2bydzx,d2bydzy,d2bydzz,irg,itg,ipg)
00127 Lapla_beta(irg,itg,ipg,2) = d2bydxx + d2bydyy + d2bydzz
00128
00129 call grgrad_midpoint_r3rd_type0_ns(dbvzddx,d2bzdxx,d2bzdxy,d2bzdxz,irg,itg,ipg)
00130 call grgrad_midpoint_r3rd_type0_ns(dbvzddy,d2bzdyx,d2bzdyy,d2bzdyz,irg,itg,ipg)
00131 call grgrad_midpoint_r3rd_type0_ns(dbvzddz,d2bzdzx,d2bzdzy,d2bzdzz,irg,itg,ipg)
00132 Lapla_beta(irg,itg,ipg,3) = d2bzdxx + d2bzdyy + d2bzdzz
00133 end do
00134 end do
00135 end do
00136
00137 else
00138
00139 do ipg = 0, npg
00140 do itg = 0, ntg
00141 do irg = 0, nrg
00142 psigc = psi(irg,itg,ipg)
00143 alpgc = alph(irg,itg,ipg)
00144 if (alpgc.le.0.0d0) alpgc = 1.0d-20
00145 fnc2(irg,itg,ipg) = psi(irg,itg,ipg)**6/alpgc
00146 call grgrad_4th_gridpoint_bhex(bvxd,dbxdx,dbxdy,dbxdz,irg,itg,ipg)
00147 call grgrad_4th_gridpoint_bhex(bvyd,dbydx,dbydy,dbydz,irg,itg,ipg)
00148 call grgrad_4th_gridpoint_bhex(bvzd,dbzdx,dbzdy,dbzdz,irg,itg,ipg)
00149
00150 divBeta(irg,itg,ipg) = dbxdx + dbydy + dbzdz
00151
00152 dbvxddx(irg,itg,ipg) = dbxdx
00153 dbvxddy(irg,itg,ipg) = dbxdy
00154 dbvxddz(irg,itg,ipg) = dbxdz
00155
00156 dbvyddx(irg,itg,ipg) = dbydx
00157 dbvyddy(irg,itg,ipg) = dbydy
00158 dbvyddz(irg,itg,ipg) = dbydz
00159
00160 dbvzddx(irg,itg,ipg) = dbzdx
00161 dbvzddy(irg,itg,ipg) = dbzdy
00162 dbvzddz(irg,itg,ipg) = dbzdz
00163 end do
00164 end do
00165 end do
00166
00167 call grgrad_midpoint_r3rd_nsbh(fnc2,grad2x,grad2y,grad2z,'bh')
00168
00169 do ipg = 1, npg
00170 do itg = 1, ntg
00171 do irg = 1, nrg
00172 call grgrad_midpoint_r3rd_type0_bh(divBeta,dxafn,dyafn,dzafn,irg,itg,ipg)
00173 ddivBeta(irg,itg,ipg,1) = dxafn
00174 ddivBeta(irg,itg,ipg,2) = dyafn
00175 ddivBeta(irg,itg,ipg,3) = dzafn
00176
00177 call grgrad_midpoint_r3rd_type0_bh(dbvxddx,d2bxdxx,d2bxdxy,d2bxdxz,irg,itg,ipg)
00178 call grgrad_midpoint_r3rd_type0_bh(dbvxddy,d2bxdyx,d2bxdyy,d2bxdyz,irg,itg,ipg)
00179 call grgrad_midpoint_r3rd_type0_bh(dbvxddz,d2bxdzx,d2bxdzy,d2bxdzz,irg,itg,ipg)
00180 Lapla_beta(irg,itg,ipg,1) = d2bxdxx + d2bxdyy + d2bxdzz
00181
00182 call grgrad_midpoint_r3rd_type0_bh(dbvyddx,d2bydxx,d2bydxy,d2bydxz,irg,itg,ipg)
00183 call grgrad_midpoint_r3rd_type0_bh(dbvyddy,d2bydyx,d2bydyy,d2bydyz,irg,itg,ipg)
00184 call grgrad_midpoint_r3rd_type0_bh(dbvyddz,d2bydzx,d2bydzy,d2bydzz,irg,itg,ipg)
00185 Lapla_beta(irg,itg,ipg,2) = d2bydxx + d2bydyy + d2bydzz
00186
00187 call grgrad_midpoint_r3rd_type0_bh(dbvzddx,d2bzdxx,d2bzdxy,d2bzdxz,irg,itg,ipg)
00188 call grgrad_midpoint_r3rd_type0_bh(dbvzddy,d2bzdyx,d2bzdyy,d2bzdyz,irg,itg,ipg)
00189 call grgrad_midpoint_r3rd_type0_bh(dbvzddz,d2bzdzx,d2bzdzy,d2bzdzz,irg,itg,ipg)
00190 Lapla_beta(irg,itg,ipg,3) = d2bzdxx + d2bzdyy + d2bzdzz
00191 end do
00192 end do
00193 end do
00194
00195 end if
00196
00197 do ii = 1, 3
00198 do ipg = 1, npg
00199 do itg = 1, ntg
00200 do irg = 1, nrg
00201 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00202 call interpo_linear_type0(vepxgc ,vepxg ,irg,itg,ipg)
00203 call interpo_linear_type0(vepygc ,vepyg ,irg,itg,ipg)
00204 call interpo_linear_type0(vepzgc ,vepzg ,irg,itg,ipg)
00205 call interpo_linear_type0(omegc,omeg,irg,itg,ipg)
00206 call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00207 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00208 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00209 call interpo_linear_type0(fnc2gc,fnc2,irg,itg,ipg)
00210 call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00211 call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00212 call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00213 afnc2inv = alpgc/fnc2gc
00214
00215 dxafn = grad2x(irg,itg,ipg)
00216 dyafn = grad2y(irg,itg,ipg)
00217 dzafn = grad2z(irg,itg,ipg)
00218 tfkax = tfkij(irg,itg,ipg,ii,1)
00219 tfkay = tfkij(irg,itg,ipg,ii,2)
00220 tfkaz = tfkij(irg,itg,ipg,ii,3)
00221
00222 zfac = 1.0d0
00223 if (emdgc <= 1.0d-15) then
00224 emdgc = 1.0d-15
00225 zfac = 0.0d0
00226 end if
00227 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00228
00229 vphig(1) = hvec_phig(irg,itg,ipg,1)
00230 vphig(2) = hvec_phig(irg,itg,ipg,2)
00231 vphig(3) = hvec_phig(irg,itg,ipg,3)
00232
00233 ovdgc(1) = bvxdgc + ome*vphig(1)
00234 ovdgc(2) = bvydgc + ome*vphig(2)
00235 ovdgc(3) = bvzdgc + ome*vphig(3)
00236
00237 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00238 utgc = lam/hhgc/alpgc/alpgc
00239
00240 oterm = 0.0d0
00241 if (ii == 1) oterm = vepxgc
00242 if (ii == 2) oterm = vepygc
00243 if (ii == 3) oterm = vepzgc
00244
00245 rjj = rhogc*alpgc*utgc*oterm
00246
00247 MoC_vio(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00248 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00249 & - san*ddivBeta(irg,itg,ipg,ii) &
00250 & + radi**2*16.0d0*pi*alpgc*rjj*zfac &
00251 & - Lapla_beta(irg,itg,ipg,ii)
00252 MoC_vio(irg,itg,ipg,ii) = MoC_vio(irg,itg,ipg,ii)/(2.0d0*alpgc*psigc**4)
00253
00254 end do
00255 end do
00256 end do
00257 end do
00258
00259 deallocate(fnc2)
00260 deallocate(grad2x)
00261 deallocate(grad2y)
00262 deallocate(grad2z)
00263 deallocate(divBeta)
00264
00265 deallocate(dbvxddx)
00266 deallocate(dbvxddy)
00267 deallocate(dbvxddz)
00268
00269 deallocate(dbvyddx)
00270 deallocate(dbvyddy)
00271 deallocate(dbvyddz)
00272
00273 deallocate(dbvzddx)
00274 deallocate(dbvzddy)
00275 deallocate(dbvzddz)
00276
00277 deallocate(Lapla_beta)
00278 deallocate(ddivBeta)
00279
00280 end subroutine violation_midpoint_MoC_CF_peos_irrot