[Commits] [svn:einsteintoolkit] GRHydro/trunk/ (Rev. 378)
rhaas at tapir.caltech.edu
rhaas at tapir.caltech.edu
Thu Jul 5 00:36:37 CDT 2012
User: rhaas
Date: 2012/07/05 12:36 AM
Modified:
/trunk/
schedule.ccl
/trunk/src/
GRHydro_Boundaries.F90
Log:
GRHydro: Sync ALL prinmitives after regridding. This ensures that all variables are known on the finer grid when sync_conserved_only = yes. This is fix only affects runs which use a microphysical EOS.
File Changes:
Directory: /trunk/src/
======================
File [modified]: GRHydro_Boundaries.F90
Delta lines: +139 -1
===================================================================
--- trunk/src/GRHydro_Boundaries.F90 2012-07-05 05:36:34 UTC (rev 377)
+++ trunk/src/GRHydro_Boundaries.F90 2012-07-05 05:36:36 UTC (rev 378)
@@ -360,7 +360,7 @@
-subroutine GRHydro_SelectPrimitiveBoundaries(CCTK_ARGUMENTS)
+subroutine GRHydro_SelectPrimitiveInitialGuessesBoundaries(CCTK_ARGUMENTS)
implicit none
@@ -490,6 +490,142 @@
if (ierr < 0) call CCTK_WARN(0, "problems with applying the chosen boundary condition")
+end subroutine GRHydro_SelectPrimitiveInitialGuessesBoundaries
+
+
+
+
+
+
+
+
+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 (verbose.eq.1) call CCTK_INFO("Selecting primitive BC")
+
+
+ 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
@@ -497,6 +633,8 @@
+
+
subroutine GRHydro_SelectAtmosphereMaskBoundaries(CCTK_ARGUMENTS)
implicit none
Directory: /trunk/
==================
File [modified]: schedule.ccl
Delta lines: +53 -11
===================================================================
--- trunk/schedule.ccl 2012-07-05 05:36:34 UTC (rev 377)
+++ trunk/schedule.ccl 2012-07-05 05:36:36 UTC (rev 378)
@@ -1065,27 +1065,27 @@
# 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"
+ } "Apply boundary conditions to primitives used for initial guesses"
schedule group GRHydro_PrimitiveBoundaries IN CCTK_POSTREGRIDINITIAL BEFORE MoL_PostStep
{
- } "Apply boundary conditions to primitives"
+ } "Apply boundary conditions to primitives used for initial guesses"
# Primitive sync is always necessary to provide initial guesses for Con2Prim in the buffer zones via prolongation.
# Buffer zones are not guaranteed to have the correct values! Prolongation happens only in the last MoL poststep
# so we only need to sync in the last MoL post step.
- schedule group GRHydro_PrimitiveBoundaries IN HydroBase_PostStep BEFORE HydroBase_Boundaries IF GRHydro::InLastMoLPostStep
+ schedule group GRHydro_PrimitiveInitialGuessesBoundaries IN HydroBase_PostStep BEFORE HydroBase_Boundaries IF GRHydro::InLastMoLPostStep
{
- } "Apply boundary conditions to primitives"
+ } "Apply boundary conditions to all primitives"
if(CCTK_IsImplementationActive("Coordinates")) {
+ # Via prolongation, we only need to sync variables used for initial guesses!
# With MP, we only need to sync primitives in LOCAL tensor base!!
- schedule GRHydro_SelectPrimitiveBoundaries IN GRHydro_PrimitiveBoundaries
+ schedule GRHydro_SelectPrimitiveInitialGuessesBoundaries IN GRHydro_PrimitiveInitialGuessesBoundaries
{
LANG: Fortran
OPTIONS: LEVEL
- # do a sync to be very sure we have proper initial guesses everywhere
# SYNC: HydroBase::w_lorentz # not used as initial guess and hence not needed!
# SYNC: HydroBase::press # not used as initial guess and hence not needed!
# SYNC: HydroBase::vel
@@ -1098,16 +1098,36 @@
SYNC: hydrobase::temperature
SYNC: lvel
SYNC: lBvec
+ } "Select initial guess primitive variables for boudary conditions"
+
+ # After regridding, we better sync every primitive!
+ # With MP, we only need to sync primitives in LOCAL tensor base!!
+ schedule GRHydro_SelectPrimitiveBoundaries IN GRHydro_PrimitiveBoundaries
+ {
+ LANG: Fortran
+ OPTIONS: LEVEL
+ SYNC: HydroBase::w_lorentz
+ SYNC: HydroBase::press
+# SYNC: HydroBase::vel
+# SYNC: HydroBase::Bvec
+ SYNC: hydrobase::entropy
+ SYNC: hydrobase::Y_e
+ SYNC: GRHydro_tracers
+ SYNC: HydroBase::rho
+ SYNC: HydroBase::eps
+ SYNC: hydrobase::temperature
+ SYNC: lvel
+ SYNC: lBvec
} "Select primitive variables for boudary conditions"
}
else
{
+ # Via prolongation, we only need to sync variables used for initial guesses!
# Without MP, we only need to sync primitives in GLOBAL tensor base!!
- schedule GRHydro_SelectPrimitiveBoundaries IN GRHydro_PrimitiveBoundaries
+ schedule GRHydro_SelectPrimitiveInitialGuessesBoundaries IN GRHydro_PrimitiveInitialGuessesBoundaries
{
LANG: Fortran
OPTIONS: LEVEL
- # do a sync to be very sure we have proper initial guesses everywhere
# SYNC: HydroBase::w_lorentz # not used as initial guess and hence not needed!
# SYNC: HydroBase::press # not used as initial guess and hence not needed!
# SYNC: hydrobase::entropy # not used as initial guess and hence not needed!
@@ -1120,13 +1140,35 @@
SYNC: HydroBase::vel
SYNC: HydroBase::Bvec
SYNC: hydrobase::temperature
+ } "Select initial guess primitive variables for boudary conditions"
+
+ # After regridding, we better sync every primitive!
+ # Without MP, we only need to sync primitives in GLOBAL tensor base!!
+ schedule GRHydro_SelectPrimitiveBoundaries IN GRHydro_PrimitiveBoundaries
+ {
+ LANG: Fortran
+ OPTIONS: LEVEL
+ SYNC: HydroBase::w_lorentz # not used as initial guess and hence not needed!
+ SYNC: HydroBase::press # not used as initial guess and hence not needed!
+ SYNC: hydrobase::entropy # not used as initial guess and hence not needed!
+ SYNC: hydrobase::Y_e # not used as initial guess and hence not needed!
+ SYNC: GRHydro_tracers # not used as initial guess and hence not needed!
+ SYNC: HydroBase::rho
+ SYNC: HydroBase::eps
+ SYNC: HydroBase::vel
+ SYNC: HydroBase::Bvec
+ SYNC: hydrobase::temperature
} "Select primitive variables for boudary conditions"
}
+ schedule group ApplyBCs AS GRHydro_ApplyPrimitiveInitialGuessBCs in GRHydro_PrimitiveInitialGuessesBoundaries AFTER GRHydro_SelectPrimitiveInitialGuessesBoundaries
+ {
+ } "Apply boundary conditions to initial guess primitive variables"
+
schedule group ApplyBCs AS GRHydro_ApplyPrimitiveBCs in GRHydro_PrimitiveBoundaries AFTER GRHydro_SelectPrimitiveBoundaries
{
- } "Apply boundary conditions to primitive variables"
+ } "Apply boundary conditions to all primitive variables"
} # sync_conserved_only
@@ -1191,12 +1233,12 @@
# Afterwards, reset mask!
if (CCTK_Equals(Bvec_evolution_method,"GRHydro"))
{
- schedule GRHydro_AtmosphereResetM IN HydroBase_PostStep AFTER GRHydroPostSyncAtmosphereMask BEFORE (HydroBase_Boundaries,GRHydro_PrimitiveBoundaries) IF GRHydro::InLastMoLPostStep
+ schedule GRHydro_AtmosphereResetM IN HydroBase_PostStep AFTER GRHydroPostSyncAtmosphereMask BEFORE (HydroBase_Boundaries,GRHydro_PrimitiveInitialGuessesBoundaries) IF GRHydro::InLastMoLPostStep
{
LANG: Fortran
} "Reset the atmosphere - MHD version"
} else {
- schedule GRHydro_AtmosphereReset IN HydroBase_PostStep AFTER GRHydroPostSyncAtmosphereMask BEFORE (HydroBase_Boundaries,GRHydro_PrimitiveBoundaries) IF GRHydro::InLastMoLPostStep
+ schedule GRHydro_AtmosphereReset IN HydroBase_PostStep AFTER GRHydroPostSyncAtmosphereMask BEFORE (HydroBase_Boundaries,GRHydro_PrimitiveInitialGuessesBoundaries) IF GRHydro::InLastMoLPostStep
{
LANG: Fortran
} "Reset the atmosphere"
More information about the Commits
mailing list