[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
s.popinet at niwa.co.nz
Fri May 15 02:52:03 UTC 2009
The following commit has been merged in the upstream branch:
commit 19641d315068231c1033c3e25c583997be7bbad2
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date: Tue Jun 21 09:05:27 2005 +1000
OutputScalarHistogram correctly uses new variable definition and computes instantaneous histograms
darcs-hash:20050620230527-fbd8f-2bc00fbf8df1ccf16e254744e9723f6b099d934a.gz
diff --git a/src/event.h b/src/event.h
index a3399e1..0ffd5a5 100644
--- a/src/event.h
+++ b/src/event.h
@@ -58,6 +58,7 @@ struct _GfsEventClass {
gfs_event_class())
#define GFS_IS_EVENT(obj) (gts_object_is_from_class (obj,\
gfs_event_class ()))
+
GfsEventClass * gfs_event_class (void);
GfsEvent * gfs_event_new (GfsEventClass * klass);
void gfs_event_set (GfsEvent * e,
@@ -73,6 +74,7 @@ void gfs_event_do (GfsEvent * event,
GfsSimulation * sim);
void gfs_event_half_do (GfsEvent * event,
GfsSimulation * sim);
+#define gfs_event_is_repetitive(e) ((e)->step < G_MAXDOUBLE || (e)->istep < G_MAXINT)
/* GfsGenericInit: Header */
diff --git a/src/output.c b/src/output.c
index ecf1d5e..1d54cdc 100644
--- a/src/output.c
+++ b/src/output.c
@@ -1980,37 +1980,24 @@ static void update_histogram (FttCell * cell, GfsOutputScalar * h)
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 (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 ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_scalar_histogram_class ())->parent_class)->event)
(event, sim)) {
- if (h->last < 0.)
- h->last = sim->time.t;
- else {
+ GfsOutputScalarHistogram * h = GFS_OUTPUT_SCALAR_HISTOGRAM (event);
+
+ if (gfs_event_is_repetitive (event))
+ h->dt = h->last >= 0. ? sim->time.t - h->last : 0.;
+ else
+ h->dt = 1.;
+
+ if (h->dt > 0.) {
GfsOutput * output = GFS_OUTPUT (event);
guint i;
+ gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER,
+ FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL,
+ GFS_OUTPUT_SCALAR (output)->maxlevel,
+ (FttCellTraverseFunc) update_histogram, output);
+
if (output->file && !output->dynamic)
output->file->fp = freopen (output->format, "w", output->file->fp);
for (i = 0; i < h->n; i++)
@@ -2019,6 +2006,7 @@ static gboolean gfs_output_scalar_histogram_event (GfsEvent * event,
if (output->file && !output->dynamic)
fflush (output->file->fp);
}
+ h->last = sim->time.t;
return TRUE;
}
return FALSE;
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list