summaryrefslogtreecommitdiff
path: root/src/maximal_slicing_axi_mg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/maximal_slicing_axi_mg.c')
-rw-r--r--src/maximal_slicing_axi_mg.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/src/maximal_slicing_axi_mg.c b/src/maximal_slicing_axi_mg.c
index 0fe9a54..93130d7 100644
--- a/src/maximal_slicing_axi_mg.c
+++ b/src/maximal_slicing_axi_mg.c
@@ -78,6 +78,11 @@ typedef struct MSMGContext {
cGH *gh;
int fd_stencil;
+ int maxiter;
+ int nb_cycles;
+ int nb_relax_post;
+ int nb_relax_pre;
+ double tol_residual;
CoordPatch *patches;
int nb_patches;
@@ -236,9 +241,11 @@ static CoordPatch *get_coord_patch(MSMGContext *ms, int level)
cp->solver->boundaries[MG2D_BOUNDARY_0U]->type = MG2D_BC_TYPE_FIXVAL;
cp->solver->boundaries[MG2D_BOUNDARY_1U]->type = MG2D_BC_TYPE_FIXVAL;
- cp->solver->maxiter = 32;
- cp->solver->tol = 1e-10;
- cp->solver->nb_cycles = 2;
+ cp->solver->maxiter = ms->maxiter;
+ cp->solver->tol = ms->tol_residual;
+ 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->opaque = ms;
cp->solver->log_callback = log_callback;
@@ -318,7 +325,9 @@ static void print_stats(MSMGContext *ms)
ms->log_level = orig_log_level;
}
-static int context_init(cGH *gh, int fd_stencil, const char *loglevel_str,
+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,
+ const char *loglevel_str,
MSMGContext **ctx)
{
MSMGContext *ms;
@@ -329,7 +338,12 @@ static int context_init(cGH *gh, int fd_stencil, const char *loglevel_str,
return -ENOMEM;
ms->gh = gh;
- ms->fd_stencil = fd_stencil;
+ ms->fd_stencil = fd_stencil;
+ ms->maxiter = maxiter;
+ ms->nb_cycles = nb_cycles;
+ ms->nb_relax_pre = nb_relax_pre;
+ ms->nb_relax_post = nb_relax_post;
+ ms->tol_residual = tol_residual;
for (int i = 0; i < ARRAY_ELEMS(log_levels); i++) {
if (!strcmp(loglevel_str, log_levels[i].str)) {
@@ -869,7 +883,9 @@ void msa_mg_init(CCTK_ARGUMENTS)
DECLARE_CCTK_PARAMETERS;
int ret;
- ret = context_init(cctkGH, fd_stencil, loglevel, &ms);
+ ret = context_init(cctkGH, fd_stencil, maxiter, nb_cycles,
+ nb_relax_pre, nb_relax_post, tol_residual,
+ loglevel, &ms);
if (ret < 0)
CCTK_WARN(0, "Error initializing the solver context");
}