 //typedef thrust::device_vector<double> Vector;
 typedef dg::DMatrix Matrix;
 //typedef cusp::array1d<double, cusp::device_memory> Vector;
+typedef dg::IDMatrix IMatrix;
 
 int main()
 {
     dg::Timer t;
     unsigned n, Nx, Ny, Nz; 
-    std::cout << "Type n, Nx, Ny and Nz\n";
+    std::cout << "Type n, Nx, Ny and Nz ( Nx and Ny shall be multiples of 2)\n";
     std::cin >> n >> Nx >> Ny >> Nz;
-    dg::Grid3d grid( 0., lx, 0, ly, 0, ly, n, Nx, Ny, Nz);
+    dg::Grid3d grid(      0., lx, 0, ly, 0, ly, n, Nx, Ny, Nz);
+    dg::Grid3d grid_half( 0., lx, 0, ly, 0, ly, n, Nx/2, Ny/2, Nz);
     Vector w2d;
     dg::blas1::transfer( dg::create::weights(grid), w2d);
 

        dg::blas2::symv( M, x, y);
    t.toc();
    std::cout<<"jump X took                      "<<t.diff()/multi<<"s\t"<<gbytes*multi/t.diff()<<"GB/s\n";

    t.tic();
    for( int i=0; i<multi; i++)

#include "blas.h"
#include "backend/derivatives.h"
#include "backend/evaluation.cuh"
#include "backend/projection.cuh"

const double lx = 2.*M_PI;
const double ly = 2.*M_PI;
