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

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


The following commit has been merged in the upstream branch:
commit 9b03d0f7fd2a6474bce02decd576f503ccfe5084
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date:   Wed Jul 6 10:51:32 2005 +1000

    Upgrade of EventFilter to new memory management
    
    darcs-hash:20050706005132-fbd8f-735e4a36eb691e3111945c9cfd502504d538569a.gz

diff --git a/src/event.c b/src/event.c
index 51c7c4e..591042c 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1794,7 +1794,7 @@ GfsEventClass * gfs_remove_ponds_class (void)
 
 /* GfsEventFilter: Object */
 
-static void filter (FttCell * cell, GfsVariable * v)
+static void filter (FttCell * cell, GfsEventFilter * f)
 {
   FttDirection d[4*(FTT_DIMENSION - 1)][FTT_DIMENSION] = {
 #if FTT_2D
@@ -1810,24 +1810,28 @@ static void filter (FttCell * cell, GfsVariable * v)
   gdouble val = 0.;
 
   for (i = 0; i < 4*(FTT_DIMENSION - 1); i++)
-    val += gfs_cell_corner_value (cell, d[i], v, -1);
-  GFS_STATE (cell)->div = val/(4*(FTT_DIMENSION - 1));
+    val += gfs_cell_corner_value (cell, d[i], f->v, -1);
+  GFS_VARIABLE (cell, f->tmp->i) = val/(4*(FTT_DIMENSION - 1));
 }
 
-static void filtered (FttCell * cell, GfsVariable * v)
+static void filtered (FttCell * cell, GfsEventFilter * f)
 {
-  GFS_VARIABLE (cell, v->i) = GFS_STATE (cell)->div;
+  GFS_VARIABLE (cell, f->v->i) = GFS_VARIABLE (cell, f->tmp->i);
 }
 
 static gboolean gfs_event_filter_event (GfsEvent * event, GfsSimulation * sim)
 {
   if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_filter_class ())->parent_class)->event) 
       (event, sim)) {
+    GfsEventFilter * f = GFS_EVENT_FILTER (event);
+
+    f->tmp = gfs_temporary_variable (GFS_DOMAIN (sim));
     gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			      (FttCellTraverseFunc) filter, GFS_EVENT_FILTER (event)->v);
+			      (FttCellTraverseFunc) filter, f);
     gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			      (FttCellTraverseFunc) filtered, GFS_EVENT_FILTER (event)->v);
-    gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, GFS_EVENT_FILTER (event)->v);
+			      (FttCellTraverseFunc) filtered, f);
+    gts_object_destroy (GTS_OBJECT (f->tmp));
+    gfs_domain_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, f->v);
     return TRUE;
   }
   return FALSE;
diff --git a/src/event.h b/src/event.h
index a4515de..30d58df 100644
--- a/src/event.h
+++ b/src/event.h
@@ -305,6 +305,7 @@ typedef struct _GfsEventFilter         GfsEventFilter;
 struct _GfsEventFilter {
   /*< private >*/
   GfsEvent parent;
+  GfsVariable * tmp;
 
   /*< public >*/
   GfsVariable * v;

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list