/** # Unsymmetrical explosion We solve the Euler equations for a compressible gas under a nonsymmetric initial pressure (density) distribution. This problem has been recently aborded by Eggers et al. (2017). These authors showed that a selfsimilar structure exists in the vicinity of the emerging shock wave. The shock spreads in the transversal direction as $|t_o −t|^{1/2}$ and along the direction of propagation as $|t_o − t|^{3/2}$. $t_o$ is the singularity time. */ #include "compressible.h" #define LEVEL 8 int main() { /** We set Neumann conditions for normal velocity at all the boundaries. */ foreach_dimension() { w.n[right] = neumann(0); w.n[left] = neumann(0); } /** The domain spans $[-2:2]\times[-2:2]$. */ origin (-2, -2); size (4.); init_grid (1 << (LEVEL)); run(); } /** The initial density distribution is $$ \rho(x,y,0) = 0.2 + e^{-4(x^4 + y^2)} $$ */ event init (t = 0) { /** The momentum, $\mathbf{w} = \rho \mathbf{u}$, is initially null while the total energy is $E = \rho \mathbf{u}^2/2 + p/(\gamma-1)$. We assume that, initially, the isentropic relationship, $p/\rho^\gamma = cte$, holds. */ foreach() { rho[] = 0.2 + exp(-4*(sq(y) + sq(x)*sq(x))); foreach_dimension() w.x[] = 0.; E[] = pow(rho[], gammao)/(gammao - 1.); } } /** We wish to plot density distributions at different times. */ event plot (t = {0., 0.4, 0.511, 0.55}) { char name[80]; sprintf (name, "density_%g", t); FILE * fp = fopen (name, "w"); output_matrix(rho, fp, 1000); fclose (fp); } /** We will plot the time evolution of maximum entropy and the inverse of the maximum gradient of the density. */ event graphs (i++) { scalar rhograd[]; //gradient modulus scalar S[]; //Entropy foreach() { double a = 0., w2 = 0.; foreach_dimension() { a += sq(rho[1] -rho[-1]); w2 += sq(w.x[]); } rhograd[] = sqrt(a)/(2.*Delta); double pres = (E[]-0.5*w2/rho[])*(gammao-1.); //pressure S[] = log(pres/(pow(rho[],(gammao)))); } stats sr = statsf (rhograd); stats ss = statsf (S); fprintf (stderr, "%g %g %g\n", t, 1./sr.max, ss.max); } /** We adapt the mesh by controlling the error on the density field. */ #if TREE event adapt (i++) { adapt_wavelet ({rho}, (double[]){1e-4}, LEVEL + 3); } #endif /** ## Results We reproduce here figure 2 and 5 (sublots a and b) of the works of Eggers et al. (2017). Note that figures of the paper were computed with a largely finer mesh. ~~~gnuplot Density distribution for instants t = 0, 0.4, 0.511 and 0.55. set pm3d #set hidden set cntrparam levels 7 set view 55,40 unset key unset map unset colorbox set palette color unset tics set xyplane relative -1.2 set contours set multiplot layout 2,2 splot [0:2.][-1:1][0:1] 'density_0' binary u 1:2:3 with pm3d splot [0:2.][-1:1][0:1] 'density_0.4' binary u 1:2:3 with pm3d splot [0:2.][-1:1][0:1] 'density_0.511' binary u 1:2:3 with pm3d splot [0:2.][-1:1][0:1] 'density_0.55' binary u 1:2:3 with pm3d unset multiplot ~~~ ~~~gnuplot Time evolution oth the maximum of the entropy and of the inverse of the density gradient. set key left set multiplot layout 2,1 set ylabel '|grad^{-1} ({/Symbol r})|_{max}' set xtics 0.02 set ytics 0.5 plot [0.4:0.56][0:0.6] 'log' u 1:2 w l t 'Basilisk', 3.85*(0.511-x) t '|t - t_o| law' set ylabel 'S_{max}' set xlabel 't' set ytics 0.005 plot [0.4:0.56][0:0.009] 'log' u 1:3 w l t 'Basilisk', 0.7*(x-0.511)**1.5 t '|t - t_o|^{3/2} law' unset multiplot ~~~ */