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

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


The following commit has been merged in the upstream branch:
commit 956966e113b3c826ea0d640c00918d8c12e5afc5
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date:   Tue Aug 30 16:12:52 2005 +1000

    Cleanup of ocean divergence calculation
    
    darcs-hash:20050830061252-fbd8f-dd03439ae90a0331cc290bb849be54d2aa94e6a2.gz

diff --git a/src/ocean.c b/src/ocean.c
index 8f930c0..606285a 100644
--- a/src/ocean.c
+++ b/src/ocean.c
@@ -302,14 +302,11 @@ static void gfs_free_surface_pressure (GfsDomain * domain,
   gfs_correct_centered_velocities (domain, 2, g, apar->dt/2.);
 }
 
-static void gfs_free_surface_divergence (GfsDomain * domain, GfsVariable * div)
+static void gfs_free_surface_divergence (GfsDomain * domain)
 {
-  GfsDomain * toplayer;
-
   g_return_if_fail (domain != NULL);
   g_return_if_fail (div != NULL);
 
-  toplayer = GFS_OCEAN (domain)->toplayer;
   gfs_domain_face_traverse (domain, FTT_XY,
 			    FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 			    (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL);
@@ -317,8 +314,6 @@ static void gfs_free_surface_divergence (GfsDomain * domain, GfsVariable * div)
 			    FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 			    (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, 
 			    gfs_domain_velocity (domain));
-  gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			    (FttCellTraverseFunc) gfs_normal_divergence_2D, div);
 }
 
 static void ocean_run (GfsSimulation * sim)
@@ -369,7 +364,9 @@ static void ocean_run (GfsSimulation * sim)
 
     gfs_simulation_set_timestep (sim);
 
-    gfs_free_surface_divergence (domain, div);
+    gfs_free_surface_divergence (domain);
+    gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+			      (FttCellTraverseFunc) gfs_normal_divergence_2D, div);
 
     gfs_predicted_face_velocities (domain, 2, &sim->advection_params);
 
@@ -425,13 +422,7 @@ static void ocean_run (GfsSimulation * sim)
     sim->time.i++;
 
     gfs_domain_timer_start (domain, "free_surface_pressure");
-    gfs_domain_face_traverse (domain, FTT_XY,
-			      FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			      (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL);
-    gfs_domain_face_traverse (domain, FTT_XY,
-			      FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			      (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity, 
-			      gfs_domain_velocity (domain));
+    gfs_free_surface_divergence (domain);
     gfs_free_surface_pressure (domain, &sim->approx_projection_params, &sim->advection_params,
 			       p, div, res, sim->physical_params.g);
     gfs_domain_timer_stop (domain, "free_surface_pressure");
@@ -992,7 +983,11 @@ static void ocean1_run (GfsSimulation * sim)
     tstart = gfs_clock_elapsed (domain->timer);
 
     gfs_simulation_set_timestep (sim);
-    gfs_free_surface_divergence (domain, div);
+
+    gfs_free_surface_divergence (domain);
+    gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+			      (FttCellTraverseFunc) gfs_normal_divergence_2D, div);
+
     gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, p);
 
     gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_half_do, sim);
@@ -1019,13 +1014,7 @@ static void ocean1_run (GfsSimulation * sim)
     sim->time.i++;
 
     gfs_domain_timer_start (domain, "free_surface_pressure");
-    gfs_domain_face_traverse (domain, FTT_XY,
-			      FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			      (FttFaceTraverseFunc) gfs_face_reset_normal_velocity, NULL);
-    gfs_domain_face_traverse (domain, FTT_XY,
-			      FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-			      (FttFaceTraverseFunc) gfs_face_interpolated_normal_velocity,
-			      gfs_domain_velocity (domain));
+    gfs_free_surface_divergence (domain);
     gfs_free_surface_pressure (domain, &sim->approx_projection_params, &sim->advection_params,
 			       p, div, res, sim->physical_params.g);
     gfs_domain_timer_stop (domain, "free_surface_pressure");
diff --git a/src/timestep.c b/src/timestep.c
index 78c62a3..ffca4fa 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -70,9 +70,9 @@ static void correct_normal_velocity (FttCellFace * face,
     GFS_VARIABLE (face->neighbor, gv[c]->i) += dp*GFS_FACE_FRACTION_RIGHT (face);
     break;
   case FTT_FINE_COARSE: {
-    /* fixme: does this work (FTT_CELLS/2?) for 2D3? */
     dp *= GFS_FACE_FRACTION_LEFT (face)/(FTT_CELLS/2);
     GFS_VARIABLE (face->neighbor, gv[c]->i) += dp;
+    g_assert (GFS_FACE_FRACTION_RIGHT (face) > 0.);
     GFS_FACE_NORMAL_VELOCITY_RIGHT (face) -= dp/GFS_FACE_FRACTION_RIGHT (face)*(*dt);
     break;
   }
@@ -90,8 +90,10 @@ static void scale_gradients (FttCell * cell, gpointer * data)
   if (GFS_IS_MIXED (cell)) {
     GfsSolidVector * s = GFS_STATE (cell)->solid;
 
-    for (c = 0; c < *dimension; c++)
+    for (c = 0; c < *dimension; c++) {
+      g_assert (s->s[2*c] + s->s[2*c + 1] > 0.);
       GFS_VARIABLE (cell, g[c]->i) /= s->s[2*c] + s->s[2*c + 1];
+    }
   }
   else {
     FttCellNeighbors n;

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list