[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:54:57 UTC 2009
The following commit has been merged in the upstream branch:
commit e6d77d090c543e29365d07f5dd39ce45551db478
Author: Stephane Popinet <popinet at users.sf.net>
Date: Wed Jan 16 08:04:54 2008 +1100
Renamed GfsOutputDropletStats to GfsOutputDropletSums
Note that the syntax has changed, please check the doc.
darcs-hash:20080115210454-d4795-c1a419a42987abb774d72815dffef3b89cacea18.gz
diff --git a/src/init.c b/src/init.c
index 68e6b22..3ce3a4e 100644
--- a/src/init.c
+++ b/src/init.c
@@ -197,7 +197,7 @@ GtsObjectClass ** gfs_classes (void)
gfs_output_scalar_sum_class (),
gfs_output_scalar_maxima_class (),
gfs_output_scalar_histogram_class (),
- gfs_output_droplet_stats_class (),
+ gfs_output_droplet_sums_class (),
gfs_output_error_norm_class (),
gfs_output_correlation_class (),
gfs_output_squares_class (),
diff --git a/src/output.c b/src/output.c
index 7927c0b..bee532d 100644
--- a/src/output.c
+++ b/src/output.c
@@ -2221,33 +2221,29 @@ GfsOutputClass * gfs_output_scalar_histogram_class (void)
return klass;
}
-/* GfsOutputDropletStats: Object */
+/* GfsOutputDropletSums: Object */
-static void gfs_output_droplet_stats_destroy (GtsObject * object)
+static void gfs_output_droplet_sums_destroy (GtsObject * object)
{
- if (GFS_OUTPUT_DROPLET_STATS (object)->tag)
- gts_object_destroy (GTS_OBJECT (GFS_OUTPUT_DROPLET_STATS (object)->tag));
+ GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (object);
+ gts_object_destroy (GTS_OBJECT (d->c));
+ if (d->tag)
+ gts_object_destroy (GTS_OBJECT (d->tag));
- (* GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class->destroy) (object);
+ (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->destroy) (object);
}
-static void gfs_output_droplet_stats_read (GtsObject ** o, GtsFile * fp)
+static void gfs_output_droplet_sums_read (GtsObject ** o, GtsFile * fp)
{
- (* GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class->read) (o, fp);
+ (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->read) (o, fp);
if (fp->type == GTS_ERROR)
return;
- if (fp->type != GTS_STRING) {
- gts_file_error (fp, "expecting a string (c)");
- return;
- }
+ GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (*o);
GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o));
- GfsOutputDropletStats * d = GFS_OUTPUT_DROPLET_STATS (*o);
- if ((d->c = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) {
- gts_file_error (fp, "unknown variable `%s'", fp->token->str);
+ gfs_function_read (d->c, domain, fp);
+ if (fp->type == GTS_ERROR)
return;
- }
- gts_file_next_token (fp);
if (fp->type == GTS_STRING) {
if (!(d->tag = gfs_domain_get_or_add_variable (domain, fp->token->str, "Droplet index"))) {
@@ -2258,13 +2254,13 @@ static void gfs_output_droplet_stats_read (GtsObject ** o, GtsFile * fp)
}
}
-static void gfs_output_droplet_stats_write (GtsObject * o, FILE * fp)
+static void gfs_output_droplet_sums_write (GtsObject * o, FILE * fp)
{
- GfsOutputDropletStats * d = GFS_OUTPUT_DROPLET_STATS (o);
+ GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (o);
- (* GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class->write) (o, fp);
+ (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->write) (o, fp);
- fprintf (fp, " %s", d->c->name);
+ gfs_function_write (d->c, fp);
if (d->tag)
fprintf (fp, " %s", d->tag->name);
}
@@ -2273,29 +2269,41 @@ typedef struct {
GfsVariable * s, * c, * tag;
double * v;
guint n;
-} DropStatsPar;
+ GfsFunction * fc;
+} DropSumsPar;
-static void droplet_stats (FttCell * cell, DropStatsPar * p)
+static void droplet_sums (FttCell * cell, DropSumsPar * p)
{
- guint i = GFS_VARIABLE (cell, p->tag->i);
+ guint i = GFS_VALUE (cell, p->tag);
if (i > 0)
- p->v[i - 1] += ftt_cell_volume (cell)*GFS_VARIABLE (cell, p->c->i)*GFS_VARIABLE (cell, p->s->i);
+ p->v[i - 1] += GFS_VALUE (cell, p->s);
}
-static gboolean gfs_output_droplet_stats_event (GfsEvent * event, GfsSimulation * sim)
+static void compute_c (FttCell * cell, DropSumsPar * p)
{
- if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class)->event) (event, sim)) {
- GfsOutputDropletStats * d = GFS_OUTPUT_DROPLET_STATS (event);
+ GFS_VALUE (cell, p->c) = gfs_function_value (p->fc, cell);
+}
+
+static gboolean gfs_output_droplet_sums_event (GfsEvent * event, GfsSimulation * sim)
+{
+ if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class)->event) (event, sim)) {
+ GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (event);
GfsDomain * domain = GFS_DOMAIN (sim);
- DropStatsPar p;
+ DropSumsPar p;
p.s = GFS_OUTPUT_SCALAR (event)->v;
- p.c = d->c;
+ p.c = gfs_function_get_variable (d->c);
+ if (!p.c) {
+ p.c = gfs_temporary_variable (domain);
+ p.fc = d->c;
+ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttCellTraverseFunc) compute_c, &p);
+ }
p.tag = d->tag ? d->tag : gfs_temporary_variable (domain);
- p.n = gfs_domain_tag_droplets (domain, d->c, p.tag);
+ p.n = gfs_domain_tag_droplets (domain, p.c, p.tag);
if (p.n > 0) {
p.v = g_malloc0 (p.n*sizeof (double));
gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
- (FttCellTraverseFunc) droplet_stats, &p);
+ (FttCellTraverseFunc) droplet_sums, &p);
guint i;
for (i = 0; i < p.n; i++)
fprintf (GFS_OUTPUT (event)->file->fp, "%g %d %.12g\n", sim->time.t, i + 1, p.v[i]);
@@ -2303,35 +2311,42 @@ static gboolean gfs_output_droplet_stats_event (GfsEvent * event, GfsSimulation
}
if (p.tag != d->tag)
gts_object_destroy (GTS_OBJECT (p.tag));
+ if (!gfs_function_get_variable (d->c))
+ gts_object_destroy (GTS_OBJECT (p.c));
return TRUE;
}
return FALSE;
}
-static void gfs_output_droplet_stats_class_init (GfsOutputClass * klass)
+static void gfs_output_droplet_sums_class_init (GfsOutputClass * klass)
{
- GFS_EVENT_CLASS (klass)->event = gfs_output_droplet_stats_event;
- GTS_OBJECT_CLASS (klass)->read = gfs_output_droplet_stats_read;
- GTS_OBJECT_CLASS (klass)->write = gfs_output_droplet_stats_write;
- GTS_OBJECT_CLASS (klass)->destroy = gfs_output_droplet_stats_destroy;
+ GFS_EVENT_CLASS (klass)->event = gfs_output_droplet_sums_event;
+ GTS_OBJECT_CLASS (klass)->read = gfs_output_droplet_sums_read;
+ GTS_OBJECT_CLASS (klass)->write = gfs_output_droplet_sums_write;
+ GTS_OBJECT_CLASS (klass)->destroy = gfs_output_droplet_sums_destroy;
}
-GfsOutputClass * gfs_output_droplet_stats_class (void)
+static void gfs_output_droplet_sums_init (GfsOutputDropletSums * d)
+{
+ d->c = gfs_function_new (gfs_function_class (), 0.);
+}
+
+GfsOutputClass * gfs_output_droplet_sums_class (void)
{
static GfsOutputClass * klass = NULL;
if (klass == NULL) {
- GtsObjectClassInfo gfs_output_droplet_stats_info = {
- "GfsOutputDropletStats",
- sizeof (GfsOutputDropletStats),
+ GtsObjectClassInfo gfs_output_droplet_sums_info = {
+ "GfsOutputDropletSums",
+ sizeof (GfsOutputDropletSums),
sizeof (GfsOutputClass),
- (GtsObjectClassInitFunc) gfs_output_droplet_stats_class_init,
- (GtsObjectInitFunc) NULL,
+ (GtsObjectClassInitFunc) gfs_output_droplet_sums_class_init,
+ (GtsObjectInitFunc) gfs_output_droplet_sums_init,
(GtsArgSetFunc) NULL,
(GtsArgGetFunc) NULL
};
klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()),
- &gfs_output_droplet_stats_info);
+ &gfs_output_droplet_sums_info);
}
return klass;
diff --git a/src/output.h b/src/output.h
index 9c5d39a..8daef8f 100644
--- a/src/output.h
+++ b/src/output.h
@@ -252,25 +252,26 @@ struct _GfsOutputScalarHistogram {
GfsOutputClass * gfs_output_scalar_histogram_class (void);
-/* GfsOutputDropletStats: Header */
+/* GfsOutputDropletSums: Header */
-typedef struct _GfsOutputDropletStats GfsOutputDropletStats;
+typedef struct _GfsOutputDropletSums GfsOutputDropletSums;
-struct _GfsOutputDropletStats {
+struct _GfsOutputDropletSums {
/*< private >*/
GfsOutputScalar parent;
/*< public >*/
- GfsVariable * c, * tag;
+ GfsFunction * c;
+ GfsVariable * tag;
};
-#define GFS_OUTPUT_DROPLET_STATS(obj) GTS_OBJECT_CAST (obj,\
- GfsOutputDropletStats,\
- gfs_output_droplet_stats_class ())
-#define GFS_IS_OUTPUT_DROPLET_STATS(obj) (gts_object_is_from_class (obj,\
- gfs_output_droplet_stats_class ()))
+#define GFS_OUTPUT_DROPLET_SUMS(obj) GTS_OBJECT_CAST (obj,\
+ GfsOutputDropletSums,\
+ gfs_output_droplet_sums_class ())
+#define GFS_IS_OUTPUT_DROPLET_SUMS(obj) (gts_object_is_from_class (obj,\
+ gfs_output_droplet_sums_class ()))
-GfsOutputClass * gfs_output_droplet_stats_class (void);
+GfsOutputClass * gfs_output_droplet_sums_class (void);
/* GfsOutputErrorNorm: Header */
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list