16 #ifndef dealii_template_constraints_h
17 #define dealii_template_constraints_h
26 #include <type_traits>
41 namespace SupportsOperation
52 template <
class Default,
75 template <
class Default,
template <
class...>
class Op,
class... Args>
102 template <
class Default,
template <
class...>
class Op,
class... Args>
105 template <
template <
class...>
class Op,
class... Args>
108 template <
template <
class...>
class Op,
class... Args>
111 template <
class Default,
template <
class...>
class Op,
class... Args>
114 template <
class Expected,
template <
class...>
class Op,
class... Args>
117 template <
class To,
template <
class...>
class Op,
class... Args>
119 std::is_convertible<
detected_t<Op, Args...>, To>;
157 template <
template <
class...>
class Op,
class... Args>
166 namespace TemplateConstraints
176 template <
bool... Values>
179 static constexpr
bool value = (Values && ...);
187 template <
bool... Values>
190 static constexpr
bool value = (Values || ...);
201 template <
class Base,
class... Derived>
205 std::is_base_of_v<Base, Derived>...>
::value;
216 template <
typename Type,
class... Types>
220 std::is_same_v<Type, Types>...>
::value;
231 template <
typename Type,
class... Types>
235 std::is_same_v<Type, Types>...>
::value;
265 template <
bool... Values>
267 : std::enable_if<internal::TemplateConstraints::all_true<Values...>::value>
297 template <
bool... Values>
306 template <
typename T>
310 template <
typename T>
312 internal::is_supported_operation<begin_and_end_t, T>;
322 template <
typename T>
331 template <
typename ArgType,
typename ValueType>
366 template <
typename T>
380 template <
typename T,
typename U>
402 template <
typename T,
typename U>
405 using type = decltype(std::declval<T>() * std::declval<U>());
458 template <
typename T,
typename U>
472 template <
typename T>
478 template <
typename T,
typename U>
481 using type = std::complex<typename ProductType<T, U>::type>;
484 template <
typename U>
487 using type = std::complex<typename ProductType<double, U>::type>;
490 template <
typename T>
493 using type = std::complex<typename ProductType<T, double>::type>;
496 template <
typename U>
499 using type = std::complex<typename ProductType<float, U>::type>;
502 template <
typename T>
505 using type = std::complex<typename ProductType<T, float>::type>;
567 template <
typename T>
601 template <
typename T>
609 template <
typename Number>
612 template <
typename Number>
617 template <
typename Number>
620 template <
typename Number>
623 namespace distributed
625 template <
typename Number,
typename MemorySpace>
628 template <
typename Number>
633 #ifdef DEAL_II_WITH_PETSC
651 #ifdef DEAL_II_WITH_TRILINOS
663 namespace EpetraWrappers
668 # ifdef DEAL_II_TRILINOS_WITH_TPETRA
669 namespace TpetraWrappers
671 template <
typename Number>
686 #if defined(DEAL_II_HAVE_CXX20) || defined(DOXYGEN)
696 template <
int dim,
int spacedim>
698 (dim >= 1 && spacedim <= 3 && dim <= spacedim);
708 template <
typename T>
711 template <
typename Number>
712 inline constexpr
bool is_dealii_vector_type<::Vector<Number>> =
true;
714 template <
typename Number>
715 inline constexpr
bool is_dealii_vector_type<::BlockVector<Number>> =
718 template <
typename Number>
719 inline constexpr
bool
720 is_dealii_vector_type<::LinearAlgebra::BlockVector<Number>> =
true;
722 template <
typename Number,
typename MemorySpace>
726 template <
typename Number>
730 # ifdef DEAL_II_WITH_PETSC
732 inline constexpr
bool is_dealii_vector_type<::PETScWrappers::Vector> =
736 inline constexpr
bool
737 is_dealii_vector_type<::PETScWrappers::BlockVector> =
true;
740 inline constexpr
bool
741 is_dealii_vector_type<::PETScWrappers::MPI::Vector> =
true;
744 inline constexpr
bool
745 is_dealii_vector_type<::PETScWrappers::MPI::BlockVector> =
true;
748 # ifdef DEAL_II_WITH_TRILINOS
750 inline constexpr
bool
751 is_dealii_vector_type<::TrilinosWrappers::MPI::Vector> =
true;
754 inline constexpr
bool
755 is_dealii_vector_type<::TrilinosWrappers::MPI::BlockVector> =
true;
758 inline constexpr
bool
759 is_dealii_vector_type<::LinearAlgebra::EpetraWrappers::Vector> =
762 # ifdef DEAL_II_TRILINOS_WITH_TPETRA
763 template <
typename Number>
777 template <
typename T>
780 # ifdef DEAL_II_WITH_PETSC
782 inline constexpr
bool
783 is_dealii_petsc_vector_type<::PETScWrappers::VectorBase> =
true;
786 inline constexpr
bool
787 is_dealii_petsc_vector_type<::PETScWrappers::Vector> =
true;
790 inline constexpr
bool
791 is_dealii_petsc_vector_type<::PETScWrappers::BlockVector> =
true;
794 inline constexpr
bool
795 is_dealii_petsc_vector_type<::PETScWrappers::MPI::Vector> =
true;
798 inline constexpr
bool
799 is_dealii_petsc_vector_type<::PETScWrappers::MPI::BlockVector> =
811 template <
typename T>
814 # ifdef DEAL_II_WITH_PETSC
816 inline constexpr
bool
817 is_dealii_petsc_matrix_type<::PETScWrappers::MPI::SparseMatrix> =
838 template <
typename VectorType>
840 internal::is_dealii_vector_type<std::remove_cv_t<VectorType>>;
851 template <
typename VectorType>
853 is_dealii_vector_type<VectorType> && (std::is_const_v<VectorType> ==
false);
863 template <
typename VectorType>
865 internal::is_dealii_petsc_vector_type<VectorType>;
875 template <
typename VectorType>
877 internal::is_dealii_petsc_matrix_type<VectorType>;
882 template <
int dim,
int spacedim>
886 template <
int dim,
int spacedim>
892 namespace distributed
894 template <
int dim,
int spacedim>
900 template <
int dim,
int spacedim>
904 namespace fullydistributed
906 template <
int dim,
int spacedim>
914 #if defined(DEAL_II_HAVE_CXX20) || defined(DOXYGEN)
917 template <
typename T>
920 template <
int dim,
int spacedim>
921 inline constexpr
bool
922 is_triangulation_or_dof_handler<Triangulation<dim, spacedim>> =
true;
924 template <
int dim,
int spacedim>
928 template <
int dim,
int spacedim>
932 template <
int dim,
int spacedim>
936 template <
int dim,
int spacedim>
937 inline constexpr
bool
938 is_triangulation_or_dof_handler<DoFHandler<dim, spacedim>> =
true;
949 template <
typename MeshType>
951 internal::is_triangulation_or_dof_handler<MeshType>;
959 template <
typename VectorType>
963 typename VectorType::value_type a,
964 typename VectorType::value_type
b,
965 typename VectorType::value_type s) {
967 typename VectorType::value_type;
969 typename VectorType::real_type;
999 } -> std::convertible_to<typename VectorType::value_type>;
1003 } -> std::convertible_to<typename VectorType::real_type>;
1007 } -> std::convertible_to<typename VectorType::real_type>;
1011 } -> std::convertible_to<typename VectorType::real_type>;
1016 } -> std::convertible_to<typename VectorType::value_type>;
1019 U.add_and_dot(a,
V, W)
1020 } -> std::convertible_to<typename VectorType::value_type>;
1025 } -> std::convertible_to<typename VectorType::size_type>;
1029 } -> std::same_as<bool>;
#define DEAL_II_DEPRECATED
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
requires((concepts::is_dealii_petsc_vector_type< VectorType >||std::constructible_from< VectorType, Vec >) &&(concepts::is_dealii_petsc_matrix_type< PMatrixType >||std::constructible_from< PMatrixType, Mat >) &&(concepts::is_dealii_petsc_matrix_type< AMatrixType >||std::constructible_from< AMatrixType, Mat >)) class TimeStepper
types::global_dof_index size_type
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
VectorType::value_type * begin(VectorType &V)
VectorType::value_type * end(VectorType &V)
constexpr bool is_dealii_petsc_matrix_type
constexpr bool is_triangulation_or_dof_handler
constexpr bool is_dealii_petsc_vector_type
constexpr bool is_dealii_vector_type
concept is_writable_dealii_vector_type
concept is_triangulation_or_dof_handler
concept is_dealii_vector_type
concept is_dealii_petsc_vector_type
concept is_vector_space_vector
concept is_dealii_petsc_matrix_type
concept is_valid_dim_spacedim
typename detected_or< Default, Op, Args... >::type detected_or_t
std::is_convertible< detected_t< Op, Args... >, To > is_detected_convertible
typename detected_or< nonesuch, Op, Args... >::value_t is_detected
typename detected_or< nonesuch, Op, Args... >::type detected_t
std::is_same< Expected, detected_t< Op, Args... > > is_detected_exact
constexpr bool is_supported_operation
static bool equal(const T *p1, const T *p2)
static bool equal(const T *, const U *)
typename internal::ProductTypeImpl< std::decay_t< T >, std::decay_t< U > >::type type
static constexpr bool value
ValueType operator()(const ArgType &)
std::complex< typename ProductType< double, U >::type > type
std::complex< typename ProductType< float, U >::type > type
std::complex< typename ProductType< T, double >::type > type
std::complex< typename ProductType< T, float >::type > type
std::complex< typename ProductType< T, U >::type > type
decltype(std::declval< T >() *std::declval< U >()) type
void operator=(const nonesuch &)=delete
nonesuch(const nonesuch &)=delete
static constexpr bool value
static constexpr bool value
static constexpr bool value
static constexpr bool value
typename enable_if_all< Values... >::type enable_if_all_t
decltype(std::begin(std::declval< T >()), std::end(std::declval< T >())) begin_and_end_t
constexpr bool has_begin_and_end