A Dipole-Wall collision using a 4th-order accurate solver
#define NOSLIP_TOP (1)
#include "nsf4t.h"
int initlevel = 9;
double ue = 1e-4;
scalar * tracers = NULL;
int main() {
periodic (left);
L0 = 25;
X0 = Y0 = -L0/2;
const scalar muc[] = 1e-4;
nu = muc;
N = 1 << initlevel;
run();
}
event logger (i++) {
if (i == 0)
printf ("#t i p.i p.nr p2.i p2.nr cells depth speed divmax\n");
printf ("%g %d %d %d %d %d %ld %d %g %g\n",
t, i, mgp.i, mgp.nrelax, mgp2.i, mgp2.nrelax,
grid->tn, grid->maxdepth, perf.speed, mgp2.resa);
}
event init (t = 0) {
scalar omg[];
scalar psi[];
psi[top] = dirichlet_top (0);
psi[bottom] = dirichlet_bottom (0);
TOLERANCE = 1e-4;
double xp = -1.124, yp = 0.423;
foreach() {
psi[] = 0;
double omgl = 0;
foreach_child()
omgl -= (x - xp)*exp(-sq(x - xp) - sq(y - yp));
omg[] = omgl/4.;
}
poisson (psi, omg);
boundary ({psi});
coord f = {-1., 1.};
foreach_face()
u.x[] = f.x*(psi[0,1] + psi[-1,1] - psi[0,-1] - psi[-1,-1])/(4.*Delta);
boundary ((scalar*){u});
vorticityf (u, omg);
}
event adapt (i++)
adapt_flow (ue, 99, 1);
event mov (t += 2) {
scalar omg[];
vorticityf (u, omg);
output_ppm (omg, file = "omg.mp4", n = 600,
linear = true, map = cool_warm,
min = -0.2, max = 0.2);
foreach()
omg[] = level;
output_ppm (omg, file = "lev.mp4", n = 600);
}
event stop (t = 500);