[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