aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--param.ccl9
-rw-r--r--schedule.ccl59
-rw-r--r--src/GRHydro_Boundaries.F90328
-rw-r--r--src/GRHydro_Con2Prim.F902
4 files changed, 316 insertions, 82 deletions
diff --git a/param.ccl b/param.ccl
index c22b6c1..51ee2c3 100644
--- a/param.ccl
+++ b/param.ccl
@@ -598,3 +598,12 @@ int GRHydro_c2p_warn_from_reflevel "Start warning on given refinement level and
boolean disable_sync_and_tmunu_after_MoL "Do not sync/prolongate and reset Tmunu after MoL integration is done" STEERABLE=ALWAYS
{
} "no"
+
+
+# This can improve the performance on many cores, but may be dangerous
+# (it seems to work in simple testcases, but morde complicated settings may fail)
+# If you encounter strange behavior, switch this OFF
+BOOLEAN sync_conserved_only "Only sync evolved conserved quantities during evolution."
+{
+} no
+
diff --git a/schedule.ccl b/schedule.ccl
index 7e9b765..180b441 100644
--- a/schedule.ccl
+++ b/schedule.ccl
@@ -998,6 +998,8 @@ schedule group Do_GRHydro_Boundaries IN HydroBase_Boundaries
{
} "GRHydro Boundary conditions group"
+if (!sync_conserved_only)
+{
schedule GRHydro_Boundaries IN HydroBase_Select_Boundaries AS GRHydro_Bound
{
LANG: Fortran
@@ -1022,7 +1024,62 @@ schedule GRHydro_Boundaries IN HydroBase_Select_Boundaries AS GRHydro_Bound
SYNC: lvel
SYNC: lBvec
} "Select GRHydro boundary conditions"
-
+}
+else
+{
+schedule GRHydro_Boundaries IN HydroBase_Select_Boundaries AS GRHydro_Bound
+{
+ LANG: Fortran
+ OPTIONS: LEVEL
+ SYNC: dens
+ SYNC: tau
+ SYNC: scon
+ SYNC: Bcons
+ SYNC: psidc
+ SYNC: GRHydro_cons_tracers
+ SYNC: Y_e_con
+} "Select GRHydro boundary conditions"
+
+ # after a regrid Cactus relies on the boundary thorns to fill in the outer
+ # and symmetry boundaries (we need valid data for the initial guess in Con2Prim)
+ schedule group GRHydro_PrimitiveBoundaries IN CCTK_POSTREGRID BEFORE MoL_PostStep
+ {
+ } "Apply boundary conditions to primitives"
+ schedule group GRHydro_PrimitiveBoundaries IN CCTK_POSTREGRIDINITIAL BEFORE MoL_PostStep
+ {
+ } "Apply boundary conditions to primitives"
+
+ # This is necessary, otherwise we are inconsistent in atmosphere treatment of conserved and primitive variables
+ if(!disable_sync_and_tmunu_after_MoL) {
+ schedule group GRHydro_PrimitiveBoundaries IN CCTK_EVOL AFTER (MoL_Evolution,GRHydro_AtmosphereReset,sync_GRHydro_C2P_failed) BEFORE HydroBase_Boundaries
+ {
+ } "Apply boundary conditions to primitives"
+ }
+
+ schedule GRHydro_SelectPrimitiveBoundaries IN GRHydro_PrimitiveBoundaries
+ {
+ LANG: Fortran
+ OPTIONS: LEVEL
+ # do a sync to be very sure we have proper initial guesses everywhere
+ SYNC: HydroBase::w_lorentz
+ SYNC: HydroBase::rho
+ SYNC: HydroBase::press
+ SYNC: HydroBase::eps
+ SYNC: HydroBase::vel
+ SYNC: HydroBase::Bvec
+ SYNC: hydrobase::temperature
+ SYNC: hydrobase::entropy
+ SYNC: hydrobase::Y_e
+ SYNC: lvel
+ SYNC: lBvec
+ SYNC: GRHydro_tracers
+ } "Select primitive variables for boudary conditions"
+ schedule group ApplyBCs AS GRHydro_ApplyPrimitiveBCs in GRHydro_PrimitiveBoundaries AFTER GRHydro_SelectPrimitiveBoundaries
+ {
+ } "Apply boundary conditions to primitive variables"
+
+}
+
############################################################
### Compute first differences of rho for mesh refinement ###
############################################################
diff --git a/src/GRHydro_Boundaries.F90 b/src/GRHydro_Boundaries.F90
index eca3adc..2c6b9ce 100644
--- a/src/GRHydro_Boundaries.F90
+++ b/src/GRHydro_Boundaries.F90
@@ -66,12 +66,14 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH)
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::rho")
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::press")
+ !if (sync_conserved_only .eq. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::rho")
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::press")
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::w_lorentz")
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::eps")
+ !endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::dens")
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::tau")
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::w_lorentz")
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::eps")
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::GRHydro_C2P_failed")
if(evolve_mhd.ne.0.and.clean_divergence.ne.0) then
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::psidc")
@@ -84,27 +86,35 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
endif
if(evolve_y_e.ne.0) then
+ !if (sync_conserved_only .eq. 0) then
call SetCartSymGN(ierr, cctkGH, sym, "HydroBase::Y_e")
+ !endif
call SetCartSymGN(ierr, cctkGH, sym, "GRHydro::Y_e_con")
endif
if(evolve_temper.ne.0) then
- call SetCartSymGN(ierr, cctkGH, sym, "HydroBase::temperature")
- call SetCartSymGN(ierr, cctkGH, sym, "HydroBase::entropy")
+ !if (sync_conserved_only .eq. 0) then
+ call SetCartSymGN(ierr, cctkGH, sym, "HydroBase::temperature")
+ call SetCartSymGN(ierr, cctkGH, sym, "HydroBase::entropy")
+ !endif
endif
sym(1) = -1
sym(2) = 1
sym(3) = 1
- if (general_coordinates .ne. 0) then
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[0]")
- else
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[0]")
- endif
+ !if (sync_conserved_only .eq. 0) then
+ if (general_coordinates .ne. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[0]")
+ else
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[0]")
+ endif
+ !endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::scon[0]")
if(evolve_mhd.ne.0) then
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[0]")
+ !if (sync_conserved_only .eq. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[0]")
+ !endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::Bcons[0]")
endif
@@ -112,14 +122,18 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
sym(2) = -1
sym(3) = 1
- if (general_coordinates .ne. 0) then
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[1]")
- else
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[1]")
- endif
+ !if (sync_conserved_only .eq. 0) then
+ if (general_coordinates .ne. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[1]")
+ else
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[1]")
+ endif
+ !endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::scon[1]")
if(evolve_mhd.ne.0) then
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[1]")
+ !if (sync_conserved_only .eq. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[1]")
+ !endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::Bcons[1]")
endif
@@ -127,15 +141,19 @@ subroutine GRHydro_InitSymBound(CCTK_ARGUMENTS)
sym(2) = 1
sym(3) = -1
- if (general_coordinates .ne. 0) then
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[2]")
- else
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[2]")
- endif
+ !if (sync_conserved_only .eq. 0) then
+ if (general_coordinates .ne. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::lvel[2]")
+ else
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::vel[2]")
+ endif
+ !endif
call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::scon[2]")
if(evolve_mhd.ne.0) then
- call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[2]")
- call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::Bcons[2]")
+ !if (sync_conserved_only .eq. 0) then
+ call SetCartSymVN(ierr, cctkGH, sym, "HydroBase::Bvec[2]")
+ !endif
+ call SetCartSymVN(ierr, cctkGH, sym, "GRHydro::Bcons[2]")
endif
! check that storage for shift is active
@@ -190,28 +208,32 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
"GRHydro::tau", "Flat")
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::scon", "Flat")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::w_lorentz", "Flat")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::rho", "Flat")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::press", "Flat")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::eps", "Flat")
- if (general_coordinates .ne. 0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lvel", "Flat")
- else
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::vel", "Flat")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::w_lorentz", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::rho", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::press", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::eps", "Flat")
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lvel", "Flat")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::vel", "Flat")
+ endif
endif
if(evolve_mhd.ne.0) then
- if (general_coordinates .ne. 0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lBvec", "Flat")
- else
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::Bvec", "Flat")
+ if (sync_conserved_only .eq. 0) then
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lBvec", "Flat")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Bvec", "Flat")
+ endif
endif
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::Bcons", "Flat")
@@ -222,24 +244,30 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
endif
if(evolve_tracer.ne.0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::GRHydro_tracers", "Flat")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::GRHydro_tracers", "Flat")
+ endif
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::GRHydro_cons_tracers", "Flat")
endif
if(evolve_y_e.ne.0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::Y_e", "Flat")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Y_e", "Flat")
+ endif
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::Y_e_con", "Flat")
endif
if(evolve_temper.ne.0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::temperature", "Flat")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::entropy", "Flat")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::temperature", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::entropy", "Flat")
+ endif
endif
@@ -252,29 +280,34 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
"GRHydro::tau", "None")
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::scon", "None")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::w_lorentz", "None")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::rho", "None")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::press", "None")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::eps", "None")
- if (general_coordinates .ne. 0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lvel", "None")
- else
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::vel", "None")
+
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::w_lorentz", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::rho", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::press", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::eps", "None")
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lvel", "None")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::vel", "None")
+ endif
endif
if(evolve_mhd.ne.0) then
- if (general_coordinates .ne. 0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::lBvec", "None")
- else
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::Bvec", "None")
+ if (sync_conserved_only .eq. 0) then
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lBvec", "None")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Bvec", "None")
+ endif
endif
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::Bcons", "None")
@@ -285,24 +318,30 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
endif
if(evolve_tracer.ne.0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "GRHydro::GRHydro_tracers", "None")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::GRHydro_tracers", "None")
+ endif
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::GRHydro_cons_tracers", "None")
endif
if(evolve_y_e.ne.0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::Y_e", "None")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Y_e", "None")
+ endif
ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
"GRHydro::Y_e_con", "None")
endif
if(evolve_temper.ne.0) then
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::temperature", "None")
- ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
- "HydroBase::entropy", "None")
+ if (sync_conserved_only .eq. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::temperature", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::entropy", "None")
+ endif
endif
endif
@@ -316,3 +355,130 @@ subroutine GRHydro_Boundaries(CCTK_ARGUMENTS)
end subroutine GRHydro_Boundaries
+
+subroutine GRHydro_SelectPrimitiveBoundaries(CCTK_ARGUMENTS)
+
+ implicit none
+
+ DECLARE_CCTK_ARGUMENTS
+ DECLARE_CCTK_PARAMETERS
+ DECLARE_CCTK_FUNCTIONS
+
+ integer, dimension(3) :: sw
+ integer :: ierr = 0
+ integer :: i,j,k
+ CCTK_INT :: GRHydro_UseGeneralCoordinates, general_coordinates
+
+ CCTK_INT, parameter :: faces=CCTK_ALL_FACES
+ CCTK_INT, parameter :: ione=1
+
+ sw = GRHydro_stencil
+
+ general_coordinates = GRHydro_UseGeneralCoordinates(cctkGH)
+
+!!$Flat boundaries if required
+
+ if (CCTK_EQUALS(bound,"flat")) then
+
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::w_lorentz", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::rho", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::press", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::eps", "Flat")
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lvel", "Flat")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::vel", "Flat")
+ endif
+ if(evolve_mhd.ne.0) then
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lBvec", "Flat")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Bvec", "Flat")
+ endif
+ endif
+
+ if(evolve_tracer.ne.0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::GRHydro_tracers", "Flat")
+ endif
+
+ if(evolve_y_e.ne.0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Y_e", "Flat")
+ endif
+
+ if(evolve_temper.ne.0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::temperature", "Flat")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::entropy", "Flat")
+ endif
+
+
+ endif
+
+ if (CCTK_EQUALS(bound,"none")) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::w_lorentz", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::rho", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::press", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::eps", "None")
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lvel", "None")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::vel", "None")
+ endif
+
+ if(evolve_mhd.ne.0) then
+ if (general_coordinates .ne. 0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::lBvec", "None")
+ else
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Bvec", "None")
+ endif
+
+ endif
+
+ if(evolve_tracer.ne.0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "GRHydro::GRHydro_tracers", "None")
+
+ endif
+
+ if(evolve_y_e.ne.0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::Y_e", "None")
+
+ endif
+
+ if(evolve_temper.ne.0) then
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::temperature", "None")
+ ierr = ierr + Boundary_SelectGroupForBC(cctkGH, faces, GRHydro_stencil, -ione, &
+ "HydroBase::entropy", "None")
+ endif
+
+ end if
+
+ if (CCTK_EQUALS(bound,"scalar")) then
+ call CCTK_WARN(0, "Until somebody uses this I see no reason to support it")
+ end if
+
+ if (ierr < 0) call CCTK_WARN(0, "problems with applying the chosen boundary condition")
+
+end subroutine GRHydro_SelectPrimitiveBoundaries
+
diff --git a/src/GRHydro_Con2Prim.F90 b/src/GRHydro_Con2Prim.F90
index 85ffaf8..fc62587 100644
--- a/src/GRHydro_Con2Prim.F90
+++ b/src/GRHydro_Con2Prim.F90
@@ -475,6 +475,7 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
df = 1.0d0 - dpressbydrho*drhobydpress - &
dpressbydeps*depsbydpress
+
pold = pnew
pnew = max(pold - f/df, pmin)
@@ -555,6 +556,7 @@ subroutine Con2Prim_pt(handle, dens, sx, sy, sz, tau, rho, velx, vely, &
vely = uxy * vlowx + uyy * vlowy + uyz * vlowz
velz = uxz * vlowx + uyz * vlowy + uzz * vlowz
+
!!$If all else fails, use the polytropic EoS
if(epsilon .lt. 0.0d0) then