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

Stephane Popinet popinet at users.sf.net
Fri May 15 02:55:48 UTC 2009


The following commit has been merged in the upstream branch:
commit d0b1715e699b458df113f9073dbbf826661f68d3
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Thu Oct 16 12:46:30 2008 +1100

    Dimensioning for 3D ocean model
    
    darcs-hash:20081016014630-d4795-49ac1696dd0d438b94e5f8ad5bbb04d3807ece89.gz

diff --git a/src/ocean.c b/src/ocean.c
index 14146f6..fba7fd4 100644
--- a/src/ocean.c
+++ b/src/ocean.c
@@ -398,6 +398,8 @@ static void ocean_destroy (GtsObject * object)
   (* GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class->destroy) (object);  
 }
 
+#define MAXLEVEL 16
+
 static void ocean_read (GtsObject ** object, GtsFile * fp)
 {
   (* GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class->read) (object, fp);
@@ -405,8 +407,31 @@ static void ocean_read (GtsObject ** object, GtsFile * fp)
     return;
 
   GFS_DOMAIN (*object)->refpos.z = -0.5;
+#if !FTT_2D3
+  GfsSimulation * sim = GFS_SIMULATION (*object);
+  sim->physical_params.g /= sim->physical_params.L*GFS_DOMAIN (sim)->lambda.z;
+  GfsVariable * H = gfs_variable_from_name (GFS_DOMAIN (sim)->variables, "H");
+  g_assert (H);
+  H->units = 1. - log(GFS_DOMAIN (sim)->lambda.z)/log(sim->physical_params.L);
+  GFS_DOMAIN (sim)->lambda.z /= 1 << MAXLEVEL;
+#endif
 }
 
+#if !FTT_2D3
+static void ocean_write (GtsObject * object, FILE * fp)
+{
+  FttVector * lambda = &GFS_DOMAIN (object)->lambda;
+  GfsPhysicalParams * p = &GFS_SIMULATION (object)->physical_params;
+  gdouble g = p->g;
+
+  lambda->z *= 1 << MAXLEVEL;
+  p->g *= p->L*lambda->z;
+  (* GTS_OBJECT_CLASS (gfs_ocean_class ())->parent_class->write) (object, fp);
+  lambda->z /= 1 << MAXLEVEL;
+  p->g = g;
+}
+#endif /* 3D */
+
 static void new_layer (GfsOcean * ocean)
 {
   GfsDomain * domain = GFS_DOMAIN (ocean);
@@ -473,8 +498,6 @@ static void compute_w (FttCell * c, GfsVariable * W)
   }
 }
 
-#define MAXLEVEL 16
-
 static void compute_div (FttCell * c, GfsVariable * W)
 {
   guint level = ftt_cell_level (c);
@@ -781,6 +804,9 @@ static void gfs_ocean_class_init (GfsSimulationClass * klass)
 {
   GTS_OBJECT_CLASS (klass)->destroy = ocean_destroy;
   GTS_OBJECT_CLASS (klass)->read = ocean_read;
+#if !FTT_2D3
+  GTS_OBJECT_CLASS (klass)->write = ocean_write;
+#endif
   GFS_DOMAIN_CLASS (klass)->post_read = ocean_post_read;
   klass->run = ocean_run;
 }
@@ -1203,14 +1229,20 @@ static gdouble flather_value (FttCellFace * f, GfsBc * b)
       return 0.;
 
   H = gfs_face_interpolated_value (f, GFS_BC_FLATHER (b)->h->i);
-  if (H > 2e-3) { /* fixme: 2e-3 is an arbitrary constant which should be a parameter or sthg*/
+  if (H > 2e-3) { /* fixme: 2e-3 is an arbitrary constant which should be a parameter or sthg */
     GfsSimulation * sim = GFS_SIMULATION (gfs_box_domain (b->b->box));
     gdouble cg = sqrt (sim->physical_params.g*H);
+    /* non-dimensional pressure at the boundary */
+    gdouble lz = GFS_DOMAIN (sim)->lambda.z;
+#if !FTT_2D && !FTT_2D3
+    lz *= 1 << MAXLEVEL;
+#endif
+    gdouble pb = gfs_function_face_value (GFS_BC_FLATHER (b)->val, f)*
+      sim->physical_params.g*lz/sim->physical_params.L;
     
     return gfs_function_face_value (GFS_BC_VALUE (b)->val, f) +
       (FTT_FACE_DIRECT (f) ? -1. : 1.)*
-      (GFS_VARIABLE (f->neighbor, GFS_BC_FLATHER (b)->p->i) - 
-       gfs_function_face_value (GFS_BC_FLATHER (b)->val, f))*
+      (GFS_VALUE (f->neighbor, GFS_BC_FLATHER (b)->p) - pb)*
       cg/sim->physical_params.g
 #if !FTT_2D
       /H

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list