[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
s.popinet at niwa.co.nz
Fri May 15 02:52:49 UTC 2009
The following commit has been merged in the upstream branch:
commit 59ea32fb94db0ac1f000c33b2d149f04f9d37e9f
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date: Thu Oct 6 08:48:58 2005 +1000
Variable viscosity coupled with variable density should now work
darcs-hash:20051005224858-fbd8f-cce74e55484f3431731ffee1c29423459e0537ba.gz
diff --git a/src/ocean.c b/src/ocean.c
index 20b698c..9d9e1c7 100644
--- a/src/ocean.c
+++ b/src/ocean.c
@@ -337,7 +337,8 @@ static void ocean_run (GfsSimulation * sim)
gfs_centered_velocity_advection_diffusion (domain, 2,
&sim->advection_params,
&sim->diffusion_params,
- g);
+ g,
+ sim->physical_params.alpha);
gfs_poisson_coefficients (domain, fH);
gfs_correct_normal_velocities_weighted (domain, 2, p, g, 0.,
@@ -720,7 +721,8 @@ static void ocean_run (GfsSimulation * sim)
gfs_centered_velocity_advection_diffusion (domain, 2,
&sim->advection_params,
&sim->diffusion_params,
- g);
+ g,
+ sim->physical_params.alpha);
/* barotropic pressure and Coriolis terms */
set_solid2D (sim, solid);
diff --git a/src/poisson.c b/src/poisson.c
index 1b08935..e1ef8a2 100644
--- a/src/poisson.c
+++ b/src/poisson.c
@@ -486,7 +486,7 @@ static void face_coeff_from_below (FttCell * cell)
/**
* gfs_poisson_coefficients:
* @domain: a #GfsDomain.
- * @alpha: the density or %NULL.
+ * @alpha: the inverse of density or %NULL.
*
* Initializes the face coefficients for the Poisson equation
* $\nabla\cdot\alpha\nabla p=\dots$.
@@ -701,7 +701,8 @@ static void diffusion_mixed_coef (FttCell * cell, gpointer * data)
GFS_STATE (cell)->solid->v = *dt*gfs_source_diffusion_cell (d, cell);
}
- GFS_VARIABLE (cell, GFS_VARIABLE1 (data[3])->i) = 1.;
+ GFS_VARIABLE (cell, GFS_VARIABLE1 (data[3])->i) =
+ data[4] ? 1./gfs_function_value (data[4], cell) : 1.;
}
/**
@@ -710,16 +711,18 @@ static void diffusion_mixed_coef (FttCell * cell, gpointer * data)
* @d: a #GfsSourceDiffusion.
* @dt: the time-step.
* @dia: where to store the diagonal weight.
+ * @alpha: the inverse of density or %NULL.
*
* Initializes the face coefficients for the diffusion equation.
*/
void gfs_diffusion_coefficients (GfsDomain * domain,
GfsSourceDiffusion * d,
gdouble dt,
- GfsVariable * dia)
+ GfsVariable * dia,
+ GfsFunction * alpha)
{
gdouble lambda2[FTT_DIMENSION];
- gpointer data[4];
+ gpointer data[5];
FttComponent i;
g_return_if_fail (domain != NULL);
@@ -735,6 +738,7 @@ void gfs_diffusion_coefficients (GfsDomain * domain,
data[1] = lambda2;
data[2] = &dt;
data[3] = dia;
+ data[4] = alpha;
gfs_domain_cell_traverse (domain,
FTT_PRE_ORDER, FTT_TRAVERSE_ALL, -1,
(FttCellTraverseFunc) diffusion_mixed_coef, data);
diff --git a/src/poisson.h b/src/poisson.h
index f027fcd..e9cd8a9 100644
--- a/src/poisson.h
+++ b/src/poisson.h
@@ -76,7 +76,8 @@ void gfs_poisson_cycle (GfsDomain * domain,
void gfs_diffusion_coefficients (GfsDomain * domain,
GfsSourceDiffusion * d,
gdouble dt,
- GfsVariable * dia);
+ GfsVariable * dia,
+ GfsFunction * alpha);
void gfs_diffusion_rhs (GfsDomain * domain,
GfsVariable * v,
GfsVariable * rhs,
diff --git a/src/simulation.c b/src/simulation.c
index 58f9fcc..696ab9f 100644
--- a/src/simulation.c
+++ b/src/simulation.c
@@ -572,7 +572,8 @@ static void simulation_run (GfsSimulation * sim)
FTT_DIMENSION,
&sim->advection_params,
&sim->diffusion_params,
- g);
+ g,
+ sim->physical_params.alpha);
gfs_simulation_adapt (sim, NULL);
gfs_approximate_projection (domain,
diff --git a/src/source.c b/src/source.c
index 4631234..5d133ff 100644
--- a/src/source.c
+++ b/src/source.c
@@ -376,14 +376,26 @@ GfsSourceGenericClass * gfs_source_control_class (void)
static void diffusion_destroy (GtsObject * o)
{
- gts_object_destroy (GTS_OBJECT (GFS_DIFFUSION (o)->val));
+ GfsDiffusion * d = GFS_DIFFUSION (o);
+
+ if (d->mu != gfs_function_get_variable (d->val))
+ gts_object_destroy (GTS_OBJECT (d->mu));
+ gts_object_destroy (GTS_OBJECT (d->val));
(* GTS_OBJECT_CLASS (gfs_diffusion_class ())->parent_class->destroy) (o);
}
static void diffusion_read (GtsObject ** o, GtsFile * fp)
{
- gfs_function_read (GFS_DIFFUSION (*o)->val, gfs_object_simulation (*o), fp);
+ GfsDiffusion * d = GFS_DIFFUSION (*o);
+
+ gfs_function_read (d->val, gfs_object_simulation (*o), 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)));
}
static void diffusion_write (GtsObject * o, FILE * fp)
@@ -391,14 +403,34 @@ static void diffusion_write (GtsObject * o, FILE * fp)
gfs_function_write (GFS_DIFFUSION (o)->val, fp);
}
+static void update_mu (FttCell * cell, GfsDiffusion * d)
+{
+ GFS_VARIABLE (cell, d->mu->i) = gfs_function_value (d->val, cell);
+}
+
+static gboolean diffusion_event (GfsEvent * event, GfsSimulation * sim)
+{
+ GfsDiffusion * d = GFS_DIFFUSION (event);
+
+ if (d->mu != gfs_function_get_variable (d->val)) {
+ gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttCellTraverseFunc) update_mu, event);
+ gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, d->mu);
+ return TRUE;
+ }
+ return FALSE;
+}
+
static gdouble diffusion_face (GfsDiffusion * d, FttCellFace * f)
{
- return gfs_function_face_value (d->val, f);
+ return d->mu ? gfs_face_interpolated_value (f, d->mu->i) :
+ gfs_function_get_constant_value (d->val);
}
static gdouble diffusion_cell (GfsDiffusion * d, FttCell * cell)
{
- return gfs_function_value (d->val, cell);
+ return d->mu ? GFS_VARIABLE (cell, d->mu->i) :
+ gfs_function_get_constant_value (d->val);
}
static void diffusion_class_init (GfsDiffusionClass * klass)
@@ -406,7 +438,7 @@ static void diffusion_class_init (GfsDiffusionClass * klass)
GTS_OBJECT_CLASS (klass)->destroy = diffusion_destroy;
GTS_OBJECT_CLASS (klass)->read = diffusion_read;
GTS_OBJECT_CLASS (klass)->write = diffusion_write;
- GFS_EVENT_CLASS (klass)->event = NULL;
+ GFS_EVENT_CLASS (klass)->event = diffusion_event;
klass->face = diffusion_face;
klass->cell = diffusion_cell;
}
@@ -414,6 +446,7 @@ static void diffusion_class_init (GfsDiffusionClass * klass)
static void diffusion_init (GfsDiffusion * d)
{
d->val = gfs_function_new (gfs_function_class (), 0.);
+ d->mu = NULL;
}
GfsDiffusionClass * gfs_diffusion_class (void)
@@ -447,136 +480,6 @@ gdouble gfs_diffusion_cell (GfsDiffusion * d, FttCell * cell)
return (* GFS_DIFFUSION_CLASS (GTS_OBJECT (d)->klass)->cell) (d, cell);
}
-/* GfsDiffusionMulti: Object */
-
-static void diffusion_multi_destroy (GtsObject * object)
-{
- g_slist_foreach (GFS_DIFFUSION_MULTI (object)->d, (GFunc) gts_object_destroy, NULL);
- g_slist_free (GFS_DIFFUSION_MULTI (object)->d);
-
- (* GTS_OBJECT_CLASS (gfs_diffusion_multi_class ())->parent_class->destroy)
- (object);
-}
-
-static void diffusion_multi_read (GtsObject ** o, GtsFile * fp)
-{
- GfsDiffusionMulti * m = GFS_DIFFUSION_MULTI (*o);
- gboolean constant = TRUE;
-
- while (fp->type != GTS_ERROR && fp->type != '\n') {
- GtsObject * d = gts_object_new (GTS_OBJECT_CLASS (gfs_diffusion_class ()));
-
- (* d->klass->read) (&d, fp);
- if (m->d || d->klass != GTS_OBJECT_CLASS (gfs_diffusion_class ()))
- constant = FALSE;
- m->d = g_slist_prepend (m->d, d);
- }
- m->d = g_slist_reverse (m->d);
- if (fp->type != GTS_ERROR && m->d->next)
- m->c = gfs_variable_from_name (GFS_DOMAIN (gfs_object_simulation (m))->variables, "C");
- if (!constant) {
- m->mu = gfs_domain_add_variable (GFS_DOMAIN (gfs_object_simulation (m)),
- "_gfs_diffusion_multi");
- g_assert (m->mu);
- }
-}
-
-static void diffusion_multi_write (GtsObject * o, FILE * fp)
-{
- GSList * i = GFS_DIFFUSION_MULTI (o)->d;
-
- while (i) {
- (* GTS_OBJECT (i->data)->klass->write) (i->data, fp);
- i = i->next;
- }
-}
-
-static gdouble diffusion_multi_face (GfsDiffusion * d, FttCellFace * f)
-{
- gdouble mu1 = gfs_diffusion_face (GFS_DIFFUSION_MULTI (d)->d->data, f);
-
- if (!GFS_DIFFUSION_MULTI (d)->d->next)
- return mu1;
- else {
- /* fixme: c should be evaluated at t or t + dt/2 */
- gdouble c = gfs_face_interpolated_value (f, GFS_DIFFUSION_MULTI (d)->c->i);
- gdouble mu2 = gfs_diffusion_face (GFS_DIFFUSION_MULTI (d)->d->next->data, f);
-
- return mu1 + c*(mu2 - mu1);
- }
-}
-
-static gdouble diffusion_multi_cell (GfsDiffusion * d, FttCell * cell)
-{
- gdouble mu1 = gfs_diffusion_cell (GFS_DIFFUSION_MULTI (d)->d->data, cell);
-
- if (!GFS_DIFFUSION_MULTI (d)->d->next)
- return mu1;
- else {
- /* fixme: c should be evaluated at t or t + dt/2 */
- gdouble c = GFS_VARIABLE (cell, GFS_DIFFUSION_MULTI (d)->c->i);
- gdouble mu2 = gfs_diffusion_cell (GFS_DIFFUSION_MULTI (d)->d->next->data, cell);
-
- return mu1 + c*(mu2 - mu1);
- }
-}
-
-static void set_mu (FttCell * cell, GfsDiffusion * d)
-{
- GFS_VARIABLE (cell, GFS_DIFFUSION_MULTI (d)->mu->i) = diffusion_multi_cell (d, cell);
-}
-
-static gboolean diffusion_multi_event (GfsEvent * event, GfsSimulation * sim)
-{
- GfsDiffusionMulti * m = GFS_DIFFUSION_MULTI (event);
- GSList * i = m->d;
-
- while (i) {
- if (GFS_EVENT_CLASS (GTS_OBJECT (i->data)->klass)->event)
- (* GFS_EVENT_CLASS (GTS_OBJECT (i->data)->klass)->event) (event, sim);
- i = i->next;
- }
-
- if (m->mu) {
- gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
- (FttCellTraverseFunc) set_mu, m);
- gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, m->mu);
- }
-
- return TRUE;
-}
-
-static void diffusion_multi_class_init (GfsDiffusionClass * klass)
-{
- GTS_OBJECT_CLASS (klass)->read = diffusion_multi_read;
- GTS_OBJECT_CLASS (klass)->write = diffusion_multi_write;
- GTS_OBJECT_CLASS (klass)->destroy = diffusion_multi_destroy;
- GFS_EVENT_CLASS (klass)->event = diffusion_multi_event;
- klass->face = diffusion_multi_face;
- klass->cell = diffusion_multi_cell;
-}
-
-GfsDiffusionClass * gfs_diffusion_multi_class (void)
-{
- static GfsDiffusionClass * klass = NULL;
-
- if (klass == NULL) {
- GtsObjectClassInfo diffusion_multi_info = {
- "GfsDiffusionMulti",
- sizeof (GfsDiffusionMulti),
- sizeof (GfsDiffusionClass),
- (GtsObjectClassInitFunc) diffusion_multi_class_init,
- (GtsObjectInitFunc) NULL,
- (GtsArgSetFunc) NULL,
- (GtsArgGetFunc) NULL
- };
- klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_diffusion_class ()),
- &diffusion_multi_info);
- }
-
- return klass;
-}
-
/* GfsSourceDiffusion: Object */
static void source_diffusion_destroy (GtsObject * o)
@@ -809,71 +712,62 @@ GfsSourceGenericClass * gfs_source_diffusion_explicit_class (void)
/* GfsSourceViscosity: Object */
-static void source_viscosity_destroy (GtsObject * o)
-{
- gts_object_destroy (GTS_OBJECT (GFS_SOURCE_VISCOSITY (o)->D));
-
- (* GTS_OBJECT_CLASS (gfs_source_viscosity_class ())->parent_class->destroy) (o);
-}
-
static void source_viscosity_read (GtsObject ** o, GtsFile * fp)
{
+ GfsSourceViscosity * source;
+ GfsSourceDiffusion * d;
+ GfsDomain * domain;
FttComponent c;
- GfsSourceViscosity * s;
- (* GTS_OBJECT_CLASS (gfs_source_viscosity_class ())->parent_class->read) (o, fp);
+ (* GTS_OBJECT_CLASS (gfs_source_velocity_class ())->parent_class->read) (o, fp);
if (fp->type == GTS_ERROR)
return;
+ source = GFS_SOURCE_VISCOSITY (*o);
+ domain = GFS_DOMAIN (gfs_object_simulation (source));
+ if (!(source->v = gfs_domain_velocity (domain))) {
+ gts_file_error (fp, "cannot find velocity components");
+ return;
+ }
for (c = 0; c < FTT_DIMENSION; c++) {
- GfsVariable * v = GFS_SOURCE_VELOCITY (*o)->v[c];
-
- if (v->sources) {
- GSList * i = GTS_SLIST_CONTAINER (v->sources)->items;
-
- while (i) {
- if (i->data != *o && GFS_IS_SOURCE_DIFFUSION (i->data)) {
- gts_file_error (fp, "variable '%s' cannot have multiple diffusion source terms", v->name);
- return;
- }
- i = i->next;
- }
- }
+ if (source->v[c]->sources == NULL)
+ source->v[c]->sources =
+ gts_container_new (GTS_CONTAINER_CLASS (gts_slist_container_class ()));
+ gts_container_add (source->v[c]->sources, GTS_CONTAINEE (source));
}
- s = GFS_SOURCE_VISCOSITY (*o);
- gfs_object_simulation_set (s->D, gfs_object_simulation (s));
- (* GTS_OBJECT (s->D)->klass->read) ((GtsObject **) &s->D, fp);
+ d = GFS_SOURCE_DIFFUSION (*o);
+ gfs_object_simulation_set (d->D, gfs_object_simulation (d));
+ (* GTS_OBJECT (d->D)->klass->read) ((GtsObject **) &d->D, fp);
}
static void source_viscosity_write (GtsObject * o, FILE * fp)
{
- GfsSourceViscosity * s = GFS_SOURCE_VISCOSITY (o);
+ GfsSourceDiffusion * d = GFS_SOURCE_DIFFUSION (o);
- (* GTS_OBJECT_CLASS (gfs_source_viscosity_class ())->parent_class->write) (o, fp);
- (* GTS_OBJECT (s->D)->klass->write) (GTS_OBJECT (s->D), fp);
+ (* GTS_OBJECT_CLASS (gfs_source_velocity_class ())->parent_class->write) (o, fp);
+ (* GTS_OBJECT (d->D)->klass->write) (GTS_OBJECT (d->D), fp);
}
static gdouble source_viscosity_non_diffusion_value (GfsSourceGeneric * s,
FttCell * cell,
GfsVariable * v)
{
- GfsVariable * mu = GFS_DIFFUSION_MULTI (GFS_SOURCE_DIFFUSION (s)->D)->mu;
+ GfsVariable * mu = GFS_SOURCE_DIFFUSION (s)->D->mu;
if (mu == NULL)
return 0.;
else {
- GfsVariable ** u = GFS_SOURCE_VELOCITY (s)->v;
+ GfsVariable ** u = GFS_SOURCE_VISCOSITY (s)->v;
FttComponent c = v->component, j;
- gdouble rho = 1.
- /* fixme: + GFS_STATE (cell)->c*(gfs_object_simulation (s)->physical_params.rho - 1.)*/;
+ GfsFunction * alpha = gfs_object_simulation (s)->physical_params.alpha;
gdouble h = ftt_cell_size (cell);
gdouble a = 0.;
for (j = 0; j < FTT_DIMENSION; j++)
a += (gfs_center_gradient (cell, c, u[j]->i)*
gfs_center_gradient (cell, j, mu->i));
- return a/(rho*h*h);
+ return a*(alpha ? gfs_function_value (alpha, cell) : 1.)/(h*h);
}
}
@@ -881,42 +775,21 @@ static gdouble source_viscosity_value (GfsSourceGeneric * s,
FttCell * cell,
GfsVariable * v)
{
- gdouble rho = 1.
- /* fixme: + GFS_STATE (cell)->c*(gfs_object_simulation (s)->physical_params.rho - 1.)*/;
+ GfsFunction * alpha = gfs_object_simulation (s)->physical_params.alpha;
- return (source_diffusion_value (s, cell, v)/rho +
+ return (source_diffusion_value (s, cell, v)*(alpha ? gfs_function_value (alpha, cell) : 1.) +
source_viscosity_non_diffusion_value (s, cell, v));
}
-static gboolean source_viscosity_event (GfsEvent * event, GfsSimulation * sim)
-{
- if ((* gfs_event_class ()->event) (event, sim)) {
- GfsSourceViscosity * s = GFS_SOURCE_VISCOSITY (event);
-
- if ((* GFS_EVENT_CLASS (GTS_OBJECT (s->D)->klass)->event))
- (* GFS_EVENT_CLASS (GTS_OBJECT (s->D)->klass)->event) (GFS_EVENT (s->D), sim);
- return TRUE;
- }
- return FALSE;
-}
-
static void source_viscosity_class_init (GfsSourceGenericClass * klass)
{
- GTS_OBJECT_CLASS (klass)->destroy = source_viscosity_destroy;
GTS_OBJECT_CLASS (klass)->read = source_viscosity_read;
GTS_OBJECT_CLASS (klass)->write = source_viscosity_write;
-
- GFS_EVENT_CLASS (klass)->event = source_viscosity_event;
klass->mac_value = source_viscosity_value;
klass->centered_value = source_viscosity_non_diffusion_value;
}
-static void source_viscosity_init (GfsSourceViscosity * s)
-{
- s->D = GFS_DIFFUSION (gts_object_new (GTS_OBJECT_CLASS (gfs_diffusion_class ())));
-}
-
GfsSourceGenericClass * gfs_source_viscosity_class (void)
{
static GfsSourceGenericClass * klass = NULL;
@@ -927,11 +800,11 @@ GfsSourceGenericClass * gfs_source_viscosity_class (void)
sizeof (GfsSourceViscosity),
sizeof (GfsSourceGenericClass),
(GtsObjectClassInitFunc) source_viscosity_class_init,
- (GtsObjectInitFunc) source_viscosity_init,
+ (GtsObjectInitFunc) NULL,
(GtsArgSetFunc) NULL,
(GtsArgGetFunc) NULL
};
- klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_velocity_class ()),
+ klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_source_diffusion_class ()),
&source_viscosity_info);
}
diff --git a/src/source.h b/src/source.h
index 3e03792..3fbfa67 100644
--- a/src/source.h
+++ b/src/source.h
@@ -156,6 +156,7 @@ struct _GfsDiffusion {
/*< public >*/
GfsFunction * val;
+ GfsVariable * mu;
};
typedef struct _GfsDiffusionClass GfsDiffusionClass;
@@ -184,27 +185,6 @@ gdouble gfs_diffusion_face (GfsDiffusion * d,
gdouble gfs_diffusion_cell (GfsDiffusion * d,
FttCell * cell);
-/* GfsDiffusionMulti: Header */
-
-typedef struct _GfsDiffusionMulti GfsDiffusionMulti;
-
-struct _GfsDiffusionMulti {
- /*< private >*/
- GfsDiffusion parent;
-
- /*< public >*/
- GSList * d;
- GfsVariable * c, * mu;
-};
-
-#define GFS_DIFFUSION_MULTI(obj) GTS_OBJECT_CAST (obj,\
- GfsDiffusionMulti,\
- gfs_diffusion_multi_class ())
-#define GFS_IS_DIFFUSION_MULTI(obj) (gts_object_is_from_class (obj,\
- gfs_diffusion_multi_class ()))
-
-GfsDiffusionClass * gfs_diffusion_multi_class (void);
-
/* GfsSourceDiffusion: Header */
struct _GfsSourceDiffusion {
@@ -253,10 +233,10 @@ typedef struct _GfsSourceViscosity GfsSourceViscosity;
struct _GfsSourceViscosity {
/*< private >*/
- GfsSourceVelocity parent;
+ GfsSourceDiffusion parent;
/*< public >*/
- GfsDiffusion * D;
+ GfsVariable ** v;
};
#define GFS_SOURCE_VISCOSITY(obj) GTS_OBJECT_CAST (obj,\
diff --git a/src/timestep.c b/src/timestep.c
index 19793cb..98f8e14 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -566,13 +566,14 @@ static void variable_diffusion (GfsDomain * domain,
GfsSourceDiffusion * d,
GfsAdvectionParams * par,
GfsMultilevelParams * dpar,
- GfsVariable * rhs)
+ GfsVariable * rhs,
+ GfsFunction * alpha)
{
GfsVariable * dia;
dia = gfs_temporary_variable (domain);
- gfs_diffusion_coefficients (domain, d, par->dt, dia);
+ gfs_diffusion_coefficients (domain, d, par->dt, dia, alpha);
gfs_domain_surface_bc (domain, par->v);
gfs_diffusion_rhs (domain, par->v, rhs, dia);
/* fixme: time shoud be set to t + dt here in case boundary values are
@@ -590,6 +591,7 @@ static void variable_diffusion (GfsDomain * domain,
* @apar: the advection parameters.
* @dpar: the multilevel solver parameters for the diffusion equation.
* @g: the pressure gradient.
+ * @alpha: the inverse of density or %NULL.
*
* Advects the (centered) velocity field using the current
* face-centered (MAC) velocity field and @par->flux to compute the
@@ -608,7 +610,8 @@ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
guint dimension,
GfsAdvectionParams * apar,
GfsMultilevelParams * dpar,
- GfsVariable ** g)
+ GfsVariable ** g,
+ GfsFunction * alpha)
{
FttComponent c;
GfsVariable ** v;
@@ -635,7 +638,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);
+ variable_diffusion (domain, d, apar, dpar, rhs, alpha);
gts_object_destroy (GTS_OBJECT (rhs));
}
else {
@@ -707,7 +710,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);
+ variable_diffusion (domain, d, par, dpar, rhs, NULL);
gts_object_destroy (GTS_OBJECT (rhs));
}
else {
diff --git a/src/timestep.h b/src/timestep.h
index cf2ce8e..e4c7964 100644
--- a/src/timestep.h
+++ b/src/timestep.h
@@ -62,7 +62,8 @@ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
guint dimension,
GfsAdvectionParams * apar,
GfsMultilevelParams * dpar,
- GfsVariable ** g);
+ GfsVariable ** g,
+ GfsFunction * alpha);
void gfs_tracer_advection_diffusion (GfsDomain * domain,
GfsAdvectionParams * par,
GfsMultilevelParams * dpar,
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list