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

Stephane Popinet popinet at users.sf.net
Fri May 15 02:53:47 UTC 2009


The following commit has been merged in the upstream branch:
commit 104a526247e94e35cd0390fb0df7fe7796ed555b
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Thu Nov 23 12:56:30 2006 +1100

    SourceTension can be used to implement "reduced gravity"
    
    darcs-hash:20061123015630-d4795-0944055e60dafb2b096881d82973af4af2a96211.gz

diff --git a/src/poisson.c b/src/poisson.c
index 4a7345b..69343ce 100644
--- a/src/poisson.c
+++ b/src/poisson.c
@@ -454,29 +454,34 @@ static void tension_coeff (FttCellFace * face, gpointer * data)
   GfsSourceTensionGeneric * t = data[1];
   gdouble v = lambda2[face->d/2]*t->sigma;
   GfsVariable * alpha = data[2], * kappa = GFS_SOURCE_TENSION (data[1])->k;
-  gdouble c1 = GFS_VARIABLE (face->cell, t->c->i);
-  gdouble c2 = GFS_VARIABLE (face->neighbor, t->c->i);
-  gdouble w1 = c1*(1. - c1);
-  gdouble w2 = c2*(1. - c2);
-
-  if (w1 + w2 > 0.)
-    v *= (w1*GFS_VARIABLE (face->cell, kappa->i) +
-	  w2*GFS_VARIABLE (face->neighbor, kappa->i))/(w1 + w2);
-  else {
-    if (GFS_VARIABLE (face->cell, kappa->i) < G_MAXDOUBLE) {
-      if (GFS_VARIABLE (face->neighbor, kappa->i) < G_MAXDOUBLE)
-	v *= (GFS_VARIABLE (face->cell, kappa->i) + GFS_VARIABLE (face->neighbor, kappa->i))/2.;
+
+  if (GFS_IS_VARIABLE_CURVATURE (kappa)) {
+    gdouble c1 = GFS_VARIABLE (face->cell, t->c->i);
+    gdouble c2 = GFS_VARIABLE (face->neighbor, t->c->i);
+    gdouble w1 = c1*(1. - c1);
+    gdouble w2 = c2*(1. - c2);
+    
+    if (w1 + w2 > 0.)
+      v *= (w1*GFS_VARIABLE (face->cell, kappa->i) +
+	    w2*GFS_VARIABLE (face->neighbor, kappa->i))/(w1 + w2);
+    else {
+      if (GFS_VARIABLE (face->cell, kappa->i) < G_MAXDOUBLE) {
+	if (GFS_VARIABLE (face->neighbor, kappa->i) < G_MAXDOUBLE)
+	  v *= (GFS_VARIABLE (face->cell, kappa->i) + GFS_VARIABLE (face->neighbor, kappa->i))/2.;
+	else
+	  v *= GFS_VARIABLE (face->cell, kappa->i);
+      }
+      else if (GFS_VARIABLE (face->neighbor, kappa->i) < G_MAXDOUBLE)
+	v *= GFS_VARIABLE (face->neighbor, kappa->i);
       else
-	v *= GFS_VARIABLE (face->cell, kappa->i);
+	v = 1e6;
     }
-    else if (GFS_VARIABLE (face->neighbor, kappa->i) < G_MAXDOUBLE)
-      v *= GFS_VARIABLE (face->neighbor, kappa->i);
-    else
-      v = 1e6;
   }
+  else
+    v *= gfs_face_interpolated_value (face, kappa->i);
 
   if (alpha)
-      v *= gfs_face_interpolated_value (face, alpha->i);
+    v *= gfs_face_interpolated_value (face, alpha->i);
   if (GFS_IS_MIXED (face->cell))
     v *= s->solid->s[face->d];
   s->f[face->d].v = v;
diff --git a/src/tension.c b/src/tension.c
index 47ed774..6d71062 100644
--- a/src/tension.c
+++ b/src/tension.c
@@ -260,10 +260,6 @@ static void gfs_source_tension_read (GtsObject ** o, GtsFile * fp)
     gts_file_error (fp, "unknown variable `%s'", fp->token->str);
     return;
   }
-  if (!GFS_IS_VARIABLE_CURVATURE (s->k)) {
-    gts_file_error (fp, "variable `%s' is not a VariableCurvature", fp->token->str);
-    return;
-  }
   gts_file_next_token (fp);
 }
 
@@ -273,10 +269,20 @@ static void gfs_source_tension_write (GtsObject * o, FILE * fp)
   fprintf (fp, " %s", GFS_SOURCE_TENSION (o)->k->name);
 }
 
+static gdouble gfs_source_tension_stability (GfsSourceGeneric * s,
+					     GfsSimulation * sim)
+{
+  if (GFS_IS_VARIABLE_CURVATURE (GFS_SOURCE_TENSION (s)->k))
+    return gfs_source_tension_generic_stability (s, sim);
+  else
+    return G_MAXDOUBLE;
+}
+
 static void gfs_source_tension_class_init (GfsSourceGenericClass * klass)
 {
   GTS_OBJECT_CLASS (klass)->read =       gfs_source_tension_read;
   GTS_OBJECT_CLASS (klass)->write =      gfs_source_tension_write;
+  klass->stability =                     gfs_source_tension_stability;
 }
 
 GfsSourceGenericClass * gfs_source_tension_class (void)

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list