示例#1
0
/****if* H5Pf/h5pget_mpio_actual_io_mode_c
 * NAME
 *  h5pget_mpio_actual_io_mode_c
 * PURPOSE
 *  Calls H5Pget_mpio_actual_io_mode
 *
 * INPUTS
 *  dxpl_id        - Dataset transfer property list identifier.
 * OUTPUTS
 *  actual_io_mode - The type of I/O performed by this process.
 *
 * RETURNS
 *  0 on success, -1 on failure
 * AUTHOR
 *  M. Scot Breitenfeld
 *  July 27, 2012
 * SOURCE
*/
int_f
nh5pget_mpio_actual_io_mode_c(hid_t_f *dxpl_id, int_f *actual_io_mode)
/******/
{
  int ret_value = -1;
  H5D_mpio_actual_io_mode_t c_actual_io_mode;

  /*
   * Call H5Pget_mpio_actual_io_mode_f function.
   */
  if( (H5Pget_mpio_actual_io_mode((hid_t)*dxpl_id, &c_actual_io_mode)) <0 )
    return ret_value; /* error occurred */

  *actual_io_mode =(int_f)c_actual_io_mode;

  ret_value = 0;
  return ret_value;
}
示例#2
0
void H5output::WriteFields(double ***field, std::string fname, int nx, int ny, int nz, int rank){

  h5_float64_t*     buffer;

  buffer = new h5_float64_t[nz*ny*nx];

  std::ofstream myfile;

  if (rank!=-1) {
    std::stringstream  ss;
    ss << "proc-" << rank << ".txt";
    std::string filename = ss.str();
    myfile.open(filename.c_str());
  }

  int n = 0;
  for (int k=1; k<nz-1; k++) {
    for (int j=1; j<ny-1; j++) {
      for (int i=1; i<nx-1; i++) {
        buffer[n++] = field[i][j][k];
        if (rank!=-1) myfile << i << " " << j << " " << k << " : " << field[i][j][k] << std::endl;
      }
    }
  }
  if (rank!=-1) myfile.close();

  H5Block3dWriteScalarFieldFloat64(fldsfile, fname.c_str(), buffer);

  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
  if(!rank)
  {
    // show the output mode that is actually being used
    H5D_mpio_actual_io_mode_t actual_io_mode;
    H5Pget_mpio_actual_io_mode(fldsfile->xfer_prop, &actual_io_mode);
    if(actual_io_mode == H5D_MPIO_NO_COLLECTIVE)
      printf("H5D_MPIO_NO_COLLECTIVE\n");
    else if(actual_io_mode == H5D_MPIO_CHUNK_INDEPENDENT)
      printf("H5D_MPIO_CHUNK_INDEPENDENT\n");
    else if(actual_io_mode == H5D_MPIO_CHUNK_COLLECTIVE)
      printf("H5D_MPIO_CHUNK_COLLECTIVE\n");
    else if(actual_io_mode == H5D_MPIO_CONTIGUOUS_COLLECTIVE)
      printf("H5D_MPIO_CONTIGUOUS_COLLECTIVE\n");
    else
      printf("unrecognized output method\n");

    // show the chunking that is actually used
    H5D_mpio_actual_chunk_opt_mode_t actual_chunk_opt_mode;
    H5Pget_mpio_actual_chunk_opt_mode(fldsfile->xfer_prop, &actual_chunk_opt_mode);
    if(actual_chunk_opt_mode == H5D_MPIO_NO_CHUNK_OPTIMIZATION)
      printf("H5D_MPIO_NO_CHUNK_OPTIMIZATION\n");
    else if(actual_chunk_opt_mode == H5D_MPIO_MULTI_CHUNK)
      printf("H5D_MPIO_MULTI_CHUNK\n");
    //else if(actual_chunk_opt_mode == H5D_MPIO_MULTI_CHUNK_NO_OPT)
    //  printf("H5D_MPIO_MULTI_CHUNK_NO_OPT\n");
    else if(actual_chunk_opt_mode == H5D_MPIO_LINK_CHUNK)
      printf("H5D_MPIO_LINK_CHUNK\n");
    else
      printf("unrecognized chunking method\n");
  }

  delete [] buffer;
}