[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203
Stephane Popinet
popinet at users.sf.net
Fri May 15 02:55:52 UTC 2009
The following commit has been merged in the upstream branch:
commit ba2ca38417410ed50d3f8190d6234a00e5c5e6ea
Author: Stephane Popinet <popinet at users.sf.net>
Date: Fri Nov 28 11:29:57 2008 +1100
OutputParticle now derives from OutputLocation
Note also that the syntax has changed.
darcs-hash:20081128002957-d4795-b08e8b4892991032df9dd0f36841044f0d4434ad.gz
diff --git a/src/domain.c b/src/domain.c
index 8f34bf5..2b8015e 100644
--- a/src/domain.c
+++ b/src/domain.c
@@ -2102,7 +2102,7 @@ gdouble gfs_domain_cell_point_distance2 (GfsDomain * domain,
/**
* gfs_domain_advect_point:
* @domain: a #GfsDomain.
- * @p: a #GtsPoint.
+ * @p: a #FttVector.
* @dt: the time step.
*
* Updates the coordinates of point @p at time t + @dt using the
@@ -2111,7 +2111,7 @@ gdouble gfs_domain_cell_point_distance2 (GfsDomain * domain,
* If @p is not contained within @domain, the coordinates are unchanged.
*/
void gfs_domain_advect_point (GfsDomain * domain,
- GtsPoint * p,
+ FttVector * p,
gdouble dt)
{
FttCell * cell;
@@ -2122,9 +2122,7 @@ void gfs_domain_advect_point (GfsDomain * domain,
g_return_if_fail (domain != NULL);
g_return_if_fail (p != NULL);
- p0.x = p1.x = p->x;
- p0.y = p1.y = p->y;
- p0.z = p1.z = p->z;
+ p0 = p1 = *p;
cell = gfs_domain_locate (domain, p0, -1);
if (cell == NULL)
return;
diff --git a/src/domain.h b/src/domain.h
index 4570812..9bfa1a5 100644
--- a/src/domain.h
+++ b/src/domain.h
@@ -210,7 +210,7 @@ gdouble gfs_domain_cell_point_distance2 (GfsDomain * domain,
gpointer data,
FttCell ** closest);
void gfs_domain_advect_point (GfsDomain * domain,
- GtsPoint * p,
+ FttVector * p,
gdouble dt);
guint gfs_domain_size (GfsDomain * domain,
FttTraverseFlags flags,
diff --git a/src/output.c b/src/output.c
index bb37084..8cf0c7c 100644
--- a/src/output.c
+++ b/src/output.c
@@ -2850,87 +2850,39 @@ GfsOutputClass * gfs_output_streamline_class (void)
/* GfsOutputParticle: Object */
-static void gfs_output_particle_destroy (GtsObject * o)
-{
- GfsOutputParticle * l = GFS_OUTPUT_PARTICLE (o);
-
- gts_object_destroy (GTS_OBJECT (l->p));
-
- (* GTS_OBJECT_CLASS (gfs_output_particle_class ())->parent_class->destroy) (o);
-}
-
-static void gfs_output_particle_read (GtsObject ** o, GtsFile * fp)
-{
- GfsOutputParticle * l = GFS_OUTPUT_PARTICLE (*o);
-
- if (GTS_OBJECT_CLASS (gfs_output_particle_class ())->parent_class->read)
- (* GTS_OBJECT_CLASS (gfs_output_particle_class ())->parent_class->read)
- (o, fp);
- if (fp->type == GTS_ERROR)
- return;
-
- if (fp->type != GTS_INT && fp->type != GTS_FLOAT) {
- gts_file_error (fp, "expecting a number (p.x)");
- return;
- }
- l->p->x = atof (fp->token->str);
- gts_file_next_token (fp);
-
- if (fp->type != GTS_INT && fp->type != GTS_FLOAT) {
- gts_file_error (fp, "expecting a number (p.y)");
- return;
- }
- l->p->y = atof (fp->token->str);
- gts_file_next_token (fp);
-
- if (fp->type != GTS_INT && fp->type != GTS_FLOAT) {
- gts_file_error (fp, "expecting a number (p.z)");
- return;
- }
- l->p->z = atof (fp->token->str);
- gts_file_next_token (fp);
-}
-
-static void gfs_output_particle_write (GtsObject * o, FILE * fp)
-{
- GfsOutputParticle * l = GFS_OUTPUT_PARTICLE (o);
-
- if (GTS_OBJECT_CLASS (gfs_output_particle_class ())->parent_class->write)
- (* GTS_OBJECT_CLASS (gfs_output_particle_class ())->parent_class->write) (o, fp);
- fprintf (fp, " %g %g %g", l->p->x, l->p->y, l->p->z);
-}
-
static gboolean gfs_output_particle_event (GfsEvent * event,
GfsSimulation * sim)
{
- GfsOutputParticle * l = GFS_OUTPUT_PARTICLE (event);
+ GfsOutputLocation * location = GFS_OUTPUT_LOCATION (event);
gboolean ret = FALSE;
+ guint i;
- if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_particle_class ())->parent_class)->event)
+ if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_location_class ())->parent_class)->event)
(event,sim)) {
FILE * fp = GFS_OUTPUT (event)->file->fp;
- FttVector pm;
- pm.x = l->p->x; pm.y = l->p->y; pm.z = l->p->z;
- gfs_simulation_map_inverse (sim, &pm);
- fprintf (fp, "%g %g %g %g\n", sim->time.t, pm.x, pm.y, pm.z);
+
+ for (i = 0; i < location->p->len; i++) {
+ FttVector p = g_array_index (location->p, FttVector, i);
+ fprintf (fp, "%d %g %g %g %g\n", i, sim->time.t, p.x, p.y, p.z);
+ }
+ fflush (fp);
ret = TRUE;
}
- /* fixme: mapping is most probably incorrect */
- gfs_domain_advect_point (GFS_DOMAIN (sim), l->p, sim->advection_params.dt);
+
+ for (i = 0; i < location->p->len; i++) {
+ FttVector p = g_array_index (location->p, FttVector, i);
+ gfs_simulation_map (sim, &p);
+ gfs_domain_advect_point (GFS_DOMAIN (sim), &p, sim->advection_params.dt);
+ gfs_simulation_map_inverse (sim, &p);
+ g_array_index (location->p, FttVector, i) = p;
+ }
+
return ret;
}
static void gfs_output_particle_class_init (GfsOutputClass * klass)
{
GFS_EVENT_CLASS (klass)->event = gfs_output_particle_event;
- GTS_OBJECT_CLASS (klass)->read = gfs_output_particle_read;
- GTS_OBJECT_CLASS (klass)->write = gfs_output_particle_write;
- GTS_OBJECT_CLASS (klass)->destroy = gfs_output_particle_destroy;
-}
-
-static void gfs_output_particle_init (GfsOutputParticle * l)
-{
- l->p = gts_point_new (gts_point_class (), 0., 0., 0.);
}
GfsOutputClass * gfs_output_particle_class (void)
@@ -2940,15 +2892,14 @@ GfsOutputClass * gfs_output_particle_class (void)
if (klass == NULL) {
GtsObjectClassInfo gfs_output_particle_info = {
"GfsOutputParticle",
- sizeof (GfsOutputParticle),
+ sizeof (GfsOutputLocation),
sizeof (GfsOutputClass),
(GtsObjectClassInitFunc) gfs_output_particle_class_init,
- (GtsObjectInitFunc) gfs_output_particle_init,
+ (GtsObjectInitFunc) NULL,
(GtsArgSetFunc) NULL,
(GtsArgGetFunc) NULL
};
- klass = gts_object_class_new (GTS_OBJECT_CLASS
- (gfs_output_class ()),
+ klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_location_class ()),
&gfs_output_particle_info);
}
diff --git a/src/output.h b/src/output.h
index 60482ad..ea968e4 100644
--- a/src/output.h
+++ b/src/output.h
@@ -333,21 +333,8 @@ GfsOutputClass * gfs_output_streamline_class (void);
/* GfsOutputParticle: Header */
-typedef struct _GfsOutputParticle GfsOutputParticle;
-
-struct _GfsOutputParticle {
- /*< private >*/
- GfsOutput parent;
-
- /*< public >*/
- GtsPoint * p;
-};
-
-#define GFS_OUTPUT_PARTICLE(obj) GTS_OBJECT_CAST (obj,\
- GfsOutputParticle,\
- gfs_output_particle_class ())
#define GFS_IS_OUTPUT_PARTICLE(obj) (gts_object_is_from_class (obj,\
- gfs_output_particle_class ()))
+ gfs_output_particle_class ()))
GfsOutputClass * gfs_output_particle_class (void);
--
Gerris Flow Solver
More information about the debian-science-commits
mailing list