[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:53:06 UTC 2009
The following commit has been merged in the upstream branch:
commit 697166e6691170055decef6eb3ccc22159fd048d
Author: Stephane Popinet <popinet at users.sf.net>
Date: Thu Feb 9 00:53:10 2006 +1100
OutputSimulation has an optional "text" format
darcs-hash:20060208135310-d4795-4e396d21f3f7f9e189fb2da14e332693ec722a2a.gz
diff --git a/src/output.c b/src/output.c
index 989003f..4048177 100644
--- a/src/output.c
+++ b/src/output.c
@@ -1253,6 +1253,21 @@ static void output_simulation_destroy (GtsObject * object)
(* GTS_OBJECT_CLASS (gfs_output_simulation_class ())->parent_class->destroy) (object);
}
+static void write_text (FttCell * cell, GfsOutputSimulation * output)
+{
+ GSList * i = GFS_DOMAIN (gfs_object_simulation (output))->variables_io;
+ FILE * fp = GFS_OUTPUT (output)->file->fp;
+ FttVector p;
+
+ gfs_cell_cm (cell, &p);
+ fprintf (fp, "%g %g %g", p.x, p.y, p.z);
+ while (i) {
+ fprintf (fp, " %g", GFS_VARIABLE (cell, GFS_VARIABLE1 (i->data)->i));
+ i = i->next;
+ }
+ fputc ('\n', fp);
+}
+
static gboolean output_simulation_event (GfsEvent * event, GfsSimulation * sim)
{
if ((* GFS_EVENT_CLASS (gfs_output_class())->event) (event, sim)) {
@@ -1263,9 +1278,30 @@ static gboolean output_simulation_event (GfsEvent * event, GfsSimulation * sim)
domain->variables_io = output->var;
domain->binary = output->binary;
sim->output_surface = output->surface;
- gfs_simulation_write (sim,
- output->max_depth,
- GFS_OUTPUT (event)->file->fp);
+ switch (output->format) {
+ case GFS:
+ gfs_simulation_write (sim,
+ output->max_depth,
+ GFS_OUTPUT (event)->file->fp);
+ break;
+ case GFS_TEXT: {
+ FILE * fp = GFS_OUTPUT (event)->file->fp;
+ GSList * i = domain->variables_io;
+ guint nv = 4;
+
+ fputs ("# 1:X 2:Y: 3:Z", fp);
+ while (i) {
+ fprintf (fp, " %d:%s", nv++, GFS_VARIABLE1 (i->data)->name);
+ i = i->next;
+ }
+ fputc ('\n', fp);
+ gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+ (FttCellTraverseFunc) write_text, event);
+ break;
+ }
+ default:
+ g_assert_not_reached ();
+ }
domain->variables_io = NULL;
domain->binary = TRUE;
sim->output_surface = TRUE;
@@ -1297,6 +1333,8 @@ static void output_simulation_write (GtsObject * o, FILE * fp)
fputs (" binary = 0", fp);
if (!output->surface)
fputs (" surface = 0", fp);
+ if (output->format == GFS_TEXT)
+ fputs (" format = text", fp);
fputs (" }", fp);
}
@@ -1307,9 +1345,10 @@ static void output_simulation_read (GtsObject ** o, GtsFile * fp)
{GTS_STRING, "variables",TRUE},
{GTS_INT, "binary", TRUE},
{GTS_INT, "surface", TRUE},
+ {GTS_STRING, "format", TRUE},
{GTS_NONE}
};
- gchar * variables = NULL;
+ gchar * variables = NULL, * format = NULL;
GfsOutputSimulation * output = GFS_OUTPUT_SIMULATION (*o);
GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (output));
@@ -1322,6 +1361,7 @@ static void output_simulation_read (GtsObject ** o, GtsFile * fp)
var[1].data = &variables;
var[2].data = &output->binary;
var[3].data = &output->surface;
+ var[4].data = &format;
gts_file_assign_variables (fp, var);
if (fp->type == GTS_ERROR) {
g_free (variables);
@@ -1345,6 +1385,20 @@ static void output_simulation_read (GtsObject ** o, GtsFile * fp)
}
else if (output->var == NULL)
output->var = g_slist_copy (domain->variables);
+
+ if (format != NULL) {
+ if (!strcmp (format, "gfs"))
+ output->format = GFS;
+ else if (!strcmp (format, "text"))
+ output->format = GFS_TEXT;
+ else {
+ gts_file_variable_error (fp, var, "format",
+ "unknown format `%s'", format);
+ g_free (format);
+ return;
+ }
+ g_free (format);
+ }
}
static void gfs_output_simulation_class_init (GfsEventClass * klass)
@@ -1361,6 +1415,7 @@ static void gfs_output_simulation_init (GfsOutputSimulation * object)
object->var = NULL;
object->binary = 1;
object->surface = 1;
+ object->format = GFS;
}
GfsOutputClass * gfs_output_simulation_class (void)
diff --git a/src/output.h b/src/output.h
index edc6b0f..5d01bbf 100644
--- a/src/output.h
+++ b/src/output.h
@@ -142,6 +142,7 @@ GfsOutputClass * gfs_output_location_class (void);
/* GfsOutputSimulation: Header */
typedef struct _GfsOutputSimulation GfsOutputSimulation;
+typedef enum { GFS, GFS_TEXT } GfsOutputSimulationFormat;
struct _GfsOutputSimulation {
GfsOutput parent;
@@ -149,6 +150,7 @@ struct _GfsOutputSimulation {
gint max_depth;
GSList * var;
gboolean binary, surface;
+ GfsOutputSimulationFormat format;
};
#define GFS_OUTPUT_SIMULATION(obj) GTS_OBJECT_CAST (obj,\
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list