[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