Exemplo n.º 1
0
h5part_int64_t
h5bl_3d_write_scalar_field_r8 (
	h5part_int64_t *f,
	const char *field_name,
	const h5part_float64_t *data,
	const int l_field_name
	) {

	H5PartFile *filehandle = (H5PartFile*)(size_t)*f;

	char *field_name2 =  _H5Part_strdupfor2c ( field_name,  l_field_name );

	h5part_int64_t herr = H5Block3dWriteScalarFieldFloat64 (
		filehandle, field_name2, data );

	free ( field_name2 );
	return herr;
}
Exemplo n.º 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;
}