[SCM] Gerris Flow Solver branch, upstream, updated. b3aa46814a06c9cb2912790b23916ffb44f1f203

Stephane Popinet popinet at users.sf.net
Fri May 15 02:54:57 UTC 2009


The following commit has been merged in the upstream branch:
commit e6d77d090c543e29365d07f5dd39ce45551db478
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Wed Jan 16 08:04:54 2008 +1100

    Renamed GfsOutputDropletStats to GfsOutputDropletSums
    
    Note that the syntax has changed, please check the doc.
    
    darcs-hash:20080115210454-d4795-c1a419a42987abb774d72815dffef3b89cacea18.gz

diff --git a/src/init.c b/src/init.c
index 68e6b22..3ce3a4e 100644
--- a/src/init.c
+++ b/src/init.c
@@ -197,7 +197,7 @@ GtsObjectClass ** gfs_classes (void)
         gfs_output_scalar_sum_class (),
         gfs_output_scalar_maxima_class (),
         gfs_output_scalar_histogram_class (),
-        gfs_output_droplet_stats_class (),
+        gfs_output_droplet_sums_class (),
         gfs_output_error_norm_class (),
           gfs_output_correlation_class (),
 	gfs_output_squares_class (),
diff --git a/src/output.c b/src/output.c
index 7927c0b..bee532d 100644
--- a/src/output.c
+++ b/src/output.c
@@ -2221,33 +2221,29 @@ GfsOutputClass * gfs_output_scalar_histogram_class (void)
   return klass;
 }
 
-/* GfsOutputDropletStats: Object */
+/* GfsOutputDropletSums: Object */
 
-static void gfs_output_droplet_stats_destroy (GtsObject * object)
+static void gfs_output_droplet_sums_destroy (GtsObject * object)
 {
-  if (GFS_OUTPUT_DROPLET_STATS (object)->tag)
-    gts_object_destroy (GTS_OBJECT (GFS_OUTPUT_DROPLET_STATS (object)->tag));
+  GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (object);
+  gts_object_destroy (GTS_OBJECT (d->c));
+  if (d->tag)
+    gts_object_destroy (GTS_OBJECT (d->tag));
 
-  (* GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class->destroy) (object);
+  (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->destroy) (object);
 }
 
-static void gfs_output_droplet_stats_read (GtsObject ** o, GtsFile * fp)
+static void gfs_output_droplet_sums_read (GtsObject ** o, GtsFile * fp)
 {
-  (* GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class->read) (o, fp);
+  (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->read) (o, fp);
   if (fp->type == GTS_ERROR)
     return;
 
-  if (fp->type != GTS_STRING) {
-    gts_file_error (fp, "expecting a string (c)");
-    return;
-  }
+  GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (*o);
   GfsDomain * domain = GFS_DOMAIN (gfs_object_simulation (*o));
-  GfsOutputDropletStats * d = GFS_OUTPUT_DROPLET_STATS (*o);
-  if ((d->c = gfs_variable_from_name (domain->variables, fp->token->str)) == NULL) {
-    gts_file_error (fp, "unknown variable `%s'", fp->token->str);
+  gfs_function_read (d->c, domain, fp);
+  if (fp->type == GTS_ERROR)
     return;
-  }
-  gts_file_next_token (fp);
 
   if (fp->type == GTS_STRING) {
     if (!(d->tag = gfs_domain_get_or_add_variable (domain, fp->token->str, "Droplet index"))) {
@@ -2258,13 +2254,13 @@ static void gfs_output_droplet_stats_read (GtsObject ** o, GtsFile * fp)
   }
 }
 
-static void gfs_output_droplet_stats_write (GtsObject * o, FILE * fp)
+static void gfs_output_droplet_sums_write (GtsObject * o, FILE * fp)
 {
-  GfsOutputDropletStats * d = GFS_OUTPUT_DROPLET_STATS (o);
+  GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (o);
 
-  (* GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class->write) (o, fp);
+  (* GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class->write) (o, fp);
 
-  fprintf (fp, " %s", d->c->name);
+  gfs_function_write (d->c, fp);
   if (d->tag)
     fprintf (fp, " %s", d->tag->name);
 }
@@ -2273,29 +2269,41 @@ typedef struct {
   GfsVariable * s, * c, * tag;
   double * v;
   guint n;
-} DropStatsPar;
+  GfsFunction * fc;
+} DropSumsPar;
 
-static void droplet_stats (FttCell * cell, DropStatsPar * p)
+static void droplet_sums (FttCell * cell, DropSumsPar * p)
 {
-  guint i = GFS_VARIABLE (cell, p->tag->i);
+  guint i = GFS_VALUE (cell, p->tag);
   if (i > 0)
-    p->v[i - 1] += ftt_cell_volume (cell)*GFS_VARIABLE (cell, p->c->i)*GFS_VARIABLE (cell, p->s->i);
+    p->v[i - 1] += GFS_VALUE (cell, p->s);
 }
 
-static gboolean gfs_output_droplet_stats_event (GfsEvent * event, GfsSimulation * sim)
+static void compute_c (FttCell * cell, DropSumsPar * p)
 {
-  if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_droplet_stats_class ())->parent_class)->event) (event, sim)) {
-    GfsOutputDropletStats * d = GFS_OUTPUT_DROPLET_STATS (event);
+  GFS_VALUE (cell, p->c) = gfs_function_value (p->fc, cell);
+}
+
+static gboolean gfs_output_droplet_sums_event (GfsEvent * event, GfsSimulation * sim)
+{
+  if ((* GFS_EVENT_CLASS (GTS_OBJECT_CLASS (gfs_output_droplet_sums_class ())->parent_class)->event) (event, sim)) {
+    GfsOutputDropletSums * d = GFS_OUTPUT_DROPLET_SUMS (event);
     GfsDomain * domain = GFS_DOMAIN (sim);
-    DropStatsPar p;
+    DropSumsPar p;
     p.s = GFS_OUTPUT_SCALAR (event)->v;
-    p.c = d->c;
+    p.c = gfs_function_get_variable (d->c);
+    if (!p.c) {
+      p.c = gfs_temporary_variable (domain);
+      p.fc = d->c;
+      gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
+				(FttCellTraverseFunc) compute_c, &p);
+    }
     p.tag = d->tag ? d->tag : gfs_temporary_variable (domain);
-    p.n = gfs_domain_tag_droplets (domain, d->c, p.tag);
+    p.n = gfs_domain_tag_droplets (domain, p.c, p.tag);
     if (p.n > 0) {
       p.v = g_malloc0 (p.n*sizeof (double));
       gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
-				(FttCellTraverseFunc) droplet_stats, &p);
+				(FttCellTraverseFunc) droplet_sums, &p);
       guint i;
       for (i = 0; i < p.n; i++)
 	fprintf (GFS_OUTPUT (event)->file->fp, "%g %d %.12g\n", sim->time.t, i + 1, p.v[i]);
@@ -2303,35 +2311,42 @@ static gboolean gfs_output_droplet_stats_event (GfsEvent * event, GfsSimulation
     }
     if (p.tag != d->tag)
       gts_object_destroy (GTS_OBJECT (p.tag));
+    if (!gfs_function_get_variable (d->c))
+      gts_object_destroy (GTS_OBJECT (p.c));
     return TRUE;
   }
   return FALSE;
 }
 
-static void gfs_output_droplet_stats_class_init (GfsOutputClass * klass)
+static void gfs_output_droplet_sums_class_init (GfsOutputClass * klass)
 {
-  GFS_EVENT_CLASS (klass)->event = gfs_output_droplet_stats_event;
-  GTS_OBJECT_CLASS (klass)->read = gfs_output_droplet_stats_read;
-  GTS_OBJECT_CLASS (klass)->write = gfs_output_droplet_stats_write;
-  GTS_OBJECT_CLASS (klass)->destroy = gfs_output_droplet_stats_destroy;
+  GFS_EVENT_CLASS (klass)->event = gfs_output_droplet_sums_event;
+  GTS_OBJECT_CLASS (klass)->read = gfs_output_droplet_sums_read;
+  GTS_OBJECT_CLASS (klass)->write = gfs_output_droplet_sums_write;
+  GTS_OBJECT_CLASS (klass)->destroy = gfs_output_droplet_sums_destroy;
 }
 
-GfsOutputClass * gfs_output_droplet_stats_class (void)
+static void gfs_output_droplet_sums_init (GfsOutputDropletSums * d)
+{
+  d->c = gfs_function_new (gfs_function_class (), 0.);
+}
+
+GfsOutputClass * gfs_output_droplet_sums_class (void)
 {
   static GfsOutputClass * klass = NULL;
 
   if (klass == NULL) {
-    GtsObjectClassInfo gfs_output_droplet_stats_info = {
-      "GfsOutputDropletStats",
-      sizeof (GfsOutputDropletStats),
+    GtsObjectClassInfo gfs_output_droplet_sums_info = {
+      "GfsOutputDropletSums",
+      sizeof (GfsOutputDropletSums),
       sizeof (GfsOutputClass),
-      (GtsObjectClassInitFunc) gfs_output_droplet_stats_class_init,
-      (GtsObjectInitFunc) NULL,
+      (GtsObjectClassInitFunc) gfs_output_droplet_sums_class_init,
+      (GtsObjectInitFunc) gfs_output_droplet_sums_init,
       (GtsArgSetFunc) NULL,
       (GtsArgGetFunc) NULL
     };
     klass = gts_object_class_new (GTS_OBJECT_CLASS (gfs_output_scalar_class ()),
-				  &gfs_output_droplet_stats_info);
+				  &gfs_output_droplet_sums_info);
   }
 
   return klass;
diff --git a/src/output.h b/src/output.h
index 9c5d39a..8daef8f 100644
--- a/src/output.h
+++ b/src/output.h
@@ -252,25 +252,26 @@ struct _GfsOutputScalarHistogram {
 
 GfsOutputClass * gfs_output_scalar_histogram_class  (void);
 
-/* GfsOutputDropletStats: Header */
+/* GfsOutputDropletSums: Header */
 
-typedef struct _GfsOutputDropletStats         GfsOutputDropletStats;
+typedef struct _GfsOutputDropletSums         GfsOutputDropletSums;
 
-struct _GfsOutputDropletStats {
+struct _GfsOutputDropletSums {
   /*< private >*/
   GfsOutputScalar parent;
 
   /*< public >*/
-  GfsVariable * c, * tag;
+  GfsFunction * c;
+  GfsVariable * tag;
 };
 
-#define GFS_OUTPUT_DROPLET_STATS(obj)            GTS_OBJECT_CAST (obj,\
-					         GfsOutputDropletStats,\
-					         gfs_output_droplet_stats_class ())
-#define GFS_IS_OUTPUT_DROPLET_STATS(obj)         (gts_object_is_from_class (obj,\
-						 gfs_output_droplet_stats_class ()))
+#define GFS_OUTPUT_DROPLET_SUMS(obj)            GTS_OBJECT_CAST (obj,\
+					         GfsOutputDropletSums,\
+					         gfs_output_droplet_sums_class ())
+#define GFS_IS_OUTPUT_DROPLET_SUMS(obj)         (gts_object_is_from_class (obj,\
+						 gfs_output_droplet_sums_class ()))
 
-GfsOutputClass * gfs_output_droplet_stats_class  (void);
+GfsOutputClass * gfs_output_droplet_sums_class  (void);
 
 /* GfsOutputErrorNorm: Header */
 

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list