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

Stephane Popinet s.popinet at niwa.co.nz
Fri May 15 02:51:44 UTC 2009


The following commit has been merged in the upstream branch:
commit 2423caa7d20b046a8515d4bb0b4adbe075b9e285
Author: Stephane Popinet <s.popinet at niwa.co.nz>
Date:   Fri Apr 1 09:21:36 2005 +1000

    EventStop can now store the difference used as criterion
    
    darcs-hash:20050331232136-fbd8f-e2f46d54d36dfe266351ac1a3191a175ee9466d4.gz

diff --git a/src/event.c b/src/event.c
index 74a0821..28da161 100644
--- a/src/event.c
+++ b/src/event.c
@@ -1222,6 +1222,8 @@ static void gfs_event_stop_write (GtsObject * o, FILE * fp)
       (o, fp);
 
   fprintf (fp, " %s %g", s->v->name, s->max);
+  if (s->diff)
+    fprintf (fp, " %s", s->diff->name);
 }
 
 static void gfs_event_stop_read (GtsObject ** o, GtsFile * fp)
@@ -1250,10 +1252,19 @@ static void gfs_event_stop_read (GtsObject ** o, GtsFile * fp)
     return;
   }
   s->max = atof (fp->token->str);
-  gts_file_next_token (fp);
-
   s->oldv = gfs_domain_add_variable (domain, NULL);
   s->oldv->fine_coarse = s->v->fine_coarse;
+
+  if (fp->next_token != '\n') {
+    gts_file_next_token (fp);
+    if (fp->type != GTS_STRING) {
+      gts_file_error (fp, "expecting a string (diff)");
+      return;
+    }
+    if (!(s->diff = gfs_variable_from_name (domain->variables, fp->token->str)))
+      s->diff = gfs_domain_add_variable (domain, fp->token->str);
+    s->diff->fine_coarse = s->v->fine_coarse;
+  }
   gts_file_next_token (fp);
 }
 
@@ -1267,6 +1278,11 @@ static void copy (FttCell * cell, GfsEventStop * s)
   GFS_VARIABLE (cell, s->oldv->i) = GFS_VARIABLE (cell, s->v->i);
 }
 
+static void copy_diff (FttCell * cell, GfsEventStop * s)
+{
+  GFS_VARIABLE (cell, s->diff->i) = GFS_VARIABLE (cell, s->oldv->i);
+}
+
 static gboolean gfs_event_stop_event (GfsEvent * event, GfsSimulation * sim)
 {
   if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_event_stop_class ())->parent_class)->event) 
@@ -1279,8 +1295,13 @@ static gboolean gfs_event_stop_event (GfsEvent * event, GfsSimulation * sim)
       gfs_domain_cell_traverse (GFS_DOMAIN (sim),
 				FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 				(FttCellTraverseFunc) diff, s);
-      n = gfs_domain_norm_variable (GFS_DOMAIN (sim), s->oldv,
-				    FTT_TRAVERSE_LEAFS, -1);
+      if (s->diff) {
+	gfs_domain_cell_traverse (GFS_DOMAIN (sim),
+				  FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+				  (FttCellTraverseFunc) copy_diff, s);
+	gfs_domain_copy_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, s->v, s->diff);
+      }
+      n = gfs_domain_norm_variable (GFS_DOMAIN (sim), s->oldv, FTT_TRAVERSE_LEAFS, -1);
       if (n.infty <= s->max)
 	sim->time.end = sim->time.t;
     }
diff --git a/src/event.h b/src/event.h
index f3a9461..e88e552 100644
--- a/src/event.h
+++ b/src/event.h
@@ -190,7 +190,7 @@ typedef struct _GfsEventStop         GfsEventStop;
 struct _GfsEventStop {
   GfsEvent parent;
 
-  GfsVariable * v, * oldv;
+  GfsVariable * v, * oldv, * diff;
   gdouble last, max;
 };
 

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list