Example #1
0
void initialise_chunk()
{

  int x_cells = grid.x_cells;
  int y_cells = grid.y_cells;
  int z_cells = grid.z_cells;
  int x_min = field.x_min;
  int x_max = field.x_max;
  int y_min = field.y_min;
  int y_max = field.y_max;
  int z_min = field.z_min;
  int z_max = field.z_max;

  int rangex[] = {x_min-2, x_max+3, y_min-2, y_max+3, z_min-2, z_max+3};
  int rangey[] = {x_min-2, x_max+3, y_min-2, y_max+3, z_min-2, z_max+3};
  int rangez[] = {x_min-2, x_max+3, y_min-2, y_max+3, z_min-2, z_max+3};

  int rangefull[] = {-2, x_cells+8, -2, y_cells+8, -2, z_cells+8};

  ops_par_loop_initialise_chunk_kernel_xx("initialise_chunk_kernel_xx", clover_grid, 3, rangefull,
               ops_arg_dat(xx, S3D_000_STRID3D_X, "int", OPS_WRITE),
               ops_arg_idx());

  ops_par_loop_initialise_chunk_kernel_yy("initialise_chunk_kernel_yy", clover_grid, 3, rangefull,
               ops_arg_dat(yy, S3D_000_STRID3D_Y, "int", OPS_WRITE),
               ops_arg_idx());

  ops_par_loop_initialise_chunk_kernel_zz("initialise_chunk_kernel_zz", clover_grid, 3, rangefull,
               ops_arg_dat(zz, S3D_000_STRID3D_Z, "int", OPS_WRITE),
               ops_arg_idx());

  ops_par_loop_initialise_chunk_kernel_x("initialise_chunk_kernel_x", clover_grid, 3, rangex,
               ops_arg_dat(vertexx, S3D_000_STRID3D_X, "double", OPS_WRITE),
               ops_arg_dat(xx, S3D_000_STRID3D_X, "int", OPS_READ),
               ops_arg_dat(vertexdx, S3D_000_STRID3D_X, "double", OPS_WRITE));

  ops_par_loop_initialise_chunk_kernel_y("initialise_chunk_kernel_y", clover_grid, 3, rangey,
               ops_arg_dat(vertexy, S3D_000_STRID3D_Y, "double", OPS_WRITE),
               ops_arg_dat(yy, S3D_000_STRID3D_Y, "int", OPS_READ),
               ops_arg_dat(vertexdy, S3D_000_STRID3D_Y, "double", OPS_WRITE));

  ops_par_loop_initialise_chunk_kernel_z("initialise_chunk_kernel_z", clover_grid, 3, rangez,
               ops_arg_dat(vertexz, S3D_000_STRID3D_Z, "double", OPS_WRITE),
               ops_arg_dat(zz, S3D_000_STRID3D_Z, "int", OPS_READ),
               ops_arg_dat(vertexdz, S3D_000_STRID3D_Z, "double", OPS_WRITE));

  rangex[0] = x_min-2; rangex[1] = x_max+2;
  ops_par_loop_initialise_chunk_kernel_cellx("initialise_chunk_kernel_cellx", clover_grid, 3, rangex,
               ops_arg_dat(vertexx, S3D_000_P100_STRID3D_X, "double", OPS_READ),
               ops_arg_dat(cellx, S3D_000_STRID3D_X, "double", OPS_WRITE),
               ops_arg_dat(celldx, S3D_000_STRID3D_X, "double", OPS_WRITE));

  rangey[2] = y_min-2; rangey[3] = y_max+2;
  ops_par_loop_initialise_chunk_kernel_celly("initialise_chunk_kernel_celly", clover_grid, 3, rangey,
               ops_arg_dat(vertexy, S3D_000_0P10_STRID3D_Y, "double", OPS_READ),
               ops_arg_dat(celly, S3D_000_STRID3D_Y, "double", OPS_WRITE),
               ops_arg_dat(celldy, S3D_000_STRID3D_Y, "double", OPS_WRITE));

  rangez[4] = z_min-2; rangez[5] = z_max+2;
  ops_par_loop_initialise_chunk_kernel_cellz("initialise_chunk_kernel_cellz", clover_grid, 3, rangez,
               ops_arg_dat(vertexz, S3D_000_00P1_STRID3D_Z, "double", OPS_READ),
               ops_arg_dat(cellz, S3D_000_STRID3D_Z, "double", OPS_WRITE),
               ops_arg_dat(celldz, S3D_000_STRID3D_Z, "double", OPS_WRITE));

  int rangexyz[] = {x_min-2,x_max+2,y_min-2,y_max+2,z_min-2,z_max+2};
  ops_par_loop_initialise_chunk_kernel_volume("initialise_chunk_kernel_volume", clover_grid, 3, rangexyz,
               ops_arg_dat(volume, S3D_000, "double", OPS_WRITE),
               ops_arg_dat(celldy, S3D_000_STRID3D_Y, "double", OPS_READ),
               ops_arg_dat(xarea, S3D_000, "double", OPS_WRITE),
               ops_arg_dat(celldx, S3D_000_STRID3D_X, "double", OPS_READ),
               ops_arg_dat(yarea, S3D_000, "double", OPS_WRITE),
               ops_arg_dat(celldz, S3D_000_STRID3D_Z, "double", OPS_READ),
               ops_arg_dat(zarea, S3D_000, "double", OPS_WRITE));
}
void initialise_chunk() {

  int x_cells = grid.x_cells;
  int y_cells = grid.y_cells;
  int x_min = field.x_min;
  int x_max = field.x_max;
  int y_min = field.y_min;
  int y_max = field.y_max;

  int range[] = {x_min, x_max, y_min, y_max};
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(density, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(energy0, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(energy1, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(u, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(u0, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_r, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_rstore, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_rtemp, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_Mi, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_w, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_z, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_utemp, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_Kx, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_Ky, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_p, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(vector_sd, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(tri_cp, 1, S2D_00, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, range,
      ops_arg_dat(tri_bfp, 1, S2D_00, "double", OPS_WRITE));

  int rangefull1[] = {-2, x_cells + 2, -2, y_cells + 2};
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, rangefull1,
      ops_arg_dat(volume, 1, S2D_00, "double", OPS_WRITE));
  int rangefull2[] = {-2, x_cells + 3, -2, y_cells + 2};
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, rangefull2,
      ops_arg_dat(xarea, 1, S2D_00, "double", OPS_WRITE));
  int rangefull3[] = {-2, x_cells + 2, -2, y_cells + 3};
  ops_par_loop_initialise_chunk_kernel_zero(
      "initialise_chunk_kernel_zero", tea_grid, 2, rangefull3,
      ops_arg_dat(yarea, 1, S2D_00, "double", OPS_WRITE));

  int rangex[] = {x_min - 2, x_max + 2, y_min - 2, y_max + 2};
  ops_par_loop_initialise_chunk_kernel_zero_x(
      "initialise_chunk_kernel_zero_x", tea_grid, 2, rangex,
      ops_arg_dat(cellx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero_x(
      "initialise_chunk_kernel_zero_x", tea_grid, 2, rangex,
      ops_arg_dat(celldx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE));
  rangex[1]++;
  ops_par_loop_initialise_chunk_kernel_zero_x(
      "initialise_chunk_kernel_zero_x", tea_grid, 2, rangex,
      ops_arg_dat(vertexx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero_x(
      "initialise_chunk_kernel_zero_x", tea_grid, 2, rangex,
      ops_arg_dat(vertexdx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE));

  int rangey2[] = {x_min - 2, x_max + 2, y_min - 2, y_max + 2};
  ops_par_loop_initialise_chunk_kernel_zero_y(
      "initialise_chunk_kernel_zero_y", tea_grid, 2, rangey2,
      ops_arg_dat(celly, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero_y(
      "initialise_chunk_kernel_zero_y", tea_grid, 2, rangey2,
      ops_arg_dat(celldy, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE));
  rangey2[3]++;
  ops_par_loop_initialise_chunk_kernel_zero_y(
      "initialise_chunk_kernel_zero_y", tea_grid, 2, rangey2,
      ops_arg_dat(vertexy, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE));
  ops_par_loop_initialise_chunk_kernel_zero_y(
      "initialise_chunk_kernel_zero_y", tea_grid, 2, rangey2,
      ops_arg_dat(vertexdy, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE));

  int rangefull[] = {x_min - 2, x_max + 3, y_min - 2, y_max + 3};
  ops_execute();

  ops_par_loop_initialise_chunk_kernel_xx(
      "initialise_chunk_kernel_xx", tea_grid, 2, rangefull,
      ops_arg_dat(xx, 1, S2D_00_STRID2D_X, "int", OPS_WRITE), ops_arg_idx());

  ops_par_loop_initialise_chunk_kernel_yy(
      "initialise_chunk_kernel_yy", tea_grid, 2, rangefull,
      ops_arg_dat(yy, 1, S2D_00_STRID2D_Y, "int", OPS_WRITE), ops_arg_idx());

  ops_par_loop_initialise_chunk_kernel_x(
      "initialise_chunk_kernel_x", tea_grid, 2, rangex,
      ops_arg_dat(vertexx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE),
      ops_arg_dat(xx, 1, S2D_00_STRID2D_X, "int", OPS_READ),
      ops_arg_dat(vertexdx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE));

  ops_par_loop_initialise_chunk_kernel_y(
      "initialise_chunk_kernel_y", tea_grid, 2, rangey2,
      ops_arg_dat(vertexy, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE),
      ops_arg_dat(yy, 1, S2D_00_STRID2D_Y, "int", OPS_READ),
      ops_arg_dat(vertexdy, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE));

  rangex[0] = x_min - 2;
  rangex[1] = x_max + 2;
  rangex[2] = y_min - 2;
  rangex[3] = y_max + 2;
  ops_par_loop_initialise_chunk_kernel_cellx(
      "initialise_chunk_kernel_cellx", tea_grid, 2, rangex,
      ops_arg_dat(vertexx, 1, S2D_00_P10_STRID2D_X, "double", OPS_READ),
      ops_arg_dat(cellx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE),
      ops_arg_dat(celldx, 1, S2D_00_STRID2D_X, "double", OPS_WRITE));

  int rangey[] = {x_min - 2, x_max + 3, y_min - 2, y_max + 2};
  ops_par_loop_initialise_chunk_kernel_celly(
      "initialise_chunk_kernel_celly", tea_grid, 2, rangey,
      ops_arg_dat(vertexy, 1, S2D_00_0P1_STRID2D_Y, "double", OPS_READ),
      ops_arg_dat(celly, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE),
      ops_arg_dat(celldy, 1, S2D_00_STRID2D_Y, "double", OPS_WRITE));

  int rangexy[] = {x_min - 2, x_max + 2, y_min - 2, y_max + 2};
  ops_par_loop_initialise_chunk_kernel_volume(
      "initialise_chunk_kernel_volume", tea_grid, 2, rangexy,
      ops_arg_dat(volume, 1, S2D_00, "double", OPS_WRITE),
      ops_arg_dat(celldy, 1, S2D_00_STRID2D_Y, "double", OPS_READ),
      ops_arg_dat(xarea, 1, S2D_00, "double", OPS_WRITE),
      ops_arg_dat(celldx, 1, S2D_00_STRID2D_X, "double", OPS_READ),
      ops_arg_dat(yarea, 1, S2D_00, "double", OPS_WRITE));
}