summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2019-04-12 16:14:04 +0200
committerAnton Khirnov <anton@khirnov.net>2019-05-16 18:25:31 +0200
commit7e7683462c403ea3b9d2d2789ae7740d7f218187 (patch)
treec743caabd67892f57c6b31d4dc6ac2e57a38366e
parent7a4e7a23022fee5431e039e385a96a5244ea4fb9 (diff)
hacks
-rw-r--r--ell_grid_solve.c2
-rw-r--r--mg2d.c5
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;
diff --git a/mg2d.c b/mg2d.c
index 5f2ce22..7cdf7bc 100644
--- a/mg2d.c
+++ b/mg2d.c
@@ -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);