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

Stephane Popinet popinet at users.sf.net
Fri May 15 02:53:16 UTC 2009


The following commit has been merged in the upstream branch:
commit f04a6bd5c09102f4690bbed5337602cd698c5138
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Fri May 12 11:29:04 2006 +1000

    Quirk's merged fluxes are used for tracer advection rather than averaging
    
    They should be used also for momentum advection but this needs testing.
    
    darcs-hash:20060512012904-d4795-e6d1b4c2f322664f863b094d9de68f6f240c9f60.gz

diff --git a/src/advection.c b/src/advection.c
index e906d07..85efe23 100644
--- a/src/advection.c
+++ b/src/advection.c
@@ -805,17 +805,19 @@ fprintf (stderr, "%g %g %g\n",
     else
       GFS_VARIABLE (cell, par->v->i) += GFS_VARIABLE (cell, par->fv->i);
   }
-  else {
-#if 0 /* J.J. Quirk volume-weighted values */
+  else if (par->average) {
+    /* average value */
     GSList * i = merged;
     gdouble w = 0., total_vol = 0.;
 
     while (i) {
       FttCell * cell = i->data;
+      gdouble vol = ftt_cell_volume (cell);
       gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.;
       
-      total_vol += a;
-      w += GFS_VARIABLE (cell, par->fv->i);
+      total_vol += vol*a;
+      w += vol*(a*GFS_VARIABLE (cell, par->v->i) + 
+		GFS_VARIABLE (cell, par->fv->i));
       i = i->next;
     }
     w /= total_vol;
@@ -824,21 +826,21 @@ fprintf (stderr, "%g %g %g\n",
     while (i) {
       FttCell * cell = i->data;
 
-      GFS_VARIABLE (cell, par->v->i) += w;
+      GFS_VARIABLE (cell, par->v->i) = w;
       i = i->next;
     }
-#else /* average value */
+  }
+  else {
+    /* J.J. Quirk volume-weighted values */
     GSList * i = merged;
     gdouble w = 0., total_vol = 0.;
 
     while (i) {
       FttCell * cell = i->data;
-      gdouble vol = ftt_cell_volume (cell);
       gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.;
       
-      total_vol += vol*a;
-      w += vol*(a*GFS_VARIABLE (cell, par->v->i) + 
-		GFS_VARIABLE (cell, par->fv->i));
+      total_vol += a;
+      w += GFS_VARIABLE (cell, par->fv->i);
       i = i->next;
     }
     w /= total_vol;
@@ -847,10 +849,9 @@ fprintf (stderr, "%g %g %g\n",
     while (i) {
       FttCell * cell = i->data;
 
-      GFS_VARIABLE (cell, par->v->i) = w;
+      GFS_VARIABLE (cell, par->v->i) += w;
       i = i->next;
     }
-#endif
   }
 }
 
@@ -863,7 +864,8 @@ void gfs_advection_params_write (GfsAdvectionParams * par, FILE * fp)
            "{\n"
 	   "  cfl      = %g\n"
 	   "  gradient = %s\n"
-	   "  flux     = %s\n",
+	   "  flux     = %s\n"
+	   "  average  = %d\n",
 	   par->cfl,
 	   par->gradient == gfs_center_gradient ? 
 	   "gfs_center_gradient" :
@@ -873,7 +875,8 @@ void gfs_advection_params_write (GfsAdvectionParams * par, FILE * fp)
 	   par->flux == gfs_face_velocity_advection_flux ?
 	   "gfs_face_velocity_advection_flux" :
 	   par->flux == gfs_face_velocity_convective_flux ?
-	   "gfs_face_velocity_convective_flux" : "NULL");
+	   "gfs_face_velocity_convective_flux" : "NULL",
+	   par->average);
   switch (par->scheme) {
   case GFS_GODUNOV: fputs ("  scheme   = godunov\n", fp); break;
   case GFS_VOF:     fputs ("  scheme   = vof\n", fp); break;
@@ -895,6 +898,7 @@ void gfs_advection_params_init (GfsAdvectionParams * par)
   par->upwinding = GFS_FACE_UPWINDING;
   par->use_centered_velocity = TRUE;
   par->scheme = GFS_GODUNOV;
+  par->average = FALSE;
 }
 
 void gfs_advection_params_read (GfsAdvectionParams * par, GtsFile * fp)
@@ -904,6 +908,7 @@ void gfs_advection_params_read (GfsAdvectionParams * par, GtsFile * fp)
     {GTS_STRING, "gradient", TRUE},
     {GTS_STRING, "flux",     TRUE},
     {GTS_STRING, "scheme",   TRUE},
+    {GTS_INT,    "average",  TRUE},
     {GTS_NONE}
   };
   gchar * gradient = NULL, * flux = NULL, * scheme = NULL;
@@ -915,6 +920,7 @@ void gfs_advection_params_read (GfsAdvectionParams * par, GtsFile * fp)
   var[1].data = &gradient;
   var[2].data = &flux;
   var[3].data = &scheme;
+  var[4].data = &par->average;
 
   gfs_advection_params_init (par);
   gts_file_assign_variables (fp, var);
diff --git a/src/advection.h b/src/advection.h
index 7e33c85..32c073e 100644
--- a/src/advection.h
+++ b/src/advection.h
@@ -51,6 +51,7 @@ struct _GfsAdvectionParams {
   GfsUpwinding upwinding;
   GfsFaceAdvectionFluxFunc flux;
   GfsAdvectionScheme scheme;
+  gboolean average;
 };
 
 void         gfs_advection_params_init        (GfsAdvectionParams * par);
diff --git a/src/simulation.c b/src/simulation.c
index cc70928..7499026 100644
--- a/src/simulation.c
+++ b/src/simulation.c
@@ -762,6 +762,7 @@ static void gfs_simulation_init (GfsSimulation * object)
 
   gfs_advection_params_init (&object->advection_params);
   object->advection_params.flux = gfs_face_velocity_advection_flux;
+  object->advection_params.average = TRUE;
 
   gfs_multilevel_params_init (&object->projection_params);
   gfs_multilevel_params_init (&object->approx_projection_params);

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list