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