[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
s.popinet at niwa.co.nz
Fri May 15 02:52:06 UTC 2009
The following commit has been merged in the upstream branch:
commit 727bee252fe212f881639904fcfa36256784b810
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date: Wed Jun 29 15:22:43 2005 +1000
Derived variables are associated with GfsDomain
darcs-hash:20050629052243-fbd8f-a6c6ce783a5ce7384f4ee152a97846844c2829a9.gz
diff --git a/src/adaptive.c b/src/adaptive.c
index 5e63ce8..78e08f4 100644
--- a/src/adaptive.c
+++ b/src/adaptive.c
@@ -240,8 +240,10 @@ static void gfs_adapt_read (GtsObject ** o, GtsFile * fp)
}
domain = GFS_DOMAIN (gfs_object_simulation (*o));
a->c = gfs_variable_from_name (domain->variables, fp->token->str);
- if (!a->c)
- a->c = gfs_domain_add_variable (domain, fp->token->str);
+ if (!a->c && !(a->c = gfs_domain_add_variable (domain, fp->token->str))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str);
+ return;
+ }
g_assert (a->c);
a->c->fine_coarse = none;
gts_file_next_token (fp);
diff --git a/src/domain.c b/src/domain.c
index d43e9c0..cad8194 100644
--- a/src/domain.c
+++ b/src/domain.c
@@ -134,6 +134,7 @@ static void domain_read (GtsObject ** o, GtsFile * fp)
s = strtok (NULL, ",");
}
g_free (variables1);
+ domain->variables_io = gfs_variables_from_list (domain->variables, variables, &s);
g_free (variables);
}
}
@@ -238,6 +239,9 @@ static void domain_destroy (GtsObject * o)
}
g_assert (domain->variables == NULL);
+ g_slist_foreach (domain->derived_variables, (GFunc) g_free, NULL);
+ g_slist_free (domain->derived_variables);
+
g_array_free (domain->allocated, TRUE);
g_hash_table_foreach (domain->timers, (GHFunc) free_pair, NULL);
@@ -2863,3 +2867,59 @@ void gfs_domain_combine_traverse (GfsDomain * domain1,
gts_container_foreach (GTS_CONTAINER (domain1), (GtsFunc) box_combine_traverse, data);
}
+
+/**
+ * gfs_domain_add_derived_variable:
+ * @domain: a #GfsDomain.
+ * @v: the #GfsDerivedVariable.
+ *
+ * Adds @v to @domain.
+ *
+ * Returns: %TRUE if the variable was successfully added to @domain or
+ * %FALSE if a variable with the same name already exists.
+ */
+gboolean gfs_domain_add_derived_variable (GfsDomain * domain, GfsDerivedVariable v)
+{
+ g_return_val_if_fail (domain != NULL, FALSE);
+
+ if (gfs_variable_from_name (domain->variables, v.name))
+ return FALSE;
+ if (gfs_derived_variable_from_name (domain->derived_variables, v.name))
+ return FALSE;
+ domain->derived_variables = g_slist_prepend (domain->derived_variables,
+ g_memdup (&v, sizeof (GfsDerivedVariable)));
+ return TRUE;
+}
+
+/**
+ * gfs_domain_remove_derived_variable:
+ * @domain: a #GfsDomain.
+ * @name: the name of a #GfsDerivedVariable.
+ *
+ * Removes derived variable @name from @domain.
+ *
+ * Returns: %TRUE if the variable was successfully removed from @domain or
+ * %FALSE if a derived variable with the this name does not exist.
+ */
+gboolean gfs_domain_remove_derived_variable (GfsDomain * domain, const gchar * name)
+{
+ GSList * i;
+
+ g_return_val_if_fail (domain != NULL, FALSE);
+ g_return_val_if_fail (name != NULL, FALSE);
+
+ i = domain->derived_variables;
+ while (i) {
+ GfsDerivedVariable * u = i->data;
+
+ if (!strcmp (u->name, name)) {
+ g_free (u);
+ domain->derived_variables = g_slist_remove_link (domain->derived_variables, i);
+ g_slist_free (i);
+ return TRUE;
+ }
+ i = i->next;
+ }
+ return FALSE;
+}
+
diff --git a/src/domain.h b/src/domain.h
index ce1fa59..e8ffec1 100644
--- a/src/domain.h
+++ b/src/domain.h
@@ -56,6 +56,7 @@ struct _GfsDomain {
GArray * allocated;
GSList * variables;
+ GSList * derived_variables;
GfsVariable * velocity[FTT_DIMENSION];
@@ -232,6 +233,10 @@ void gfs_domain_combine_traverse (GfsDomain * domain1,
gpointer idata,
FttCellTraverseFunc outside,
gpointer odata);
+gboolean gfs_domain_add_derived_variable (GfsDomain * domain,
+ GfsDerivedVariable v);
+gboolean gfs_domain_remove_derived_variable (GfsDomain * domain,
+ const gchar * name);
#ifdef __cplusplus
}
diff --git a/src/event.c b/src/event.c
index 6936ce8..62f89dc 100644
--- a/src/event.c
+++ b/src/event.c
@@ -485,8 +485,10 @@ static void gfs_init_read (GtsObject ** o, GtsFile * fp)
GfsVariable * v = gfs_variable_from_name (domain->variables, fp->token->str);
GfsFunction * f;
- if (!v)
- v = gfs_domain_add_variable (domain, fp->token->str);
+ if (!v && !(v = gfs_domain_add_variable (domain, fp->token->str))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str);
+ return;
+ }
gts_file_next_token (fp);
if (fp->type != '=') {
@@ -844,9 +846,10 @@ static void gfs_event_sum_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a string (sv)");
return;
}
- if (!(s->sv = gfs_variable_from_name (domain->variables, fp->token->str))) {
- s->sv = gfs_domain_add_variable (domain, fp->token->str);
- g_assert (s->sv);
+ if (!(s->sv = gfs_variable_from_name (domain->variables, fp->token->str)) &&
+ !(s->sv = gfs_domain_add_variable (domain, fp->token->str))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str);
+ return;
}
s->sv->fine_coarse = s->v->fine_coarse;
gts_file_next_token (fp);
@@ -1031,9 +1034,10 @@ static void gfs_event_harmonic_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a string (Z)");
return;
}
- if (!(s->z = gfs_variable_from_name (domain->variables, fp->token->str))) {
- s->z = gfs_domain_add_variable (domain, fp->token->str);
- g_assert (s->z);
+ if (!(s->z = gfs_variable_from_name (domain->variables, fp->token->str)) &&
+ !(s->z = gfs_domain_add_variable (domain, fp->token->str))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str);
+ return;
}
gts_file_next_token (fp);
@@ -1067,15 +1071,17 @@ static void gfs_event_harmonic_read (GtsObject ** o, GtsFile * fp)
gchar * u;
u = g_strdup_printf ("%s%d", s->Aname, i);
- if (!(s->A[i] = gfs_variable_from_name (domain->variables, u))) {
- s->A[i] = gfs_domain_add_variable (domain, u);
- g_assert (s->A[i]);
+ if (!(s->A[i] = gfs_variable_from_name (domain->variables, u)) &&
+ !(s->A[i] = gfs_domain_add_variable (domain, u))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", u);
+ return;
}
g_free (u);
u = g_strdup_printf ("%s%d", s->Bname, i);
- if (!(s->B[i] = gfs_variable_from_name (domain->variables, u))) {
- s->B[i] = gfs_domain_add_variable (domain, u);
- g_assert (s->B[i]);
+ if (!(s->B[i] = gfs_variable_from_name (domain->variables, u)) &&
+ !(s->B[i] = gfs_domain_add_variable (domain, u))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", u);
+ return;
}
}
@@ -1295,7 +1301,7 @@ static void gfs_event_stop_read (GtsObject ** o, GtsFile * fp)
return;
}
s->max = atof (fp->token->str);
- s->oldv = gfs_domain_add_variable (domain, NULL);
+ s->oldv = gfs_temporary_variable (domain);
s->oldv->fine_coarse = s->v->fine_coarse;
if (fp->next_token != '\n') {
@@ -1304,13 +1310,24 @@ static void gfs_event_stop_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a string (diff)");
return;
}
- if (!(s->diff = gfs_variable_from_name (domain->variables, fp->token->str)))
- s->diff = gfs_domain_add_variable (domain, fp->token->str);
+ if (!(s->diff = gfs_variable_from_name (domain->variables, fp->token->str)) &&
+ !(s->diff = gfs_domain_add_variable (domain, fp->token->str))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str);
+ return;
+ }
s->diff->fine_coarse = s->v->fine_coarse;
}
gts_file_next_token (fp);
}
+static void gfs_event_stop_destroy (GtsObject * o)
+{
+ if (GFS_EVENT_STOP (o)->oldv)
+ gts_object_destroy (GTS_OBJECT (GFS_EVENT_STOP (o)->oldv));
+
+ (* GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class->destroy) (o);
+}
+
static void diff (FttCell * cell, GfsEventStop * s)
{
GFS_VARIABLE (cell, s->oldv->i) -= GFS_VARIABLE (cell, s->v->i);
@@ -1361,6 +1378,7 @@ static void gfs_event_stop_class_init (GfsEventClass * klass)
{
GTS_OBJECT_CLASS (klass)->read = gfs_event_stop_read;
GTS_OBJECT_CLASS (klass)->write = gfs_event_stop_write;
+ GTS_OBJECT_CLASS (klass)->destroy = gfs_event_stop_destroy;
GFS_EVENT_CLASS (klass)->event = gfs_event_stop_event;
}
diff --git a/src/ocean.c b/src/ocean.c
index bab1ffd..8b04ff0 100644
--- a/src/ocean.c
+++ b/src/ocean.c
@@ -593,12 +593,14 @@ static void gfs_source_hydrostatic_read (GtsObject ** o, GtsFile * fp)
FttComponent c;
GfsVariable * v;
GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o));
+ GfsSourceHydrostatic * sh;
if (GTS_OBJECT_CLASS (gfs_source_hydrostatic_class ())->parent_class->read)
(* GTS_OBJECT_CLASS (gfs_source_hydrostatic_class ())->parent_class->read) (o, fp);
if (fp->type == GTS_ERROR)
return;
+ sh = GFS_SOURCE_HYDROSTATIC (*o);
v = GFS_SOURCE_GENERIC (*o)->v->next;
for (c = 1; c < 2; c++, v = v->next) {
if (!v) {
@@ -616,8 +618,8 @@ static void gfs_source_hydrostatic_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a string (rho)");
return;
}
- GFS_SOURCE_HYDROSTATIC (*o)->rho = gfs_variable_from_name (domain->variables, fp->token->str);
- if (GFS_SOURCE_HYDROSTATIC (*o)->rho == NULL) {
+ sh->rho = gfs_variable_from_name (domain->variables, fp->token->str);
+ if (sh->rho == NULL) {
gts_file_error (fp, "unknown variable `%s'", fp->token->str);
return;
}
@@ -627,12 +629,12 @@ static void gfs_source_hydrostatic_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a string (ph)");
return;
}
- GFS_SOURCE_HYDROSTATIC (*o)->ph = gfs_variable_from_name (domain->variables, fp->token->str);
- if (GFS_SOURCE_HYDROSTATIC (*o)->ph == NULL)
- GFS_SOURCE_HYDROSTATIC (*o)->ph = gfs_domain_add_variable (domain, fp->token->str);
+ sh->ph = gfs_variable_from_name (domain->variables, fp->token->str);
+ if (sh->ph == NULL)
+ sh->ph = gfs_domain_add_variable (domain, fp->token->str);
gts_file_next_token (fp);
- GFS_SOURCE_HYDROSTATIC (*o)->ph1 = gfs_domain_add_variable (domain, NULL);
+ sh->ph1 = gfs_domain_add_variable (domain, NULL);
}
static void gfs_source_hydrostatic_write (GtsObject * o, FILE * fp)
diff --git a/src/output.c b/src/output.c
index d29714a..525c384 100644
--- a/src/output.c
+++ b/src/output.c
@@ -2189,9 +2189,11 @@ static void output_error_norm_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a variable name");
return;
}
- n->v = gfs_variable_from_name (domain->variables, fp->token->str);
- if (!n->v)
- n->v = gfs_domain_add_variable (domain, fp->token->str);
+ if (!(n->v = gfs_variable_from_name (domain->variables, fp->token->str)) &&
+ !(n->v = gfs_domain_add_variable (domain, fp->token->str))) {
+ gts_file_error (fp, "`%s' is a reserved keyword", fp->token->str);
+ return;
+ }
gts_file_next_token (fp);
}
else {
diff --git a/src/refine.c b/src/refine.c
index 9c0d940..f4c7700 100644
--- a/src/refine.c
+++ b/src/refine.c
@@ -314,7 +314,7 @@ static void refine_distance_destroy (GtsObject * object)
if (d->stree)
gts_bb_tree_destroy (d->stree, TRUE);
- gfs_simulation_remove_derived_variable (gfs_object_simulation (object), "Distance");
+ gfs_domain_remove_derived_variable (GFS_DOMAIN (gfs_object_simulation (object)), "Distance");
(* GTS_OBJECT_CLASS (gfs_refine_distance_class ())->parent_class->destroy) (object);
}
@@ -338,7 +338,7 @@ static void refine_distance_read (GtsObject ** o, GtsFile * fp)
GfsDerivedVariable v = { "Distance", cell_distance };
v.data = *o;
- if (!gfs_simulation_add_derived_variable (gfs_object_simulation (*o), v)) {
+ if (!gfs_domain_add_derived_variable (GFS_DOMAIN (gfs_object_simulation (*o)), v)) {
gts_file_error (fp, "derived variable `Distance' already defined");
return;
}
@@ -383,7 +383,7 @@ GfsRefineClass * gfs_refine_distance_class (void)
static void refine_height_destroy (GtsObject * object)
{
- gfs_simulation_remove_derived_variable (gfs_object_simulation (object), "Height");
+ gfs_domain_remove_derived_variable (GFS_DOMAIN (gfs_object_simulation (object)), "Height");
(* GTS_OBJECT_CLASS (gfs_refine_height_class ())->parent_class->destroy) (object);
}
@@ -428,7 +428,7 @@ static void refine_height_read (GtsObject ** o, GtsFile * fp)
GfsDerivedVariable v = { "Height", cell_height };
v.data = *o;
- if (!gfs_simulation_add_derived_variable (gfs_object_simulation (*o), v)) {
+ if (!gfs_domain_add_derived_variable (GFS_DOMAIN (gfs_object_simulation (*o)), v)) {
gts_file_error (fp, "derived variable `Height' already defined");
return;
}
diff --git a/src/simulation.c b/src/simulation.c
index a94346c..6c99070 100644
--- a/src/simulation.c
+++ b/src/simulation.c
@@ -59,8 +59,6 @@ static void simulation_destroy (GtsObject * object)
i = i->next;
}
g_slist_free (sim->modules);
- g_slist_foreach (sim->derived_variables, (GFunc) g_free, NULL);
- g_slist_free (sim->derived_variables);
g_slist_free (sim->variables);
(* GTS_OBJECT_CLASS (gfs_simulation_class ())->parent_class->destroy)
@@ -728,7 +726,7 @@ static void gfs_simulation_init (GfsSimulation * object)
#endif /* FTT_3D */
while (v->name) {
- gfs_simulation_add_derived_variable (object, *v);
+ g_assert (gfs_domain_add_derived_variable (domain, *v));
v++;
}
@@ -1167,66 +1165,6 @@ void gfs_simulation_run (GfsSimulation * sim)
g_timer_stop (GFS_DOMAIN (sim)->timer);
}
-/**
- * gfs_simulation_add_derived_variable:
- * @sim: a #GfsSimulation.
- * @v: the #GfsDerivedVariable.
- *
- * Adds @v to @sim.
- *
- * Returns: %TRUE if the variable was successfully added to @sim or
- * %FALSE if a derived variable with the same name already exists.
- */
-gboolean gfs_simulation_add_derived_variable (GfsSimulation * sim, GfsDerivedVariable v)
-{
- GSList * i;
-
- g_return_val_if_fail (sim != NULL, FALSE);
-
- i = sim->derived_variables;
- while (i) {
- GfsDerivedVariable * u = i->data;
- if (!strcmp (u->name, v.name))
- return FALSE;
- i = i->next;
- }
- sim->derived_variables = g_slist_prepend (sim->derived_variables,
- g_memdup (&v, sizeof (GfsDerivedVariable)));
- return TRUE;
-}
-
-/**
- * gfs_simulation_remove_derived_variable:
- * @sim: a #GfsSimulation.
- * @name: the name of a #GfsDerivedVariable.
- *
- * Removes derived variable @name from @sim.
- *
- * Returns: %TRUE if the variable was successfully removed from @sim or
- * %FALSE if a derived variable with the this name does not exist.
- */
-gboolean gfs_simulation_remove_derived_variable (GfsSimulation * sim, const gchar * name)
-{
- GSList * i;
-
- g_return_val_if_fail (sim != NULL, FALSE);
- g_return_val_if_fail (name != NULL, FALSE);
-
- i = sim->derived_variables;
- while (i) {
- GfsDerivedVariable * u = i->data;
-
- if (!strcmp (u->name, name)) {
- g_free (u);
- sim->derived_variables = g_slist_remove_link (sim->derived_variables, i);
- g_slist_free (i);
- return TRUE;
- }
- i = i->next;
- }
- return FALSE;
-}
-
/* GfsAdvection: Object */
static void advection_run (GfsSimulation * sim)
diff --git a/src/simulation.h b/src/simulation.h
index 6e51d8e..90c613e 100644
--- a/src/simulation.h
+++ b/src/simulation.h
@@ -55,8 +55,6 @@ struct _GfsAdaptStats {
struct _GfsSimulation {
GfsDomain parent;
- GSList * derived_variables;
-
GfsTime time;
GfsPhysicalParams physical_params;
@@ -120,10 +118,6 @@ void gfs_physical_params_read (GfsPhysicalParams * p,
GtsFile * fp);
void gfs_simulation_run (GfsSimulation * sim);
#define gfs_object_simulation(o) GFS_SIMULATION(GTS_OBJECT (o)->reserved)
-gboolean gfs_simulation_add_derived_variable (GfsSimulation * sim,
- GfsDerivedVariable v);
-gboolean gfs_simulation_remove_derived_variable (GfsSimulation * sim,
- const gchar * name);
/* GfsAdvection: Header */
diff --git a/src/source.c b/src/source.c
index c58bd60..42191a1 100644
--- a/src/source.c
+++ b/src/source.c
@@ -784,7 +784,15 @@ static void gfs_source_diffusion_explicit_read (GtsObject ** o, GtsFile * fp)
return;
GFS_SOURCE_DIFFUSION_EXPLICIT (*o)->s =
- gfs_domain_add_variable (GFS_DOMAIN (gfs_object_simulation (*o)), NULL);
+ gfs_temporary_variable (GFS_DOMAIN (gfs_object_simulation (*o)));
+}
+
+static void gfs_source_diffusion_explicit_destroy (GtsObject * o)
+{
+ if (GFS_SOURCE_DIFFUSION_EXPLICIT (o)->s)
+ gts_object_destroy (GTS_OBJECT (GFS_SOURCE_DIFFUSION_EXPLICIT (o)->s));
+
+ (* GTS_OBJECT_CLASS (gfs_source_diffusion_explicit_class ())->parent_class->destroy) (o);
}
static gdouble source_diffusion_explicit_value (GfsSourceGeneric * s,
@@ -798,6 +806,7 @@ static void gfs_source_diffusion_explicit_class_init (GfsSourceGenericClass * kl
{
GFS_EVENT_CLASS (klass)->event = gfs_source_diffusion_explicit_event;
GTS_OBJECT_CLASS (klass)->read = gfs_source_diffusion_explicit_read;
+ GTS_OBJECT_CLASS (klass)->destroy = gfs_source_diffusion_explicit_destroy;
klass->mac_value = klass->centered_value = source_diffusion_explicit_value;
}
@@ -945,9 +954,15 @@ GfsSourceGenericClass * gfs_source_viscosity_class (void)
static void source_coriolis_destroy (GtsObject * o)
{
+ FttComponent c;
+
if (GFS_SOURCE_CORIOLIS (o)->omegaz)
gts_object_destroy (GTS_OBJECT (GFS_SOURCE_CORIOLIS (o)->omegaz));
+ for (c = 0; c < 2; c++)
+ if (GFS_SOURCE_CORIOLIS (o)->u[c])
+ gts_object_destroy (GTS_OBJECT (GFS_SOURCE_CORIOLIS (o)->u[c]));
+
(* GTS_OBJECT_CLASS (gfs_source_class ())->parent_class->destroy) (o);
}
@@ -964,7 +979,7 @@ static void gfs_source_coriolis_read (GtsObject ** o, GtsFile * fp)
gfs_function_read (GFS_SOURCE_CORIOLIS (*o)->omegaz, gfs_object_simulation (*o), fp);
for (c = 0; c < 2; c++)
- GFS_SOURCE_CORIOLIS (*o)->u[c] = gfs_domain_add_variable (domain, NULL);
+ GFS_SOURCE_CORIOLIS (*o)->u[c] = gfs_temporary_variable (domain);
}
static void gfs_source_coriolis_write (GtsObject * o, FILE * fp)
diff --git a/src/utils.c b/src/utils.c
index 75ad6ec..ac8da1e 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -271,7 +271,7 @@ static void function_read (GtsObject ** o, GtsFile * fp)
}
else if ((f->v = gfs_variable_from_name (domain->variables, fp->token->str)))
break;
- else if ((f->dv = lookup_derived_variable (fp->token->str, sim->derived_variables))) {
+ else if ((f->dv = lookup_derived_variable (fp->token->str, domain->derived_variables))) {
f->expr = g_string_new (fp->token->str);
break;
}
@@ -317,7 +317,7 @@ static void function_read (GtsObject ** o, GtsFile * fp)
lv = g_slist_prepend (lv, i->data);
i = i->next;
}
- i = sim->derived_variables;
+ i = domain->derived_variables;
while (i) {
GfsDerivedVariable * v = i->data;
if (find_identifier (f->expr->str, v->name))
@@ -648,6 +648,26 @@ void gfs_function_write (GfsFunction * f, FILE * fp)
}
/**
+ * 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;
+}
+
+/**
* gfs_object_class_from_name:
* @name: the name of the class.
*
diff --git a/src/utils.h b/src/utils.h
index 24b2c08..fda51ac 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -39,6 +39,8 @@ typedef struct {
gpointer data;
} GfsDerivedVariable;
+GfsDerivedVariable * gfs_derived_variable_from_name (GSList * i, const gchar * name);
+
/* GfsFunction: Header */
typedef struct _GfsFunction GfsFunction;
diff --git a/src/variable.c b/src/variable.c
index 7aa15dc..fb8c950 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -131,7 +131,9 @@ GfsVariable * gfs_variable_new (GfsVariableClass * klass,
g_return_val_if_fail (klass != NULL, NULL);
g_return_val_if_fail (domain != NULL, NULL);
- if (name && gfs_variable_from_name (domain->variables, name))
+ if (name &&
+ (gfs_variable_from_name (domain->variables, name) ||
+ gfs_derived_variable_from_name (domain->derived_variables, name)))
return NULL;
v = GFS_VARIABLE1 (gts_object_new (GTS_OBJECT_CLASS (klass)));
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list