00001 subroutine violation_gridpoint_HaC_CF_peos_irrot(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_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_grgrad_gridpoint
00016 use interface_grgrad_gridpoint_bhex
00017 use interface_interpo_linear_type0
00018 implicit none
00019 real(long), pointer :: HaC_vio(:,:,:), Lapla_psi(:,:,:)
00020 real(long), pointer :: dpsidx(:,:,:), dpsidy(:,:,:), dpsidz(:,:,:)
00021 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, rhoHc, zfac
00022 real(long) :: psigc, alpgc, alpsigc, aijaij, ene, omegc, jomeg_intgc
00023 real(long) :: vphig(3), ovdgc(3), bvxdgc, bvydgc, bvzdgc
00024 real(long) :: vepxgc, vepygc, vepzgc, lam
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 = 0, npg
00051 do itg = 0, ntg
00052 do irg = 0, nrg
00053 call grgrad_4th_gridpoint(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00054 call grgrad_4th_gridpoint(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00055 call grgrad_4th_gridpoint(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 = 0, npg
00075 do itg = 0, ntg
00076 do irg = 0, nrg
00077 call grgrad_4th_gridpoint_bhex(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00078 call grgrad_4th_gridpoint_bhex(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00079 call grgrad_4th_gridpoint_bhex(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 do ipg = 0, npg
00088 do itg = 0, ntg
00089 do irg = 0, nrg
00090 emdgc = emdg(irg,itg,ipg)
00091 vepxgc = vepxg(irg,itg,ipg)
00092 vepygc = vepyg(irg,itg,ipg)
00093 vepzgc = vepzg(irg,itg,ipg)
00094 omegc = omeg(irg,itg,ipg)
00095 jomeg_intgc = jomeg_int(irg,itg,ipg)
00096 psigc = psi(irg,itg,ipg)
00097 alpgc = alph(irg,itg,ipg)
00098 bvxdgc = bvxd(irg,itg,ipg)
00099 bvydgc = bvyd(irg,itg,ipg)
00100 bvzdgc = bvzd(irg,itg,ipg)
00101
00102 aijaij = tfkijkij_grid(irg,itg,ipg)
00103 zfac = 1.0d0
00104 if (emdgc <= 1.0d-15) then
00105 emdgc = 1.0d-15
00106 zfac = 0.0d0
00107 end if
00108 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00109
00110 vphig(1) = vec_phig(irg,itg,ipg,1)
00111 vphig(2) = vec_phig(irg,itg,ipg,2)
00112 vphig(3) = vec_phig(irg,itg,ipg,3)
00113
00114 ovdgc(1) = bvxdgc + ome*vphig(1)
00115 ovdgc(2) = bvydgc + ome*vphig(2)
00116 ovdgc(3) = bvzdgc + ome*vphig(3)
00117
00118 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00119 utgc = lam/hhgc/alpgc/alpgc
00120
00121 rhoHc = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00122
00123 HaC_vio(irg,itg,ipg) = - 0.125d0*psigc**5*aijaij &
00124 & - radi**2*2.0d0*pi*psigc**5*rhoHc*zfac - Lapla_psi(irg,itg,ipg)
00125 HaC_vio(irg,itg,ipg) = 8.0d0*HaC_vio(irg,itg,ipg)/(psigc**5)
00126 end do
00127 end do
00128 end do
00129
00130 deallocate(dpsidx)
00131 deallocate(dpsidy)
00132 deallocate(dpsidz)
00133 deallocate(Lapla_psi)
00134
00135 end subroutine violation_gridpoint_HaC_CF_peos_irrot
00136