sandbox/Antoonvh/poiseuille.c
Poiseuille flow
Due to the usage of 3rd-order accurrate boundaries, The parabolic flow profile is resolved exactly.
set xr [4:64]
set yr [-1e-15:1e-15]
set grid
set xlabel 'N'
set logscale x 2
set ylabel 'Error'
plot 'out' t 'Data'
#define NOSLIP_TOP (1)
#define NOSLIP_BOTTOM (1)
#include "nsf4t.h"
scalar * tracers = NULL;
double dpdx = 0.08, muv = 1e-2; //Normalized maximum speed
double Poiseuille (double x, double y) {
return -(dpdx/(2*muv)*y*(y - L0));
}
int main() {
periodic (left);
const vector av[] = {dpdx, 0.};
const scalar muc[] = muv;
nu = muc;
a = av;
for (N = 8; N <= 32; N *= 2)
run();
}
event init (t = 0) {
foreach_face(x)
u.x[] = Gauss6_x(x, y, Delta, Poiseuille);
boundary ((scalar*){u});
}
event mov (t += 0.5) {
output_ppm (u.x, file = "ux.mp4", n = 300, min = 0, max = 1.0);
}
event stop (t = 100) {
double e = 0;
foreach_face(x)
e += dv()*fabs(u.x[] - Gauss6_x(x, y, Delta, Poiseuille));
printf ("%d %g\n", N, e);
}