[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