[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