00001 subroutine violation_gridpoint_HaC_CF_peos(HaC_vio)
00002 use phys_constant, only : long, pi
00003 use grid_parameter, only : nrg, ntg, npg
00004 use coordinate_grav_r, only : rg
00005 use def_metric
00006 use def_metric_excurve_grid
00007 use def_matter, only : emdg, omeg, jomeg_int, vepxg, vepyg, vepzg
00008 use def_matter_parameter, only : ome, ber, radi
00009 use def_vector_phi
00010 use make_array_3d
00011 use interface_grgrad_4th_gridpoint
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 real(long) :: term1, term2, term3
00025 integer :: irg, itg, ipg
00026
00027 call alloc_array3d(Lapla_psi,0,nrg,0,ntg,0,npg)
00028 call alloc_array3d(dpsidx ,0,nrg,0,ntg,0,npg)
00029 call alloc_array3d(dpsidy ,0,nrg,0,ntg,0,npg)
00030 call alloc_array3d(dpsidz ,0,nrg,0,ntg,0,npg)
00031
00032 do ipg = 0, npg
00033 do itg = 0, ntg
00034 do irg = 0, nrg
00035 call grgrad_4th_gridpoint(psi,dxafn,dyafn,dzafn,irg,itg,ipg)
00036 dpsidx(irg,itg,ipg) = dxafn
00037 dpsidy(irg,itg,ipg) = dyafn
00038 dpsidz(irg,itg,ipg) = dzafn
00039
00040
00041
00042
00043
00044
00045
00046 end do
00047 end do
00048 end do
00049
00050
00051
00052
00053
00054 do ipg = 0, npg
00055 do itg = 0, ntg
00056 do irg = 0, nrg
00057 call grgrad_4th_gridpoint(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00058 call grgrad_4th_gridpoint(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00059 call grgrad_4th_gridpoint(dpsidz,d2psidzx,d2psidzy,d2psidzz,irg,itg,ipg)
00060 Lapla_psi(irg,itg,ipg) = d2psidxx + d2psidyy + d2psidzz
00061
00062
00063
00064
00065
00066
00067
00068 end do
00069 end do
00070 end do
00071
00072
00073
00074
00075
00076 do ipg = 0, npg
00077 do itg = 0, ntg
00078 do irg = 0, nrg
00079 emdgc = emdg(irg,itg,ipg)
00080 omegc = omeg(irg,itg,ipg)
00081 jomeg_intgc = jomeg_int(irg,itg,ipg)
00082 psigc = psi(irg,itg,ipg)
00083 alpgc = alph(irg,itg,ipg)
00084
00085 aijaij = tfkijkij_grid(irg,itg,ipg)
00086 zfac = 1.0d0
00087 if (emdgc <= 1.0d-15) then
00088 emdgc = 1.0d-15
00089 zfac = 0.0d0
00090 end if
00091 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00092 utgc = hhgc/ber*exp(jomeg_intgc)
00093 rhoHc = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00094
00095 HaC_vio(irg,itg,ipg) = - 0.125d0*psigc**5*aijaij &
00096 & - radi**2*2.0d0*pi*psigc**5*rhoHc*zfac - Lapla_psi(irg,itg,ipg)
00097 HaC_vio(irg,itg,ipg) = 8.0d0*HaC_vio(irg,itg,ipg)/(psigc**5)
00098
00099
00100
00101
00102
00103
00104
00105 end do
00106 end do
00107 end do
00108
00109 deallocate(dpsidx)
00110 deallocate(dpsidy)
00111 deallocate(dpsidz)
00112 deallocate(Lapla_psi)
00113
00114 end subroutine violation_gridpoint_HaC_CF_peos
00115