sandbox/bugs/adaptwaveletbug.c
This case includes the axisymmetric solver combining with Navier-Stokes, two-phase flow and surface tension as well
#include "axi.h"
#include "navier-stokes/centered.h"
#include "two-phase.h"
#include "tension.h"
Introduce some constants of the case,
int LEVELmax = 9, LEVELmin = 5;
The program starts here,
int main()
{
size(10.0);
init_grid(16);
rho1 = 1000.0;
rho2 = 1.0;
mu1 = 5.0e-4;
mu2 = 2.0e-5;
f.sigma = 1.6e-2;
run();
return 1;
}
As it can be seen, the initial condition is showing a drop with 10% gap for the refinement. The drop velocity is also set here.
event init(i = 0)
{
double x0 = 7.50;
refine(sq(x - x0) + sq(y) + sq(z) < sq(1.1) && sq(x - x0) + sq(y) + sq(z) > sq(0.9) && level < LEVELmax);
foreach()
{
if (sq(x - x0) + sq(y) + sq(z) < sq(1.0))
{
f[] = 1.0;
u.x[] = -10.0;
}
else
f[] = 0.0;
}
}
The adapt_wavelet is used to construct a refined mesh close to the interface by choosing the “f” as the variable and “0.001” as the tolerance.
event adapt(i++)
{
adapt_wavelet({f}, (double[]) {0.001}, maxlevel = LEVELmax, minlevel = LEVELmin);
}
And, finally, for the iteration showing and GFSView output we will use the following “events”.
event showiteration(i += 50)
{
printf("i[%06d], dt[%e], t[%.2f]\r\n", i, dt, t);
}
event gfsview(t += 0.1)
{
static FILE * fp;
char name[500];
sprintf(name, "GFS[%05d]-t[%.2f].gfs", i, t);
fp = fopen(name, "w");
output_gfs(fp, translate = true);
printf("write data file!\r\n");
fclose(fp);
}
The final time can be set here as well.
The results has to show a drop moving with constant velocity; therefore, the adapt_wavelet has to move with the interface accordingly. Nevertheless, the refinement is not following the interface in some cells.