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

Stephane Popinet popinet at users.sourceforge.net
Fri May 15 02:51:21 UTC 2009


The following commit has been merged in the upstream branch:
commit 13bca0109ede5a336aee88ead5355fd10d3ae852
Author: Stephane Popinet <popinet at users.sourceforge.net>
Date:   Wed Nov 3 10:36:57 2004 +1100

    Split GfsVariable in new variable.{ch} file (gerris--mainline--0.7--patch-23)
    
    gerris--mainline--0.7--patch-23
    Keywords:
    
    It was getting a bit too big and dispersed all over the place.
    
    darcs-hash:20041102233657-aabb8-824afd868b809e8d1d8646a1cad3bb7556bb7dc6.gz

diff --git a/src/Makefile.am b/src/Makefile.am
index c11c0c4..6c3bb31 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -54,6 +54,7 @@ endif
 GFS_HDS = \
 	ftt.h \
 	fluid.h \
+	variable.h \
 	output.h \
 	solid.h \
 	poisson.h \
@@ -84,6 +85,7 @@ include_HEADERS = \
 SRC = \
 	ftt.c \
 	fluid.c \
+	variable.c \
 	output.c \
 	solid.c \
 	poisson.c \
diff --git a/src/fluid.c b/src/fluid.c
index 38cd31a..ac5716c 100644
--- a/src/fluid.c
+++ b/src/fluid.c
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 
 #include "fluid.h"
+#include "variable.h"
 #include "domain.h"
 #include "solid.h"
 
@@ -1980,216 +1981,6 @@ gdouble gfs_interpolate (FttCell * cell,
 #endif /* 3D */
 }
 
-/* GfsVariable: Object */
-
-static void gfs_variable_read (GtsObject ** o, GtsFile * fp)
-{
-  if (fp->type != GTS_STRING) {
-    gts_file_error (fp, "expecting a string (GfsVariableClass)");
-    return;
-  }
-  gts_file_next_token (fp);
-
-  if (fp->type != GTS_STRING) {
-    gts_file_error (fp, "expecting a string (name)");
-    return;
-  }
-  GFS_VARIABLE1 (*o)->name = g_strdup (fp->token->str);
-  gts_file_next_token (fp);
-}
-
-static void gfs_variable_write (GtsObject * o, FILE * fp)
-{
-  fprintf (fp, "%s %s", o->klass->info.name, GFS_VARIABLE1 (o)->name);
-}
-
-static void gfs_variable_destroy (GtsObject * object)
-{
-  GfsVariable * v = GFS_VARIABLE1 (object);
-
-  g_free (v->name);
-  if (v->sources)
-    gts_object_destroy (GTS_OBJECT (v->sources));
-  if (v->surface_bc)
-    gts_object_destroy (GTS_OBJECT (v->surface_bc));
-
-  (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->destroy) 
-    (object);
-}
-
-static void gfs_variable_clone (GtsObject * clone, GtsObject * object)
-{
-  GfsVariable * c = GFS_VARIABLE1 (clone);
-  GfsVariable * v = GFS_VARIABLE1 (object);
-
-  (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->clone) (clone, object);
-  if (v->name)
-    c->name = g_strdup (v->name);
-  c->sources = NULL;
-  c->surface_bc = NULL;
-}
-
-static void gfs_variable_class_init (GfsVariableClass * klass)
-{
-  GTS_OBJECT_CLASS (klass)->read = gfs_variable_read;
-  GTS_OBJECT_CLASS (klass)->write = gfs_variable_write;
-  GTS_OBJECT_CLASS (klass)->destroy = gfs_variable_destroy;
-  GTS_OBJECT_CLASS (klass)->clone = gfs_variable_clone;
-}
-
-static void gfs_variable_init (GfsVariable * v)
-{
-  v->fine_coarse = (GfsVariableFineCoarseFunc) gfs_get_from_below_intensive;
-}
-
-GfsVariableClass * gfs_variable_class (void)
-{
-  static GfsVariableClass * klass = NULL;
-
-  if (klass == NULL) {
-    GtsObjectClassInfo gfs_variable_info = {
-      "GfsVariable",
-      sizeof (GfsVariable),
-      sizeof (GfsVariableClass),
-      (GtsObjectClassInitFunc) gfs_variable_class_init,
-      (GtsObjectInitFunc) gfs_variable_init,
-      (GtsArgSetFunc) NULL,
-      (GtsArgGetFunc) NULL
-    };
-    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_variable_info);
-  }
-
-  return klass;
-}
-
-/**
- * gfs_variable_new:
- * @klass: a #GfsVariableClass.
- * @parent: the parent or %NULL.
- * @name: the name of the variable.
- * @centered: is the variable cell-centered?
- * @i: the variable index.
- *
- * Returns: a newly allocated #GfsVariable,
- */
-GfsVariable * gfs_variable_new (GfsVariableClass * klass,
-				GtsObject * parent,
-				const gchar * name,
-				gboolean centered,
-				guint i)
-{
-  GfsVariable * v;
-
-  v = GFS_VARIABLE1 (gts_object_new (GTS_OBJECT_CLASS (klass)));
-  if (name)
-    v->name = g_strdup (name);
-  v->i = i;
-  v->centered = centered;
-  v->p = parent;
-  v->permanent = v;
-
-  return v;
-}
-
-/**
- * gfs_variable_list_copy:
- * @v: a #GfsVariable.
- * @parent: the parent of the new list or %NULL.
- *
- * Returns: a new variable list copy of @v.
- */
-GfsVariable * gfs_variable_list_copy (GfsVariable * v,
-				      GtsObject * parent)
-{
-  GfsVariable * start = NULL, * prev = NULL;
-
-  while (v) {
-    GfsVariable * n = GFS_VARIABLE1 (gts_object_clone (GTS_OBJECT (v)));
-
-    n->p = parent;
-    if (prev == NULL)
-      start = n;
-    else
-      prev->next = n;
-    prev = n;
-    v = v->next;
-  }
-  return start;
-}
-
-/**
- * gfs_variable_list_destroy:
- * @v: a #GfsVariable.
- *
- * Free all the memory allocated for the list starting at @v.
- */
-void gfs_variable_list_destroy (GfsVariable * v)
-{
-  while (v) {
-    GfsVariable * next = v->next;
-
-    gts_object_destroy (GTS_OBJECT (v));
-    v = next;
-  }
-}
-
-/**
- * gfs_variable_from_name:
- * @variables: the list of available #GfsVariable.
- * @name: the name of the variable to find.
- *
- * Returns: the #GfsVariable @name or %NULL if this variable name does
- * not exist.  
- */
-GfsVariable * gfs_variable_from_name (GfsVariable * variables,
-				      const gchar * name)
-{
-  g_return_val_if_fail (name != NULL, NULL);
-
-  while (variables && (!variables->name || strcmp (name, variables->name)))
-    variables = variables->next;
-  return variables;
-}
-
-/**
- * gfs_variables_from_list:
- * @variables: the list of available #GfsVariable.
- * @list: a malloc'ed string containing comma separated variable names.
- * @error: where to return the variable name in case of error.
- *
- * Returns: a list of variables or %NULL in case of error, in which
- * case *@error points to the name of the unknown variable.  
- */
-GfsVariable * gfs_variables_from_list (GfsVariable * variables,
-				       gchar * list,
-				       gchar ** error)
-{
-  gchar * s;
-  GfsVariable * var = NULL, * prev = NULL;
-
-  g_return_val_if_fail (list != NULL, NULL);
-  g_return_val_if_fail (error != NULL, NULL);
-
-  s = strtok (list, ",");
-  while (s) {
-    GfsVariable * v = gfs_variable_from_name (variables, s), * n;
-
-    if (v == NULL) {
-      *error = s;
-      gfs_variable_list_destroy (var);
-      return NULL;
-    }
-    n = gfs_variable_new (gfs_variable_class (), v->p, v->name, FALSE, v->i);
-    if (prev)
-      prev->next = n;
-    else
-      var = n;
-    prev = n;
-    s = strtok (NULL, ",");
-  }
-  return var;
-}
-
 /**
  * gfs_center_curvature:
  * @cell: a #FttCell.
diff --git a/src/fluid.h b/src/fluid.h
index f857254..629a9ea 100644
--- a/src/fluid.h
+++ b/src/fluid.h
@@ -29,6 +29,8 @@ extern "C" {
 
 #include "ftt.h"
 
+typedef struct _GfsVariable        GfsVariable;
+
 typedef struct _GfsStateVector     GfsStateVector;
 typedef struct _GfsSolidVector     GfsSolidVector;
 typedef struct _GfsFaceStateVector GfsFaceStateVector;
@@ -89,57 +91,6 @@ typedef enum {
   GFS_FLAG_USER =            FTT_FLAG_USER + 3 /* user flags start here */
 } GfsFlags;
 
-/* GfsVariable: Header */
-
-typedef struct _GfsVariable                GfsVariable;
-typedef struct _GfsSurfaceGenericBc        GfsSurfaceGenericBc;
-
-typedef void (* GfsVariableDerivedFunc)    (FttCell * cell, GfsVariable * v);
-typedef void (* GfsVariableFineCoarseFunc) (FttCell * cell, GfsVariable * v);
-
-struct _GfsVariable {
-  /*< private >*/
-  GtsObject parent;
-
-  /*< public >*/
-  guint i;
-  gchar * name;
-  gboolean centered;
-  GfsVariableDerivedFunc derived;
-  GfsVariableFineCoarseFunc fine_coarse;
-  GtsContainer * sources;
-  GfsSurfaceGenericBc * surface_bc;
-  GfsVariable * next, * permanent;
-  GtsObject * p;
-};
-
-typedef struct _GfsVariableClass    GfsVariableClass;
-
-struct _GfsVariableClass {
-  /*< private >*/
-  GtsObjectClass parent_class;
-
-  /*< public >*/
-};
-
-#define GFS_VARIABLE1(obj)            GTS_OBJECT_CAST (obj,\
-					         GfsVariable,\
-					         gfs_variable_class ())
-#define GFS_VARIABLE_CLASS(klass)    GTS_OBJECT_CLASS_CAST (klass,\
-						 GfsVariableClass,\
-						 gfs_variable_class())
-#define GFS_IS_VARIABLE(obj)         (gts_object_is_from_class (obj,\
-						 gfs_variable_class ()))
-#define gfs_variable_parent(v)         ((v)->p)
-#define gfs_variable_set_parent(v, pa) ((v)->p = GTS_OBJECT (pa))
-
-GfsVariableClass * gfs_variable_class  (void);
-GfsVariable *      gfs_variable_new    (GfsVariableClass * klass,
-					GtsObject * parent,
-					const gchar * name,
-					gboolean centered,
-					guint i);
-
 /* Permanent variables: defined in fluid.c */
 GTS_C_VAR GfsVariable * gfs_div, * gfs_dp, * gfs_res;
 GTS_C_VAR GfsVariable * gfs_gx, * gfs_gy;
@@ -289,15 +240,6 @@ void                  gfs_cell_traverse_cut         (FttCell * root,
 gdouble               gfs_interpolate               (FttCell * cell,
 						     FttVector p,
 						     GfsVariable * v);
-GfsVariable *         gfs_variable_list_copy        (GfsVariable * v,
-						     GtsObject * parent);
-void                  gfs_variable_list_destroy     (GfsVariable * v);
-GfsVariable *         gfs_variable_from_name        (GfsVariable * variables,
-						     const gchar * name);
-GfsVariable *         gfs_variables_from_list       (GfsVariable * variables,
-						     gchar * list,
-						     gchar ** error);
-
 void                  ftt_cell_refine_corners       (FttCell * cell,
 						     FttCellInitFunc init,
 						     gpointer data);
diff --git a/src/graphic.c b/src/graphic.c
index 6b05275..0fc7aec 100644
--- a/src/graphic.c
+++ b/src/graphic.c
@@ -24,6 +24,7 @@
 #include "config.h"
 #include "graphic.h"
 #include "solid.h"
+#include "variable.h"
 
 typedef struct {
   GPtrArray * colors;
diff --git a/src/simulation.c b/src/simulation.c
index 3f28460..19c5c39 100644
--- a/src/simulation.c
+++ b/src/simulation.c
@@ -31,41 +31,6 @@
 #include "vof.h"
 #include "tension.h"
 
-/* GfsVariableTracer: object */
-
-static void variable_tracer_init (GfsVariableTracer * v)
-{
-  gfs_advection_params_init (&v->advection);
-  v->advection.gradient = gfs_center_van_leer_gradient;
-  v->advection.flux = gfs_face_advection_flux;
-  v->advection.v = GFS_VARIABLE1 (v);
-  v->advection.fv = gfs_res;
-
-  gfs_multilevel_params_init (&v->diffusion);
-  v->diffusion.tolerance = 1e-6;
-}
-
-GfsVariableClass * gfs_variable_tracer_class (void)
-{
-  static GfsVariableClass * klass = NULL;
-
-  if (klass == NULL) {
-    GtsObjectClassInfo gfs_variable_tracer_info = {
-      "GfsVariableTracer",
-      sizeof (GfsVariableTracer),
-      sizeof (GfsVariableClass),
-      (GtsObjectClassInitFunc) NULL,
-      (GtsObjectInitFunc) variable_tracer_init,
-      (GtsArgSetFunc) NULL,
-      (GtsArgGetFunc) NULL
-    };
-    klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), 
-				  &gfs_variable_tracer_info);
-  }
-
-  return klass;
-}
-
 /* GfsSimulation: object */
 
 static void simulation_destroy (GtsObject * object)
diff --git a/src/simulation.h b/src/simulation.h
index 2ecc6e1..b29344d 100644
--- a/src/simulation.h
+++ b/src/simulation.h
@@ -122,27 +122,6 @@ void                 gfs_physical_params_read    (GfsPhysicalParams * p,
 void                 gfs_simulation_run          (GfsSimulation * sim);
 #define              gfs_object_simulation(o)    GFS_SIMULATION(GTS_OBJECT (o)->reserved)
 
-/* GfsVariableTracer: header */
-
-typedef struct _GfsVariableTracer                GfsVariableTracer;
-
-struct _GfsVariableTracer {
-  /*< private >*/
-  GfsVariable parent;
-
-  /*< public >*/
-  GfsAdvectionParams advection;
-  GfsMultilevelParams diffusion;
-};
-
-#define GFS_VARIABLE_TRACER(obj)            GTS_OBJECT_CAST (obj,\
-					           GfsVariableTracer,\
-					           gfs_variable_tracer_class ())
-#define GFS_IS_VARIABLE_TRACER(obj)         (gts_object_is_from_class (obj,\
-					     gfs_variable_tracer_class ()))
-
-GfsVariableClass * gfs_variable_tracer_class  (void);
-
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
diff --git a/src/solid.c b/src/solid.c
index 4d57a82..1d6519e 100644
--- a/src/solid.c
+++ b/src/solid.c
@@ -22,6 +22,7 @@
 #include <string.h>
 #include "solid.h"
 #include "vof.h"
+#include "variable.h"
 
 /**
  * gfs_cell_fluid:
diff --git a/src/timestep.h b/src/timestep.h
index a460add..2d84561 100644
--- a/src/timestep.h
+++ b/src/timestep.h
@@ -40,6 +40,8 @@ struct _GfsMultilevelParams {
   GfsNorm residual_before, residual;
 };
 
+#include "variable.h"
+
 void          gfs_multilevel_params_init      (GfsMultilevelParams * par);
 void          gfs_multilevel_params_write     (GfsMultilevelParams * par, 
 					       FILE * fp);
diff --git a/src/variable.c b/src/variable.c
new file mode 100644
index 0000000..d25223f
--- /dev/null
+++ b/src/variable.c
@@ -0,0 +1,265 @@
+/* Gerris - The GNU Flow Solver
+ * Copyright (C) 2001 National Institute of Water and Atmospheric Research
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.  
+ */
+
+#include "variable.h"
+
+/* GfsVariable: Object */
+
+static void gfs_variable_read (GtsObject ** o, GtsFile * fp)
+{
+  if (fp->type != GTS_STRING) {
+    gts_file_error (fp, "expecting a string (GfsVariableClass)");
+    return;
+  }
+  gts_file_next_token (fp);
+
+  if (fp->type != GTS_STRING) {
+    gts_file_error (fp, "expecting a string (name)");
+    return;
+  }
+  GFS_VARIABLE1 (*o)->name = g_strdup (fp->token->str);
+  gts_file_next_token (fp);
+}
+
+static void gfs_variable_write (GtsObject * o, FILE * fp)
+{
+  fprintf (fp, "%s %s", o->klass->info.name, GFS_VARIABLE1 (o)->name);
+}
+
+static void gfs_variable_destroy (GtsObject * object)
+{
+  GfsVariable * v = GFS_VARIABLE1 (object);
+
+  g_free (v->name);
+  if (v->sources)
+    gts_object_destroy (GTS_OBJECT (v->sources));
+  if (v->surface_bc)
+    gts_object_destroy (GTS_OBJECT (v->surface_bc));
+
+  (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->destroy) 
+    (object);
+}
+
+static void gfs_variable_clone (GtsObject * clone, GtsObject * object)
+{
+  GfsVariable * c = GFS_VARIABLE1 (clone);
+  GfsVariable * v = GFS_VARIABLE1 (object);
+
+  (* GTS_OBJECT_CLASS (gfs_variable_class ())->parent_class->clone) (clone, object);
+  if (v->name)
+    c->name = g_strdup (v->name);
+  c->sources = NULL;
+  c->surface_bc = NULL;
+}
+
+static void gfs_variable_class_init (GfsVariableClass * klass)
+{
+  GTS_OBJECT_CLASS (klass)->read = gfs_variable_read;
+  GTS_OBJECT_CLASS (klass)->write = gfs_variable_write;
+  GTS_OBJECT_CLASS (klass)->destroy = gfs_variable_destroy;
+  GTS_OBJECT_CLASS (klass)->clone = gfs_variable_clone;
+}
+
+static void gfs_variable_init (GfsVariable * v)
+{
+  v->fine_coarse = (GfsVariableFineCoarseFunc) gfs_get_from_below_intensive;
+}
+
+GfsVariableClass * gfs_variable_class (void)
+{
+  static GfsVariableClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo gfs_variable_info = {
+      "GfsVariable",
+      sizeof (GfsVariable),
+      sizeof (GfsVariableClass),
+      (GtsObjectClassInitFunc) gfs_variable_class_init,
+      (GtsObjectInitFunc) gfs_variable_init,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gts_object_class ()), &gfs_variable_info);
+  }
+
+  return klass;
+}
+
+/**
+ * gfs_variable_new:
+ * @klass: a #GfsVariableClass.
+ * @parent: the parent or %NULL.
+ * @name: the name of the variable.
+ * @centered: is the variable cell-centered?
+ * @i: the variable index.
+ *
+ * Returns: a newly allocated #GfsVariable,
+ */
+GfsVariable * gfs_variable_new (GfsVariableClass * klass,
+				GtsObject * parent,
+				const gchar * name,
+				gboolean centered,
+				guint i)
+{
+  GfsVariable * v;
+
+  v = GFS_VARIABLE1 (gts_object_new (GTS_OBJECT_CLASS (klass)));
+  if (name)
+    v->name = g_strdup (name);
+  v->i = i;
+  v->centered = centered;
+  v->p = parent;
+  v->permanent = v;
+
+  return v;
+}
+
+/**
+ * gfs_variable_list_copy:
+ * @v: a #GfsVariable.
+ * @parent: the parent of the new list or %NULL.
+ *
+ * Returns: a new variable list copy of @v.
+ */
+GfsVariable * gfs_variable_list_copy (GfsVariable * v,
+				      GtsObject * parent)
+{
+  GfsVariable * start = NULL, * prev = NULL;
+
+  while (v) {
+    GfsVariable * n = GFS_VARIABLE1 (gts_object_clone (GTS_OBJECT (v)));
+
+    n->p = parent;
+    if (prev == NULL)
+      start = n;
+    else
+      prev->next = n;
+    prev = n;
+    v = v->next;
+  }
+  return start;
+}
+
+/**
+ * gfs_variable_list_destroy:
+ * @v: a #GfsVariable.
+ *
+ * Free all the memory allocated for the list starting at @v.
+ */
+void gfs_variable_list_destroy (GfsVariable * v)
+{
+  while (v) {
+    GfsVariable * next = v->next;
+
+    gts_object_destroy (GTS_OBJECT (v));
+    v = next;
+  }
+}
+
+/**
+ * gfs_variable_from_name:
+ * @variables: the list of available #GfsVariable.
+ * @name: the name of the variable to find.
+ *
+ * Returns: the #GfsVariable @name or %NULL if this variable name does
+ * not exist.  
+ */
+GfsVariable * gfs_variable_from_name (GfsVariable * variables,
+				      const gchar * name)
+{
+  g_return_val_if_fail (name != NULL, NULL);
+
+  while (variables && (!variables->name || strcmp (name, variables->name)))
+    variables = variables->next;
+  return variables;
+}
+
+/**
+ * gfs_variables_from_list:
+ * @variables: the list of available #GfsVariable.
+ * @list: a malloc'ed string containing comma separated variable names.
+ * @error: where to return the variable name in case of error.
+ *
+ * Returns: a list of variables or %NULL in case of error, in which
+ * case *@error points to the name of the unknown variable.  
+ */
+GfsVariable * gfs_variables_from_list (GfsVariable * variables,
+				       gchar * list,
+				       gchar ** error)
+{
+  gchar * s;
+  GfsVariable * var = NULL, * prev = NULL;
+
+  g_return_val_if_fail (list != NULL, NULL);
+  g_return_val_if_fail (error != NULL, NULL);
+
+  s = strtok (list, ",");
+  while (s) {
+    GfsVariable * v = gfs_variable_from_name (variables, s), * n;
+
+    if (v == NULL) {
+      *error = s;
+      gfs_variable_list_destroy (var);
+      return NULL;
+    }
+    n = gfs_variable_new (gfs_variable_class (), v->p, v->name, FALSE, v->i);
+    if (prev)
+      prev->next = n;
+    else
+      var = n;
+    prev = n;
+    s = strtok (NULL, ",");
+  }
+  return var;
+}
+
+/* GfsVariableTracer: object */
+
+static void variable_tracer_init (GfsVariableTracer * v)
+{
+  gfs_advection_params_init (&v->advection);
+  v->advection.gradient = gfs_center_van_leer_gradient;
+  v->advection.flux = gfs_face_advection_flux;
+  v->advection.v = GFS_VARIABLE1 (v);
+  v->advection.fv = gfs_res;
+
+  gfs_multilevel_params_init (&v->diffusion);
+  v->diffusion.tolerance = 1e-6;
+}
+
+GfsVariableClass * gfs_variable_tracer_class (void)
+{
+  static GfsVariableClass * klass = NULL;
+
+  if (klass == NULL) {
+    GtsObjectClassInfo gfs_variable_tracer_info = {
+      "GfsVariableTracer",
+      sizeof (GfsVariableTracer),
+      sizeof (GfsVariableClass),
+      (GtsObjectClassInitFunc) NULL,
+      (GtsObjectInitFunc) variable_tracer_init,
+      (GtsArgSetFunc) NULL,
+      (GtsArgGetFunc) NULL
+    };
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_variable_class ()), 
+				  &gfs_variable_tracer_info);
+  }
+
+  return klass;
+}
diff --git a/src/variable.h b/src/variable.h
new file mode 100644
index 0000000..7350291
--- /dev/null
+++ b/src/variable.h
@@ -0,0 +1,113 @@
+/* Gerris - The GNU Flow Solver
+ * Copyright (C) 2001 National Institute of Water and Atmospheric Research
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.  
+ */
+
+#ifndef __VARIABLE_H__
+#define __VARIABLE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct _GfsSurfaceGenericBc        GfsSurfaceGenericBc;
+
+#include "advection.h"
+#include "timestep.h"
+
+/* GfsVariable: Header */
+
+typedef void (* GfsVariableDerivedFunc)    (FttCell * cell, GfsVariable * v);
+typedef void (* GfsVariableFineCoarseFunc) (FttCell * cell, GfsVariable * v);
+
+struct _GfsVariable {
+  /*< private >*/
+  GtsObject parent;
+
+  /*< public >*/
+  guint i;
+  gchar * name;
+  gboolean centered;
+  GfsVariableDerivedFunc derived;
+  GfsVariableFineCoarseFunc fine_coarse;
+  GtsContainer * sources;
+  GfsSurfaceGenericBc * surface_bc;
+  GfsVariable * next, * permanent;
+  GtsObject * p;
+};
+
+typedef struct _GfsVariableClass    GfsVariableClass;
+
+struct _GfsVariableClass {
+  /*< private >*/
+  GtsObjectClass parent_class;
+
+  /*< public >*/
+};
+
+#define GFS_VARIABLE1(obj)            GTS_OBJECT_CAST (obj,\
+					         GfsVariable,\
+					         gfs_variable_class ())
+#define GFS_VARIABLE_CLASS(klass)    GTS_OBJECT_CLASS_CAST (klass,\
+						 GfsVariableClass,\
+						 gfs_variable_class())
+#define GFS_IS_VARIABLE(obj)         (gts_object_is_from_class (obj,\
+						 gfs_variable_class ()))
+#define gfs_variable_parent(v)         ((v)->p)
+#define gfs_variable_set_parent(v, pa) ((v)->p = GTS_OBJECT (pa))
+
+GfsVariableClass *    gfs_variable_class            (void);
+GfsVariable *         gfs_variable_new              (GfsVariableClass * klass,
+						     GtsObject * parent,
+						     const gchar * name,
+						     gboolean centered,
+						     guint i);
+GfsVariable *         gfs_variable_list_copy        (GfsVariable * v,
+						     GtsObject * parent);
+void                  gfs_variable_list_destroy     (GfsVariable * v);
+GfsVariable *         gfs_variable_from_name        (GfsVariable * variables,
+						     const gchar * name);
+GfsVariable *         gfs_variables_from_list       (GfsVariable * variables,
+						     gchar * list,
+						     gchar ** error);
+
+/* GfsVariableTracer: header */
+
+typedef struct _GfsVariableTracer                GfsVariableTracer;
+
+struct _GfsVariableTracer {
+  /*< private >*/
+  GfsVariable parent;
+
+  /*< public >*/
+  GfsAdvectionParams advection;
+  GfsMultilevelParams diffusion;
+};
+
+#define GFS_VARIABLE_TRACER(obj)            GTS_OBJECT_CAST (obj,\
+					           GfsVariableTracer,\
+					           gfs_variable_tracer_class ())
+#define GFS_IS_VARIABLE_TRACER(obj)         (gts_object_is_from_class (obj,\
+					     gfs_variable_tracer_class ()))
+
+GfsVariableClass * gfs_variable_tracer_class  (void);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __VARIABLE_H__ */
diff --git a/src/vof.c b/src/vof.c
index 91a0649..208ebcd 100644
--- a/src/vof.c
+++ b/src/vof.c
@@ -19,6 +19,7 @@
 
 #include <math.h>
 #include "vof.h"
+#include "variable.h"
 
 #define THRESHOLD(c) {if ((c) < 0.) c = 0.; else if ((c) > 1.) c = 1.;}
 

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list