[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:55:29 UTC 2009
The following commit has been merged in the upstream branch:
commit 2192f798c28194765ffdf6e1601790a8345e2e0a
Author: Stephane Popinet <popinet at users.sf.net>
Date: Tue Jul 8 14:01:39 2008 +1000
Multigrid "tricks" for diffusion solver
darcs-hash:20080708040139-d4795-601a04b53b9487fbdacd645bbab28d0a64037d94.gz
diff --git a/src/timestep.c b/src/timestep.c
index c0e1738..9670cf3 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -323,7 +323,7 @@ static void mac_projection (GfsDomain * domain,
par->residual_before = par->residual =
gfs_domain_norm_residual (domain, FTT_TRAVERSE_LEAFS, -1, apar->dt, res1);
gdouble res_max_before = par->residual.infty;
- guint minlevel = par->minlevel, erelax = par->erelax;
+ guint minlevel = par->minlevel;
par->niter = 0;
while (par->niter < par->nitermin ||
(par->residual.infty > par->tolerance && par->niter < par->nitermax)) {
@@ -345,7 +345,6 @@ static void mac_projection (GfsDomain * domain,
par->niter++;
}
par->minlevel = minlevel;
- par->erelax = erelax;
gts_object_destroy (GTS_OBJECT (div));
gts_object_destroy (GTS_OBJECT (dia));
@@ -615,16 +614,30 @@ void gfs_diffusion (GfsDomain * domain,
gfs_diffusion_residual (domain, v, rhs, dia, res);
par->residual_before = par->residual =
gfs_domain_norm_variable (domain, res, NULL, FTT_TRAVERSE_LEAFS, -1);
+ gdouble res_max_before = par->residual.infty;
par->niter = 0;
while (par->niter < par->nitermin ||
(par->residual.infty > par->tolerance && par->niter < par->nitermax)) {
gfs_diffusion_cycle (domain, minlevel, maxlevel, par->nrelax, v, rhs, dia, res);
par->residual = gfs_domain_norm_variable (domain, res, NULL, FTT_TRAVERSE_LEAFS, -1);
+ if (par->residual.infty == res_max_before) /* convergence has stopped!! */
+ break;
+ if (par->residual.infty > res_max_before/1.1 && minlevel < maxlevel)
+ minlevel++;
+ res_max_before = par->residual.infty;
+#if 0
+ fprintf (stderr, "%d bias: %g first: %g second: %g infty: %g minlevel: %d\n",
+ par->niter,
+ par->residual.bias,
+ par->residual.first,
+ par->residual.second,
+ par->residual.infty,
+ minlevel);
+#endif
par->niter++;
}
gts_object_destroy (GTS_OBJECT (res));
-
g_assert (par->residual.infty <= par->tolerance);
}
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list