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