[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203

Stephane Popinet popinet at users.sf.net
Fri May 15 02:54:52 UTC 2009


The following commit has been merged in the upstream branch:
commit 40d7bdecc2259dd65f0d1ccf00a217078abcb685
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Mon Nov 12 12:59:18 2007 +1100

    VOF advection should now work also with embedded solid boundaries
    
    darcs-hash:20071112015918-d4795-c23cebe54bda7c96924c02c25c8c9f1ae14b0fdc.gz

diff --git a/src/vof.c b/src/vof.c
index 05ce588..994a1a0 100644
--- a/src/vof.c
+++ b/src/vof.c
@@ -1088,8 +1088,7 @@ GfsVariableClass * gfs_variable_tracer_vof_class (void)
 }
 
 typedef struct {
-  GfsAdvectionParams * par;
-  GfsVariable * dV;
+  GfsAdvectionParams * par, vpar;
   FttComponent c;
   GfsDomain * domain;
   guint depth, too_coarse;
@@ -1206,7 +1205,7 @@ static void vof_cell_fine_init (FttCell * parent, VofParms * p)
   ftt_cell_children (parent, &child);
   for (n = 0; n < FTT_CELLS; n++) {
     g_assert (child.c[n]);
-    GFS_VARIABLE (child.c[n], p->dV->i) = GFS_VARIABLE (parent, p->dV->i);
+    GFS_VARIABLE (child.c[n], p->vpar.v->i) = GFS_VARIABLE (parent, p->vpar.v->i);
     div[n] = 0.;
     FttComponent c;
     for (c = 0; c < FTT_DIMENSION; c++)
@@ -1313,19 +1312,19 @@ static void vof_flux (FttCellFace * face, VofParms * p)
     if (un < 0.)
       flux = GFS_STATE (face->neighbor)->f[FTT_OPPOSITE_DIRECTION (face->d)].v*un;
     GFS_VARIABLE (face->neighbor, p->par->fv->i) += flux;
-    GFS_VARIABLE (face->neighbor, p->dV->i) += un;
+    GFS_VARIABLE (face->neighbor, p->vpar.fv->i) += un;
     break;
   }
   case FTT_FINE_COARSE: {
     GFS_VARIABLE (face->neighbor, p->par->fv->i) += flux/FTT_CELLS;
-    GFS_VARIABLE (face->neighbor, p->dV->i) += un/FTT_CELLS;
+    GFS_VARIABLE (face->neighbor, p->vpar.fv->i) += un/FTT_CELLS;
     break;
   }
   default:
     g_assert_not_reached ();
   }
-  GFS_VARIABLE (face->cell, p->dV->i) -= un;
   GFS_VARIABLE (face->cell, p->par->fv->i) -= flux;
+  GFS_VARIABLE (face->cell, p->vpar.fv->i) -= un;
 }
 
 static void initialize_dV (FttCell * cell, GfsVariable * dV)
@@ -1336,13 +1335,14 @@ static void initialize_dV (FttCell * cell, GfsVariable * dV)
 static void f_times_dV (FttCell * cell, VofParms * p)
 {
   GFS_VARIABLE (cell, p->par->fv->i) = 0.;
-  GFS_VARIABLE (cell, p->par->v->i) *= GFS_VARIABLE (cell, p->dV->i);
+  GFS_VARIABLE (cell, p->vpar.fv->i) = 0.;
+  GFS_VARIABLE (cell, p->par->v->i) *= GFS_VARIABLE (cell, p->vpar.v->i);
 }
 
 static void f_over_dV (FttCell * cell, VofParms * p)
 {
-  g_assert (GFS_VARIABLE (cell, p->dV->i) > 0.);
-  gdouble f = GFS_VARIABLE (cell, p->par->v->i)/GFS_VARIABLE (cell, p->dV->i);
+  g_assert (GFS_VARIABLE (cell, p->vpar.v->i) > 0.);
+  gdouble f = GFS_VARIABLE (cell, p->par->v->i)/GFS_VARIABLE (cell, p->vpar.v->i);
   GFS_VARIABLE (cell, p->par->v->i) = f < 1e-10 ? 0. : f > 1. - 1e-10 ? 1. : f;
 }
 
@@ -1398,9 +1398,11 @@ void gfs_tracer_vof_advection (GfsDomain * domain,
   gfs_domain_timer_start (domain, "tracer_vof_advection");
 
   p.par = par;
-  p.dV = gfs_temporary_variable (domain);
+  p.vpar.v = gfs_temporary_variable (domain);
+  p.vpar.fv = gfs_temporary_variable (domain);
+  p.vpar.average = par->average;
   gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			    (FttCellTraverseFunc) initialize_dV, p.dV);
+			    (FttCellTraverseFunc) initialize_dV, p.vpar.v);
   par->fv = gfs_temporary_variable (domain);
   for (c = 0; c < FTT_DIMENSION; c++) {
     p.c = (cstart + c) % FTT_DIMENSION;
@@ -1417,6 +1419,7 @@ void gfs_tracer_vof_advection (GfsDomain * domain,
 			      FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 			      (FttFaceTraverseFunc) vof_flux, &p);
     gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) gfs_advection_update, par);
+    gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) gfs_advection_update, &p.vpar);
     gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
     			      (FttCellTraverseFunc) f_over_dV, &p);
     gfs_domain_cell_traverse (domain, FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1,
@@ -1428,7 +1431,8 @@ void gfs_tracer_vof_advection (GfsDomain * domain,
   cstart = (cstart + 1) % FTT_DIMENSION;
   gts_object_destroy (GTS_OBJECT (par->fv));
   par->fv = NULL;
-  gts_object_destroy (GTS_OBJECT (p.dV));
+  gts_object_destroy (GTS_OBJECT (p.vpar.v));
+  gts_object_destroy (GTS_OBJECT (p.vpar.fv));
 
   gfs_domain_timer_stop (domain, "tracer_vof_advection");
 }

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list