Skip to content
Snippets Groups Projects
Select Git revision
  • 068152db19eb2e74b77323057cc1293fc479d388
  • develop default protected
  • origin/stage/bouguettaia
  • feature/kinetic-schemes
  • feature/reconstruction
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/variational-hydro
  • 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
  • feature/escobar-smoother
  • feature/hypoelasticity-clean
  • 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

MutableDiscreteFunctionDPkVariant.hpp

Blame
  • MutableDiscreteFunctionDPkVariant.hpp 6.52 KiB
    #ifndef MUTABLE_DISCRETE_FUNCTION_D_PK_VARIANT_HPP
    #define MUTABLE_DISCRETE_FUNCTION_D_PK_VARIANT_HPP
    
    #include <scheme/DiscreteFunctionDPk.hpp>
    #include <scheme/PolynomialReconstruction.hpp>
    
    #include <variant>
    
    class PolynomialReconstruction::MutableDiscreteFunctionDPkVariant
    {
     public:
      using Variant = std::variant<DiscreteFunctionDPk<1, double>,
                                   DiscreteFunctionDPk<1, TinyVector<1>>,
                                   DiscreteFunctionDPk<1, TinyVector<2>>,
                                   DiscreteFunctionDPk<1, TinyVector<3>>,
                                   DiscreteFunctionDPk<1, TinyMatrix<1>>,
                                   DiscreteFunctionDPk<1, TinyMatrix<2>>,
                                   DiscreteFunctionDPk<1, TinyMatrix<3>>,
    
                                   DiscreteFunctionDPk<2, double>,
                                   DiscreteFunctionDPk<2, TinyVector<1>>,
                                   DiscreteFunctionDPk<2, TinyVector<2>>,
                                   DiscreteFunctionDPk<2, TinyVector<3>>,
                                   DiscreteFunctionDPk<2, TinyMatrix<1>>,
                                   DiscreteFunctionDPk<2, TinyMatrix<2>>,
                                   DiscreteFunctionDPk<2, TinyMatrix<3>>,
    
                                   DiscreteFunctionDPk<3, double>,
                                   DiscreteFunctionDPk<3, TinyVector<1>>,
                                   DiscreteFunctionDPk<3, TinyVector<2>>,
                                   DiscreteFunctionDPk<3, TinyVector<3>>,
                                   DiscreteFunctionDPk<3, TinyMatrix<1>>,
                                   DiscreteFunctionDPk<3, TinyMatrix<2>>,
                                   DiscreteFunctionDPk<3, TinyMatrix<3>>,
    
                                   DiscreteFunctionDPkVector<1, double>,
                                   DiscreteFunctionDPkVector<1, TinyVector<1>>,
                                   DiscreteFunctionDPkVector<1, TinyVector<2>>,
                                   DiscreteFunctionDPkVector<1, TinyVector<3>>,
                                   DiscreteFunctionDPkVector<1, TinyMatrix<1>>,
                                   DiscreteFunctionDPkVector<1, TinyMatrix<2>>,
                                   DiscreteFunctionDPkVector<1, TinyMatrix<3>>,
    
                                   DiscreteFunctionDPkVector<2, double>,
                                   DiscreteFunctionDPkVector<2, TinyVector<1>>,
                                   DiscreteFunctionDPkVector<2, TinyVector<2>>,
                                   DiscreteFunctionDPkVector<2, TinyVector<3>>,
                                   DiscreteFunctionDPkVector<2, TinyMatrix<1>>,
                                   DiscreteFunctionDPkVector<2, TinyMatrix<2>>,
                                   DiscreteFunctionDPkVector<2, TinyMatrix<3>>,
    
                                   DiscreteFunctionDPkVector<3, double>,
                                   DiscreteFunctionDPkVector<3, TinyVector<1>>,
                                   DiscreteFunctionDPkVector<3, TinyVector<2>>,
                                   DiscreteFunctionDPkVector<3, TinyVector<3>>,
                                   DiscreteFunctionDPkVector<3, TinyMatrix<1>>,
                                   DiscreteFunctionDPkVector<3, TinyMatrix<2>>,
                                   DiscreteFunctionDPkVector<3, TinyMatrix<3>>>;
    
     private:
      Variant m_mutable_discrete_function_dpk;
    
     public:
      PUGS_INLINE
      const Variant&
      mutableDiscreteFunctionDPk() const
      {
        return m_mutable_discrete_function_dpk;
      }
    
      template <typename DiscreteFunctionDPkT>
      PUGS_INLINE auto&&
      get() const
      {
        static_assert(is_discrete_function_dpk_v<DiscreteFunctionDPkT>, "invalid template argument");
    #ifndef NDEBUG
        if (not std::holds_alternative<DiscreteFunctionDPkT>(this->m_mutable_discrete_function_dpk)) {
          std::ostringstream error_msg;
          error_msg << "invalid discrete function type\n";
          error_msg << "- required " << rang::fgB::red << demangle<DiscreteFunctionDPkT>() << rang::fg::reset << '\n';
          error_msg << "- contains " << rang::fgB::yellow
                    << std::visit([](auto&& f) -> std::string { return demangle<decltype(f)>(); },
                                  this->m_mutable_discrete_function_dpk)
                    << rang::fg::reset;
          throw NormalError(error_msg.str());
        }
    #endif   // NDEBUG
    
        return std::get<DiscreteFunctionDPkT>(this->mutableDiscreteFunctionDPk());
      }
    
      template <size_t Dimension, typename DataType>
      MutableDiscreteFunctionDPkVariant(const DiscreteFunctionDPk<Dimension, DataType>& discrete_function_dpk)
        : m_mutable_discrete_function_dpk{discrete_function_dpk}
      {
        static_assert(std::is_same_v<DataType, double> or                       //
                        std::is_same_v<DataType, TinyVector<1, double>> or      //
                        std::is_same_v<DataType, TinyVector<2, double>> or      //
                        std::is_same_v<DataType, TinyVector<3, double>> or      //
                        std::is_same_v<DataType, TinyMatrix<1, 1, double>> or   //
                        std::is_same_v<DataType, TinyMatrix<2, 2, double>> or   //
                        std::is_same_v<DataType, TinyMatrix<3, 3, double>>,
                      "DiscreteFunctionDPk with this DataType is not allowed in variant");
      }
    
      template <size_t Dimension, typename DataType>
      MutableDiscreteFunctionDPkVariant(const DiscreteFunctionDPkVector<Dimension, DataType>& discrete_function_dpk)
        : m_mutable_discrete_function_dpk{discrete_function_dpk}
      {
        static_assert(std::is_same_v<DataType, double> or                       //
                        std::is_same_v<DataType, TinyVector<1, double>> or      //
                        std::is_same_v<DataType, TinyVector<2, double>> or      //
                        std::is_same_v<DataType, TinyVector<3, double>> or      //
                        std::is_same_v<DataType, TinyMatrix<1, 1, double>> or   //
                        std::is_same_v<DataType, TinyMatrix<2, 2, double>> or   //
                        std::is_same_v<DataType, TinyMatrix<3, 3, double>>,
                      "DiscreteFunctionDPkVector with this DataType is not allowed in variant");
      }
    
      MutableDiscreteFunctionDPkVariant& operator=(MutableDiscreteFunctionDPkVariant&&)      = default;
      MutableDiscreteFunctionDPkVariant& operator=(const MutableDiscreteFunctionDPkVariant&) = default;
    
      MutableDiscreteFunctionDPkVariant(const MutableDiscreteFunctionDPkVariant&) = default;
      MutableDiscreteFunctionDPkVariant(MutableDiscreteFunctionDPkVariant&&)      = default;
    
      MutableDiscreteFunctionDPkVariant()  = delete;
      ~MutableDiscreteFunctionDPkVariant() = default;
    };
    
    #endif   // MUTABLE_DISCRETE_FUNCTION_D_PK_VARIANT_HPP