[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