[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:53:04 UTC 2009
The following commit has been merged in the upstream branch:
commit 9bc9c3a54aa79377a028ffb22be0c7231a19aa6b
Author: Stephane Popinet <popinet at users.sf.net>
Date: Mon Jan 30 20:38:17 2006 +1100
VariableFiltered works with odd numbers of iterations
darcs-hash:20060130093817-d4795-d20628d92c856a3e67eb23f78679efba70d5a998.gz
diff --git a/src/variable.c b/src/variable.c
index cf5443d..891cba6 100644
--- a/src/variable.c
+++ b/src/variable.c
@@ -332,6 +332,7 @@ GfsVariableClass * gfs_variable_residual_class (void)
static void variable_filtered_read (GtsObject ** o, GtsFile * fp)
{
+ GfsVariableFiltered * v = GFS_VARIABLE_FILTERED (*o);
GfsDomain * domain;
(* GTS_OBJECT_CLASS (gfs_variable_filtered_class ())->parent_class->read) (o, fp);
@@ -343,8 +344,7 @@ static void variable_filtered_read (GtsObject ** o, GtsFile * fp)
return;
}
domain = GFS_DOMAIN (gfs_object_simulation (*o));
- if (!(GFS_VARIABLE_FILTERED (*o)->v =
- gfs_variable_from_name (domain->variables, fp->token->str))) {
+ if (!(v->v = gfs_variable_from_name (domain->variables, fp->token->str))) {
gts_file_error (fp, "unknown variable `%s'", fp->token->str);
return;
}
@@ -354,7 +354,11 @@ static void variable_filtered_read (GtsObject ** o, GtsFile * fp)
gts_file_error (fp, "expecting a number (niter)");
return;
}
- GFS_VARIABLE_FILTERED (*o)->niter = atoi (fp->token->str);
+ v->niter = atoi (fp->token->str);
+ if (v->niter <= 0) {
+ gts_file_error (fp, "'niter' must be larger than zero");
+ return;
+ }
gts_file_next_token (fp);
}
@@ -389,25 +393,25 @@ static void filter (FttCell * cell, gpointer * data)
static void variable_filtered_event_half (GfsEvent * event, GfsSimulation * sim)
{
- guint n, niter = 2*GFS_VARIABLE_FILTERED (event)->niter;
- gpointer data[2], tmp;
+ guint n, niter = GFS_VARIABLE_FILTERED (event)->niter - 1;
+ gpointer data[2];
data[0] = GFS_VARIABLE_FILTERED (event)->v;
data[1] = event;
gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
(FttCellTraverseFunc) filter, data);
- gfs_domain_copy_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1,
- GFS_VARIABLE_FILTERED (event)->v, data[1]);
- data[0] = event;
- data[1] = gfs_temporary_variable (GFS_DOMAIN (sim));
- for (n = 0; n < niter; n++) {
- gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
- (FttCellTraverseFunc) filter, data);
- gfs_domain_copy_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1,
- GFS_VARIABLE_FILTERED (event)->v, data[1]);
- tmp = data[0]; data[0] = data[1]; data[1] = tmp;
+ gfs_domain_copy_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, data[0], data[1]);
+ if (niter > 0) {
+ data[0] = event;
+ data[1] = gfs_temporary_variable (GFS_DOMAIN (sim));
+ for (n = 0; n < niter; n++) {
+ gfs_domain_cell_traverse (GFS_DOMAIN (sim), FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttCellTraverseFunc) filter, data);
+ gfs_domain_copy_bc (GFS_DOMAIN (sim), FTT_TRAVERSE_LEAFS, -1, data[0], data[1]);
+ gfs_variables_swap (data[0], data[1]);
+ }
+ gts_object_destroy (data[1]);
}
- gts_object_destroy (data[1]);
}
static gboolean variable_filtered_event (GfsEvent * event, GfsSimulation * sim)
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list