00001 subroutine violation_gridpoint_MoC_CF_peos_spin(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 use def_velocity_rot
00012 use make_array_3d
00013 use make_array_4d
00014 use interface_interpo_linear_type0
00015 use interface_grgrad_gridpoint
00016 use interface_grgrad_gridpoint_bhex
00017 use interface_grgrad_4th_gridpoint
00018 use interface_grgrad_4th_gridpoint_bhex
00019 use interface_grgrad_midpoint_r3rd_nsbh
00020 use interface_grgrad_midpoint_r3rd_type0_ns
00021 use interface_grgrad_midpoint_r3rd_type0_bh
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 wxgc = wxspg(irg,itg,ipg)
00217 wygc = wyspg(irg,itg,ipg)
00218 wzgc = wzspg(irg,itg,ipg)
00219 afnc2inv = alpgc/fnc2gc
00220
00221 dxafn = grad2x(irg,itg,ipg)
00222 dyafn = grad2y(irg,itg,ipg)
00223 dzafn = grad2z(irg,itg,ipg)
00224 tfkax = tfkij_grid(irg,itg,ipg,ii,1)
00225 tfkay = tfkij_grid(irg,itg,ipg,ii,2)
00226 tfkaz = tfkij_grid(irg,itg,ipg,ii,3)
00227
00228 zfac = 1.0d0
00229 if (emdgc <= 1.0d-15) then
00230 emdgc = 1.0d-15
00231 zfac = 0.0d0
00232 end if
00233 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00234
00235 vphig(1) = vec_phig(irg,itg,ipg,1)
00236 vphig(2) = vec_phig(irg,itg,ipg,2)
00237 vphig(3) = vec_phig(irg,itg,ipg,3)
00238 ovdgc(1) = bvxdgc + ome*vphig(1)
00239 ovdgc(2) = bvydgc + ome*vphig(2)
00240 ovdgc(3) = bvzdgc + ome*vphig(3)
00241 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00242 psigc4 = psigc**4
00243 psigcp = psigc**confpow
00244 alpgc2 = alpgc**2
00245
00246 dvep2 = (vepxgc**2 + vepygc**2 + vepzgc**2)/psigc4
00247 wdvep = (wxgc*vepxgc + wygc*vepygc + wzgc*vepzgc)*psigcp
00248 w2 = psigc4*(wxgc*wxgc + wygc*wygc + wzgc*wzgc)*psigcp**2.0d0
00249
00250 wterm = wdvep + w2
00251 uih2 = dvep2 + 2.0d0*wdvep + w2
00252
00253 if ( (lam*lam + 4.0d0*alpgc2*wterm)<0.0d0 ) then
00254 write(6,*) "hut imaginary....exiting"
00255 stop
00256 end if
00257 hut = (lam + sqrt(lam*lam + 4.0d0*alpgc2*wterm))/(2.0d0*alpgc2)
00258
00259 utgc = hut/hhgc
00260
00261 oterm = 0.0d0
00262 if (ii == 1) oterm = vepxgc/psigc4 + psigcp*wxgc
00263 if (ii == 2) oterm = vepygc/psigc4 + psigcp*wygc
00264 if (ii == 3) oterm = vepzgc/psigc4 + psigcp*wzgc
00265
00266 rjj = rhogc*alpgc*utgc*oterm
00267
00268 MoC_vio(irg,itg,ipg,ii) = - 2.0d0*afnc2inv &
00269 & *(tfkax*dxafn + tfkay*dyafn + tfkaz*dzafn) &
00270 & - san*ddivBeta(irg,itg,ipg,ii) &
00271 & + radi**2*16.0d0*pi*alpgc*psigc4*rjj*zfac &
00272 & - Lapla_beta(irg,itg,ipg,ii)
00273 MoC_vio(irg,itg,ipg,ii) = MoC_vio(irg,itg,ipg,ii)/(2.0d0*alpgc*psigc**4)
00274
00275 end do
00276 end do
00277 end do
00278 end do
00279
00280 deallocate(fnc2)
00281 deallocate(grad2x)
00282 deallocate(grad2y)
00283 deallocate(grad2z)
00284 deallocate(divBeta)
00285
00286 deallocate(dbvxddx)
00287 deallocate(dbvxddy)
00288 deallocate(dbvxddz)
00289
00290 deallocate(dbvyddx)
00291 deallocate(dbvyddy)
00292 deallocate(dbvyddz)
00293
00294 deallocate(dbvzddx)
00295 deallocate(dbvzddy)
00296 deallocate(dbvzddz)
00297
00298 deallocate(Lapla_beta)
00299 deallocate(ddivBeta)
00300
00301 end subroutine violation_gridpoint_MoC_CF_peos_spin