[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