sandbox/Antoonvh/rc.c
Enforcing the ratio \frac{R}{\Delta}
Some like to hint at the fidelity of their two-phase simulations in terms of the dimensionless ratio; \frac{R}{\Delta} < \text{Const}, with R a radius of curfavure of the interface and \Delta the grid size. Here we implement a method to enforce this ratio along an interface.
It seems to work
The “challenge” is to make in cooperate with
adapt_wavelet(), eventough it is not a wavelet-based
criterion.
#include "fractions.h"
#include "curvature.h"
#include "view.h"
double DoC = 1./20.; //Use 20 to 40 cells per radiusprolongate_ratio() is defined for this purpose only.
void prolongate_ratio (Point point, scalar s) {
foreach_child() {
if (s[] != nodata)
s[] += s[]*Delta;
}
}We test the method with a circle of radius R.
#define CIRC(R) (sq(x - R + 0.3) + sq(y) - sq(R))
scalar f[], curv[];
int main() {
f.prolongation = f.refine = fraction_refine; //f is the fraction field...
X0 = Y0 = -L0/2;
init_grid (1 << 7);
view (width = 700, height = 700);
//Loop over radii
for (double R = 10; R > 0.1; R /= 1.01) {
fraction (f, CIRC(R)); //Compute drop
boundary ({f}); //is this needed?
curvature (f, curv); //Compute curvature
curv.prolongation = prolongate_ratio; //_then_ overload the prolongation attributeFor testing, we do not set an effective maximum level. Note that
eventough we have not used proper boundary conditions for
f, the resolution remains limited when the interface
touches the domains boundaries..
adapt_wavelet ({curv}, (double[]){DoC}, maxlevel = 99);
//Make a movie
draw_vof ("f", lc = {1., 0., 1.}, lw = 2);
cells();
save ("plot.mp4");
}It is interesting to compare against the “default” refinement based on the vof field.
for (double R = 10; R > 0.1; R /= 1.01) {
fraction (f, CIRC(R));
boundary ({f});
adapt_wavelet ({f}, (double[]){0.01}, maxlevel = 99);
draw_vof ("f", lc = {1., 0., 1.}, lw = 2);
cells();
save ("plot2.mp4");
}Its appears similar, except we do not know how the
refinement-citerion value (0.01) compares to \frac{R}{\Delta}. Looking closely, we can see
that the curvature-based method uses a more constant grid along the
interface, wheareas the fov-based method is more robust in time.
Compare
}
