[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