diff options
Diffstat (limited to 'mg2d.c')
-rw-r--r-- | mg2d.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -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; } |