sandbox/Antoonvh/poiseuille.c

    Poiseuille flow

    Due to the usage of 3rd-order accurrate boundaries, The parabolic flow profile is resolved exactly.

    Quasi steady

    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'
    error (script)

    error (script)

    #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); 
    }