aboutsummaryrefslogtreecommitdiff
path: root/mg2d.c
diff options
context:
space:
mode:
Diffstat (limited to 'mg2d.c')
-rw-r--r--mg2d.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/mg2d.c b/mg2d.c
index 6639879..59df5c1 100644
--- a/mg2d.c
+++ b/mg2d.c
@@ -109,7 +109,8 @@ static int coarse_correct_task(void *arg, unsigned int job_idx, unsigned int thr
return 0;
}
-static int mg_relax_step(MG2DContext *ctx, MG2DLevel *level, const char *step_desc)
+static int mg_relax_step(MG2DContext *ctx, MG2DLevel *level, const char *step_desc,
+ int export_res)
{
double res_old;
int ret;
@@ -117,7 +118,7 @@ static int mg_relax_step(MG2DContext *ctx, MG2DLevel *level, const char *step_de
res_old = level->solver->residual_max;
mg2di_timer_start(&level->timer_solve);
- ret = mg2di_egs_solve(level->solver);
+ ret = mg2di_egs_solve(level->solver, export_res);
mg2di_timer_stop(&level->timer_solve);
if (ret < 0)
@@ -153,7 +154,7 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
/* handle coarsest grid */
if (!level->child) {
- ret = mg_relax_step(ctx, level, "coarse-step");
+ ret = mg_relax_step(ctx, level, "coarse-step", 1);
if (ret < 0)
return ret;
level->count_cycles++;
@@ -166,7 +167,7 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
/* pre-restrict relaxation */
for (int j = 0; j < ctx->nb_relax_pre; j++) {
- ret = mg_relax_step(ctx, level, "pre-relax");
+ ret = mg_relax_step(ctx, level, "pre-relax", j == ctx->nb_relax_pre - 1);
if (ret < 0)
return ret;
}
@@ -209,7 +210,7 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level)
/* post-correct relaxation */
for (int j = 0; j < ctx->nb_relax_post; j++) {
- ret = mg_relax_step(ctx, level, "post-relax");
+ ret = mg_relax_step(ctx, level, "post-relax", 0);
if (ret < 0)
return ret;
}