[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:56:24 UTC 2009
The following commit has been merged in the upstream branch:
commit 3558c8c9377dbc8fafbb4ba9301eafcedf3ff11f
Author: Stephane Popinet <popinet at users.sf.net>
Date: Mon May 4 19:22:31 2009 +1000
Default boundary conditions can be set for each variable
darcs-hash:20090504092231-d4795-8632063a3ef5a51753e0458ea2dcdab273b2ccdf.gz
diff --git a/src/boundary.c b/src/boundary.c
index 18bc70a..69fba55 100644
--- a/src/boundary.c
+++ b/src/boundary.c
@@ -120,7 +120,15 @@ GfsBcClass * gfs_bc_class (void)
return klass;
}
-static GfsBc * gfs_bc_new (GfsBcClass * k, GfsVariable * v, gboolean extra)
+/**
+ * gfs_bc_new:
+ * @k: a #GfsBcClass.
+ * @v: a variable associated with the BC or %NULL.
+ * @extra:
+ *
+ * Returns: a new #GfsBc.
+ */
+GfsBc * gfs_bc_new (GfsBcClass * k, GfsVariable * v, gboolean extra)
{
GfsBc * b;
@@ -793,7 +801,12 @@ GfsBc * gfs_boundary_lookup_bc (GfsBoundary * b, GfsVariable * v)
g_return_val_if_fail (v != NULL, NULL);
if (!v->name || !(bv = g_hash_table_lookup (b->bc, v->name))) {
- bv = b->default_bc;
+ if (v->default_bc) {
+ bv = v->default_bc;
+ bv->b = b;
+ }
+ else
+ bv = b->default_bc;
bv->v = v;
}
return bv;
@@ -819,6 +832,25 @@ void gfs_boundary_set_default_bc (GfsBoundary * b, GfsBc * bc)
}
/**
+ * gfs_variable_set_default_bc:
+ * @v: a #GfVariable.
+ * @bc: a #GfsBc.
+ *
+ * Sets the default boundary condition for @v to @bc.
+ */
+void gfs_variable_set_default_bc (GfsVariable * v, GfsBc * bc)
+{
+ g_return_if_fail (v != NULL);
+ g_return_if_fail (bc != NULL);
+ g_return_if_fail (bc->v == NULL || bc->v == v);
+
+ if (v->default_bc)
+ gts_object_destroy (GTS_OBJECT (v->default_bc));
+ v->default_bc = bc;
+ bc->v = v;
+}
+
+/**
* gfs_boundary_add_bc:
* @b: a #GfsBoundary.
* @bc: a #GfsBc.
diff --git a/src/boundary.h b/src/boundary.h
index 73e101c..b057295 100644
--- a/src/boundary.h
+++ b/src/boundary.h
@@ -67,6 +67,9 @@ struct _GfsBcClass {
gfs_bc_class ()))
GfsBcClass * gfs_bc_class (void);
+GfsBc * gfs_bc_new (GfsBcClass * k,
+ GfsVariable * v,
+ gboolean extra);
/* GfsBcValue: Header */
@@ -181,6 +184,8 @@ GfsBc * gfs_boundary_lookup_bc (GfsBoundary * b,
GfsVariable * v);
void gfs_boundary_set_default_bc (GfsBoundary * b,
GfsBc * bc);
+void gfs_variable_set_default_bc (GfsVariable * v,
+ GfsBc * bc);
void gfs_boundary_add_bc (GfsBoundary * b,
GfsBc * bc);
diff --git a/src/fluid.c b/src/fluid.c
index 2e792a5..1390f26 100644
--- a/src/fluid.c
+++ b/src/fluid.c
@@ -1645,7 +1645,7 @@ void gfs_cell_cleanup (FttCell * cell, GfsDomain * domain)
{
g_return_if_fail (cell != NULL);
g_return_if_fail (domain != NULL);
-
+
if (cell->data) {
GSList * i = domain->variables;
while (i) {
diff --git a/src/utils.c b/src/utils.c
index f4b0fc7..dbc347f 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -1150,7 +1150,7 @@ GfsFunction * gfs_function_spatial_new (GfsFunctionClass * klass,
g_return_val_if_fail (func != NULL, NULL);
object = GFS_FUNCTION (gts_object_new (GTS_OBJECT_CLASS (klass)));
- object->f = func;
+ object->f = (GfsFunctionFunc) func;
return object;
}
diff --git a/src/variable.c b/src/variable.c
index 9a5a859..1d1f240 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -82,6 +82,8 @@ static void gfs_variable_destroy (GtsObject * object)
gts_object_destroy (GTS_OBJECT (v->sources));
if (v->surface_bc)
gts_object_destroy (GTS_OBJECT (v->surface_bc));
+ if (v->default_bc)
+ gts_object_destroy (GTS_OBJECT (v->default_bc));
if (v->domain) {
gfs_domain_free (v->domain, v->i);
v->domain->variables = g_slist_remove (v->domain->variables, v);
diff --git a/src/variable.h b/src/variable.h
index 933936a..43d60c7 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -45,6 +45,7 @@ struct _GfsVariable {
GfsVariableFineCoarseFunc fine_coarse, coarse_fine;
GtsContainer * sources;
GfsSurfaceGenericBc * surface_bc;
+ GfsBc * default_bc;
GfsDomain * domain;
FttCellCleanupFunc cleanup;
gdouble units;
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list