00001 subroutine violation_midpoint_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_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_4th_gridpoint_bhex
00011 use interface_grgrad_midpoint_r3rd_nsbh
00012 use interface_grgrad_midpoint_r3rd_type0_ns
00013 use interface_grgrad_midpoint_r3rd_type0_bh
00014 use interface_interpo_linear_type0
00015 implicit none
00016 real(long), pointer :: HaC_vio(:,:,:), Lapla_psi(:,:,:)
00017 real(long), pointer :: dpsidx(:,:,:), dpsidy(:,:,:), dpsidz(:,:,:)
00018 real(long) :: emdgc, rhogc, pregc, hhgc, utgc, rhoHc, zfac
00019 real(long) :: psigc, alpgc, alpsigc, aijaij, ene, omegc, jomeg_intgc
00020 real(long) :: vphig(3), ovdgc(3), bvxdgc, bvydgc, bvzdgc
00021 real(long) :: vepxgc, vepygc, vepzgc, lam
00022 real(long) :: dxafn,dyafn,dzafn
00023 real(long) :: d2psidxx,d2psidxy,d2psidxz
00024 real(long) :: d2psidyx,d2psidyy,d2psidyz
00025 real(long) :: d2psidzx,d2psidzy,d2psidzz
00026 integer :: irg, itg, ipg
00027 character(len=2), intent(in) :: cobj
00028
00029 call alloc_array3d(Lapla_psi,0,nrg,0,ntg,0,npg)
00030 call alloc_array3d(dpsidx ,0,nrg,0,ntg,0,npg)
00031 call alloc_array3d(dpsidy ,0,nrg,0,ntg,0,npg)
00032 call alloc_array3d(dpsidz ,0,nrg,0,ntg,0,npg)
00033
00034 if (cobj=='ns') then
00035
00036 do ipg = 0, npg
00037 do itg = 0, ntg
00038 do irg = 0, nrg
00039 call grgrad_4th_gridpoint(psi,dxafn,dyafn,dzafn,irg,itg,ipg)
00040 dpsidx(irg,itg,ipg) = dxafn
00041 dpsidy(irg,itg,ipg) = dyafn
00042 dpsidz(irg,itg,ipg) = dzafn
00043 end do
00044 end do
00045 end do
00046
00047 do ipg = 1, npg
00048 do itg = 1, ntg
00049 do irg = 1, nrg
00050 call grgrad_midpoint_r3rd_type0_ns(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00051 call grgrad_midpoint_r3rd_type0_ns(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00052 call grgrad_midpoint_r3rd_type0_ns(dpsidz,d2psidzx,d2psidzy,d2psidzz,irg,itg,ipg)
00053 Lapla_psi(irg,itg,ipg) = d2psidxx + d2psidyy + d2psidzz
00054 end do
00055 end do
00056 end do
00057
00058 else
00059
00060 do ipg = 0, npg
00061 do itg = 0, ntg
00062 do irg = 0, nrg
00063 call grgrad_4th_gridpoint_bhex(psi,dxafn,dyafn,dzafn,irg,itg,ipg)
00064 dpsidx(irg,itg,ipg) = dxafn
00065 dpsidy(irg,itg,ipg) = dyafn
00066 dpsidz(irg,itg,ipg) = dzafn
00067 end do
00068 end do
00069 end do
00070
00071 do ipg = 1, npg
00072 do itg = 1, ntg
00073 do irg = 1, nrg
00074 call grgrad_midpoint_r3rd_type0_bh(dpsidx,d2psidxx,d2psidxy,d2psidxz,irg,itg,ipg)
00075 call grgrad_midpoint_r3rd_type0_bh(dpsidy,d2psidyx,d2psidyy,d2psidyz,irg,itg,ipg)
00076 call grgrad_midpoint_r3rd_type0_bh(dpsidz,d2psidzx,d2psidzy,d2psidzz,irg,itg,ipg)
00077 Lapla_psi(irg,itg,ipg) = d2psidxx + d2psidyy + d2psidzz
00078 end do
00079 end do
00080 end do
00081
00082 end if
00083
00084 do ipg = 1, npg
00085 do itg = 1, ntg
00086 do irg = 1, nrg
00087 call interpo_linear_type0(emdgc,emdg,irg,itg,ipg)
00088 call interpo_linear_type0(vepxgc ,vepxg ,irg,itg,ipg)
00089 call interpo_linear_type0(vepygc ,vepyg ,irg,itg,ipg)
00090 call interpo_linear_type0(vepzgc ,vepzg ,irg,itg,ipg)
00091 call interpo_linear_type0(jomeg_intgc,jomeg_int,irg,itg,ipg)
00092 call interpo_linear_type0(psigc,psi,irg,itg,ipg)
00093 call interpo_linear_type0(alpgc,alph,irg,itg,ipg)
00094 call interpo_linear_type0(bvxdgc,bvxd,irg,itg,ipg)
00095 call interpo_linear_type0(bvydgc,bvyd,irg,itg,ipg)
00096 call interpo_linear_type0(bvzdgc,bvzd,irg,itg,ipg)
00097
00098 aijaij = tfkijkij(irg,itg,ipg)
00099 zfac = 1.0d0
00100 if (emdgc <= 1.0d-15) then
00101 emdgc = 1.0d-15
00102 zfac = 0.0d0
00103 end if
00104 call peos_q2hprho(emdgc, hhgc, pregc, rhogc, ene)
00105
00106 vphig(1) = hvec_phig(irg,itg,ipg,1)
00107 vphig(2) = hvec_phig(irg,itg,ipg,2)
00108 vphig(3) = hvec_phig(irg,itg,ipg,3)
00109
00110 ovdgc(1) = bvxdgc + ome*vphig(1)
00111 ovdgc(2) = bvydgc + ome*vphig(2)
00112 ovdgc(3) = bvzdgc + ome*vphig(3)
00113
00114 lam = ber + ovdgc(1)*vepxgc + ovdgc(2)*vepygc + ovdgc(3)*vepzgc
00115 utgc = lam/hhgc/alpgc/alpgc
00116
00117 rhoHc = hhgc*rhogc*(alpgc*utgc)**2 - pregc
00118
00119 HaC_vio(irg,itg,ipg) = - 0.125d0*psigc**5*aijaij &
00120 & - radi**2*2.0d0*pi*psigc**5*rhoHc*zfac - Lapla_psi(irg,itg,ipg)
00121 HaC_vio(irg,itg,ipg) = 8.0d0*HaC_vio(irg,itg,ipg)/(psigc**5)
00122 end do
00123 end do
00124 end do
00125
00126 deallocate(dpsidx)
00127 deallocate(dpsidy)
00128 deallocate(dpsidz)
00129 deallocate(Lapla_psi)
00130
00131 end subroutine violation_midpoint_HaC_CF_peos_irrot
00132