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

Stephane Popinet popinet at users.sf.net
Fri May 15 02:53:01 UTC 2009


The following commit has been merged in the upstream branch:
commit 14b9dde4daf80f00fcfab647a041592e6b60d03d
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Fri Jan 27 21:07:10 2006 +1100

    Better checks for construction of merged cells lists
    
    darcs-hash:20060127100710-d4795-cffc77a7e4c3a5b3b7aa1d26de9ed2bec84c3365.gz

diff --git a/src/advection.c b/src/advection.c
index e73b6ff..e73a0f0 100644
--- a/src/advection.c
+++ b/src/advection.c
@@ -610,11 +610,18 @@ static void set_merged (FttCell * cell)
     ftt_cell_neighbors (cell, &neighbor);
     for (i = 0; i < FTT_NEIGHBORS && abest < 1.; i++)
       if (neighbor.c[i] && !GFS_CELL_IS_BOUNDARY (neighbor.c[i]) && solid->s[i] > 0.) {
-	gdouble a = GFS_IS_MIXED (neighbor.c[i]) ? GFS_STATE (neighbor.c[i])->solid->a : 1.;
+	if (GFS_IS_MIXED (neighbor.c[i])) {
+	  gdouble a = GFS_STATE (neighbor.c[i])->solid->a;
 	
-	if (a > abest) {
-	  abest = a;
+	  if (a > abest) {
+	    abest = a;
+	    solid->merged = neighbor.c[i];
+	  }
+	}
+	else {
+	  g_assert (FTT_CELL_IS_LEAF (neighbor.c[i]));
 	  solid->merged = neighbor.c[i];
+	  return;
 	}
       }
     if (abest == 0.)
@@ -649,7 +656,7 @@ static void add_merged (GSList ** merged, FttCell * cell)
     *merged = g_slist_prepend (*merged, cell);
     cell->flags |= GFS_FLAG_USED;
 
-    if (GFS_IS_MIXED (cell) && solid->merged)
+    if (solid && solid->merged)
       add_merged (merged, solid->merged);
 
     ftt_cell_neighbors (cell, &neighbor);
@@ -666,7 +673,7 @@ static void add_merged (GSList ** merged, FttCell * cell)
 	    if (GFS_IS_MIXED (child.c[j]) &&
 		GFS_STATE (child.c[j])->solid->merged == cell)
 	      add_merged (merged, child.c[j]);
-	}	
+	}
 	else if (GFS_IS_MIXED (neighbor.c[i]) && 
 		 GFS_STATE (neighbor.c[i])->solid->merged == cell)
 	  add_merged (merged, neighbor.c[i]);
@@ -750,6 +757,7 @@ void gfs_advection_update (GSList * merged, const GfsAdvectionParams * par)
 
     if (GFS_IS_MIXED (cell)) {
 #if 1
+      g_assert (!is_small (cell));
       GFS_VARIABLE (cell, par->v->i) += 
 	GFS_VARIABLE (cell, par->fv->i)/GFS_STATE (cell)->solid->a;
 #else /* D. Calhoun approach */

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list