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

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


The following commit has been merged in the upstream branch:
commit 9281e96914d8132ced11634f44eca5a5c692ec23
Author: Stephane Popinet <popinet at users.sf.net>
Date:   Mon Mar 16 08:34:31 2009 +1100

    OutputDropletSums sorts droplets by volume
    
    darcs-hash:20090315213431-d4795-a143fd82ef7f2e5e3d00b627eb0c41d9f142489b.gz

diff --git a/src/output.c b/src/output.c
index b1dfaea..4f32599 100644
--- a/src/output.c
+++ b/src/output.c
@@ -2339,8 +2339,12 @@ static void gfs_output_droplet_sums_write (GtsObject * o, FILE * fp)
 }
 
 typedef struct {
+  double v, f;
+} VolumePair;
+
+typedef struct {
   GfsVariable * s, * c, * tag;
-  double * v;
+  VolumePair * v;
   guint n;
   GfsFunction * fc;
 } DropSumsPar;
@@ -2348,8 +2352,10 @@ typedef struct {
 static void droplet_sums (FttCell * cell, DropSumsPar * p)
 {
   guint i = GFS_VALUE (cell, p->tag);
-  if (i > 0)
-    p->v[i - 1] += GFS_VALUE (cell, p->s);
+  if (i > 0) {
+    p->v[i - 1].v += GFS_VALUE (cell, p->c)*ftt_cell_volume (cell);
+    p->v[i - 1].f += GFS_VALUE (cell, p->s);
+  }
 }
 
 static void compute_c (FttCell * cell, DropSumsPar * p)
@@ -2357,6 +2363,13 @@ static void compute_c (FttCell * cell, DropSumsPar * p)
   GFS_VALUE (cell, p->c) = gfs_function_value (p->fc, cell);
 }
 
+static int volume_sort (const void * p1, const void * p2)
+{
+  VolumePair * a = (VolumePair *) p1;
+  VolumePair * b = (VolumePair *) p2;
+  return a->v < b->v ? 1 : -1;
+}
+
 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)) {
@@ -2374,12 +2387,13 @@ static gboolean gfs_output_droplet_sums_event (GfsEvent * event, GfsSimulation *
     p.tag = d->tag ? d->tag : gfs_temporary_variable (domain);
     p.n = gfs_domain_tag_droplets (domain, p.c, p.tag);
     if (p.n > 0) {
-      p.v = g_malloc0 (p.n*sizeof (double));
+      p.v = g_malloc0 (p.n*sizeof (VolumePair));
       gfs_domain_cell_traverse (domain, FTT_PRE_ORDER, FTT_TRAVERSE_LEAFS, -1,
 				(FttCellTraverseFunc) droplet_sums, &p);
+      qsort (p.v, p.n, sizeof (VolumePair), volume_sort);
       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]);
+	fprintf (GFS_OUTPUT (event)->file->fp, "%g %d %.12g\n", sim->time.t, i + 1, p.v[i].f);
       g_free (p.v);
     }
     if (p.tag != d->tag)

-- 
Gerris Flow Solver



More information about the debian-science-commits mailing list