[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203

Stephane Popinet s.popinet at niwa.co.nz
Fri May 15 02:52:33 UTC 2009


The following commit has been merged in the upstream branch:
commit 8a71d2676fcb1f84cfa11def0befa2a70cec6ac5
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date:   Wed Sep 7 15:54:48 2005 +1000

    Bug fix for OutputCorrelation
    
    darcs-hash:20050907055448-fbd8f-b4f932f2a22fe11e1752f8d2a3c75a53ccb13570.gz

diff --git a/src/output.c b/src/output.c
index 57c316e..c35859c 100644
--- a/src/output.c
+++ b/src/output.c
@@ -2268,7 +2268,7 @@ static gboolean gfs_output_error_norm_event (GfsEvent * event,
     GfsNorm norm;
 
     if (v == NULL)
-      enorm->v = gfs_variable_new (gfs_variable_class (), GFS_DOMAIN (sim), NULL);
+      enorm->v = gfs_temporary_variable (GFS_DOMAIN (sim));
     gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, 
 			      FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL,  
 			      output->maxlevel,
@@ -2359,24 +2359,24 @@ static gboolean gfs_output_correlation_event (GfsEvent * event,
   if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_error_norm_class ())->parent_class)->event)
       (event, sim)) {
     GfsOutputScalar * output = GFS_OUTPUT_SCALAR (event);
-    GfsVariable * v = GFS_OUTPUT_ERROR_NORM (event)->v;
+    GfsOutputErrorNorm * enorm = GFS_OUTPUT_ERROR_NORM (event);
+    GfsVariable * v = enorm->v;
     gdouble bias = 0., sum = 0., sumref = 0.;
     gpointer data[4];
 
     if (GFS_DOMAIN (sim)->pid != -1)
       g_assert_not_implemented ();
 
-    if (GFS_OUTPUT_ERROR_NORM (event)->unbiased) {
-      GfsNorm enorm;
-
+    if (v == NULL)
+      enorm->v = gfs_temporary_variable (GFS_DOMAIN (sim));
+    if (enorm->unbiased) {
       gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER,
 				FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL,
 				output->maxlevel,
 				(FttCellTraverseFunc) compute_error, output);
-      enorm = gfs_domain_norm_variable (GFS_DOMAIN (sim), v,
-					FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, 
-					output->maxlevel);
-      bias = enorm.bias;
+      bias = gfs_domain_norm_variable (GFS_DOMAIN (sim), enorm->v,
+				       FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL, 
+				       output->maxlevel).bias;
     }
     data[0] = output;
     data[1] = &bias;
@@ -2386,6 +2386,10 @@ static gboolean gfs_output_correlation_event (GfsEvent * event,
 			      FTT_TRAVERSE_LEAFS|FTT_TRAVERSE_LEVEL,
 			      output->maxlevel,
 			      (FttCellTraverseFunc) compute_correlation, data);
+    if (v == NULL) {
+      gts_object_destroy (GTS_OBJECT (enorm->v));
+      enorm->v = NULL;
+    }
     fprintf (GFS_OUTPUT (event)->file->fp,
 	     "%s time: %g %10.3e\n",
 	     output->name, sim->time.t, sumref > 0. ? sum/sumref : 0.);

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list