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

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


The following commit has been merged in the upstream branch:
commit 1d1c23a7e7c5d17d68130c5446d0b7946d1940cf
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Wed Dec 10 12:53:56 2008 +1100

    Wetting-drying for GfsRiver
    
    darcs-hash:20081210015356-d4795-3ed7cc13f805730626aefa542d7a5d080d5187e4.gz

diff --git a/src/river.c b/src/river.c
index c52608a..dc5a465 100644
--- a/src/river.c
+++ b/src/river.c
@@ -164,8 +164,13 @@ static void riemann_hllc (const gdouble * uL, const gdouble * uR,
       f[2] = uL[2]*f[0];
     else if (SM <= 0. && 0. <= SR)
       f[2] = uR[2]*f[0];
-    else
+    else {
+      fprintf (stderr, "L: %g %g %g R: %g %g %g\n",
+	       uL[0], uL[1], uL[2],
+	       uR[0], uR[1], uR[2]);
+      fprintf (stderr, "SL: %g SR: %g SM: %g\n", SL, SR, SM);
       g_assert_not_reached ();
+    }
   }
 }
 
@@ -193,11 +198,16 @@ static void face_fluxes (FttCellFace * face, GfsRiver * r)
   
   uL[0] = (GFS_VALUE (face->cell, r->v1[0]) + 
 	   s->du*GFS_VALUE (face->cell, r->dv[face->d/2][0])) - zb; /* h = eta - zb */
-  g_assert (uL[0] > 0.);
-  uL[1] = s->du*(GFS_VALUE (face->cell, r->v1[s->u]) +
-		 s->du*GFS_VALUE (face->cell, r->dv[face->d/2][s->u]))/uL[0]; /* u = uh/h */
-  uL[2] = s->dv*(GFS_VALUE (face->cell, r->v1[s->v]) +
-		 s->du*GFS_VALUE (face->cell, r->dv[face->d/2][s->v]))/uL[0]; /* v = vh/h */
+  if (uL[0] > 1e-6) {
+    uL[1] = s->du*(GFS_VALUE (face->cell, r->v1[s->u]) +
+		   s->du*GFS_VALUE (face->cell, r->dv[face->d/2][s->u]))/uL[0]; /* u = uh/h */
+    uL[2] = s->dv*(GFS_VALUE (face->cell, r->v1[s->v]) +
+		   s->du*GFS_VALUE (face->cell, r->dv[face->d/2][s->v]))/uL[0]; /* v = vh/h */
+  }
+  else {
+    uL[0] = 0.;
+    uL[1] = uL[2] = 0.;
+  }
   uL[3] = zb;
 
   switch (ftt_face_type (face)) {
@@ -205,11 +215,16 @@ static void face_fluxes (FttCellFace * face, GfsRiver * r)
     /* fixme: this is only first-order accurate for fine/coarse */
     uR[0] = (GFS_VALUE (face->neighbor, r->v1[0]) -
 	     s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][0])) - zb; /* h = eta - zb */
-    g_assert (uR[0] > 0.);
-    uR[1] = s->du*(GFS_VALUE (face->neighbor, r->v1[s->u]) -
-		   s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][s->u]))/uR[0]; /* u = uh/h */
-    uR[2] = s->dv*(GFS_VALUE (face->neighbor, r->v1[s->v]) -
-		   s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][s->v]))/uR[0]; /* v = vh/h */
+    if (uR[0] > 1e-6) {
+      uR[1] = s->du*(GFS_VALUE (face->neighbor, r->v1[s->u]) -
+		     s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][s->u]))/uR[0]; /* u = uh/h */
+      uR[2] = s->dv*(GFS_VALUE (face->neighbor, r->v1[s->v]) -
+		     s->du*GFS_VALUE (face->neighbor, r->dv[face->d/2][s->v]))/uR[0]; /* v = vh/h */
+    }
+    else {
+      uR[0] = 0.;
+      uR[1] = uR[2] = 0.;
+    }
     uR[3] = zb;
     break;
 

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list