[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:55:57 UTC 2009
The following commit has been merged in the upstream branch:
commit de67a9fdaa45b2bea17cb6baa228dd21630c107e
Author: Stephane Popinet <popinet at users.sf.net>
Date: Fri Jan 9 18:48:46 2009 +1100
Topography source terms for GfsRiver are balanced also with adaptivity
darcs-hash:20090109074846-d4795-5900edcd216d8890da6001350660e93e27dad977.gz
diff --git a/src/river.c b/src/river.c
index c7c966b..d37985f 100644
--- a/src/river.c
+++ b/src/river.c
@@ -273,9 +273,9 @@ static void face_fluxes (FttCellFace * face, GfsRiver * r)
Sym * s = &sym[face->d];
gdouble etaL = (GFS_VALUE (face->cell, r->v1[0]) +
s->du*GFS_VALUE (face->cell, r->dv[face->d/2][0]));
- gdouble zbL = (GFS_VALUE (face->cell, r->v1[3]) +
+ gdouble zbL = (GFS_VALUE (face->cell, r->v[3]) +
s->du*GFS_VALUE (face->cell, r->dv[face->d/2][3]));
- gdouble zbR = (GFS_VALUE (face->neighbor, r->v1[3]) -
+ gdouble zbR = (GFS_VALUE (face->neighbor, r->v[3]) -
s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][3]));
gdouble zbLR = MAX (zbL, zbR);
gdouble uL[4], uR[4], f[3];
@@ -315,28 +315,22 @@ static void face_fluxes (FttCellFace * face, GfsRiver * r)
riemann_hllc (uL, uR, r->g, f);
gdouble dt = gfs_domain_face_fraction (r->v[0]->domain, face)*r->dt/ftt_cell_size (face->cell);
- GFS_VALUE (face->cell, r->flux[0]) -= dt*f[0];
+ f[0] *= dt;
+ f[2] = s->dv*dt*f[2];
+ GFS_VALUE (face->cell, r->flux[0]) -= f[0];
GFS_VALUE (face->cell, r->flux[s->u]) -=
s->du*dt*(f[1] - r->g/2.*(uL[0]*uL[0] - etaL*etaL));
- GFS_VALUE (face->cell, r->flux[s->v]) -= s->dv*dt*f[2];
-
- switch (ftt_face_type (face)) {
- case FTT_FINE_FINE:
- GFS_VALUE (face->neighbor, r->flux[0]) += dt*f[0];
- GFS_VALUE (face->neighbor, r->flux[s->u]) +=
- s->du*dt*(f[1] - r->g/2.*(uR[0]*uR[0] - etaR*etaR));
- GFS_VALUE (face->neighbor, r->flux[s->v]) += s->dv*dt*f[2];
- break;
+ GFS_VALUE (face->cell, r->flux[s->v]) -= f[2];
- case FTT_FINE_COARSE:
- GFS_VALUE (face->neighbor, r->flux[0]) += dt*f[0]/FTT_CELLS;
- GFS_VALUE (face->neighbor, r->flux[s->u]) += s->du*dt*f[1]/FTT_CELLS;
- GFS_VALUE (face->neighbor, r->flux[s->v]) += s->dv*dt*f[2]/FTT_CELLS;
- break;
-
- default:
- g_assert_not_reached ();
+ f[1] = s->du*dt*(f[1] - r->g/2.*(uR[0]*uR[0] - etaR*etaR));
+ if (ftt_face_type (face) == FTT_FINE_COARSE) {
+ f[0] /= FTT_CELLS;
+ f[1] /= FTT_CELLS;
+ f[2] /= FTT_CELLS;
}
+ GFS_VALUE (face->neighbor, r->flux[0]) += f[0];
+ GFS_VALUE (face->neighbor, r->flux[s->u]) += f[1];
+ GFS_VALUE (face->neighbor, r->flux[s->v]) += f[2];
}
#endif
@@ -373,16 +367,16 @@ static void sources (FttCell * cell, GfsRiver * r)
gdouble delta = ftt_cell_size (cell);
gdouble etaL = GFS_VALUE (cell, r->v1[0]) - GFS_VALUE (cell, r->dv[0][0]);
- gdouble zbL = GFS_VALUE (cell, r->v1[3]) - GFS_VALUE (cell, r->dv[0][3]);
+ gdouble zbL = GFS_VALUE (cell, r->v[3]) - GFS_VALUE (cell, r->dv[0][3]);
gdouble etaR = GFS_VALUE (cell, r->v1[0]) + GFS_VALUE (cell, r->dv[0][0]);
- gdouble zbR = GFS_VALUE (cell, r->v1[3]) + GFS_VALUE (cell, r->dv[0][3]);
+ gdouble zbR = GFS_VALUE (cell, r->v[3]) + GFS_VALUE (cell, r->dv[0][3]);
GFS_VALUE (cell, r->vc[1]) += r->dt*r->g/2.*(etaL + etaR)*(zbL - zbR)/delta;
etaL = GFS_VALUE (cell, r->v1[0]) - GFS_VALUE (cell, r->dv[1][0]);
- zbL = GFS_VALUE (cell, r->v1[3]) - GFS_VALUE (cell, r->dv[1][3]);
+ zbL = GFS_VALUE (cell, r->v[3]) - GFS_VALUE (cell, r->dv[1][3]);
etaR = GFS_VALUE (cell, r->v1[0]) + GFS_VALUE (cell, r->dv[1][0]);
- zbR = GFS_VALUE (cell, r->v1[3]) + GFS_VALUE (cell, r->dv[1][3]);
+ zbR = GFS_VALUE (cell, r->v[3]) + GFS_VALUE (cell, r->dv[1][3]);
GFS_VALUE (cell, r->vc[2]) += r->dt*r->g/2.*(etaL + etaR)*(zbL - zbR)/delta;
}
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list