[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203

Stephane Popinet popinet at users.sf.net
Fri May 15 02:55:55 UTC 2009


The following commit has been merged in the upstream branch:
commit f1aa6c486ba4614647544465cad49470c31a2100
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Tue Dec 9 08:58:37 2008 +1100

    BcSubcritical boundary condition
    
    darcs-hash:20081208215837-d4795-b20dbafab92de0836b6042d95f95919a3f4b2b80.gz

diff --git a/src/init.c b/src/init.c
index 95bc992..e298b5a 100644
--- a/src/init.c
+++ b/src/init.c
@@ -112,6 +112,7 @@ GtsObjectClass ** gfs_classes (void)
   gfs_gedge_class (),
 
   gfs_bc_dirichlet_class (),
+  gfs_bc_subcritical_class (),
   gfs_bc_neumann_class (),
   gfs_bc_navier_class (),
   gfs_bc_flather_class (),
diff --git a/src/river.c b/src/river.c
index acc4779..11a90cc 100644
--- a/src/river.c
+++ b/src/river.c
@@ -295,3 +295,62 @@ GfsSimulationClass * gfs_river_class (void)
   return klass;
 }
 
+/* GfsBcSubcritical: Object */
+
+static void subcritical (FttCellFace * f, GfsBc * b)
+{
+  gdouble hb = gfs_function_face_value (GFS_BC_VALUE (b)->val, f);
+  GfsRiver * river = GFS_RIVER (b->v->domain);
+  gdouble hi = GFS_VALUE (f->neighbor, river->p.v[0]);
+
+  GFS_VALUE (f->cell, b->v) = GFS_VALUE (f->neighbor, b->v) -
+    2.*hi*(sqrt (river->p.g*hi) - sqrt (river->p.g*hb));
+}
+
+static void bc_subcritical_read (GtsObject ** o, GtsFile * fp)
+{
+  GfsBc * bc = GFS_BC (*o);
+
+  if (GTS_OBJECT_CLASS (gfs_bc_subcritical_class ())->parent_class->read)
+    (* GTS_OBJECT_CLASS (gfs_bc_subcritical_class ())->parent_class->read) (o, fp);
+  if (fp->type == GTS_ERROR)
+    return;
+
+  if (!GFS_IS_RIVER (bc->v->domain)) {
+    gts_file_error (fp, "GfsBcSubcritical only makes sense for GfsRiver simulations");
+    return;
+  }
+
+  gfs_function_set_units (GFS_BC_VALUE (bc)->val, 1.);
+}
+
+static void gfs_bc_subcritical_init (GfsBc * object)
+{
+  object->bc =  (FttFaceTraverseFunc) subcritical;
+}
+
+static void gfs_bc_subcritical_class_init (GtsObjectClass * klass)
+{
+  klass->read = bc_subcritical_read;
+}
+
+GfsBcClass * gfs_bc_subcritical_class (void)
+{
+  static GfsBcClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo gfs_bc_subcritical_info = {
+      "GfsBcSubcritical",
+      sizeof (GfsBcValue),
+      sizeof (GfsBcClass),
+      (GtsObjectClassInitFunc) gfs_bc_subcritical_class_init,
+      (GtsObjectInitFunc) gfs_bc_subcritical_init,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()),
+				  &gfs_bc_subcritical_info);
+  }
+
+  return klass;
+}
diff --git a/src/river.h b/src/river.h
index ebd510d..0089f59 100644
--- a/src/river.h
+++ b/src/river.h
@@ -32,3 +32,10 @@ struct _GfsRiver {
 						   gfs_river_class ()))
 
 GfsSimulationClass * gfs_river_class        (void);
+
+/* GfsBcSubcritical: Header */
+
+#define GFS_IS_BC_SUBCRITICAL(obj)         (gts_object_is_from_class (obj,\
+						 gfs_bc_subcritical_class ()))
+
+GfsBcClass * gfs_bc_subcritical_class  (void);

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list