[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
s.popinet at niwa.co.nz
Fri May 15 02:51:56 UTC 2009
The following commit has been merged in the upstream branch:
commit f440746a03b2a84d825fa971d9b7474a3b7007c0
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date: Thu Jun 9 15:27:00 2005 +1000
OutputScalarHistogram starts when specified and properly reopens static files
darcs-hash:20050609052700-fbd8f-02fbdf4d9364dfbfad0fdfb718eb91eb231650d2.gz
diff --git a/src/output.c b/src/output.c
index 74ab679..35a1dad 100644
--- a/src/output.c
+++ b/src/output.c
@@ -1865,7 +1865,7 @@ static void update_histogram (FttCell * cell, GfsOutputScalarHistogram * h)
gint i = (v - h->min)/(h->max - h->min)*h->n;
if (i >= 0 && i < h->n) {
- gdouble w = gfs_cell_volume (cell);
+ gdouble w = gfs_cell_volume (cell)*h->dt;
h->w += w;
h->x[i] += v*w;
@@ -1877,31 +1877,44 @@ static gboolean gfs_output_scalar_histogram_event (GfsEvent * event,
GfsSimulation * sim)
{
GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event);
+ GfsOutputScalarHistogram * h = GFS_OUTPUT_SCALAR_HISTOGRAM (event);
GfsDomain * domain = GFS_DOMAIN (sim);
- if (output->v->derived) {
- gfs_variable_set_parent (output->v, domain);
- gfs_domain_cell_traverse (domain,
- FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
- (FttCellTraverseFunc) output->v->derived,
- output->v);
+ if (h->last >= 0.) {
+ if (output->v->derived) {
+ gfs_variable_set_parent (output->v, domain);
+ gfs_domain_cell_traverse (domain,
+ FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttCellTraverseFunc) output->v->derived,
+ output->v);
+ }
+ if (output->maxlevel >= 0)
+ gfs_domain_cell_traverse (domain,
+ FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1,
+ (FttCellTraverseFunc) output->v->fine_coarse,
+ output->v);
+ h->dt = sim->time.t - h->last;
+ gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER,
+ FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel,
+ (FttCellTraverseFunc) update_histogram, output);
+ h->last = sim->time.t;
}
- if (output->maxlevel >= 0)
- gfs_domain_cell_traverse (domain,
- FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1,
- (FttCellTraverseFunc) output->v->fine_coarse,
- output->v);
- gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER,
- FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, output->maxlevel,
- (FttCellTraverseFunc) update_histogram, output);
if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_histogram_class ())->parent_class)->event)
(event, sim)) {
- GfsOutputScalarHistogram * h = GFS_OUTPUT_SCALAR_HISTOGRAM (event);
- guint i;
-
- for (i = 0; i < h->n; i++)
- if (h->w > 0.)
- fprintf (GFS_OUTPUT (output)->file->fp, "%g %g\n", h->x[i]/h->w, h->y[i]/h->w);
+ if (h->last < 0.)
+ h->last = sim->time.t;
+ else {
+ GfsOutput * output = GFS_OUTPUT (event);
+ guint i;
+
+ if (output->file && !output->dynamic)
+ output->file->fp = freopen (output->format, "w", output->file->fp);
+ for (i = 0; i < h->n; i++)
+ if (h->y[i] > 0.)
+ fprintf (output->file->fp, "%g %g\n", h->x[i]/h->y[i], h->y[i]/h->w);
+ if (output->file && !output->dynamic)
+ fflush (output->file->fp);
+ }
return TRUE;
}
return FALSE;
@@ -1922,6 +1935,7 @@ static void gfs_output_scalar_histogram_init (GfsOutputScalarHistogram * object)
object->min = -1.;
object->max = 1.;
object->w = 0.;
+ object->last = -1.;
}
GfsOutputClass * gfs_output_scalar_histogram_class (void)
diff --git a/src/output.h b/src/output.h
index 88567d9..b7111f8 100644
--- a/src/output.h
+++ b/src/output.h
@@ -197,6 +197,7 @@ struct _GfsOutputScalarHistogram {
/*< public >*/
gdouble * x, * y, min, max, w;
+ gdouble last, dt;
guint n;
};
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list