From 5ee1256b73147cdbcb6b97ecc4053d5d7ed90142 Mon Sep 17 00:00:00 2001 From: eschnett Date: Fri, 11 May 2012 23:15:39 +0000 Subject: Allow different boundary conditions in ADMBase Introduce a parameter ADMBase::admbase_boundary_condition selection which boundary condition ADMBase applies. git-svn-id: http://svn.einsteintoolkit.org/cactus/EinsteinBase/ADMBase/trunk@66 d576a68a-b34a-40ae-82fc-004fa1a9d16f --- param.ccl | 7 +++++++ src/InitSymBound.c | 32 ++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/param.ccl b/param.ccl index 2d521c7..c2e05b0 100644 --- a/param.ccl +++ b/param.ccl @@ -61,6 +61,13 @@ KEYWORD dtshift_evolution_method "The dtshift evolution method" +STRING admbase_boundary_condition "Boundary condition for ADMBase variables" +{ + "" :: "must be a registered boundary condition" +} "flat" + + + KEYWORD metric_type "The semantics of the metric variables (physical, static conformal, etc)" { "physical" :: "metric and extrinsic curvature are the physical ones" diff --git a/src/InitSymBound.c b/src/InitSymBound.c index cf20057..46c589a 100644 --- a/src/InitSymBound.c +++ b/src/InitSymBound.c @@ -123,9 +123,22 @@ void Einstein_InitSymBound(CCTK_ARGUMENTS) } /* A macro for selecting boundary conditions and checking for errors */ -#define ADMBASE_BC(NAME, STENCIL) \ - {if (Boundary_SelectGroupForBC(cctkGH, CCTK_ALL_FACES, STENCIL, -1, NAME, "flat") < 0) \ - CCTK_WARN(0, "Failed to register BC for "NAME"!");} +static void select_bc(cGH const* const cctkGH, char const* const groupname) +{ + DECLARE_CCTK_PARAMETERS; + + int const ierr = + Boundary_SelectGroupForBC(cctkGH, CCTK_ALL_FACES, 1, -1, + groupname, admbase_boundary_condition); + if (ierr < 0) + { + CCTK_VWarn (CCTK_WARN_ABORT, + __LINE__, __FILE__, CCTK_THORNSTRING, + "Failed to select boundary conditions for group %s", + groupname); + } +} + /* Select boundary conditions on ADMBase variables */ void ADMBase_Boundaries(CCTK_ARGUMENTS) { @@ -153,23 +166,22 @@ void ADMBase_Boundaries(CCTK_ARGUMENTS) if (CCTK_EQUALS(evolution_method, "none" ) || CCTK_EQUALS(evolution_method, "static")) { - ADMBASE_BC("ADMBase::metric", stencil); - ADMBASE_BC("ADMBase::curv", stencil); + select_bc(cctkGH, "ADMBase::metric"); + select_bc(cctkGH, "ADMBase::curv"); } if (CCTK_EQUALS(lapse_evolution_method, "static")) - ADMBASE_BC("ADMBase::lapse", stencil); + select_bc(cctkGH, "ADMBase::lapse"); if (!CCTK_EQUALS(initial_dtlapse, "none") && CCTK_EQUALS(dtlapse_evolution_method, "static")) - ADMBASE_BC("ADMBase::dtlapse", stencil); + select_bc(cctkGH, "ADMBase::dtlapse"); if (!CCTK_EQUALS(initial_shift, "none") && CCTK_EQUALS(shift_evolution_method, "static")) - ADMBASE_BC("ADMBase::shift", stencil); + select_bc(cctkGH, "ADMBase::shift"); if (!CCTK_EQUALS(initial_dtshift, "none") && CCTK_EQUALS(dtshift_evolution_method, "static")) - ADMBASE_BC("ADMBase::dtshift", stencil); + select_bc(cctkGH, "ADMBase::dtshift"); } -#undef ADMBase_BC -- cgit v1.2.3