diff options
author | Anton Khirnov <anton@khirnov.net> | 2019-04-12 16:14:04 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2019-05-16 18:25:31 +0200 |
commit | 7e7683462c403ea3b9d2d2789ae7740d7f218187 (patch) | |
tree | c743caabd67892f57c6b31d4dc6ac2e57a38366e | |
parent | 7a4e7a23022fee5431e039e385a96a5244ea4fb9 (diff) |
hacks
-rw-r--r-- | ell_grid_solve.c | 2 | ||||
-rw-r--r-- | mg2d.c | 5 |
2 files changed, 5 insertions, 2 deletions
diff --git a/ell_grid_solve.c b/ell_grid_solve.c index 13d9072..f8512f6 100644 --- a/ell_grid_solve.c +++ b/ell_grid_solve.c @@ -403,7 +403,7 @@ static int exact_arrays_alloc(EGSContext *ctx) goto fail; } - ret = mg2di_bicgstab_context_alloc(&e->bicgstab, e->N, 64); + ret = mg2di_bicgstab_context_alloc(&e->bicgstab, e->N, 4); if (ret < 0) goto fail; @@ -169,10 +169,13 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level, int allow_exact) /* pre-restrict relaxation */ for (int j = 0; j < ctx->nb_relax_pre; j++) { + res_prev = level->solver->residual_max; ret = mg_solve(ctx, level, solve_type, "pre-relax", j == ctx->nb_relax_pre - 1 && level->child); if (ret < 0) return ret; + if (res_prev / level->solver->residual_max > 1.1) + j--; } if (level->child) { @@ -228,7 +231,7 @@ static int mg_solve_subgrid(MG2DContext *ctx, MG2DLevel *level, int allow_exact) finish: res_new = level->solver->residual_max; if (!isfinite(res_new) || - (res_new > 1e2 * DBL_EPSILON && res_old / res_new <= 1e-1)) { + (res_new > 1e2 * DBL_EPSILON && res_old / res_new <= 1e-2)) { mg2di_log(&ctx->priv->logger, MG2D_LOG_ERROR, "The relaxation step at level %d has diverged: %g -> %g\n", level->depth, res_old, res_new); |