[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:55:46 UTC 2009
The following commit has been merged in the upstream branch:
commit 1ae9b0bf0fa0c2f864d817a88f07506fabcc6783
Author: Stephane Popinet <popinet at users.sf.net>
Date: Mon Oct 6 08:43:15 2008 +1100
Added new "min" and "max" derived Terrain variables
darcs-hash:20081005214315-d4795-8f45874d25b656f8886134d6514a3c82f9d9ba2b.gz
diff --git a/modules/terrain.mod b/modules/terrain.mod
index 11016c4..9c02880 100644
--- a/modules/terrain.mod
+++ b/modules/terrain.mod
@@ -935,6 +935,16 @@ static void terrain_refine (GfsRefine * refine, GfsSimulation * sim)
static void refine_terrain_destroy (GtsObject * object)
{
GfsRefineTerrain * t = GFS_REFINE_TERRAIN (object);
+ GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (object));
+
+ gchar * dname = g_strconcat (t->name, "min", NULL);
+ gfs_domain_remove_derived_variable (domain, dname);
+ g_free (dname);
+
+ dname = g_strconcat (t->name, "max", NULL);
+ gfs_domain_remove_derived_variable (domain, dname);
+ g_free (dname);
+
g_free (t->name);
g_free (t->basename);
if (t->rs) {
@@ -943,10 +953,44 @@ static void refine_terrain_destroy (GtsObject * object)
r_surface_close (t->rs[i]);
g_free (t->rs);
}
- gts_object_destroy (GTS_OBJECT (t->criterion));
+ gts_object_destroy (GTS_OBJECT (t->criterion));
(* GTS_OBJECT_CLASS (gfs_refine_terrain_class ())->parent_class->destroy) (object);
}
+static gdouble terrain_hmin (FttCell * cell, FttCellFace * face,
+ GfsDomain * domain, GfsRefineTerrain * t)
+{
+ g_return_val_if_fail (cell != NULL, 0.);
+
+ gdouble dx, dy, min = G_MAXDOUBLE;
+ gdouble H0 = GFS_VALUE (cell, t->h[0]), H1 = GFS_VALUE (cell, t->h[1]);
+ gdouble H2 = GFS_VALUE (cell, t->h[2]), H3 = GFS_VALUE (cell, t->h[3]);
+
+ for (dx = -1.; dx <= 1.; dx += 2.)
+ for (dy = -1.; dy <= 1.; dy += 2.) {
+ double v = H0 + dx*H1 + dy*H2 + dx*dy*H3;
+ if (v < min) min = v;
+ }
+ return min;
+}
+
+static gdouble terrain_hmax (FttCell * cell, FttCellFace * face,
+ GfsDomain * domain, GfsRefineTerrain * t)
+{
+ g_return_val_if_fail (cell != NULL, 0.);
+
+ gdouble dx, dy, max = - G_MAXDOUBLE;
+ gdouble H0 = GFS_VALUE (cell, t->h[0]), H1 = GFS_VALUE (cell, t->h[1]);
+ gdouble H2 = GFS_VALUE (cell, t->h[2]), H3 = GFS_VALUE (cell, t->h[3]);
+
+ for (dx = -1.; dx <= 1.; dx += 2.)
+ for (dy = -1.; dy <= 1.; dy += 2.) {
+ double v = H0 + dx*H1 + dy*H2 + dx*dy*H3;
+ if (v > max) max = v;
+ }
+ return max;
+}
+
static void refine_terrain_read (GtsObject ** o, GtsFile * fp)
{
(* GTS_OBJECT_CLASS (gfs_refine_terrain_class ())->parent_class->read) (o, fp);
@@ -1075,6 +1119,30 @@ static void refine_terrain_read (GtsObject ** o, GtsFile * fp)
t->hn = gfs_domain_get_or_add_variable (domain, name, "Terrain samples #");
g_free (name);
+ GfsDerivedVariableInfo v;
+
+ v.name = g_strjoin (NULL, t->name, "min", NULL);
+ v.description = "Minimum terrain height";
+ v.func = terrain_hmin;
+ v.data = t;
+ if (!gfs_domain_add_derived_variable (domain, v)) {
+ gts_file_error (fp, "derived variable `%s' already defined", v.name);
+ g_free (v.name);
+ return;
+ }
+ g_free (v.name);
+
+ v.name = g_strjoin (NULL, t->name, "max", NULL);
+ v.description = "Maximum terrain height";
+ v.func = terrain_hmax;
+ v.data = t;
+ if (!gfs_domain_add_derived_variable (domain, v)) {
+ gts_file_error (fp, "derived variable `%s' already defined", v.name);
+ g_free (v.name);
+ return;
+ }
+ g_free (v.name);
+
gfs_function_read (t->criterion, domain, fp);
}
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list