[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:55:33 UTC 2009
The following commit has been merged in the upstream branch:
commit f060504e6657470369d77913840cd98f760ca86a
Author: Stephane Popinet <popinet at users.sf.net>
Date: Sun Jun 8 09:29:51 2008 +1000
Solid flux correction for wave model
darcs-hash:20080607232951-d4795-8b34f1a5f2e14150371495de47cc4dbf2de72cfd.gz
diff --git a/doc/examples/garden/garden.gfs b/doc/examples/garden/garden.gfs
index e3c1b52..378e1e3 100644
--- a/doc/examples/garden/garden.gfs
+++ b/doc/examples/garden/garden.gfs
@@ -108,15 +108,12 @@
OutputTime { istep = 1 } log-MINLEVEL-NTHETA
OutputScalarStats { step = 12 } hs-MINLEVEL-NTHETA { v = Hs }
OutputSimulation { step = 12 } sim-MINLEVEL-NTHETA-%g.gfs
+ EventScript { step = 12 } { gzip -f sim-*-*-*.gfs }
OutputSimulation { start = end } end-MINLEVEL-NTHETA.gfs
+ EventScript { start = end } { gzip -f end-*-*.gfs }
OutputPPM { step = 12 } { ppm2mpeg > hs-MINLEVEL-NTHETA.mpg } { v = Hs maxlevel = 7 }
} {
# Number of discretised directions (default is 24)
ntheta = NTHETA
}
-GfsBox {
- top = Boundary
- bottom = Boundary
- left = Boundary
- right = Boundary
-}
+GfsBox {}
diff --git a/doc/examples/garden/garden.sh b/doc/examples/garden/garden.sh
index 89b3b10..02b5366 100755
--- a/doc/examples/garden/garden.sh
+++ b/doc/examples/garden/garden.sh
@@ -9,11 +9,11 @@ else
fi
for i in 6-24 0-24 0-60 0-120; do
- echo "Save end-$i.gnu { format = Gnuplot }" | gfsview-batch2D end-$i.gfs end.gfv
+ echo "Save end-$i.gnu { format = Gnuplot }" | gfsview-batch2D end-$i.gfs.gz end.gfv
done
for i in 0 24 72 120; do
- echo "Save mesh-$i.gnu { format = Gnuplot }" | gfsview-batch2D sim-0-120-$i.gfs mesh.gfv
+ echo "Save mesh-$i.gnu { format = Gnuplot }" | gfsview-batch2D sim-0-120-$i.gfs.gz mesh.gfv
done
cat <<EOF | gnuplot
diff --git a/src/wave.c b/src/wave.c
index be68bb4..b46107e 100644
--- a/src/wave.c
+++ b/src/wave.c
@@ -65,11 +65,34 @@ static void set_group_velocity (const FttCellFace * face, FttVector * u)
GFS_FACE_NORMAL_VELOCITY_LEFT (face) = (&u->x)[face->d/2];
}
+typedef struct {
+ GfsAdvectionParams * p;
+ GfsVariable * div, * fv;
+} SolidFluxParams;
+
+static void solid_flux (FttCell * cell, SolidFluxParams * par)
+{
+ gfs_normal_divergence (cell, par->div);
+ if (GFS_VALUE (cell, par->div) < 0.) {
+ gdouble h = ftt_cell_size (cell);
+ GFS_VALUE (cell, par->fv) = GFS_VALUE (cell, par->div)*par->p->dt*
+ GFS_VALUE (cell, par->p->v)/(h*h);
+ }
+ else
+ GFS_VALUE (cell, par->fv) = 0.;
+}
+
static void wave_run (GfsSimulation * sim)
{
GfsDomain * domain = GFS_DOMAIN (sim);
GfsWave * wave = GFS_WAVE (sim);
+ SolidFluxParams par;
+ par.div = gfs_variable_from_name (domain->variables, "P");
+ g_assert (par.div);
+ par.p = &sim->advection_params;
+ par.fv = gfs_temporary_variable (domain);
+
gfs_simulation_refine (sim);
gfs_simulation_init (sim);
@@ -108,7 +131,13 @@ static void wave_run (GfsSimulation * sim)
(FttFaceTraverseFunc) set_group_velocity, &u);
GfsVariable * t = GFS_WAVE (sim)->F[ik][ith];
sim->advection_params.v = t;
+ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttCellTraverseFunc) solid_flux, &par);
gfs_tracer_advection_diffusion (domain, &sim->advection_params);
+ sim->advection_params.fv = par.fv;
+ gfs_domain_traverse_merged (domain, (GfsMergedTraverseFunc) gfs_advection_update,
+ &sim->advection_params);
+ gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, t);
gfs_domain_cell_traverse (domain,
FTT_POST_ORDER, FTT_TRAVERSE_NON_LEAFS, -1,
(FttCellTraverseFunc) t->fine_coarse, t);
@@ -129,6 +158,7 @@ static void wave_run (GfsSimulation * sim)
}
gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gfs_event_do, sim);
gts_container_foreach (GTS_CONTAINER (sim->events), (GtsFunc) gts_object_destroy, NULL);
+ gts_object_destroy (GTS_OBJECT (par.fv));
}
static void wave_destroy (GtsObject * object)
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list