00001 subroutine violation_gridpoint_HaC_CF_peos_spin(HaC_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_matter, only : emdg, omeg, jomeg_int, vepxg, vepyg, vepzg
00007 use def_matter_parameter, only : ome, ber, radi
00008 use def_velocity_rot
00009 use def_vector_phi
00010 use make_array_3d
00011 use interface_grgrad_4th_gridpoint
00012 use interface_grgrad_4th_gridpoint_bhex
00013 use interface_grgrad_midpoint_r3rd_nsbh
00014 use interface_grgrad_midpoint_r3rd_type0_ns
00015 use interface_grgrad_midpoint_r3rd_type0_bh
00016 use interface_grgrad_gridpoint
00017 use interface_grgrad_gridpoint_bhex
00018 use interface_interpo_linear_type0
00019 implicit none
00020 real(long), pointer :: HaC_vio(:,:,:), Lapla_psi(:,:,:)
00021 real(long), pointer :: dpsidx(:,:,:), dpsidy(:,:,:), dpsidz(:,:,:)
00022 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, rhoHc, zfac
00023 real(long) :: psigc, alpgc, alpsigc, aijaij, ene, jomeg_intgc, omegc
00024 real(long) :: vphig(3), ovdgc(3), bvxdgc, bvydgc, bvzdgc
00025 real(long) :: vepxgc, vepygc, vepzgc, lam
00026 real(long) :: wxgc, wygc, wzgc, psigc4, psigcp, alpgc2, dvep2, wdvep, w2,
00027 wterm, uih2, hut
00028 real(long) :: dxafn,dyafn,dzafn
00029 real(long) :: d2psidxx,d2psidxy,d2psidxz
00030 real(long) :: d2psidyx,d2psidyy,d2psidyz
00031 real(long) :: d2psidzx,d2psidzy,d2psidzz
00032 integer :: irg, itg, ipg
00033 character(len=2), intent(in) :: cobj
00034
00035 call alloc_array3d(Lapla_psi,0,nrg,0,ntg,0,npg)
00036 call alloc_array3d(dpsidx ,0,nrg,0,ntg,0,npg)
00037 call alloc_array3d(dpsidy ,0,nrg,0,ntg,0,npg)
00038 call alloc_array3d(dpsidz ,0,nrg,0,ntg,0,npg)
00039
00040 if (cobj=='ns') then
00041
00042 do ipg = 0, npg
00043 do itg = 0, ntg
00044 do irg = 0, nrg
00045 call grgrad_4th_gridpoint(psi,dxafn,dyafn,dzafn,irg,itg,ipg)
00046 dpsidx(irg,itg,ipg) = dxafn
00047 dpsidy(irg,itg,ipg) = dyafn
00048 dpsidz(irg,itg,ipg) = dzafn
00049 end do
00050 end do
00051 end do
00052
00053 do ipg = 0, npg
00054 do itg = 0, ntg
00055 do irg = 0, nrg
00056 call grgrad_4th_gridpoint(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00057 call grgrad_4th_gridpoint(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00058 call grgrad_4th_gridpoint(dpsidz,d2psidzx,d2psidzy,d2psidzz,irg,itg,ipg)
00059 Lapla_psi(irg,itg,ipg) = d2psidxx + d2psidyy + d2psidzz
00060 end do
00061 end do
00062 end do
00063
00064 else
00065
00066 do ipg = 0, npg
00067 do itg = 0, ntg
00068 do irg = 0, nrg
00069 call grgrad_4th_gridpoint_bhex(psi,dxafn,dyafn,dzafn,irg,itg,ipg)
00070 dpsidx(irg,itg,ipg) = dxafn
00071 dpsidy(irg,itg,ipg) = dyafn
00072 dpsidz(irg,itg,ipg) = dzafn
00073 end do
00074 end do
00075 end do
00076
00077 do ipg = 0, npg
00078 do itg = 0, ntg
00079 do irg = 0, nrg
00080 call grgrad_4th_gridpoint_bhex(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00081 call grgrad_4th_gridpoint_bhex(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00082 call grgrad_4th_gridpoint_bhex(dpsidz,d2psidzx,d2psidzy,d2psidzz,irg,itg,ipg)
00083 Lapla_psi(irg,itg,ipg) = d2psidxx + d2psidyy + d2psidzz
00084 end do
00085 end do
00086 end do
00087
00088 end if
00089
00090 do ipg = 0, npg
00091 do itg = 0, ntg
00092 do irg = 0, nrg
00093 emdgc = emdg(irg,itg,ipg)
00094 vepxgc = vepxg(irg,itg,ipg)
00095 vepygc = vepyg(irg,itg,ipg)
00096 vepzgc = vepzg(irg,itg,ipg)
00097 omegc = omeg(irg,itg,ipg)
00098 jomeg_intgc = jomeg_int(irg,itg,ipg)
00099 psigc = psi(irg,itg,ipg)
00100 alpgc = alph(irg,itg,ipg)
00101 bvxdgc = bvxd(irg,itg,ipg)
00102 bvydgc = bvyd(irg,itg,ipg)
00103 bvzdgc = bvzd(irg,itg,ipg)
00104 wxgc = wxspg(irg,itg,ipg)
00105 wygc = wyspg(irg,itg,ipg)
00106 wzgc = wzspg(irg,itg,ipg)
00107
00108 aijaij = tfkijkij_grid(irg,itg,ipg)
00109 zfac = 1.0d0
00110 if (emdgc <= 1.0d-15) then
00111 emdgc = 1.0d-15
00112 zfac = 0.0d0
00113 end if
00114 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00115
00116 vphig(1) = vec_phig(irg,itg,ipg,1)
00117 vphig(2) = vec_phig(irg,itg,ipg,2)
00118 vphig(3) = vec_phig(irg,itg,ipg,3)
00119 ovdgc(1) = bvxdgc + ome*vphig(1)
00120 ovdgc(2) = bvydgc + ome*vphig(2)
00121 ovdgc(3) = bvzdgc + ome*vphig(3)
00122 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00123 psigc4 = psigc**4
00124 psigcp = psigc**confpow
00125 alpgc2 = alpgc**2
00126
00127 dvep2 = (vepxgc**2 + vepygc**2 + vepzgc**2)/psigc4
00128 wdvep = (wxgc*vepxgc + wygc*vepygc + wzgc*vepzgc)*psigcp
00129 w2 = psigc4*(wxgc*wxgc + wygc*wygc + wzgc*wzgc)*psigcp**2.0d0
00130
00131 wterm = wdvep + w2
00132 uih2 = dvep2 + 2.0d0*wdvep + w2
00133
00134 if ( (lam*lam + 4.0d0*alpgc2*wterm)<0.0d0 ) then
00135 write(6,*) "hut imaginary....exiting"
00136 stop
00137 end if
00138 hut = (lam + sqrt(lam*lam + 4.0d0*alpgc2*wterm))/(2.0d0*alpgc2)
00139
00140 utgc = hut/hhgc
00141
00142 rhoHc = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00143
00144 HaC_vio(irg,itg,ipg) = - 0.125d0*psigc**5*aijaij &
00145 & - radi**2*2.0d0*pi*psigc**5*rhoHc*zfac - Lapla_psi(irg,itg,ipg)
00146 HaC_vio(irg,itg,ipg) = 8.0d0*HaC_vio(irg,itg,ipg)/(psigc**5)
00147 end do
00148 end do
00149 end do
00150
00151 deallocate(dpsidx)
00152 deallocate(dpsidy)
00153 deallocate(dpsidz)
00154 deallocate(Lapla_psi)
00155
00156 end subroutine violation_gridpoint_HaC_CF_peos_spin
00157