sandbox/Antoonvh/test_Hilbert.c

    Using the Hilbert iterator

    A simulation

    Grid-cell processor index

    set key off
    set size square
    set cbrange [-0.5:2.5]
    plot 'out' w l palette
    The grid iterator and pid() (script)

    The grid iterator and pid() (script)

    #include "quadtree_Hilbert.h"
    #include "navier-stokes/centered.h"
    
    double H_indexing (scalar H, bool leaves);
    #define RAD (sqrt(sq(x) + sq(y)))
    #define ST (x/RAD)
    
    u.t[top] = dirichlet (0);
    
    const face vector nu[] = {0.001, 0.001};
    
    int main() {
      mu = nu;
      L0 = 20;
      X0 = Y0 = -L0/2.;
      N = 256;
      run();
    }
    
    event init (t = 0) {
      double k = 3.83170597;
      scalar psi[];
      foreach()
        psi[] = ((RAD > 1)*((1/RAD))*ST +
    	     (RAD < 1)*((-2*j1(k*RAD)*ST/(k*j0(k))) + (RAD*ST)));
      boundary({psi});
      foreach() {
        u.x[] = -(psi[0, 1] - psi[0, -1])/(2*Delta);
        u.y[] = (psi[1] - psi[-1])/(2*Delta);
      }
    }
    
    event adapt (i++) 
      adapt_wavelet ((scalar*){u}, (double[]){0.05, 0.05}, 8);
    
    event movie (t += 0.1){
      scalar omega[];
      vorticity (u, omega);
      output_ppm (omega, file = "movie.mp4", n = 400);
      foreach()
        omega[] = pid();
      output_ppm (omega, file = "movieP.mp4",
    	      n = 400, min = 0, max = npe());
    }
    
    event stop (t = 20) {
      for (int piz = 0; piz < npe(); piz++) {
        if (pid() == piz)
          foreach()
    	printf ("%g %g %d\n", x, y, pid());
        fflush (stdout);
    #if _MPI
        MPI_Barrier (MPI_COMM_WORLD);
    #endif
      }
    }