[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:55:37 UTC 2009
The following commit has been merged in the upstream branch:
commit b2974cb0a863321442527cd576f9aa0c24687002
Author: Stephane Popinet <popinet at users.sf.net>
Date: Sat Jul 26 08:44:14 2008 +1000
Restructured correct_normal_velocity()
This also fixes a bug introduced by the new axisymmetric formulation.
darcs-hash:20080725224414-d4795-c077885283060e815b00baaa311435d96d4bec26.gz
diff --git a/src/timestep.c b/src/timestep.c
index f9978a0..cec3e65 100644
--- a/src/timestep.c
+++ b/src/timestep.c
@@ -97,37 +97,37 @@ void gfs_scale_gradients (GfsDomain * domain, guint dimension, GfsVariable ** g)
gfs_domain_bc (domain, FTT_TRAVERSE_LEAFS, -1, g[c]);
}
+typedef struct {
+ GfsVariable * p, ** gv;
+ gdouble dt;
+} CorrectPar;
+
static void correct_normal_velocity (FttCellFace * face,
- gpointer * data)
+ CorrectPar * par)
{
GfsGradient g;
- gdouble dp;
- GfsStateVector * s;
- GfsVariable * p = data[0], ** gv = data[1];
- gdouble * dt = data[2];
- FttComponent c;
+ gdouble dp, f;
if (GFS_FACE_FRACTION_RIGHT (face) == 0.)
return;
- s = GFS_STATE (face->cell);
- c = face->d/2;
-
- gfs_face_weighted_gradient (face, &g, p->i, -1);
- dp = (g.b - g.a*GFS_VARIABLE (face->cell, p->i))/ftt_cell_size (face->cell);
+ gfs_face_weighted_gradient (face, &g, par->p->i, -1);
+ dp = (g.b - g.a*GFS_VALUE (face->cell, par->p))/ftt_cell_size (face->cell);
if (!FTT_FACE_DIRECT (face))
dp = - dp;
- dp /= gfs_domain_face_fraction (p->domain, face);
+ f = gfs_domain_face_fraction (par->p->domain, face);
+ if (f > 0.)
+ dp /= f;
- GFS_FACE_NORMAL_VELOCITY_LEFT (face) -= dp*(*dt);
- if (gv)
- GFS_VARIABLE (face->cell, gv[c]->i) += dp*GFS_FACE_FRACTION_LEFT (face);
+ GFS_FACE_NORMAL_VELOCITY_LEFT (face) -= dp*par->dt;
+ if (par->gv)
+ GFS_VALUE (face->cell, par->gv[face->d/2]) += dp*GFS_FACE_FRACTION_LEFT (face);
if (ftt_face_type (face) == FTT_FINE_COARSE)
dp *= GFS_FACE_FRACTION_LEFT (face)/(GFS_FACE_FRACTION_RIGHT (face)*FTT_CELLS/2);
- GFS_FACE_NORMAL_VELOCITY_RIGHT (face) -= dp*(*dt);
- if (gv)
- GFS_VARIABLE (face->neighbor, gv[c]->i) += dp*GFS_FACE_FRACTION_RIGHT (face);
+ GFS_FACE_NORMAL_VELOCITY_RIGHT (face) -= dp*par->dt;
+ if (par->gv)
+ GFS_VALUE (face->neighbor, par->gv[face->d/2]) += dp*GFS_FACE_FRACTION_RIGHT (face);
}
/**
@@ -152,17 +152,17 @@ void gfs_correct_normal_velocities (GfsDomain * domain,
GfsVariable ** g,
gdouble dt)
{
- gpointer data[3];
+ CorrectPar par;
g_return_if_fail (domain != NULL);
g_return_if_fail (p != NULL);
- data[0] = p;
- data[1] = g;
- data[2] = &dt;
+ par.p = p;
+ par.gv = g;
+ par.dt = dt;
gfs_domain_face_traverse (domain, dimension == 2 ? FTT_XY : FTT_XYZ,
FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
- (FttFaceTraverseFunc) correct_normal_velocity, data);
+ (FttFaceTraverseFunc) correct_normal_velocity, &par);
}
static void scale_divergence (FttCell * cell, gpointer * data)
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list