Skip to content
Snippets Groups Projects
Select Git revision
  • bc8f449db724ce6b01c96e22fbd5ee520620d90b
  • 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

RefFaceList.hpp

Blame
  • DiamondDualConnectivityManager.cpp 3.85 KiB
    #include <utils/PugsAssert.hpp>
    
    #include <mesh/Connectivity.hpp>
    #include <mesh/ConnectivityToDiamondDualConnectivityDataMapper.hpp>
    #include <mesh/DiamondDualConnectivityBuilder.hpp>
    #include <mesh/DiamondDualConnectivityManager.hpp>
    #include <utils/Exceptions.hpp>
    
    #include <sstream>
    
    DiamondDualConnectivityManager* DiamondDualConnectivityManager::m_instance{nullptr};
    
    void
    DiamondDualConnectivityManager::create()
    {
      Assert(m_instance == nullptr, "DiamondDualConnectivityManager is already created");
      m_instance = new DiamondDualConnectivityManager;
    }
    
    void
    DiamondDualConnectivityManager::destroy()
    {
      Assert(m_instance != nullptr, "DiamondDualConnectivityManager was not created!");
    
      if (m_instance->m_connectivity_to_diamond_dual_connectivity_info_map.size() > 0) {
        std::stringstream error;
        error << ": some connectivities are still registered\n";
        for (const auto& [connectivity, diamond_dual_connectivity_info] :
             m_instance->m_connectivity_to_diamond_dual_connectivity_info_map) {
          error << " - connectivity " << rang::fgB::magenta << connectivity << rang::style::reset << '\n';
        }
        throw UnexpectedError(error.str());
      }
      delete m_instance;
      m_instance = nullptr;
    }
    
    void
    DiamondDualConnectivityManager::deleteConnectivity(const IConnectivity* p_connectivity)
    {
      m_connectivity_to_diamond_dual_connectivity_info_map.erase(p_connectivity);
    }
    
    DiamondDualConnectivityManager::DiamondDualConnectivityInfo
    DiamondDualConnectivityManager::_getDiamondDualConnectivityInfo(const IConnectivity& connectivity)
    {
      const IConnectivity* p_connectivity = &connectivity;
    
      if (auto i_connectivity = m_connectivity_to_diamond_dual_connectivity_info_map.find(p_connectivity);
          i_connectivity != m_connectivity_to_diamond_dual_connectivity_info_map.end()) {
        return i_connectivity->second;
      } else {
        DiamondDualConnectivityBuilder builder{connectivity};
    
        DiamondDualConnectivityInfo connectivity_info{builder.connectivity(), builder.mapper()};
    
        m_connectivity_to_diamond_dual_connectivity_info_map[p_connectivity] = connectivity_info;
    
        return connectivity_info;
      }
    }
    
    template <size_t Dimension>
    std::shared_ptr<const Connectivity<Dimension>>
    DiamondDualConnectivityManager::getDiamondDualConnectivity(const Connectivity<Dimension>& connectivity)
    {
      return std::dynamic_pointer_cast<const Connectivity<Dimension>>(
        this->_getDiamondDualConnectivityInfo(connectivity).diamondDualConnectivity());
    }
    
    template <size_t Dimension>
    std::shared_ptr<const ConnectivityToDiamondDualConnectivityDataMapper<Dimension>>
    DiamondDualConnectivityManager::getConnectivityToDiamondDualConnectivityDataMapper(
      const Connectivity<Dimension>& connectivity)
    {
      return std::dynamic_pointer_cast<const ConnectivityToDiamondDualConnectivityDataMapper<Dimension>>(
        this->_getDiamondDualConnectivityInfo(connectivity).connectivityToDiamondDualConnectivityDataMapper());
    }
    
    template std::shared_ptr<const Connectivity<1>> DiamondDualConnectivityManager::getDiamondDualConnectivity(
      const Connectivity<1>& connectivity);
    
    template std::shared_ptr<const Connectivity<2>> DiamondDualConnectivityManager::getDiamondDualConnectivity(
      const Connectivity<2>& connectivity);
    
    template std::shared_ptr<const Connectivity<3>> DiamondDualConnectivityManager::getDiamondDualConnectivity(
      const Connectivity<3>& connectivity);
    
    template std::shared_ptr<const ConnectivityToDiamondDualConnectivityDataMapper<1>>
    DiamondDualConnectivityManager::getConnectivityToDiamondDualConnectivityDataMapper(const Connectivity<1>&);
    
    template std::shared_ptr<const ConnectivityToDiamondDualConnectivityDataMapper<2>>
    DiamondDualConnectivityManager::getConnectivityToDiamondDualConnectivityDataMapper(const Connectivity<2>&);
    
    template std::shared_ptr<const ConnectivityToDiamondDualConnectivityDataMapper<3>>
    DiamondDualConnectivityManager::getConnectivityToDiamondDualConnectivityDataMapper(const Connectivity<3>&);