postProcess/getCM.c
#include “navier-stokes/centered.h” #include “fractions.h”
char filename[512]; double xcm1 , ycm2;
scalar f[];
int main(int a, char const arguments[]) { if (a
!= 2) { fprintf (stderr, “usage: getCM
double sumv1 = 0.; double sumv2 = 0.; double sumf = 0.;
/* Volume-weighted centroid: on an adaptive mesh the cell count is not a measure of area, so each cell contributes f*dv().
foreach (reduction(+:sumv1) reduction(+:sumv2) reduction(+:sumf)) { double ff = clamp(f[], 0., 1.); sumv1 += ffxdv(); sumv2 += ffydv(); sumf += ffdv(); } xcm1 = sumf > 0. ? sumv1/sumf : 0.; ycm2 = sumf > 0. ? sumv2/sumf : 0.; boundary((scalar ){f, u.x, u.y}); FILE * fp = ferr; fprintf(fp, “%f %f %f”, xcm1, ycm2, t); fflush (fp); return 0; }