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.

    event end(t = 0.50)
    {
      printf("i[%06d], dt[%e], t[%.2f]\r\nEND OF RUN!\r\n", i, dt, t);
    }

    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.