Concepts#

Reduced State#

template<class T, class = void>
struct ReducedState : std::false_type{};

   >
  > : std::true_type{};

Subspaces#

template<class T, class = void>
#endif

// ----------------------------------------------------------------------------
// SUBSPACES
// ----------------------------------------------------------------------------
template<class T, class enable = void>
struct VectorSubspace: std::false_type{};

template<class T>
struct VectorSubspace<
  T,
  std::enable_if_t<
    std::is_copy_constructible<T>::value
    && ::pressio::has_basis_matrix_typedef<T>::value
    && std::is_copy_constructible<typename T::basis_matrix_type>::value
    && all_have_traits<typename T::basis_matrix_type>::value
    && Traits<typename T::basis_matrix_type>::rank == 2
    && !std::is_assignable<T&, T>::value
    && !std::is_assignable<T&, T&>::value
    //
    && std::is_same<
      decltype( std::declval<T const>().basis() ),
      const typename T::basis_matrix_type &
      >::value
    && std::is_integral<
      decltype( std::declval<T const>().dimension() )
      >::value
    && std::is_same<
      decltype( std::declval<T const>().isColumnSpace() ),
      bool
      >::value
    && std::is_same<
      decltype( std::declval<T const>().isRowSpace() ),
      bool
      >::value
   >
  > : std::true_type{};


template<class T, class enable = void>
struct PossiblyAffineTrialColumnSubspace : std::false_type{};

template<class T>
struct PossiblyAffineTrialColumnSubspace<
  T,
  std::enable_if_t<
    ::pressio::has_reduced_state_typedef<T>::value
    && ReducedState<typename T::reduced_state_type>::value
    && ::pressio::has_basis_matrix_typedef<T>::value
    && ::pressio::has_full_state_typedef<T>::value
    && std::is_copy_constructible< typename T::full_state_type>::value
    && std::is_copy_constructible< typename T::basis_matrix_type>::value
    && all_have_traits<
      typename T::reduced_state_type,
      typename T::full_state_type,
      typename T::basis_matrix_type>::value
    && Traits<typename T::full_state_type>::rank == 1
    && Traits<typename T::basis_matrix_type>::rank == 2
    /**/
   >
  > : std::true_type{};

FOM Systems#

template<class T, class = void>
    && std::is_same<
        decltype( std::declval<T const>().basis() ),
        const typename T::basis_matrix_type &
      >::value
    && std::is_integral<
      decltype( std::declval<T const>().dimension() )
      >::value
    //
    && std::is_same<
      decltype( std::declval<T const>().isColumnSpace() ),
      bool
      >::value
    && std::is_same<
      decltype( std::declval<T const>().isRowSpace() ),
      bool
      >::value
    >
  > : std::true_type{};


template<class T, class enable = void>
struct PossiblyAffineRealValuedTrialColumnSubspace: std::false_type{};

template<class T>
struct PossiblyAffineRealValuedTrialColumnSubspace<
  T,
  std::enable_if_t<
  PossiblyAffineTrialColumnSubspace<T>::value
  && std::is_floating_point< scalar_trait_t<typename T::reduced_state_type> >::value
  && std::is_floating_point< scalar_trait_t<typename T::full_state_type> >::value
  && std::is_floating_point< scalar_trait_t<typename T::basis_matrix_type> >::value
  >
> : std::true_type{};


// ----------------------------------------------------------------------------
// VARIOUS
// ----------------------------------------------------------------------------
template <class T, class MaskerType, class = void>
struct MaskableWith : std::false_type{};

template <class T, class MaskerType>
struct MaskableWith<
  T, MaskerType,
  std::enable_if_t<
    std::is_copy_constructible<
      decltype
      (std::declval<MaskerType const>().createResultOfMaskActionOn
       (std::declval<T const &>())
       )
    >::value
    && std::is_void<
	decltype
	(
	 std::declval<MaskerType const>()
	 (
	   std::declval<T const &>(),
	   std::declval<impl::mask_action_t<MaskerType, T> &>()
	 )
	)
       >::value
  >
> : std::true_type{};

// ----------------------------------------------------------------------------
// SYSTEMS
// ----------------------------------------------------------------------------

template<class T, class JacobianActionOperandType, class enable = void>
struct SteadyFomWithJacobianAction : std::false_type{};

template<class T, class JacobianActionOperandType>
struct SteadyFomWithJacobianAction<
  T, JacobianActionOperandType,
  std::enable_if_t<
       ::pressio::has_state_typedef<T>::value
    && ::pressio::has_residual_typedef<T>::value
    && std::is_copy_constructible<typename T::state_type>::value
    && std::is_copy_constructible<typename T::residual_type>::value
    /**/
    && ::pressio::rom::has_const_create_residual_method_return_result<
	 T, typename T::residual_type >::value
    && ::pressio::rom::has_const_create_result_of_jacobian_action_on<
	 T, JacobianActionOperandType>::value
    && std::is_copy_constructible<
	 impl::fom_jac_action_t<T, JacobianActionOperandType>
	 >::value
    /**/
    && std::is_void<
      decltype
      (
       std::declval<T const>().residualAndJacobianAction
       (
	std::declval<typename T::state_type const&>(),
	std::declval<typename T::residual_type &>(),
	std::declval<JacobianActionOperandType const&>(),
	std::declval< std::optional<impl::fom_jac_action_t<T, JacobianActionOperandType> *> >()
	)
       )
    >::value
   >
  > : std::true_type{};

template<class T, class enable = void>
struct SemiDiscreteFom : std::false_type{};
   >
  > : std::true_type{};

Real-valued FOM Systems Refinements#

template<class T, class = void>
  T,
  std::enable_if_t<
       ::pressio::has_time_typedef<T>::value
    && ::pressio::has_state_typedef<T>::value
    && ::pressio::has_rhs_typedef<T>::value
    && std::is_copy_constructible<typename T::state_type>::value
    && std::is_copy_constructible<typename T::rhs_type>::value
    && ::pressio::ode::has_const_create_rhs_method_return_result<
      T, typename T::rhs_type >::value
    && ::pressio::rom::has_const_rhs_method_accept_state_indvar_result_return_void<
      T, typename T::state_type, typename T::time_type, typename T::rhs_type>::value
   >
  > : std::true_type{};


template<class T, class MassMatrixActionOperandType, class enable = void>
struct SemiDiscreteFomWithMassMatrixAction : std::false_type{};

template<class T, class MassMatrixActionOperandType>
struct SemiDiscreteFomWithMassMatrixAction<
  T, MassMatrixActionOperandType,
  std::enable_if_t<
    SemiDiscreteFom<T>::value
    //
    && std::is_copy_constructible<
      decltype
      (
       std::declval<T const>().createResultOfMassMatrixActionOn
       (
	std::declval<MassMatrixActionOperandType const &>()
	)
       )
      >::value
    && std::is_void<
       decltype
       (
	std::declval<T const>().applyMassMatrix
	(
	 std::declval<typename T::state_type const&>(),
	 std::declval<MassMatrixActionOperandType const&>(),
	 std::declval<typename T::time_type const &>(),
	 std::declval<impl::fom_mass_matrix_action_t<T,  MassMatrixActionOperandType> &>()
	 )
	)
       >::value
   >
   >
  > : std::true_type{};

Others#

template<class T, class = void>
    && has_const_create_reduced_state_return_result<T>::value
    && has_const_create_full_state_return_result<T>::value
    && has_const_create_full_state_from_reduced_state<T>::value
    /**/
    && has_const_map_from_reduced_state_return_void<T>::value
    && std::is_same<
      decltype( std::declval<T const>().basisOfTranslatedSpace() ),
      typename T::basis_matrix_type const &
      >::value
    && std::is_same<
   >
  > : std::true_type{};