[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:53:48 UTC 2009
The following commit has been merged in the upstream branch:
commit 7f2ffbdcb9a6ac06640b524786d58f7be58f0509
Author: Stephane Popinet <popinet at users.sf.net>
Date: Fri Dec 1 13:35:09 2006 +1100
Bug fix for VOF boundary conditions
darcs-hash:20061201023509-d4795-5a14cda8d8917c5c49383d6809aee08a845ac1da.gz
diff --git a/src/vof.c b/src/vof.c
index 2e432ae..1b7ec81 100644
--- a/src/vof.c
+++ b/src/vof.c
@@ -603,8 +603,8 @@ static gdouble coarse_fraction (FttCellFace * face, VofParms * p, gdouble un)
return plane_volume_shifted (m, alpha, q);
}
}
-
-static void vof_flux (FttCellFace * face, VofParms * p)
+
+static void vof_face_value (FttCellFace * face, VofParms * p)
{
gdouble un = GFS_FACE_NORMAL_VELOCITY (face)*p->par->dt/ftt_cell_size (face->cell);
if (!FTT_FACE_DIRECT (face))
@@ -619,7 +619,30 @@ static void vof_flux (FttCellFace * face, VofParms * p)
face->d = FTT_OPPOSITE_DIRECTION (face->d);
un = - un;
}
- gdouble f = fine_fraction (face, p, un);
+ GFS_STATE (face->cell)->f[face->d].v = fine_fraction (face, p, un);
+ break;
+ }
+ case FTT_FINE_COARSE: {
+ GFS_STATE (face->cell)->f[face->d].v =
+ un > 0. ? fine_fraction (face, p, un) : coarse_fraction (face, p, -un/2.);
+ break;
+ }
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+static void vof_flux (FttCellFace * face, VofParms * p)
+{
+ gdouble un = GFS_FACE_NORMAL_VELOCITY (face)*p->par->dt/ftt_cell_size (face->cell);
+ if (!FTT_FACE_DIRECT (face))
+ un = - un;
+
+ switch (ftt_face_type (face)) {
+ case FTT_FINE_FINE: {
+ gdouble f = un > 0. ?
+ GFS_STATE (face->cell)->f[face->d].v :
+ GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v;
GFS_VARIABLE (face->cell, p->par->fv->i) +=
(GFS_VARIABLE (face->cell, p->par->v->i) - f)*un;
GFS_VARIABLE (face->neighbor, p->par->fv->i) -=
@@ -630,7 +653,7 @@ static void vof_flux (FttCellFace * face, VofParms * p)
GFS_VARIABLE (face->cell, p->par->fv->i) += GFS_VARIABLE (face->cell, p->par->v->i)*un;
GFS_VARIABLE (face->neighbor, p->par->fv->i) -= coarse_fraction (face, p, 1.)*un/FTT_CELLS;
- gdouble flux = un > 0. ? fine_fraction (face, p, un)*un : coarse_fraction (face, p, -un/2.)*un;
+ gdouble flux = GFS_STATE (face->cell)->f[face->d].v*un;
GFS_VARIABLE (face->cell, p->par->fv->i) -= flux;
GFS_VARIABLE (face->neighbor, p->par->fv->i) += flux/FTT_CELLS;
break;
@@ -677,7 +700,10 @@ void gfs_tracer_vof_advection (GfsDomain * domain,
gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
(FttCellTraverseFunc) vof_plane, &p);
- gfs_domain_face_bc (domain, c, par->v);
+ gfs_domain_face_traverse (domain, p.c,
+ FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttFaceTraverseFunc) vof_face_value, &p);
+ gfs_domain_face_bc (domain, p.c, par->v);
gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
(FttCellTraverseFunc) gfs_cell_reset, par->fv);
gfs_domain_face_traverse (domain, p.c,
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list