sandbox/bugs/bug-fractions.c
This bug could cause a problem when the fraction is calculated from a distance function (level-set) by using “fractions()”. In this example, an interface defined by the distance function crosses the cell center of some cells. The fraction of such cells is supposed to be 0.5; however, “fractions()” gives 0 of the fraction to them.
#include "fractions.h"
int main ()
{
init_grid (16); // works with eight
origin (0, 0, 0);
L0 = 0.01;
scalar levelset[], f[];
foreach()
levelset[] = x + y - 5e-3;
vertex scalar phi[];
foreach_vertex()
phi[] = 0.25*(levelset[] + levelset[-1] + levelset[0,-1] + levelset[-1,-1]);
fractions (phi, f);
output_cells();
foreach()
fprintf (stderr, "%g %g %g\n", x, y, f[]);
}
set size ratio -1
unset key
unset xtics
unset ytics
set yrange [0:0.01]
plot 'out' w l, 'log' u 1:2:3 w labels, 5e-3 - x lw 3
Volume fractions (script)