[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
s.popinet at niwa.co.nz
Fri May 15 02:52:51 UTC 2009
The following commit has been merged in the upstream branch:
commit d5680364d7ad6772dcfd605bda1f0e0e93ab6b43
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date: Mon Oct 10 14:33:53 2005 +1000
Multilevel diffusion params are defined as part of GfsDiffusion
darcs-hash:20051010043353-fbd8f-58d8719b05d3a0632d276412a9702cd58913e94c.gz
diff --git a/src/ocean.c b/src/ocean.c
index 9d9e1c7..76f2935 100644
--- a/src/ocean.c
+++ b/src/ocean.c
@@ -336,7 +336,6 @@ static void ocean_run (GfsSimulation * sim)
// has sthg to free
gfs_centered_velocity_advection_diffusion (domain, 2,
&sim->advection_params,
- &sim->diffusion_params,
g,
sim->physical_params.alpha);
@@ -704,7 +703,7 @@ static void ocean_run (GfsSimulation * sim)
t->advection.dt = sim->advection_params.dt;
switch (t->advection.scheme) {
case GFS_GODUNOV: case GFS_NONE:
- gfs_tracer_advection_diffusion (domain, &t->advection, &t->diffusion, NULL);
+ gfs_tracer_advection_diffusion (domain, &t->advection, NULL);
break;
case GFS_VOF:
gfs_tracer_vof_advection (domain, &t->advection, NULL);
@@ -720,7 +719,6 @@ static void ocean_run (GfsSimulation * sim)
gfs_centered_velocity_advection_diffusion (domain, 2,
&sim->advection_params,
- &sim->diffusion_params,
g,
sim->physical_params.alpha);
diff --git a/src/output.c b/src/output.c
index 0fb4344..009793a 100644
--- a/src/output.c
+++ b/src/output.c
@@ -678,9 +678,29 @@ static gboolean diffusion_stats_event (GfsEvent * event, GfsSimulation * sim)
{
if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) {
FILE * fp = GFS_OUTPUT (event)->file->fp;
+ GSList * l = NULL, * i;
+
+ i = GFS_DOMAIN (sim)->variables;
+ while (i) {
+ GfsVariable * v = i->data;
- fprintf (fp, "Velocity diffusion before after rate\n");
- multilevel_stats_write (&sim->diffusion_params, fp);
+ if (v->sources) {
+ GSList * j = GTS_SLIST_CONTAINER (v->sources)->items;
+
+ while (j) {
+ GtsObject * o = j->data;
+
+ if (GFS_IS_SOURCE_DIFFUSION (o) && !g_slist_find (l, o)) {
+ l = g_slist_prepend (l, o);
+ fprintf (fp, "%s diffusion\n", v->name);
+ multilevel_stats_write (&GFS_SOURCE_DIFFUSION (o)->D->par, fp);
+ }
+ j = j->next;
+ }
+ }
+ i = i->next;
+ }
+ g_slist_free (l);
return TRUE;
}
return FALSE;
diff --git a/src/simulation.c b/src/simulation.c
index 696ab9f..7a31b55 100644
--- a/src/simulation.c
+++ b/src/simulation.c
@@ -554,7 +554,7 @@ static void simulation_run (GfsSimulation * sim)
t->advection.dt = sim->advection_params.dt;
switch (t->advection.scheme) {
case GFS_GODUNOV: case GFS_NONE:
- gfs_tracer_advection_diffusion (domain, &t->advection, &t->diffusion, NULL);
+ gfs_tracer_advection_diffusion (domain, &t->advection, NULL);
break;
case GFS_VOF:
gfs_tracer_vof_advection (domain, &t->advection, NULL);
@@ -571,7 +571,6 @@ static void simulation_run (GfsSimulation * sim)
gfs_centered_velocity_advection_diffusion (domain,
FTT_DIMENSION,
&sim->advection_params,
- &sim->diffusion_params,
g,
sim->physical_params.alpha);
@@ -776,8 +775,6 @@ static void gfs_simulation_init (GfsSimulation * object)
gfs_advection_params_init (&object->advection_params);
object->advection_params.flux = gfs_face_velocity_advection_flux;
- gfs_multilevel_params_init (&object->diffusion_params);
- object->diffusion_params.tolerance = 1e-6;
gfs_multilevel_params_init (&object->projection_params);
gfs_multilevel_params_init (&object->approx_projection_params);
@@ -1315,7 +1312,7 @@ static void advection_run (GfsSimulation * sim)
t->advection.dt = sim->advection_params.dt;
switch (t->advection.scheme) {
case GFS_GODUNOV:
- gfs_tracer_advection_diffusion (domain, &t->advection, &t->diffusion, NULL);
+ gfs_tracer_advection_diffusion (domain, &t->advection, NULL);
break;
case GFS_VOF:
gfs_tracer_vof_advection (domain, &t->advection, NULL);
diff --git a/src/simulation.h b/src/simulation.h
index 55f0c02..969d543 100644
--- a/src/simulation.h
+++ b/src/simulation.h
@@ -63,7 +63,6 @@ struct _GfsSimulation {
GfsMultilevelParams approx_projection_params;
GfsAdvectionParams advection_params;
- GfsMultilevelParams diffusion_params;
GtsSurface * surface;
gboolean output_surface;
diff --git a/src/source.c b/src/source.c
index f9c4072..b440d87 100644
--- a/src/source.c
+++ b/src/source.c
@@ -393,6 +393,12 @@ static void diffusion_read (GtsObject ** o, GtsFile * fp)
if (fp->type == GTS_ERROR)
return;
+ if (fp->type == '{') {
+ gfs_multilevel_params_read (&d->par, fp);
+ if (fp->type == GTS_ERROR)
+ return;
+ }
+
if (gfs_function_get_constant_value (d->val) == G_MAXDOUBLE &&
(d->mu = gfs_function_get_variable (d->val)) == NULL)
d->mu = gfs_temporary_variable (GFS_DOMAIN (gfs_object_simulation (*o)));
@@ -401,6 +407,8 @@ static void diffusion_read (GtsObject ** o, GtsFile * fp)
static void diffusion_write (GtsObject * o, FILE * fp)
{
gfs_function_write (GFS_DIFFUSION (o)->val, fp);
+ fputc (' ', fp);
+ gfs_multilevel_params_write (&GFS_DIFFUSION (o)->par, fp);
}
static void update_mu (FttCell * cell, GfsDiffusion * d)
@@ -449,6 +457,8 @@ static void diffusion_class_init (GfsDiffusionClass * klass)
static void diffusion_init (GfsDiffusion * d)
{
+ gfs_multilevel_params_init (&d->par);
+ d->par.tolerance = 1e-6;
d->val = gfs_function_new (gfs_function_class (), 0.);
d->mu = NULL;
}
diff --git a/src/source.h b/src/source.h
index 3fbfa67..c967942 100644
--- a/src/source.h
+++ b/src/source.h
@@ -157,6 +157,7 @@ struct _GfsDiffusion {
/*< public >*/
GfsFunction * val;
GfsVariable * mu;
+ GfsMultilevelParams par;
};
typedef struct _GfsDiffusionClass GfsDiffusionClass;
diff --git a/src/timestep.c b/src/timestep.c
index 8e4f831..a2c6700 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -565,7 +565,6 @@ static void variable_sources (GfsDomain * domain,
static void variable_diffusion (GfsDomain * domain,
GfsSourceDiffusion * d,
GfsAdvectionParams * par,
- GfsMultilevelParams * dpar,
GfsVariable * rhs,
GfsFunction * alpha)
{
@@ -573,13 +572,13 @@ static void variable_diffusion (GfsDomain * domain,
dia = gfs_temporary_variable (domain);
- gfs_diffusion_coefficients (domain, d, par->dt, dia, alpha, dpar->beta);
+ gfs_diffusion_coefficients (domain, d, par->dt, dia, alpha, d->D->par.beta);
gfs_domain_surface_bc (domain, par->v);
- gfs_diffusion_rhs (domain, par->v, rhs, dia, dpar->beta);
+ gfs_diffusion_rhs (domain, par->v, rhs, dia, d->D->par.beta);
/* fixme: time shoud be set to t + dt here in case boundary values are
time-dependent in the call below */
gfs_domain_surface_bc (domain, par->v);
- gfs_diffusion (domain, dpar, par->v, rhs, dia);
+ gfs_diffusion (domain, &d->D->par, par->v, rhs, dia);
gts_object_destroy (GTS_OBJECT (dia));
}
@@ -589,7 +588,6 @@ static void variable_diffusion (GfsDomain * domain,
* @domain: a #GfsDomain.
* @dimension: the number of dimensions (2 or 3).
* @apar: the advection parameters.
- * @dpar: the multilevel solver parameters for the diffusion equation.
* @g: the pressure gradient.
* @alpha: the inverse of density or %NULL.
*
@@ -609,7 +607,6 @@ static void variable_diffusion (GfsDomain * domain,
void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
guint dimension,
GfsAdvectionParams * apar,
- GfsMultilevelParams * dpar,
GfsVariable ** g,
GfsFunction * alpha)
{
@@ -618,7 +615,6 @@ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
g_return_if_fail (domain != NULL);
g_return_if_fail (apar != NULL);
- g_return_if_fail (dpar != NULL);
g_return_if_fail (g != NULL);
gfs_domain_timer_start (domain, "centered_velocity_advection_diffusion");
@@ -638,7 +634,7 @@ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
variable_sources (domain, apar, rhs, g);
gts_object_destroy (GTS_OBJECT (g[c]));
g[c] = NULL;
- variable_diffusion (domain, d, apar, dpar, rhs, alpha);
+ variable_diffusion (domain, d, apar, rhs, alpha);
gts_object_destroy (GTS_OBJECT (rhs));
}
else {
@@ -673,7 +669,6 @@ static void average_previous (FttCell * cell, gpointer * data)
* gfs_tracer_advection_diffusion:
* @domain: a #GfsDomain.
* @par: the advection parameters.
- * @dpar: the multilevel solver parameters for the diffusion equation.
* @half: a #GfsVariable or %NULL.
*
* Advects the @v field of @par using the current face-centered (MAC)
@@ -684,7 +679,6 @@ static void average_previous (FttCell * cell, gpointer * data)
*/
void gfs_tracer_advection_diffusion (GfsDomain * domain,
GfsAdvectionParams * par,
- GfsMultilevelParams * dpar,
GfsVariable * half)
{
gpointer data[2];
@@ -692,7 +686,6 @@ void gfs_tracer_advection_diffusion (GfsDomain * domain,
g_return_if_fail (domain != NULL);
g_return_if_fail (par != NULL);
- g_return_if_fail (dpar != NULL);
gfs_domain_timer_start (domain, "tracer_advection_diffusion");
@@ -710,7 +703,7 @@ void gfs_tracer_advection_diffusion (GfsDomain * domain,
gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
(FttCellTraverseFunc) gfs_cell_reset, rhs);
variable_sources (domain, par, rhs, NULL);
- variable_diffusion (domain, d, par, dpar, rhs, NULL);
+ variable_diffusion (domain, d, par, rhs, NULL);
gts_object_destroy (GTS_OBJECT (rhs));
}
else {
diff --git a/src/timestep.h b/src/timestep.h
index e4c7964..b13e2c8 100644
--- a/src/timestep.h
+++ b/src/timestep.h
@@ -61,12 +61,10 @@ void gfs_diffusion (GfsDomain * domain,
void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
guint dimension,
GfsAdvectionParams * apar,
- GfsMultilevelParams * dpar,
GfsVariable ** g,
GfsFunction * alpha);
void gfs_tracer_advection_diffusion (GfsDomain * domain,
GfsAdvectionParams * par,
- GfsMultilevelParams * dpar,
GfsVariable * half);
/* GfsSurfaceGenericBc: Header */
diff --git a/src/variable.c b/src/variable.c
index 3e94833..9f826f1 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -211,7 +211,8 @@ static void variable_tracer_read (GtsObject ** o, GtsFile * fp)
if (fp->type == '{')
gfs_advection_params_read (&GFS_VARIABLE_TRACER (*o)->advection, fp);
if (fp->type == '{')
- gfs_multilevel_params_read (&GFS_VARIABLE_TRACER (*o)->diffusion, fp);
+ g_warning ("%d:%d: specifying diffusion parameters is not done here anymore!",
+ fp->line, fp->pos);
}
static void variable_tracer_write (GtsObject * o, FILE * fp)
@@ -220,8 +221,6 @@ static void variable_tracer_write (GtsObject * o, FILE * fp)
fputc (' ', fp);
gfs_advection_params_write (&GFS_VARIABLE_TRACER (o)->advection, fp);
- fputc (' ', fp);
- gfs_multilevel_params_write (&GFS_VARIABLE_TRACER (o)->diffusion, fp);
}
static void variable_tracer_class_init (GtsObjectClass * klass)
@@ -237,9 +236,6 @@ static void variable_tracer_init (GfsVariableTracer * v)
v->advection.flux = gfs_face_advection_flux;
v->advection.v = GFS_VARIABLE1 (v);
v->advection.fv = NULL;
-
- gfs_multilevel_params_init (&v->diffusion);
- v->diffusion.tolerance = 1e-6;
}
GfsVariableClass * gfs_variable_tracer_class (void)
diff --git a/src/variable.h b/src/variable.h
index f02dfa0..46f102c 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -89,7 +89,6 @@ struct _GfsVariableTracer {
/*< public >*/
GfsAdvectionParams advection;
- GfsMultilevelParams diffusion;
};
#define GFS_VARIABLE_TRACER(obj) GTS_OBJECT_CAST (obj,\
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list