diff options
author | rhaas <rhaas@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2012-06-05 20:25:44 +0000 |
---|---|---|
committer | rhaas <rhaas@c83d129a-5a75-4d5a-9c4d-ed3a5855bf45> | 2012-06-05 20:25:44 +0000 |
commit | 593947fcf1e292af6d126c7db3cae89b278388b7 (patch) | |
tree | 0b5b7ce687ee2b0ea13c4b397bd185a4835fe7ad | |
parent | 38c73944d2e4cd7a22261278313274791b076848 (diff) |
GRHydro: Added parameter to perform sync on conserved quantities only.
Primitives are only sync'ed after regridding to get initial guesses.
Schedule Primitive boundary call in PostRegridInitial if sync_only_coserved == yes.
Fixed issue with the sync call in CCTK_EVOL after MoL_Evolution when sync_conserved_only==yes:
Conserved vars must be synced here as well, otherwise conserved vars are reset to atmospshere whereas
primitives are not! This is wrong.
Patches by Christian Reisswig.
git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinEvolve/GRHydro/trunk@340 c83d129a-5a75-4d5a-9c4d-ed3a5855bf45
-rw-r--r-- | param.ccl | 9 | ||||
-rw-r--r-- | schedule.ccl | 59 | ||||
-rw-r--r-- | src/GRHydro_Boundaries.F90 | 328 | ||||
-rw-r--r-- | src/GRHydro_Con2Prim.F90 | 2 |
4 files changed, 316 insertions, 82 deletions
@@ -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 |