aboutsummaryrefslogtreecommitdiff
path: root/src/GRHydro_P2C2P.F90
diff options
context:
space:
mode:
authorbmundim <bmundim@ac85fae7-cede-4708-beff-ae01c7fa1c26>2010-10-08 20:29:50 +0000
committerbmundim <bmundim@ac85fae7-cede-4708-beff-ae01c7fa1c26>2010-10-08 20:29:50 +0000
commit2b84e1494caf85bb43ab35d7208c669df61fdc85 (patch)
treebb0ef6a565e1df331f4ec8d8779e1e66ea6bbc71 /src/GRHydro_P2C2P.F90
parente3fbc24c806b834739036fb24d50880cac598c1d (diff)
Add the magnetized routine versions for prim2con2prim
and vice versa. Add the magnetized version for the ShockTube routine. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinInitialData/GRHydro_InitData/trunk@114 ac85fae7-cede-4708-beff-ae01c7fa1c26
Diffstat (limited to 'src/GRHydro_P2C2P.F90')
-rw-r--r--src/GRHydro_P2C2P.F90167
1 files changed, 167 insertions, 0 deletions
diff --git a/src/GRHydro_P2C2P.F90 b/src/GRHydro_P2C2P.F90
new file mode 100644
index 0000000..10258c3
--- /dev/null
+++ b/src/GRHydro_P2C2P.F90
@@ -0,0 +1,167 @@
+ /*@@
+ @file GRHydro_P2C2P.F90
+ @date Sep 25, 2010
+ @author Joshua Faber, Scott Noble, Bruno Mundim, Luca Baiotti
+ @desc
+ A test of the conservative <--> primitive variable exchange
+ @enddesc
+ @@*/
+
+#include "cctk.h"
+#include "cctk_Parameters.h"
+#include "cctk_Arguments.h"
+
+ /*@@
+ @routine p2c2p
+ @date Sep 25, 2010
+ @author Joshua Faber, Scott Noble, Bruno Mundim, Luca Baiotti
+ @desc
+ Testing the conservative <--> primitive variable transformations.
+ The values before and after should match.
+ @enddesc
+ @calls
+ @calledby
+ @history
+
+ @endhistory
+
+@@*/
+
+subroutine p2c2p(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+
+#if !USE_EOS_OMNI
+#ifdef _EOS_BASE_INC_
+#undef _EOS_BASE_INC_
+#endif
+#include "EOS_Base.inc"
+#endif
+
+ integer didit,i,j,k,nx,ny,nz
+ CCTK_REAL det
+ CCTK_REAL uxx,uxy,uxz,uyy,uyz,uzz
+ CCTK_REAL gxx_send,gxy_send,gxz_send,gyy_send,gyz_send,gzz_send
+ CCTK_REAL dens_send,sx_send,sy_send,sz_send,tau_send
+ CCTK_REAL rho_send,velx_send,vely_send,velz_send,eps_send
+ CCTK_REAL press_send,w_lorentz_send,x_send,y_send,z_send,r_send
+ CCTK_REAL pmin, epsmin
+ CCTK_INT C2P_failed
+ logical epsnegative
+
+#if USE_EOS_OMNI
+! begin EOS Omni vars
+ integer :: n = 1
+ integer :: keytemp = 0
+ integer :: anyerr = 0
+ integer :: keyerr(1) = 0
+ real*8 :: xpress = 0.0d0
+ real*8 :: xeps = 0.0d0
+ real*8 :: xtemp = 0.0d0
+ real*8 :: xye = 0.0d0
+! end EOS Omni vars
+#endif
+
+ call CCTK_WARN(1,"This test works only with Ideal_Fluid EoS")
+
+ nx = cctk_lsh(1)
+ ny = cctk_lsh(2)
+ nz = cctk_lsh(3)
+
+ x_send = 0.0d0
+ y_send = 0.0d0
+ z_send = 0.0d0
+ r_send = 0.0d0
+
+ gxx_send = 1.0d0
+ gyy_send = 1.0d0
+ gzz_send = 1.0d0
+ gxy_send = 0.0d0
+ gxz_send = 0.0d0
+ gyz_send = 0.0d0
+
+ det = 1.0d0
+
+ uxx = 1.0d0
+ uyy = 1.0d0
+ uzz = 1.0d0
+ uxy = 0.0d0
+ uxz = 0.0d0
+ uyz = 0.0d0
+
+ rho_send = 1.29047362d0
+ velx_send = 0.166666658d0
+ vely_send = 0.166666658d0
+ velz_send = 0.166666658d0
+ eps_send = 0.484123939d0
+
+ w_lorentz_send = 1.d0/sqrt(1.0d0-velx_send*velx_send-vely_send*vely_send-velz_send*velz_send)
+
+ epsnegative = .false.
+
+ GRHydro_rho_min = 1.e-10
+#if USE_EOS_OMNI
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,n,&
+ rho_send,1.0d0,xtemp,eps_send,press_send,keyerr,anyerr)
+ call EOS_Omni_press(GRHydro_eos_handle,keytemp,n,&
+ GRHydro_rho_min,1.0d0,xtemp,xye,pmin,keyerr,anyerr)
+
+ call EOS_Omni_EpsFromPress(GRHydro_eos_handle,keytemp,n,&
+ GRHydro_rho_min,xeps,xtemp,xye,pmin,epsmin,keyerr,anyerr)
+#else
+ press_send = EOS_Pressure(GRHydro_eos_handle, rho_send, eps_send)
+ pmin = EOS_Pressure(GRHydro_eos_handle, GRHydro_rho_min, 1.0d0)
+ epsmin = EOS_SpecificIntEnergy(GRHydro_eos_handle, GRHydro_rho_min, pmin)
+#endif
+ C2P_failed = 0
+
+ write(*,*) 'P2C2P test: the primitive variables are'
+ write(*,*) ' primitive variables: '
+ write(*,*) ' rho : ',rho_send
+ write(*,*) ' velx : ',velx_send
+ write(*,*) ' vely : ',vely_send
+ write(*,*) ' velz : ',velz_send
+ write(*,*) ' press : ',press_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+
+ write(*,*) 'P2C2P test: converting back to conserved variables.'
+ call prim2con(GRHydro_eos_handle,gxx_send, gxy_send, gxz_send, gyy_send, gyz_send, gzz_send, det, &
+ dens_send, sx_send, sy_send, sz_send, tau_send, rho_send, &
+ velx_send, vely_send, velz_send, eps_send, press_send, w_lorentz_send)
+
+ write(*,*) 'P2C2P test: initial values.'
+ write(*,*) ' conservative variables: '
+ write(*,*) ' dens: ',dens_send
+ write(*,*) ' sx : ',sx_send
+ write(*,*) ' sy : ',sy_send
+ write(*,*) ' sz : ',sz_send
+ write(*,*) ' tau : ',tau_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+
+ write(*,*) 'P2C2P test: getting the associated primitive variables.'
+ call Con2Prim_pt(GRHydro_eos_handle,dens_send,sx_send,sy_send,sz_send, &
+ tau_send,rho_send,velx_send,vely_send,velz_send, &
+ eps_send,press_send,w_lorentz_send, &
+ uxx,uxy,uxz,uyy,uyz,uzz,det,x_send,y_send,z_send,r_send,&
+ epsnegative,GRHydro_rho_min, pmin, epsmin, GRHydro_init_data_reflevel,C2P_failed)
+
+ write(*,*) 'P2C2P test: the primitive variables are'
+ write(*,*) ' primitive variables: '
+ write(*,*) ' rho : ',rho_send
+ write(*,*) ' velx : ',velx_send
+ write(*,*) ' vely : ',vely_send
+ write(*,*) ' velz : ',velz_send
+ write(*,*) ' press : ',press_send
+ write(*,*) ' eps : ',eps_send
+ write(*,*) ' W : ',w_lorentz_send
+
+ STOP
+
+ return
+
+end subroutine p2c2p