[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