Skip to content
Snippets Groups Projects
Select Git revision
  • b1d83081bcfacf2f61fe483e79de17a1ff83ccaf
  • develop default protected
  • feature/variational-hydro
  • origin/stage/bouguettaia
  • feature/gmsh-reader
  • feature/reconstruction
  • save_clemence
  • feature/kinetic-schemes
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

Connectivity.cpp

Blame
  • CheckpointUtils.hpp 2.36 KiB
    #ifndef CHECKPOINT_UTILS_HPP
    #define CHECKPOINT_UTILS_HPP
    
    #include <utils/HighFivePugsUtils.hpp>
    
    #include <language/utils/SymbolTable.hpp>
    #include <mesh/CellType.hpp>
    #include <mesh/ItemValue.hpp>
    
    template <typename DataType>
    PUGS_INLINE void
    write(HighFive::Group& group, const std::string& name, const Array<DataType>& array)
    {
      using data_type = std::remove_const_t<DataType>;
      HighFive::DataSetCreateProps properties;
      properties.add(HighFive::Chunking(std::vector<hsize_t>{std::min(4ul * 1024ul * 1024ul, array.size())}));
      properties.add(HighFive::Shuffle());
      properties.add(HighFive::Deflate(3));
    
      if constexpr (std::is_same_v<CellType, data_type>) {
        auto dataset = group.createDataSet<short>(name, HighFive::DataSpace{std::vector<size_t>{array.size()}}, properties);
        dataset.template write_raw<short>(reinterpret_cast<const short*>(&(array[0])));
      } else if constexpr ((std::is_same_v<CellId, data_type>) or (std::is_same_v<FaceId, data_type>) or
                           (std::is_same_v<EdgeId, data_type>) or (std::is_same_v<NodeId, data_type>)) {
        using base_type = typename data_type::base_type;
        auto dataset =
          group.createDataSet<base_type>(name, HighFive::DataSpace{std::vector<size_t>{array.size()}}, properties);
        dataset.template write_raw<base_type>(reinterpret_cast<const base_type*>(&(array[0])));
      } else {
        auto dataset =
          group.createDataSet<data_type>(name, HighFive::DataSpace{std::vector<size_t>{array.size()}}, properties);
        dataset.template write_raw<data_type>(&(array[0]));
      }
    }
    
    template <typename DataType, ItemType item_type, typename ConnectivityPtr>
    PUGS_INLINE void
    write(HighFive::Group& group,
          const std::string& name,
          const ItemValue<DataType, item_type, ConnectivityPtr>& item_value)
    {
      write(group, name, item_value.arrayView());
    }
    
    void writeMesh(const std::string& symbol_name,
                   const EmbeddedData& embedded_data,
                   HighFive::File& file,
                   HighFive::Group& checkpoint_group,
                   HighFive::Group& symbol_table_group);
    
    void writeIBoundaryDescriptor(const std::string& symbol_name,
                                  const EmbeddedData& embedded_data,
                                  HighFive::File& file,
                                  HighFive::Group& checkpoint_group,
                                  HighFive::Group& symbol_table_group);
    
    #endif   // CHECKPOINT_UTILS_HPP