00001 subroutine violation_midpoint_HaC_CF_peos(HaC_vio)
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_vector_phi
00008 use make_array_3d
00009 use interface_grgrad_4th_gridpoint
00010 use interface_grgrad_midpoint_r3rd_nsbh
00011 use interface_grgrad_midpoint_r3rd_type0_ns
00012 use interface_interpo_linear_type0
00013 implicit none
00014 real(long), pointer :: HaC_vio(:,:,:), Lapla_psi(:,:,:)
00015 real(long), pointer :: dpsidx(:,:,:), dpsidy(:,:,:), dpsidz(:,:,:)
00016 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, rhoHc, zfac
00017 real(long) :: psigc, alpgc, alpsigc, aijaij, ene, omegc, jomeg_intgc
00018 real(long) :: vphig(3), ovdgc(3), bvxdgc, bvydgc, bvzdgc
00019 real(long) :: vepxgc, vepygc, vepzgc, lam
00020 real(long) :: dxafn,dyafn,dzafn
00021 real(long) :: d2psidxx,d2psidxy,d2psidxz
00022 real(long) :: d2psidyx,d2psidyy,d2psidyz
00023 real(long) :: d2psidzx,d2psidzy,d2psidzz
00024 integer :: irg, itg, ipg
00025
00026 call alloc_array3d(Lapla_psi,0,nrg,0,ntg,0,npg)
00027 call alloc_array3d(dpsidx ,0,nrg,0,ntg,0,npg)
00028 call alloc_array3d(dpsidy ,0,nrg,0,ntg,0,npg)
00029 call alloc_array3d(dpsidz ,0,nrg,0,ntg,0,npg)
00030
00031 do ipg = 0, npg
00032 do itg = 0, ntg
00033 do irg = 0, nrg
00034 call grgrad_4th_gridpoint(psi,dxafn,dyafn,dzafn,irg,itg,ipg)
00035 dpsidx(irg,itg,ipg) = dxafn
00036 dpsidy(irg,itg,ipg) = dyafn
00037 dpsidz(irg,itg,ipg) = dzafn
00038 end do
00039 end do
00040 end do
00041
00042 do ipg = 1, npg
00043 do itg = 1, ntg
00044 do irg = 1, nrg
00045 call grgrad_midpoint_r3rd_type0_ns(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00046 call grgrad_midpoint_r3rd_type0_ns(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00047 call grgrad_midpoint_r3rd_type0_ns(dpsidz,d2psidzx,d2psidzy,d2psidzz,irg,itg,ipg)
00048 Lapla_psi(irg,itg,ipg) = d2psidxx + d2psidyy + d2psidzz
00049 end do
00050 end do
00051 end do
00052
00053 do ipg = 1, npg
00054 do itg = 1, ntg
00055 do irg = 1, nrg
00056 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00057 call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00058 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00059 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00060
00061 aijaij = tfkijkij(irg,itg,ipg)
00062 zfac = 1.0d0
00063 if (emdgc <= 1.0d-15) then
00064 emdgc = 1.0d-15
00065 zfac = 0.0d0
00066 end if
00067 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00068 utgc = hhgc/ber*exp(jomeg_intgc)
00069 rhoHc = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00070
00071 HaC_vio(irg,itg,ipg) = - 0.125d0*psigc**5*aijaij &
00072 & - radi**2*2.0d0*pi*psigc**5*rhoHc*zfac - Lapla_psi(irg,itg,ipg)
00073 HaC_vio(irg,itg,ipg) = 8.0d0*HaC_vio(irg,itg,ipg)/(psigc**5)
00074 end do
00075 end do
00076 end do
00077
00078 deallocate(dpsidx)
00079 deallocate(dpsidy)
00080 deallocate(dpsidz)
00081 deallocate(Lapla_psi)
00082
00083 end subroutine violation_midpoint_HaC_CF_peos
00084