summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-01-04 09:48:17 +0100
committerAnton Khirnov <anton@khirnov.net>2019-01-04 09:48:17 +0100
commit0a532d47e46a0d7780b7b1bda8b57e762dda88ef (patch)
treeef66868951ce3c418932374642cbb1166f0da8bf
parent67c119e0cab3b371888340d165e3d7bcf74a478d (diff)
Make the cfl factor used for relaxation runtime-configurable.
-rw-r--r--param.ccl6
-rw-r--r--src/maximal_slicing_axi_mg.c5
2 files changed, 11 insertions, 0 deletions
diff --git a/param.ccl b/param.ccl
index 204a942..ec6f908 100644
--- a/param.ccl
+++ b/param.ccl
@@ -44,6 +44,12 @@ CCTK_REAL tol_residual "maximum absolute value of the residual"
} 1e-12
RESTRICTED:
+CCTK_REAL cfl_factor ""
+{
+ 0: :: ""
+} 0.0
+
+RESTRICTED:
CCTK_INT stats_every "print elliptic solver stats every <count> coarsest-level steps"
{
0: :: ""
diff --git a/src/maximal_slicing_axi_mg.c b/src/maximal_slicing_axi_mg.c
index 899ef35..c7d6d18 100644
--- a/src/maximal_slicing_axi_mg.c
+++ b/src/maximal_slicing_axi_mg.c
@@ -83,6 +83,7 @@ typedef struct MSMGContext {
int nb_relax_post;
int nb_relax_pre;
double tol_residual;
+ double cfl_factor;
CoordPatch *patches;
int nb_patches;
@@ -246,6 +247,7 @@ static CoordPatch *get_coord_patch(MSMGContext *ms, int level)
cp->solver->nb_cycles = ms->nb_cycles;
cp->solver->nb_relax_post = ms->nb_relax_post;
cp->solver->nb_relax_pre = ms->nb_relax_pre;
+ cp->solver->cfl_factor = ms->cfl_factor;
cp->solver->opaque = ms;
cp->solver->log_callback = log_callback;
@@ -327,6 +329,7 @@ static void print_stats(MSMGContext *ms)
static int context_init(cGH *gh, int fd_stencil, int maxiter, int nb_cycles,
int nb_relax_pre, int nb_relax_post, double tol_residual,
+ double cfl_factor,
const char *loglevel_str,
MSMGContext **ctx)
{
@@ -344,6 +347,7 @@ static int context_init(cGH *gh, int fd_stencil, int maxiter, int nb_cycles,
ms->nb_relax_pre = nb_relax_pre;
ms->nb_relax_post = nb_relax_post;
ms->tol_residual = tol_residual;
+ ms->cfl_factor = cfl_factor;
for (int i = 0; i < ARRAY_ELEMS(log_levels); i++) {
if (!strcmp(loglevel_str, log_levels[i].str)) {
@@ -888,6 +892,7 @@ void msa_mg_init(CCTK_ARGUMENTS)
ret = context_init(cctkGH, fd_stencil, maxiter, nb_cycles,
nb_relax_pre, nb_relax_post, tol_residual,
+ cfl_factor,
loglevel, &ms);
if (ret < 0)
CCTK_WARN(0, "Error initializing the solver context");