[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sourceforge.net
Fri May 15 02:51:41 UTC 2009
The following commit has been merged in the upstream branch:
commit 67b80c656e62375f70af97a1591fa2e4bc64fb71
Author: Stephane Popinet <popinet at users.sourceforge.net>
Date: Tue Nov 9 13:15:59 2004 +1100
Removed some of the "mixed cell refinement" constraints (gerris--ocean--0.7--patch-2)
gerris--ocean--0.7--patch-2
Keywords:
Probably needs more careful review.
darcs-hash:20041109021559-aabb8-457832cd2c754d51e98d7ea33b24c14bbc269340.gz
diff --git a/src/fluid.c b/src/fluid.c
index 38b9a90..74a18aa 100644
--- a/src/fluid.c
+++ b/src/fluid.c
@@ -133,7 +133,6 @@ static GfsGradient interpolate_1D1 (FttCell * cell,
FttCellFace f;
g_return_val_if_fail (cell != NULL, p);
- g_return_val_if_fail (!GFS_IS_MIXED (cell), p);
f = ftt_cell_face (cell, d);
if (f.neighbor) {
@@ -223,6 +222,7 @@ static Gradient gradient_fine_coarse (const FttCellFace * face,
guint level;
FttCell * n;
GfsGradient p;
+ GfsSolidVector * s;
#if (FTT_2D || FTT_2D3)
gint dp;
#else /* FTT_3D */
@@ -232,11 +232,10 @@ static Gradient gradient_fine_coarse (const FttCellFace * face,
g_return_val_if_fail (face != NULL, g);
g_return_val_if_fail (ftt_face_type (face) == FTT_FINE_COARSE, g);
- /* check for mixed cell refinement violation (topology.fig) */
- g_return_val_if_fail (!GFS_IS_MIXED (face->neighbor), g);
-
level = ftt_cell_level (face->cell);
- n = ftt_cell_neighbor (face->cell, FTT_OPPOSITE_DIRECTION (face->d));
+ s = GFS_STATE (face->cell)->solid;
+ n = (s != NULL && s->s[FTT_OPPOSITE_DIRECTION (face->d)] == 0.) ? NULL :
+ ftt_cell_neighbor (face->cell, FTT_OPPOSITE_DIRECTION (face->d));
g_assert (n == NULL || ftt_cell_level (n) == level);
dp = perpendicular[face->d][FTT_CELL_ID (face->cell)];
@@ -488,7 +487,7 @@ void gfs_face_gradient (const FttCellFace * face,
g_return_if_fail (face != NULL);
g->a = g->b = 0.;
- if (face->neighbor == NULL)
+ if (face->neighbor == NULL || GFS_FACE_FRACTION (face) == 0.)
return;
level = ftt_cell_level (face->cell);
@@ -511,26 +510,27 @@ void gfs_face_gradient (const FttCellFace * face,
FttCellChildren children;
FttCellFace f;
guint i, n;
+ gdouble s;
f.d = FTT_OPPOSITE_DIRECTION (face->d);
n = ftt_cell_children_direction (face->neighbor, f.d, &children);
f.neighbor = face->cell;
- for (i = 0; i < n; i++) {
- Gradient gcf;
-
- f.cell = children.c[i];
-
- /* check for mixed cell refinement violation (topology.fig) */
- g_assert (f.cell);
-
- gcf = gradient_fine_coarse (&f, v, max_level);
- g->a += gcf.b;
- g->b += gcf.a*GFS_VARIABLE (f.cell, v) - gcf.c;
- }
-#if (!FTT_2D && !FTT_2D3)
- g->a /= 2.;
- g->b /= 2.;
-#endif /* not 2D and not 2D3 */
+ for (i = 0; i < n; i++)
+ if ((f.cell = children.c[i])) {
+ Gradient gcf;
+ gcf = gradient_fine_coarse (&f, v, max_level);
+ s = GFS_FACE_FRACTION (&f);
+ g->a += s*gcf.b;
+ g->b += s*(gcf.a*GFS_VARIABLE (f.cell, v) - gcf.c);
+ }
+ s = GFS_FACE_FRACTION (face);
+#if (FTT_2D || FTT_2D3)
+ g->a /= s;
+ g->b /= s;
+#else /* 3D */
+ g->a /= 2.*s;
+ g->b /= 2.*s;
+#endif /* 3D */
}
}
}
@@ -588,20 +588,15 @@ void gfs_face_weighted_gradient (const FttCellFace * face,
f.d = FTT_OPPOSITE_DIRECTION (face->d);
n = ftt_cell_children_direction (face->neighbor, f.d, &children);
f.neighbor = face->cell;
- for (i = 0; i < n; i++) {
- Gradient gcf;
- gdouble w;
-
- f.cell = children.c[i];
- w = GFS_STATE (f.cell)->f[f.d].v;
+ for (i = 0; i < n; i++)
+ if ((f.cell = children.c[i])) {
+ Gradient gcf;
+ gdouble w = GFS_STATE (f.cell)->f[f.d].v;
- /* check for mixed cell refinement violation (topology.fig) */
- g_assert (f.cell);
-
- gcf = gradient_fine_coarse (&f, v, max_level);
- g->a += w*gcf.b;
- g->b += w*(gcf.a*GFS_VARIABLE (f.cell, v) - gcf.c);
- }
+ gcf = gradient_fine_coarse (&f, v, max_level);
+ g->a += w*gcf.b;
+ g->b += w*(gcf.a*GFS_VARIABLE (f.cell, v) - gcf.c);
+ }
#if (!FTT_2D && !FTT_2D3)
g->a /= 2.;
g->b /= 2.;
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list