        ky_offset += blocks[j * kernels[rank].x].y * threads[j * kernels[rank].x].y;
     }
 
-    ky_offset = 0;
+    ky_offset = kernels[0].y * rank * blocks[0].y * threads[0].y;
 
     for (int j = 0; j < kernels[rank].y; j++) {
-       kx_offset = kernels[0].x*rank;
+       kx_offset = 0;
        for (int i = 0; i < kernels[rank].x; i++) {
            evolve_fv_fluxes<<<blocks[j * kernels[rank].x + i],
                               threads[j * kernels[rank].x + i]>>>(

        }

        // kernels_y-1
        int ny_remaining = ny - threads[0].y * blocks[0].y * (kernels_y - 1);
        for (int i = 0; i < (kernels_x-1); i++) {

            threads[(kernels_y-1)*kernels_x + i].x =

            }
        }
        // bottom-most process
        MPI_Issend(ysbuf, nlayers*nx*ng*4, MPI_FLOAT, rank-1, tag, comm, &request);
        MPI_Recv(yrbuf, nlayers*nx*ng*4, MPI_FLOAT, rank-1, tag, comm, &status);
        MPI_Wait(&request, &status);

