[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:54:14 UTC 2009
The following commit has been merged in the upstream branch:
commit 3abd853cdc04696952abbc924830dc4509fa3dd6
Author: Stephane Popinet <popinet at users.sf.net>
Date: Fri Apr 13 11:00:37 2007 +1000
First parameter block of GfsEvent is now optional
Provided it is not followed by another parameter block.
darcs-hash:20070413010037-d4795-6a8746a50ffa3dfe24c06b15e902dfc2358af318.gz
diff --git a/src/event.c b/src/event.c
index 9cb6a8b..cbfdc40 100644
--- a/src/event.c
+++ b/src/event.c
@@ -121,16 +121,6 @@ static void gfs_event_read (GtsObject ** o, GtsFile * fp)
GfsEvent * event = GFS_EVENT (*o);
GtsObjectClass * klass;
gboolean class_changed = FALSE;
- GtsFileVariable var[] = {
- {GTS_STRING, "start", TRUE},
- {GTS_DOUBLE, "end", TRUE},
- {GTS_DOUBLE, "step", TRUE},
- {GTS_UINT, "istart", TRUE},
- {GTS_UINT, "iend", TRUE},
- {GTS_UINT, "istep", TRUE},
- {GTS_NONE}
- };
- gchar * start = NULL;
if (fp->type != GTS_STRING) {
gts_file_error (fp, "expecting a string (GfsEventClass)");
@@ -153,94 +143,107 @@ static void gfs_event_read (GtsObject ** o, GtsFile * fp)
}
gts_file_next_token (fp);
- var[0].data = &start;
- var[1].data = &event->end;
- var[2].data = &event->step;
+ if (fp->type == '{') {
+ GtsFileVariable var[] = {
+ {GTS_STRING, "start", TRUE},
+ {GTS_DOUBLE, "end", TRUE},
+ {GTS_DOUBLE, "step", TRUE},
+ {GTS_UINT, "istart", TRUE},
+ {GTS_UINT, "iend", TRUE},
+ {GTS_UINT, "istep", TRUE},
+ {GTS_NONE}
+ };
+ gchar * start = NULL;
+
+ var[0].data = &start;
+ var[1].data = &event->end;
+ var[2].data = &event->step;
- var[3].data = &event->istart;
- var[4].data = &event->iend;
- var[5].data = &event->istep;
+ var[3].data = &event->istart;
+ var[4].data = &event->iend;
+ var[5].data = &event->istep;
- gts_file_assign_variables (fp, var);
+ gts_file_assign_variables (fp, var);
- if (fp->type == GTS_ERROR)
- return;
+ if (fp->type == GTS_ERROR)
+ return;
- if (start) {
- if (!strcmp (start, "end")) {
- event->end_event = TRUE;
- if (var[1].set)
- gts_file_variable_error (fp, var, "end",
- "end cannot be set for an `end' event");
- else if (var[2].set)
- gts_file_variable_error (fp, var, "step",
- "step cannot be set for an `end' event");
- else if (var[3].set)
- gts_file_variable_error (fp, var, "istart",
- "istart cannot be set for an `end' event");
- else if (var[4].set)
- gts_file_variable_error (fp, var, "iend",
- "iend cannot be set for an `end' event");
- else if (var[5].set)
- gts_file_variable_error (fp, var, "istep",
- "istep cannot be set for an `end' event");
+ if (start) {
+ if (!strcmp (start, "end")) {
+ event->end_event = TRUE;
+ if (var[1].set)
+ gts_file_variable_error (fp, var, "end",
+ "end cannot be set for an `end' event");
+ else if (var[2].set)
+ gts_file_variable_error (fp, var, "step",
+ "step cannot be set for an `end' event");
+ else if (var[3].set)
+ gts_file_variable_error (fp, var, "istart",
+ "istart cannot be set for an `end' event");
+ else if (var[4].set)
+ gts_file_variable_error (fp, var, "iend",
+ "iend cannot be set for an `end' event");
+ else if (var[5].set)
+ gts_file_variable_error (fp, var, "istep",
+ "istep cannot be set for an `end' event");
+ }
+ else
+ event->start = atof (start);
+ g_free (start);
}
- else
- event->start = atof (start);
- g_free (start);
- }
- if (fp->type == GTS_ERROR)
- return;
+ if (fp->type == GTS_ERROR)
+ return;
- if (var[2].set && var[5].set) {
- gts_file_variable_error (fp, var, "istep",
- "step and istep cannot be set simultaneously");
- return;
- }
+ if (var[2].set && var[5].set) {
+ gts_file_variable_error (fp, var, "istep",
+ "step and istep cannot be set simultaneously");
+ return;
+ }
- if (var[2].set && event->step <= 0.) {
- gts_file_variable_error (fp, var, "step",
- "step `%g' must be strictly positive",
- event->step);
- return;
- }
- if (!var[2].set && !var[5].set && var[1].set) {
- gts_file_error (fp, "expecting a number (step or istep)");
- return;
- }
- if (var[1].set && event->end <= event->start) {
- gts_file_variable_error (fp, var, "end",
- "end `%g' must be larger than start `%g'",
- event->end, event->start);
- return;
- }
- if (event->start < 0. && var[1].set) {
- gts_file_variable_error (fp, var, "end",
- "end cannot be specified for an `init' event");
- return;
- }
- if (event->start < 0. && var[2].set)
- event->start = 0.;
- if (var[0].set || !var[3].set)
- event->t = event->start;
- else
- event->t = event->start = G_MAXDOUBLE/2.;
+ if (var[2].set && event->step <= 0.) {
+ gts_file_variable_error (fp, var, "step",
+ "step `%g' must be strictly positive",
+ event->step);
+ return;
+ }
+ if (!var[2].set && !var[5].set && var[1].set) {
+ gts_file_error (fp, "expecting a number (step or istep)");
+ return;
+ }
+ if (var[1].set && event->end <= event->start) {
+ gts_file_variable_error (fp, var, "end",
+ "end `%g' must be larger than start `%g'",
+ event->end, event->start);
+ return;
+ }
+ if (event->start < 0. && var[1].set) {
+ gts_file_variable_error (fp, var, "end",
+ "end cannot be specified for an `init' event");
+ return;
+ }
+ if (event->start < 0. && var[2].set)
+ event->start = 0.;
+ if (var[0].set || !var[3].set)
+ event->t = event->start;
+ else
+ event->t = event->start = G_MAXDOUBLE/2.;
- if (!var[5].set && !var[2].set && var[4].set) {
- gts_file_error (fp, "expecting a number (istep or step)");
- return;
- }
- if (var[3].set && event->iend <= event->istart) {
- gts_file_variable_error (fp, var, "iend",
- "iend `%u' must be larger than istart `%u'",
- event->iend, event->istart);
- return;
+ if (!var[5].set && !var[2].set && var[4].set) {
+ gts_file_error (fp, "expecting a number (istep or step)");
+ return;
+ }
+ if (var[3].set && event->iend <= event->istart) {
+ gts_file_variable_error (fp, var, "iend",
+ "iend `%u' must be larger than istart `%u'",
+ event->iend, event->istart);
+ return;
+ }
+ if (var[3].set || !var[0].set)
+ event->i = event->istart;
+ else
+ event->i = event->istart = G_MAXINT/2;
}
- if (var[3].set || !var[0].set)
- event->i = event->istart;
- else
- event->i = event->istart = G_MAXINT/2;
if (class_changed && fp->type != '\n' && klass->read)
(* klass->read) (o, fp);
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list