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

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


The following commit has been merged in the upstream branch:
commit 6c73e25fee85e3c3b5cf814bb1f2113f003694bb
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Tue Sep 9 14:52:46 2008 +1000

    Axisymmetric surface tension implementation
    
    darcs-hash:20080909045246-d4795-cf6cabb34ca1180069dc0a4fcfb72f16b5b42554.gz

diff --git a/configure.in b/configure.in
index 246d521..bd7b862 100644
--- a/configure.in
+++ b/configure.in
@@ -14,7 +14,7 @@ dnl are available for $ac_help expansion (don't we all *love* autoconf?)
 # Remember to update rpm/gerris.spec when changing the version number.
 GFS_MAJOR_VERSION=1
 GFS_MINOR_VERSION=3
-GFS_MICRO_VERSION=0
+GFS_MICRO_VERSION=1
 GFS_INTERFACE_AGE=0
 GFS_BINARY_AGE=0
 GFS_VERSION=$GFS_MAJOR_VERSION.$GFS_MINOR_VERSION.$GFS_MICRO_VERSION
diff --git a/src/poisson.c b/src/poisson.c
index 2968cc6..d12e19a 100644
--- a/src/poisson.c
+++ b/src/poisson.c
@@ -472,11 +472,10 @@ void gfs_poisson_coefficients (GfsDomain * domain,
 static void tension_coeff (FttCellFace * face, gpointer * data)
 {
   gdouble * lambda2 = data[0];
-  GfsStateVector * s = GFS_STATE (face->cell);
   GfsSourceTensionGeneric * t = data[1];
-  gdouble v = lambda2[face->d/2]*t->sigma;
-  gdouble alpha = data[2] ? gfs_function_face_value (data[2], face) : 1.;
   GfsVariable * kappa = GFS_SOURCE_TENSION (data[1])->k;
+  gdouble alpha = data[2] ? gfs_function_face_value (data[2], face) : 1.;
+  gdouble v = lambda2[face->d/2]*alpha*gfs_domain_face_fraction (kappa->domain, face)*t->sigma;
   gdouble k1 = GFS_VARIABLE (face->cell, kappa->i);
   gdouble k2 = GFS_VARIABLE (face->neighbor, kappa->i);
 #if 0
@@ -511,11 +510,7 @@ static void tension_coeff (FttCellFace * face, gpointer * data)
 	   "Please check your definition.",
 	   alpha, p.x, p.y, p.z);
   }
-  v *= alpha;
-  /* fixme: mapping */
-  if (GFS_IS_MIXED (face->cell))
-    v *= s->solid->s[face->d];
-  s->f[face->d].v = v;
+  GFS_STATE (face->cell)->f[face->d].v = v;
 
   switch (ftt_face_type (face)) {
   case FTT_FINE_FINE:
diff --git a/src/tension.c b/src/tension.c
index c675498..6196eb9 100644
--- a/src/tension.c
+++ b/src/tension.c
@@ -640,6 +640,9 @@ static void variable_curvature_from_distance (GfsEvent * event, GfsSimulation *
 
   gfs_domain_timer_start (domain, "variable_curvature");
 
+  if (GFS_IS_AXI (sim))
+    g_assert_not_implemented ();
+
   for (c = 0; c < FTT_DIMENSION + 1; c++) {
     n[c] = gfs_temporary_variable (domain);
     gfs_variable_set_vector (n[c], c);
diff --git a/src/vof.c b/src/vof.c
index d48b5cb..b33a3ef 100644
--- a/src/vof.c
+++ b/src/vof.c
@@ -1877,6 +1877,19 @@ static gboolean curvature_along_direction (FttCell * cell,
     *kappa = hxx/(size*sqrt (dnm*dnm*dnm));
     if (kmax)
       *kmax = fabs (*kappa);
+    if (GFS_IS_AXI (v->domain)) {
+      gdouble nr, r = p.y;
+      if (c == FTT_X)
+	nr = hx;
+      else {
+	r += (d == FTT_TOP ? - H*size : H*size);
+	nr = (d == FTT_TOP ? 1. : -1.);
+      }
+      gdouble kaxi = nr/(sqrt(dnm)*r);
+      *kappa += kaxi;
+      if (kmax)
+	*kmax = MAX (*kmax, fabs (kaxi));
+    }
   }
 #else  /* 3D */  
   static FttComponent or[3][2] = { { FTT_Y, FTT_Z }, { FTT_X, FTT_Z }, { FTT_X, FTT_Y } };
@@ -2113,6 +2126,18 @@ static gdouble parabola_fit_curvature (ParabolaFit * p, gdouble kappamax,
   return kappa;
 }
 
+#if FTT_2D
+static void parabola_fit_axi_curvature (const ParabolaFit * p, gdouble r, 
+					gdouble * kappa, gdouble * kmax)
+{
+  gdouble nr = (p->m[0]*p->a[1] + p->m[1])/sqrt (1. + p->a[1]*p->a[1]);
+  gdouble kaxi = - nr/r;
+  *kappa += kaxi;
+  if (kmax)
+    *kmax = MAX (*kmax, fabs (kaxi));
+}
+#endif /* 2D */
+
 static void parabola_fit_destroy (ParabolaFit * p)
 {
 #if (FTT_2D || PARABOLA_SIMPLER)
@@ -2207,6 +2232,10 @@ gdouble gfs_fit_curvature (FttCell * cell, GfsVariableTracerVOF * t, gdouble * k
   gdouble kappa = parabola_fit_curvature (&fit, 2., kmax)/h;
   if (kmax)
     *kmax /= h;
+#if FTT_2D
+  if (GFS_IS_AXI (v->domain))
+    parabola_fit_axi_curvature (&fit, fc.y*h + p.y, &kappa, kmax);
+#endif
   parabola_fit_destroy (&fit);
   return kappa;
 }
@@ -2319,6 +2348,10 @@ gdouble gfs_height_curvature (FttCell * cell, GfsVariableTracerVOF * t, gdouble
   kappa = parabola_fit_curvature (&fit, 2., kmax)/h;
   if (kmax)
     *kmax /= h;
+#if FTT_2D
+  if (GFS_IS_AXI (v->domain))
+    parabola_fit_axi_curvature (&fit, fc.y*h + p.y, &kappa, kmax);
+#endif
   parabola_fit_destroy (&fit);
   return kappa;
 }

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list