# Computation of volume fractions on a variable-resolution grid

This test case is similar to fractions.c but with a refined band in the middle.

#include "fractions.h"

The refinement band is defined by this function.

int main()
{
origin (-0.5, -0.5);
init_grid (16);

refine (level == 4 && fabs (x) < 0.25);

We use a circle of radius 0.3 and initialise the fractions.

  vertex scalar phi[];
scalar c[];
c.refine = c.prolongation = fraction_refine;
face vector s[];
foreach_vertex()
phi[] = sq(0.3) - sq(x) - sq(y);
boundary ({phi});
fractions (phi, c, s);

Output the reconstruced facets and cells.

  output_facets (c, stdout, s);
output_facets (c, stderr);
FILE * fp = fopen ("cells", "w");
output_cells (fp);
fclose (fp);

Finally, we reconstruct the interface and display the reconstructed facets only in the “halo cells”. This is a check of the consistency of the boundary conditions applied to \mathbf{n} and \alpha.

  vector n[];
scalar alpha[];
reconstruction (c, n, alpha);
coord p;
for (int l = 0; l < depth(); l++)
foreach_halo (prolongation, l)
foreach_child() {
coord m = {n.x[],n.y[]};
if (facets (m, alpha[], p) == 2)
fprintf (stderr, "halo %g %g\nhalo %g %g\nhalo\n",
x + p.x*Delta, y + p.y*Delta,
x + p.x*Delta, y + p.y*Delta);
}
}

This gives this figure where “exact” uses c and s, “VOF” uses only c and “halo” is the halo cell reconstuction.

set size ratio -1
set key out
plot 'cells' w l t '', 'out' w l t "exact", '< grep -v halo log' w l t "VOF", \
'< grep halo log' u 2:3 w p t 'halo' Exact and VOF-reconstucted interface (script)