[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