From 0a532d47e46a0d7780b7b1bda8b57e762dda88ef Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Fri, 4 Jan 2019 09:48:17 +0100 Subject: Make the cfl factor used for relaxation runtime-configurable. --- param.ccl | 6 ++++++ src/maximal_slicing_axi_mg.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/param.ccl b/param.ccl index 204a942..ec6f908 100644 --- a/param.ccl +++ b/param.ccl @@ -43,6 +43,12 @@ CCTK_REAL tol_residual "maximum absolute value of the residual" 0: :: "" } 1e-12 +RESTRICTED: +CCTK_REAL cfl_factor "" +{ + 0: :: "" +} 0.0 + RESTRICTED: CCTK_INT stats_every "print elliptic solver stats every coarsest-level steps" { 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"); -- cgit v1.2.3