[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