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

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


The following commit has been merged in the upstream branch:
commit 21ef88438914cc57aee7043bd5e5368bfed4c980
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Mon Aug 14 10:56:01 2006 +1000

    GfsVariableCurvature has moved to levelset.c
    
    darcs-hash:20060814005601-d4795-75d182ea12280c216d1f4364763ec88d606b2b4a.gz

diff --git a/src/variable.c b/src/variable.c
index 47479c8..59bd022 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -458,146 +458,58 @@ GfsVariableClass * gfs_variable_filtered_class (void)
   return klass;
 }
 
-/* GfsVariableCurvature: object */
+/* GfsDerivedVariable: object */
 
-static void variable_curvature_read (GtsObject ** o, GtsFile * fp)
+static void gfs_derived_variable_destroy (GtsObject * object)
 {
-  GfsDomain * domain;
-
-  (* GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class->read) (o, fp);
-  if (fp->type == GTS_ERROR)
-    return;
-
-  if (fp->type != GTS_STRING) {
-    gts_file_error (fp, "expecting a string (v)");
-    return;
-  }
-  domain = GFS_DOMAIN (gfs_object_simulation (*o));
-  if (!(GFS_VARIABLE_CURVATURE (*o)->v = 
-	gfs_variable_from_name (domain->variables, fp->token->str))) {
-    gts_file_error (fp, "unknown variable `%s'", fp->token->str);
-    return;
-  }
-  gts_file_next_token (fp);
-
-  if (fp->type == '{') {
-    GtsFileVariable var[] = {
-      {GTS_DOUBLE, "sigma", TRUE},
-      {GTS_DOUBLE, "theta", TRUE},
-      {GTS_NONE}
-    };
-
-    var[0].data = &GFS_VARIABLE_CURVATURE (*o)->sigma;
-    var[1].data = &GFS_VARIABLE_CURVATURE (*o)->theta;
-    gts_file_assign_variables (fp, var);
-  }
-}
+  g_free (GFS_DERIVED_VARIABLE (object)->name);
+  g_free (GFS_DERIVED_VARIABLE (object)->description);
 
-static void variable_curvature_write (GtsObject * o, FILE * fp)
-{
-  GfsVariableCurvature * v = GFS_VARIABLE_CURVATURE (o);
-
-  (* GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class->write) (o, fp);
-
-  fprintf (fp, " %s", v->v->name);
-  if (v->sigma != 1. || v->theta != 0.5)
-    fprintf (fp, " { sigma = %g theta = %g }", v->sigma, v->theta);
+  (* GTS_OBJECT_CLASS (gfs_derived_variable_class ())->parent_class->destroy) (object);
 }
 
-static void normal (FttCell * cell, gpointer * data)
+static void gfs_derived_variable_class_init (GtsObjectClass * klass)
 {
-  GfsVariable ** nv = data[0];
-  GfsVariable * v = GFS_VARIABLE_CURVATURE (data[1])->v;
-  GtsVector n = { 0., 0., 0. };
-  FttComponent c;
-
-  gfs_youngs_normal (cell, v, (FttVector *) n);
-  gts_vector_normalize (n);
-  for (c = 0; c < FTT_DIMENSION; c++)
-    GFS_VARIABLE (cell, nv[c]->i) = n[c];
+  klass->destroy = gfs_derived_variable_destroy;
 }
 
-static void curvature (FttCell * cell, gpointer * data)
+GtsObjectClass * gfs_derived_variable_class (void)
 {
-  GfsVariable ** nv = data[0];
-  GfsVariable * v = data[1];
-  GfsVariableCurvature * k = GFS_VARIABLE_CURVATURE (v);
-  gdouble kappa = 0.;
-  FttComponent c;
-
-  for (c = 0; c < FTT_DIMENSION; c++)
-    kappa += gfs_center_gradient (cell, c, nv[c]->i);
-  GFS_VARIABLE (cell, v->i) = (k->a*k->sigma*kappa/ftt_cell_size (cell) +
-			       (1. - k->a)*GFS_VARIABLE (cell, v->i));
-}
-
-static void variable_curvature_event_half (GfsEvent * event, GfsSimulation * sim)
-{
-  GfsVariable * n[FTT_DIMENSION];
-  GfsDomain * domain = GFS_DOMAIN (sim);
-  gpointer data[2];
-  FttComponent c;
-
-  for (c = 0; c < FTT_DIMENSION; c++) {
-    n[c] = gfs_temporary_variable (domain);
-    gfs_variable_set_vector (n[c], c);
-  }
-  data[0] = n;
-  data[1] = event;
-  gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			    (FttCellTraverseFunc) normal, data);
-  for (c = 0; c < FTT_DIMENSION; c++)
-    gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, n[c]);
-  gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			    (FttCellTraverseFunc) curvature, data);
-  gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, GFS_VARIABLE1 (event));
-  for (c = 0; c < FTT_DIMENSION; c++)
-    gts_object_destroy (GTS_OBJECT (n[c]));
-}
-
-static gboolean variable_curvature_event (GfsEvent * event, GfsSimulation * sim)
-{
-  if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_variable_curvature_class ())->parent_class)->event)
-      (event, sim)) {
-    GFS_VARIABLE_CURVATURE (event)->a = 1.;
-    variable_curvature_event_half (event, sim);
-    GFS_VARIABLE_CURVATURE (event)->a = GFS_VARIABLE_CURVATURE (event)->theta;
-    return TRUE;
-  }
-  return FALSE;
-}
-
-static void variable_curvature_class_init (GtsObjectClass * klass)
-{
-  klass->read = variable_curvature_read;
-  klass->write = variable_curvature_write;
-  GFS_EVENT_CLASS (klass)->event = variable_curvature_event;
-  GFS_EVENT_CLASS (klass)->event_half = variable_curvature_event_half;
-}
-
-static void variable_curvature_init (GfsVariableCurvature * v)
-{
-  v->sigma = 1.;
-  v->theta = 0.5;
-}
-
-GfsVariableClass * gfs_variable_curvature_class (void)
-{
-  static GfsVariableClass * klass = NULL;
+  static GtsObjectClass * klass = NULL;
 
   if (klass == NULL) {
-    GtsObjectClassInfo gfs_variable_curvature_info = {
-      "GfsVariableCurvature",
-      sizeof (GfsVariableCurvature),
-      sizeof (GfsVariableClass),
-      (GtsObjectClassInitFunc) variable_curvature_class_init,
-      (GtsObjectInitFunc) variable_curvature_init,
+    GtsObjectClassInfo gfs_derived_variable_info = {
+      "GfsDerivedVariable",
+      sizeof (GfsDerivedVariable),
+      sizeof (GtsObjectClass),
+      (GtsObjectClassInitFunc) gfs_derived_variable_class_init,
+      (GtsObjectInitFunc) NULL,
       (GtsArgSetFunc) NULL,
       (GtsArgGetFunc) NULL
     };
-    klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), 
-				  &gfs_variable_curvature_info);
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), 
+				  &gfs_derived_variable_info);
   }
 
   return klass;
 }
+
+/**
+ * gfs_derived_variable_from_name:
+ * @i: a list of #GfsDerivedVariable.
+ * @name: a name.
+ *
+ * Returns: the #GfsDerivedVariable @name of @list or %NULL.
+ */
+GfsDerivedVariable * gfs_derived_variable_from_name (GSList * i, const gchar * name)
+{
+  g_return_val_if_fail (name != NULL, NULL);
+
+  while (i) {
+    GfsDerivedVariable * v = i->data;
+    if (!strcmp (v->name, name))
+      return v;
+    i = i->next;
+  }
+  return NULL;
+}
diff --git a/src/variable.h b/src/variable.h
index b999381..55dffb7 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -130,28 +130,26 @@ struct _GfsVariableFiltered {
 
 GfsVariableClass * gfs_variable_filtered_class  (void);
 
+/* GfsDerivedVariable: Header */
 
-/* GfsVariableCurvature: header */
-
-typedef struct _GfsVariableCurvature                GfsVariableCurvature;
-
-struct _GfsVariableCurvature {
+struct _GfsDerivedVariable {
   /*< private >*/
-  GfsVariable parent;
-  gdouble a;
+  GtsObject parent;
 
   /*< public >*/
-  GfsVariable * v;
-  gdouble sigma, theta;
+  gchar * name, * description;
+  gpointer func, data;
 };
 
-#define GFS_VARIABLE_CURVATURE(obj)            GTS_OBJECT_CAST (obj,\
-					           GfsVariableCurvature,\
-					           gfs_variable_curvature_class ())
-#define GFS_IS_VARIABLE_CURVATURE(obj)         (gts_object_is_from_class (obj,\
-					     gfs_variable_curvature_class ()))
+#define GFS_DERIVED_VARIABLE(obj)            GTS_OBJECT_CAST (obj,\
+					         GfsDerivedVariable,\
+					         gfs_derived_variable_class ())
+#define GFS_IS_DERIVED_VARIABLE(obj)         (gts_object_is_from_class (obj,\
+						 gfs_derived_variable_class ()))
 
-GfsVariableClass * gfs_variable_curvature_class  (void);
+GtsObjectClass *     gfs_derived_variable_class            (void);
+GfsDerivedVariable * gfs_derived_variable_from_name        (GSList * i, 
+							    const gchar * name);
 
 #ifdef __cplusplus
 }

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list