[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