8 #ifndef OPENFPM_IO_SRC_HDF5_WR_HDF5_WRITER_GD_HPP_ 
    9 #define OPENFPM_IO_SRC_HDF5_WR_HDF5_WRITER_GD_HPP_ 
   12 #include "Packer_Unpacker/Pack_selector.hpp" 
   13 #include "Packer_Unpacker/Packer.hpp" 
   14 #include "Packer_Unpacker/Unpacker.hpp" 
   15 #include "util/GBoxes.hpp" 
   22     template<
typename device_gr
id>
 
   23     inline void save(
const std::string & filename,
 
   61         MPI_Info info  = MPI_INFO_NULL;
 
   65         hid_t plist_id = H5Pcreate(H5P_FILE_ACCESS);
 
   66         H5Pset_fapl_mpio(plist_id, comm, info);
 
   69         hid_t file = H5Fcreate (filename.c_str(), H5F_ACC_TRUNC, H5P_DEFAULT, plist_id);
 
   72         size_t sz = pmem.
size();
 
   80         for (
size_t i = 0; i < sz_others.
size(); i++)
 
   81             sum += sz_others.get(i);
 
   84         hsize_t fdim[1] = {sum};
 
   87         hsize_t fdim2[1] = {(size_t)mpi_size};
 
   90         hid_t file_dataspace_id = H5Screate_simple(1, fdim, NULL);
 
   93         hid_t file_dataspace_id_2 = H5Screate_simple(1, fdim2, NULL);
 
   96         hsize_t mdim[1] = {pmem.
size()};
 
   99         hid_t mem_dataspace_id = H5Screate_simple(1, mdim, NULL);
 
  105         hid_t file_dataset = H5Dcreate (file, 
"grid_dist", H5T_NATIVE_CHAR, file_dataspace_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
  108         hid_t file_dataset_2 = H5Dcreate (file, 
"metadata", H5T_NATIVE_INT, file_dataspace_id_2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
  111         H5Sclose(file_dataspace_id);
 
  112         H5Sclose(file_dataspace_id_2);
 
  114         hsize_t block[1] = {pmem.
size()};
 
  118         hsize_t count[1] = {1};
 
  120         hsize_t offset[1] = {0};
 
  122         for (
int i = 0; i < mpi_rank; i++)
 
  130                 offset[0] += sz_others.get(i);
 
  135         int metadata[mpi_size];
 
  137         for (
int i = 0; i < mpi_size; i++)
 
  138             metadata[i] = sz_others.get(i);
 
  141         file_dataspace_id = H5Dget_space(file_dataset);
 
  142         H5Sselect_hyperslab(file_dataspace_id, H5S_SELECT_SET, offset, NULL, count, block);
 
  144         file_dataspace_id_2 = H5Dget_space(file_dataset_2);
 
  148         plist_id = H5Pcreate(H5P_DATASET_XFER);
 
  149         H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);
 
  152         H5Dwrite(file_dataset, H5T_NATIVE_CHAR, mem_dataspace_id, file_dataspace_id, plist_id, (
const char *)pmem.
getPointer());
 
  155         H5Dwrite(file_dataset_2, H5T_NATIVE_INT, H5S_ALL, file_dataspace_id_2, plist_id, metadata);
 
  169         H5Dclose(file_dataset);
 
  170         H5Sclose(file_dataspace_id);
 
  171         H5Dclose(file_dataset_2);
 
  172         H5Sclose(file_dataspace_id_2);
 
  173         H5Sclose(mem_dataspace_id);
 
size_t getProcessUnitID()
Get the process unit id. 
 
void execute()
Execute all the requests. 
 
MPI_Comm getMPIComm()
Get the MPI_Communicator (or processor group) this VCluster is using. 
 
virtual size_t size() const 
the the size of the allocated memory 
 
This class allocate, and destroy CPU memory. 
 
Implementation of VCluster class. 
 
virtual void * getPointer()
get a readable pointer with the data 
 
This structure store the Box that define the domain inside the Ghost + domain box. 
 
virtual void incRef()
Increment the reference counter. 
 
It model an expression expr1 + ... exprn. 
 
size_t getProcessingUnits()
Get the total number of processors. 
 
bool allGather(T &send, openfpm::vector< T, Mem, gr > &v)
Gather the data from all processors.