summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2020-01-21 15:01:52 +0100
committerAnton Khirnov <anton@khirnov.net>2020-01-21 15:01:52 +0100
commite918a879ffcd183a6ff866d0c86a9ec7de828415 (patch)
treec410d3079f1941ec71ca721cf5eb10dcb4e8aeeb
parente62cd9dc639e2b73b31f1b6278da285c23d28373 (diff)
Support adaptive step.
-rw-r--r--param.ccl6
-rw-r--r--src/qms.c7
2 files changed, 11 insertions, 2 deletions
diff --git a/param.ccl b/param.ccl
index 22c4d21..1e8e2b5 100644
--- a/param.ccl
+++ b/param.ccl
@@ -82,6 +82,12 @@ CCTK_REAL cfl_factor "" STEERABLE=always
} 0.0
RESTRICTED:
+CCTK_INT adaptive_step "" STEERABLE=always
+{
+ 0:1 :: ""
+} 0
+
+RESTRICTED:
CCTK_INT stats_every "print elliptic solver stats every <count> coarsest-level steps" STEERABLE=always
{
0: :: ""
diff --git a/src/qms.c b/src/qms.c
index 62d8da9..63fbce1 100644
--- a/src/qms.c
+++ b/src/qms.c
@@ -82,6 +82,7 @@ typedef struct QMSMGContext {
int nb_relax_pre;
double tol_residual_base;
double cfl_factor;
+ int adaptive_step;
int solve_level;
int solve_level_max;
int boundary_offset;
@@ -378,6 +379,7 @@ static int alloc_coord_patch(QMSMGContext *ms, int level)
solver->nb_relax_pre = ms->nb_relax_pre;
solver->nb_relax_post = ms->nb_relax_post;
solver->cfl_factor = ms->cfl_factor;
+ solver->adaptive_step = ms->adaptive_step;
solver->max_exact_size = ms->max_exact_size;
solver->opaque = ms;
@@ -1568,7 +1570,7 @@ void qms_mg_eval(CCTK_ARGUMENTS)
static int context_init(cGH *gh, int solve_level, int solve_level_max, int fd_stencil, int maxiter, int exact_size, int nb_cycles,
int nb_relax_pre, int nb_relax_post, double tol_residual_base,
- double cfl_factor, const char *loglevel_str, int boundary_offset,
+ double cfl_factor, int adaptive_step, const char *loglevel_str, int boundary_offset,
QMSMGContext **ctx)
{
QMSMGContext *qms;
@@ -1591,6 +1593,7 @@ static int context_init(cGH *gh, int solve_level, int solve_level_max, int fd_st
qms->nb_relax_post = nb_relax_post;
qms->tol_residual_base = tol_residual_base;
qms->cfl_factor = cfl_factor;
+ qms->adaptive_step = adaptive_step;
qms->boundary_offset = boundary_offset;
for (int i = 0; i < ARRAY_ELEMS(log_levels); i++) {
@@ -1643,7 +1646,7 @@ void qms_mg_init(CCTK_ARGUMENTS)
if (!qms_context) {
ret = context_init(cctkGH, solve_level, solve_level_max, fd_stencil, maxiter, exact_size, nb_cycles,
nb_relax_pre, nb_relax_post, tol_residual_base,
- cfl_factor, loglevel, boundary_offset, &qms_context);
+ cfl_factor, adaptive_step, loglevel, boundary_offset, &qms_context);
if (ret < 0)
CCTK_WARN(0, "Error initializing the solver context");
}