[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:54:26 UTC 2009
The following commit has been merged in the upstream branch:
commit 8546c8626bd3f857c36463212ad2413472ab318c
Author: Stephane Popinet <popinet at users.sf.net>
Date: Sat Jul 28 17:26:30 2007 +1000
BcNavier for Navier slip condition
darcs-hash:20070728072630-d4795-e00295a0374e226213afe2570d0a11b2a3a77dab.gz
diff --git a/src/boundary.c b/src/boundary.c
index 78163a5..633899b 100644
--- a/src/boundary.c
+++ b/src/boundary.c
@@ -331,6 +331,81 @@ GfsBcClass * gfs_bc_neumann_class (void)
return klass;
}
+/* GfsBcNavier: Object */
+
+static void navier (FttCellFace * f, GfsBc * b)
+{
+ gdouble h = ftt_cell_size (f->cell);
+ gdouble lambda = GFS_BC_NAVIER (b)->lambda;
+ GFS_VARIABLE (f->cell, b->v->i) =
+ (2.*gfs_function_face_value (GFS_BC_VALUE (b)->val, f)*h
+ - (h - 2.*lambda)*GFS_VARIABLE (f->neighbor, b->v->i))/(h + 2.*lambda);
+}
+
+static void face_navier (FttCellFace * f, GfsBc * b)
+{
+ gdouble h = ftt_cell_size (f->cell);
+ gdouble lambda = GFS_BC_NAVIER (b)->lambda;
+ GFS_STATE (f->cell)->f[f->d].v = GFS_STATE (f->neighbor)->f[FTT_OPPOSITE_DIRECTION (f->d)].v =
+ (gfs_function_face_value (GFS_BC_VALUE (b)->val, f)*h +
+ 2.*lambda*GFS_VARIABLE (f->neighbor, b->v->i))/(h + 2.*lambda);
+}
+
+static void bc_navier_read (GtsObject ** o, GtsFile * fp)
+{
+ if (GTS_OBJECT_CLASS (gfs_bc_navier_class ())->parent_class->read)
+ (* GTS_OBJECT_CLASS (gfs_bc_navier_class ())->parent_class->read) (o, fp);
+ if (fp->type == GTS_ERROR)
+ return;
+
+ if (fp->type != GTS_INT && fp->type != GTS_FLOAT) {
+ gts_file_error (fp, "expecting a number (slip length)");
+ return;
+ }
+ GFS_BC_NAVIER (*o)->lambda = atof (fp->token->str);
+ gts_file_next_token (fp);
+}
+
+static void bc_navier_write (GtsObject * o, FILE * fp)
+{
+ (* GTS_OBJECT_CLASS (gfs_bc_navier_class ())->parent_class->write) (o, fp);
+ fprintf (fp, " %g", GFS_BC_NAVIER (o)->lambda);
+}
+
+static void gfs_bc_navier_init (GfsBc * object)
+{
+ object->bc = (FttFaceTraverseFunc) navier;
+ object->homogeneous_bc = (FttFaceTraverseFunc) homogeneous_dirichlet;
+ object->face_bc = (FttFaceTraverseFunc) face_navier;
+}
+
+static void gfs_bc_navier_class_init (GtsObjectClass * klass)
+{
+ klass->read = bc_navier_read;
+ klass->write = bc_navier_write;
+}
+
+GfsBcClass * gfs_bc_navier_class (void)
+{
+ static GfsBcClass * klass = NULL;
+
+ if (klass == NULL) {
+ GtsObjectClassInfo gfs_bc_navier_info = {
+ "GfsBcNavier",
+ sizeof (GfsBcNavier),
+ sizeof (GfsBcClass),
+ (GtsObjectClassInitFunc) gfs_bc_navier_class_init,
+ (GtsObjectInitFunc) gfs_bc_navier_init,
+ (GtsArgSetFunc) NULL,
+ (GtsArgGetFunc) NULL
+ };
+ klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_bc_value_class ()),
+ &gfs_bc_navier_info);
+ }
+
+ return klass;
+}
+
/* GfsBoundary: Object */
static void destroy_bc (GfsVariable * v, GtsObject * o)
diff --git a/src/boundary.h b/src/boundary.h
index 1fd16f1..9c16e9d 100644
--- a/src/boundary.h
+++ b/src/boundary.h
@@ -110,6 +110,26 @@ GfsBcClass * gfs_bc_dirichlet_class (void);
GfsBcClass * gfs_bc_neumann_class (void);
+/* GfsBcNavier: Header */
+
+typedef struct _GfsBcNavier GfsBcNavier;
+
+struct _GfsBcNavier {
+ /*< private >*/
+ GfsBcValue parent;
+
+ /*< public >*/
+ gdouble lambda;
+};
+
+#define GFS_BC_NAVIER(obj) GTS_OBJECT_CAST (obj,\
+ GfsBcNavier,\
+ gfs_bc_navier_class ())
+#define GFS_IS_BC_NAVIER(obj) (gts_object_is_from_class (obj,\
+ gfs_bc_navier_class ()))
+
+GfsBcClass * gfs_bc_navier_class (void);
+
/* GfsBoundary: Header */
typedef enum {
diff --git a/src/init.c b/src/init.c
index e63287d..1386d6e 100644
--- a/src/init.c
+++ b/src/init.c
@@ -108,6 +108,7 @@ GtsObjectClass ** gfs_classes (void)
gfs_bc_dirichlet_class (),
gfs_bc_neumann_class (),
+ gfs_bc_navier_class (),
gfs_bc_flather_class (),
gfs_boundary_class (),
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list