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

Stephane Popinet popinet at users.sf.net
Fri May 15 02:56:27 UTC 2009


The following commit has been merged in the upstream branch:
commit f7963027b9a46b89b8473aaf55bcca9296f93cb3
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Tue May 5 18:07:19 2009 +1000

    Simplification of redistribute_destroyed_cells_content()
    
    darcs-hash:20090505080719-d4795-2256649b30c8b768fd4915d5ab74bf3deb38e814.gz

diff --git a/src/moving.c b/src/moving.c
index 03ed549..3e231bf 100644
--- a/src/moving.c
+++ b/src/moving.c
@@ -950,10 +950,7 @@ static void redistribute_old_face (FttCell * cell, FttCell * merged, GfsVariable
   FttCellNeighbors neighbors;
   FttDirection d;
 
-  g_assert (cell != NULL);
-
   ftt_cell_neighbors (cell,&neighbors);
-  
   for (d = 0; d< FTT_NEIGHBORS; d++)
     if (neighbors.c[d])
       redistribute_old_face_in_merged (cell, neighbors.c[d], d, old_solid);
@@ -962,6 +959,7 @@ static void redistribute_old_face (FttCell * cell, FttCell * merged, GfsVariable
 typedef struct {
   GfsDomain * domain;
   GfsVariable * status;
+  GfsVariable ** v;
 } ReInitParams;
 
 static void redistribute_destroyed_cells_content (FttCell * cell, ReInitParams * p)
@@ -971,8 +969,6 @@ static void redistribute_destroyed_cells_content (FttCell * cell, ReInitParams *
 
   GfsDomain * domain = p->domain;
   GfsVariable * old_solid_v = GFS_MOVING_SIMULATION (domain)->old_solid;
-  GfsVariable * var;
-  GfsVariable ** v;
   GSList * i;
   FttCell * merged, * next;
   gdouble s1, s2;
@@ -986,35 +982,26 @@ static void redistribute_destroyed_cells_content (FttCell * cell, ReInitParams *
   s1 = ftt_cell_volume (cell);
   s2 = ftt_cell_volume (merged);
 
-  /* Advection of the velocity */
-  v = gfs_domain_velocity (domain);
+  /* redistribution of the velocity */
   for (c = 0; c < FTT_DIMENSION; c++) {
-    var = v[c];
-    if (OLD_SOLID (merged)) 
-      GFS_VALUE (merged, var) = (s1/s2*OLD_SOLID (cell)->a*GFS_VALUE (cell, var)
-				 + OLD_SOLID (merged)->a*GFS_VALUE (merged, var))
-	/(s1/s2*OLD_SOLID (cell)->a + OLD_SOLID (merged)->a);
-    else
-      GFS_VALUE (merged, var) = (s1/s2*OLD_SOLID (cell)->a*GFS_VALUE(cell, var)
-				 + GFS_VALUE (merged, var))
-	/(s1/s2*OLD_SOLID (cell)->a + 1.);
+    gdouble a = OLD_SOLID (merged) ? OLD_SOLID (merged)->a : 1.;
+    GfsVariable * var = p->v[c];
+    GFS_VALUE (merged, var) = (s1*OLD_SOLID (cell)->a*GFS_VALUE (cell, var) +
+			       s2*a*GFS_VALUE (merged, var))
+      /(s1*OLD_SOLID (cell)->a + s2*a);
   }
-
-  /* Advection of tracers */
+  
+  /* redistribution of tracers */
   i = domain->variables;
   while (i) {
-    if GFS_IS_VARIABLE_TRACER (i->data) {
-	GfsVariableTracer * t = GFS_VARIABLE_TRACER(i->data);
-	var = t->advection.v;
-	if (OLD_SOLID (merged))
-	  GFS_VALUE (merged, var) = (s1/s2*OLD_SOLID (cell)->a*GFS_VALUE (cell, var)
-				     + OLD_SOLID (merged)->a*GFS_VALUE (merged, var))
-	    /(s1/s2*OLD_SOLID (cell)->a + OLD_SOLID (merged)->a);
-	else if (OLD_SOLID (merged))
-	  GFS_VALUE (merged, var) = (s1/s2*OLD_SOLID (cell)->a*GFS_VALUE (cell, var)
-				     + GFS_VALUE (merged, var))
-	    /(s1/s2*OLD_SOLID (cell)->a + 1.);	  
-      }
+    if (GFS_IS_VARIABLE_TRACER (i->data)) {
+      gdouble a = OLD_SOLID (merged) ? OLD_SOLID (merged)->a : 1.;
+      GfsVariableTracer * t = GFS_VARIABLE_TRACER(i->data);
+      GfsVariable * var = t->advection.v;
+      GFS_VALUE (merged, var) = (s1*OLD_SOLID (cell)->a*GFS_VALUE (cell, var) +
+				 s2*a*GFS_VALUE (merged, var))
+	/(s1*OLD_SOLID (cell)->a + s2*a);
+    }
     i = i->next;
   }
     
@@ -1058,6 +1045,7 @@ static guint domain_reinit_solid_fractions (GfsSimulation * sim,
     ReInitParams rp;
     rp.domain = domain;
     rp.status = status;
+    rp.v = gfs_domain_velocity (domain);
     gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 			      (FttCellTraverseFunc) redistribute_destroyed_cells_content, &rp);
   }
@@ -1116,15 +1104,12 @@ static void moving_advection_update (GSList * merged, const GfsAdvectionParams *
   if (merged->next == NULL) { /* cell is not merged */
     FttCell * cell = merged->data;
     gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.;
+    gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.;
 
     if (GFS_IS_MIXED (cell))
       g_assert (!gfs_cell_is_small (cell));
 
-    if (OLD_SOLID (cell))
-      GFS_VALUE (cell, par->v) = (OLD_SOLID (cell)->a*GFS_VALUE (cell, par->vn) + 
-				  GFS_VALUE (cell, par->fv))/a;
-    else
-      GFS_VALUE (cell, par->v) = (GFS_VALUE (cell, par->vn) + GFS_VALUE (cell, par->fv))/a;
+    GFS_VALUE (cell, par->v) = (olda*GFS_VALUE (cell, par->vn) + GFS_VALUE (cell, par->fv))/a;
   }
   else if (1 /* par->average */) {
     /* average value */
@@ -1135,12 +1120,10 @@ static void moving_advection_update (GSList * merged, const GfsAdvectionParams *
       FttCell * cell = i->data;
       gdouble vol = ftt_cell_volume (cell);
       gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.;
+      gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.;
       
       total_vol += vol*a;
-      if (OLD_SOLID (cell))
-	w += vol*(OLD_SOLID (cell)->a*GFS_VALUE (cell, par->vn) + GFS_VALUE (cell, par->fv));
-      else
-	w += vol*(GFS_VALUE (cell, par->vn) + GFS_VALUE (cell, par->fv));
+      w += vol*(olda*GFS_VALUE (cell, par->vn) + GFS_VALUE (cell, par->fv));
       i = i->next;
     }
     w /= total_vol;
@@ -1160,25 +1143,16 @@ static void moving_advection_update (GSList * merged, const GfsAdvectionParams *
       FttCell * cell = i->data;
       gdouble vol = ftt_cell_volume (cell);
       gdouble a = GFS_IS_MIXED (cell) ? GFS_STATE (cell)->solid->a : 1.;
+      gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.;
 
       total_vol += vol*a;
       if (a < GFS_SMALL) {
-	if (OLD_SOLID (cell))
-	  GFS_VALUE (cell, par->v) = OLD_SOLID (cell)->a*GFS_VALUE (cell, par->vn)/a + 
-	    GFS_VALUE (cell, par->fv)/GFS_SMALL;
-	else
-	  GFS_VALUE (cell, par->v) = GFS_VALUE (cell, par->vn)/a + 
-	    GFS_VALUE (cell, par->fv)/GFS_SMALL;
+	GFS_VALUE (cell, par->v) = olda*GFS_VALUE (cell, par->vn)/a + 
+	  GFS_VALUE (cell, par->fv)/GFS_SMALL;
 	w += vol*GFS_VALUE (cell, par->fv)*(1. - a/GFS_SMALL);   
       }
-      else {
-	if (OLD_SOLID (cell))
-	  GFS_VALUE (cell, par->v) = (OLD_SOLID (cell)->a*GFS_VALUE (cell, par->vn) +
-				      GFS_VALUE (cell, par->fv))/a;
-	else
-	  GFS_VALUE (cell, par->v) = (GFS_VALUE (cell, par->vn) +
-				      GFS_VALUE (cell, par->fv))/a;
-      }
+      else
+	GFS_VALUE (cell, par->v) = (olda*GFS_VALUE (cell, par->vn) + GFS_VALUE (cell, par->fv))/a;
       i = i->next;
     }
     w /= total_vol;
@@ -1596,18 +1570,10 @@ static void moving_divergence_mac (FttCell * cell, DivergenceData * p)
 {
   GfsVariable * old_solid_v = GFS_MOVING_SIMULATION (p->domain)->old_solid;
   gdouble size = ftt_cell_size (cell);
-
-  if (OLD_SOLID (cell)) {
-    if (GFS_STATE (cell)->solid)
-      GFS_VALUE (cell, p->div) = (OLD_SOLID (cell)->a - GFS_STATE (cell)->solid->a)*
-	size*size/p->dt;
-    else
-      GFS_VALUE (cell, p->div) = (OLD_SOLID (cell)->a - 1.)*size*size/p->dt;
-  }
-  else if (GFS_STATE (cell)->solid)
-    GFS_VALUE (cell, p->div) = (1. - GFS_STATE (cell)->solid->a)*size*size/p->dt;
-  else
-    GFS_VALUE (cell, p->div) = 0.;
+  gdouble a = GFS_STATE (cell)->solid ? GFS_STATE (cell)->solid->a : 1.;
+  gdouble olda = OLD_SOLID (cell) ? OLD_SOLID (cell)->a : 1.;
+  
+  GFS_VALUE (cell, p->div) = (olda - a)*size*size/p->dt;
 }
 
 static void moving_mac_projection (GfsSimulation * sim,
@@ -1703,7 +1669,6 @@ static void moving_simulation_run (GfsSimulation * sim)
 
     gfs_variables_swap (p, pmac);
     
-
     gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim);
    
     gfs_centered_velocity_advection_diffusion (domain,
@@ -1800,7 +1765,8 @@ GfsSimulationClass * gfs_moving_simulation_class (void)
       (GtsArgSetFunc) NULL,
       (GtsArgGetFunc) NULL
     };
-    klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), &gfs_moving_simulation_info);
+    klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_simulation_class ()), 
+				  &gfs_moving_simulation_info);
   }
 
   return klass;

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list