[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