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

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


The following commit has been merged in the upstream branch:
commit d5680364d7ad6772dcfd605bda1f0e0e93ab6b43
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date:   Mon Oct 10 14:33:53 2005 +1000

    Multilevel diffusion params are defined as part of GfsDiffusion
    
    darcs-hash:20051010043353-fbd8f-58d8719b05d3a0632d276412a9702cd58913e94c.gz

diff --git a/src/ocean.c b/src/ocean.c
index 9d9e1c7..76f2935 100644
--- a/src/ocean.c
+++ b/src/ocean.c
@@ -336,7 +336,6 @@ static void ocean_run (GfsSimulation * sim)
     // has sthg to free
     gfs_centered_velocity_advection_diffusion (domain, 2,
 					       &sim->advection_params,
-					       &sim->diffusion_params,
 					       g,
 					       sim->physical_params.alpha);
 
@@ -704,7 +703,7 @@ static void ocean_run (GfsSimulation * sim)
 	t->advection.dt = sim->advection_params.dt;
 	switch (t->advection.scheme) {
 	case GFS_GODUNOV: case GFS_NONE:
-	  gfs_tracer_advection_diffusion (domain, &t->advection, &t->diffusion, NULL);
+	  gfs_tracer_advection_diffusion (domain, &t->advection, NULL);
 	  break;
 	case GFS_VOF:
 	  gfs_tracer_vof_advection (domain, &t->advection, NULL);
@@ -720,7 +719,6 @@ static void ocean_run (GfsSimulation * sim)
 
     gfs_centered_velocity_advection_diffusion (domain, 2,
 					       &sim->advection_params,
-					       &sim->diffusion_params,
 					       g,
 					       sim->physical_params.alpha);
 
diff --git a/src/output.c b/src/output.c
index 0fb4344..009793a 100644
--- a/src/output.c
+++ b/src/output.c
@@ -678,9 +678,29 @@ static gboolean diffusion_stats_event (GfsEvent * event, GfsSimulation * sim)
 {
   if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) {
     FILE * fp = GFS_OUTPUT (event)->file->fp;
+    GSList * l = NULL, * i;
+    
+    i = GFS_DOMAIN (sim)->variables;
+    while (i) {
+      GfsVariable * v = i->data;
 
-    fprintf (fp, "Velocity diffusion    before     after       rate\n");
-    multilevel_stats_write (&sim->diffusion_params, fp);
+      if (v->sources) {
+	GSList * j = GTS_SLIST_CONTAINER (v->sources)->items;
+    
+	while (j) {
+	  GtsObject * o = j->data;
+      
+	  if (GFS_IS_SOURCE_DIFFUSION (o) && !g_slist_find (l, o)) {
+	    l = g_slist_prepend (l, o);
+	    fprintf (fp, "%s diffusion\n", v->name);
+	    multilevel_stats_write (&GFS_SOURCE_DIFFUSION (o)->D->par, fp);
+	  }
+	  j = j->next;
+	}
+      }
+      i = i->next;
+    }
+    g_slist_free (l);
     return TRUE;
   }
   return FALSE;
diff --git a/src/simulation.c b/src/simulation.c
index 696ab9f..7a31b55 100644
--- a/src/simulation.c
+++ b/src/simulation.c
@@ -554,7 +554,7 @@ static void simulation_run (GfsSimulation * sim)
 	t->advection.dt = sim->advection_params.dt;
 	switch (t->advection.scheme) {
 	case GFS_GODUNOV: case GFS_NONE:
-	  gfs_tracer_advection_diffusion (domain, &t->advection, &t->diffusion, NULL);
+	  gfs_tracer_advection_diffusion (domain, &t->advection, NULL);
 	  break;
 	case GFS_VOF:
 	  gfs_tracer_vof_advection (domain, &t->advection, NULL);
@@ -571,7 +571,6 @@ static void simulation_run (GfsSimulation * sim)
     gfs_centered_velocity_advection_diffusion (domain,
 					       FTT_DIMENSION,
 					       &sim->advection_params,
-					       &sim->diffusion_params,
 					       g,
 					       sim->physical_params.alpha);
 
@@ -776,8 +775,6 @@ static void gfs_simulation_init (GfsSimulation * object)
 
   gfs_advection_params_init (&object->advection_params);
   object->advection_params.flux = gfs_face_velocity_advection_flux;
-  gfs_multilevel_params_init (&object->diffusion_params);
-  object->diffusion_params.tolerance = 1e-6;
 
   gfs_multilevel_params_init (&object->projection_params);
   gfs_multilevel_params_init (&object->approx_projection_params);
@@ -1315,7 +1312,7 @@ static void advection_run (GfsSimulation * sim)
 	t->advection.dt = sim->advection_params.dt;
 	switch (t->advection.scheme) {
 	case GFS_GODUNOV:
-	  gfs_tracer_advection_diffusion (domain, &t->advection, &t->diffusion, NULL);
+	  gfs_tracer_advection_diffusion (domain, &t->advection, NULL);
 	  break;
 	case GFS_VOF:
 	  gfs_tracer_vof_advection (domain, &t->advection, NULL);
diff --git a/src/simulation.h b/src/simulation.h
index 55f0c02..969d543 100644
--- a/src/simulation.h
+++ b/src/simulation.h
@@ -63,7 +63,6 @@ struct _GfsSimulation {
   GfsMultilevelParams approx_projection_params;
 
   GfsAdvectionParams advection_params;
-  GfsMultilevelParams diffusion_params;
 
   GtsSurface * surface;
   gboolean output_surface;
diff --git a/src/source.c b/src/source.c
index f9c4072..b440d87 100644
--- a/src/source.c
+++ b/src/source.c
@@ -393,6 +393,12 @@ static void diffusion_read (GtsObject ** o, GtsFile * fp)
   if (fp->type == GTS_ERROR)
     return;
 
+  if (fp->type == '{') {
+    gfs_multilevel_params_read (&d->par, fp);
+    if (fp->type == GTS_ERROR)
+    return;
+  }
+
   if (gfs_function_get_constant_value (d->val) == G_MAXDOUBLE &&
       (d->mu = gfs_function_get_variable (d->val)) == NULL)
     d->mu = gfs_temporary_variable (GFS_DOMAIN (gfs_object_simulation (*o)));
@@ -401,6 +407,8 @@ static void diffusion_read (GtsObject ** o, GtsFile * fp)
 static void diffusion_write (GtsObject * o, FILE * fp)
 {
   gfs_function_write (GFS_DIFFUSION (o)->val, fp);
+  fputc (' ', fp);
+  gfs_multilevel_params_write (&GFS_DIFFUSION (o)->par, fp);
 }
 
 static void update_mu (FttCell * cell, GfsDiffusion * d)
@@ -449,6 +457,8 @@ static void diffusion_class_init (GfsDiffusionClass * klass)
 
 static void diffusion_init (GfsDiffusion * d)
 {
+  gfs_multilevel_params_init (&d->par);
+  d->par.tolerance = 1e-6;
   d->val = gfs_function_new (gfs_function_class (), 0.);
   d->mu = NULL;
 }
diff --git a/src/source.h b/src/source.h
index 3fbfa67..c967942 100644
--- a/src/source.h
+++ b/src/source.h
@@ -157,6 +157,7 @@ struct _GfsDiffusion {
   /*< public >*/
   GfsFunction * val;
   GfsVariable * mu;
+  GfsMultilevelParams par;
 };
 
 typedef struct _GfsDiffusionClass    GfsDiffusionClass;
diff --git a/src/timestep.c b/src/timestep.c
index 8e4f831..a2c6700 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -565,7 +565,6 @@ static void variable_sources (GfsDomain * domain,
 static void variable_diffusion (GfsDomain * domain,
 				GfsSourceDiffusion * d,
 				GfsAdvectionParams * par,
-				GfsMultilevelParams * dpar,
 				GfsVariable * rhs,
 				GfsFunction * alpha)
 {
@@ -573,13 +572,13 @@ static void variable_diffusion (GfsDomain * domain,
 
   dia = gfs_temporary_variable (domain);
 
-  gfs_diffusion_coefficients (domain, d, par->dt, dia, alpha, dpar->beta);
+  gfs_diffusion_coefficients (domain, d, par->dt, dia, alpha, d->D->par.beta);
   gfs_domain_surface_bc (domain, par->v);
-  gfs_diffusion_rhs (domain, par->v, rhs, dia, dpar->beta);
+  gfs_diffusion_rhs (domain, par->v, rhs, dia, d->D->par.beta);
   /* fixme: time shoud be set to t + dt here in case boundary values are
      time-dependent in the call below */
   gfs_domain_surface_bc (domain, par->v);
-  gfs_diffusion (domain, dpar, par->v, rhs, dia);
+  gfs_diffusion (domain, &d->D->par, par->v, rhs, dia);
 
   gts_object_destroy (GTS_OBJECT (dia));
 }
@@ -589,7 +588,6 @@ static void variable_diffusion (GfsDomain * domain,
  * @domain: a #GfsDomain.
  * @dimension: the number of dimensions (2 or 3).
  * @apar: the advection parameters.
- * @dpar: the multilevel solver parameters for the diffusion equation.
  * @g: the pressure gradient.
  * @alpha: the inverse of density or %NULL.
  *
@@ -609,7 +607,6 @@ static void variable_diffusion (GfsDomain * domain,
 void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
 						guint dimension,
 						GfsAdvectionParams * apar,
-						GfsMultilevelParams * dpar,
 						GfsVariable ** g,
 						GfsFunction * alpha)
 {
@@ -618,7 +615,6 @@ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
 
   g_return_if_fail (domain != NULL);
   g_return_if_fail (apar != NULL);
-  g_return_if_fail (dpar != NULL);
   g_return_if_fail (g != NULL);
 
   gfs_domain_timer_start (domain, "centered_velocity_advection_diffusion");
@@ -638,7 +634,7 @@ void gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
       variable_sources (domain, apar, rhs, g);
       gts_object_destroy (GTS_OBJECT (g[c]));
       g[c] = NULL;
-      variable_diffusion (domain, d, apar, dpar, rhs, alpha);
+      variable_diffusion (domain, d, apar, rhs, alpha);
       gts_object_destroy (GTS_OBJECT (rhs));
     }
     else {
@@ -673,7 +669,6 @@ static void average_previous (FttCell * cell, gpointer * data)
  * gfs_tracer_advection_diffusion:
  * @domain: a #GfsDomain.
  * @par: the advection parameters.
- * @dpar: the multilevel solver parameters for the diffusion equation.
  * @half: a #GfsVariable or %NULL.
  *
  * Advects the @v field of @par using the current face-centered (MAC)
@@ -684,7 +679,6 @@ static void average_previous (FttCell * cell, gpointer * data)
  */
 void gfs_tracer_advection_diffusion (GfsDomain * domain,
 				     GfsAdvectionParams * par,
-				     GfsMultilevelParams * dpar,
 				     GfsVariable * half)
 {
   gpointer data[2];
@@ -692,7 +686,6 @@ void gfs_tracer_advection_diffusion (GfsDomain * domain,
 
   g_return_if_fail (domain != NULL);
   g_return_if_fail (par != NULL);
-  g_return_if_fail (dpar != NULL);
 
   gfs_domain_timer_start (domain, "tracer_advection_diffusion");
 
@@ -710,7 +703,7 @@ void gfs_tracer_advection_diffusion (GfsDomain * domain,
     gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 			      (FttCellTraverseFunc) gfs_cell_reset, rhs);
     variable_sources (domain, par, rhs, NULL);
-    variable_diffusion (domain, d, par, dpar, rhs, NULL);
+    variable_diffusion (domain, d, par, rhs, NULL);
     gts_object_destroy (GTS_OBJECT (rhs));
   }
   else {
diff --git a/src/timestep.h b/src/timestep.h
index e4c7964..b13e2c8 100644
--- a/src/timestep.h
+++ b/src/timestep.h
@@ -61,12 +61,10 @@ void          gfs_diffusion                   (GfsDomain * domain,
 void          gfs_centered_velocity_advection_diffusion (GfsDomain * domain,
 							 guint dimension,
 							 GfsAdvectionParams * apar,
-							 GfsMultilevelParams * dpar,
 							 GfsVariable ** g,
 							 GfsFunction * alpha);
 void          gfs_tracer_advection_diffusion  (GfsDomain * domain,
 					       GfsAdvectionParams * par,
-					       GfsMultilevelParams * dpar,
 					       GfsVariable * half);
 
 /* GfsSurfaceGenericBc: Header */
diff --git a/src/variable.c b/src/variable.c
index 3e94833..9f826f1 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -211,7 +211,8 @@ static void variable_tracer_read (GtsObject ** o, GtsFile * fp)
   if (fp->type == '{')
     gfs_advection_params_read (&GFS_VARIABLE_TRACER (*o)->advection, fp);
   if (fp->type == '{')
-    gfs_multilevel_params_read (&GFS_VARIABLE_TRACER (*o)->diffusion, fp);
+    g_warning ("%d:%d: specifying diffusion parameters is not done here anymore!",
+	       fp->line, fp->pos);
 }
 
 static void variable_tracer_write (GtsObject * o, FILE * fp)
@@ -220,8 +221,6 @@ static void variable_tracer_write (GtsObject * o, FILE * fp)
 
   fputc (' ', fp);
   gfs_advection_params_write (&GFS_VARIABLE_TRACER (o)->advection, fp);
-  fputc (' ', fp);
-  gfs_multilevel_params_write (&GFS_VARIABLE_TRACER (o)->diffusion, fp);
 }
 
 static void variable_tracer_class_init (GtsObjectClass * klass)
@@ -237,9 +236,6 @@ static void variable_tracer_init (GfsVariableTracer * v)
   v->advection.flux = gfs_face_advection_flux;
   v->advection.v = GFS_VARIABLE1 (v);
   v->advection.fv = NULL;
-
-  gfs_multilevel_params_init (&v->diffusion);
-  v->diffusion.tolerance = 1e-6;
 }
 
 GfsVariableClass * gfs_variable_tracer_class (void)
diff --git a/src/variable.h b/src/variable.h
index f02dfa0..46f102c 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -89,7 +89,6 @@ struct _GfsVariableTracer {
 
   /*< public >*/
   GfsAdvectionParams advection;
-  GfsMultilevelParams diffusion;
 };
 
 #define GFS_VARIABLE_TRACER(obj)            GTS_OBJECT_CAST (obj,\

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list