[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