diff options
author | Anton Khirnov <anton@khirnov.net> | 2020-01-21 15:01:52 +0100 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2020-01-21 15:01:52 +0100 |
commit | e918a879ffcd183a6ff866d0c86a9ec7de828415 (patch) | |
tree | c410d3079f1941ec71ca721cf5eb10dcb4e8aeeb | |
parent | e62cd9dc639e2b73b31f1b6278da285c23d28373 (diff) |
Support adaptive step.
-rw-r--r-- | param.ccl | 6 | ||||
-rw-r--r-- | src/qms.c | 7 |
2 files changed, 11 insertions, 2 deletions
@@ -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: :: "" @@ -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"); } |