13#ifndef dealii_template_constraints_h
14#define dealii_template_constraints_h
42 namespace SupportsOperation
53 template <
class Default,
76 template <
class Default,
template <
class...>
class Op,
class... Args>
103 template <
class Default,
template <
class...>
class Op,
class... Args>
106 template <
template <
class...>
class Op,
class... Args>
109 template <
template <
class...>
class Op,
class... Args>
112 template <
class Default,
template <
class...>
class Op,
class... Args>
115 template <
class Expected,
template <
class...>
class Op,
class... Args>
118 template <
class To,
template <
class...>
class Op,
class... Args>
120 std::is_convertible<
detected_t<Op, Args...>, To>;
158 template <
template <
class...>
class Op,
class... Args>
167 namespace TemplateConstraints
177 template <
bool... Values>
180 static constexpr bool value = (Values && ...);
188 template <
bool... Values>
191 static constexpr bool value = (Values || ...);
202template <
class Base,
class... Derived>
206 std::is_base_of_v<Base, Derived>...>
::value;
217template <
typename Type,
class... Types>
221 std::is_same_v<Type, Types>...>
::value;
232template <
typename Type,
class... Types>
236 std::is_same_v<Type, Types>...>
::value;
266template <
bool... Values>
268 : std::enable_if<internal::TemplateConstraints::all_true<Values...>::value>
298template <
bool... Values>
309 decltype(std::begin(std::declval<T>()), std::end(std::declval<T>()));
313 internal::is_supported_operation<begin_and_end_t, T>;
321template <
typename ArgType,
typename ValueType>
356 template <
typename T>
370 template <
typename T,
typename U>
392 template <
typename T,
typename U>
395 using type =
decltype(std::declval<T>() * std::declval<U>());
448template <
typename T,
typename U>
462 template <
typename T>
468 template <
typename T,
typename U>
471 using type = std::complex<typename ProductType<T, U>::type>;
474 template <
typename U>
477 using type = std::complex<typename ProductType<double, U>::type>;
480 template <
typename T>
483 using type = std::complex<typename ProductType<T, double>::type>;
486 template <
typename U>
489 using type = std::complex<typename ProductType<float, U>::type>;
492 template <
typename T>
495 using type = std::complex<typename ProductType<T, float>::type>;
599template <
typename Number>
602template <
typename Number>
607 template <
typename Number>
610 namespace distributed
612 template <
typename Number,
typename MemorySpace>
615 template <
typename Number,
typename MemorySpace>
620#ifdef DEAL_II_WITH_PETSC
638#ifdef DEAL_II_WITH_TRILINOS
639# if defined(DEAL_II_TRILINOS_WITH_EPETRA)
642 namespace EpetraWrappers
658#if defined(DEAL_II_HAVE_CXX20) || defined(DOXYGEN)
669 template <
typename C>
689 template <
int dim,
int spacedim>
691 (dim >= 1 && spacedim <= 3 && dim <= spacedim);
701 template <
typename T>
704 template <
typename Number>
707 template <
typename Number>
711 template <
typename Number>
712 inline constexpr bool
716 template <
typename Number,
typename MemorySpace>
720 template <
typename Number,
typename MemorySpace>
725# ifdef DEAL_II_WITH_PETSC
731 inline constexpr bool
735 inline constexpr bool
739 inline constexpr bool
743# ifdef DEAL_II_WITH_TRILINOS
744# if defined(DEAL_II_TRILINOS_WITH_EPETRA)
746 inline constexpr bool
750 inline constexpr bool
754 inline constexpr bool
759# ifdef DEAL_II_TRILINOS_WITH_TPETRA
760 template <
typename Number,
typename MemorySpace>
765 template <
typename Number,
typename MemorySpace>
780 template <
typename T>
783# ifdef DEAL_II_WITH_PETSC
785 inline constexpr bool
789 inline constexpr bool
793 inline constexpr bool
797 inline constexpr bool
801 inline constexpr bool
814 template <
typename T>
817# ifdef DEAL_II_WITH_PETSC
819 inline constexpr bool
841 template <
typename VectorType>
843 internal::is_dealii_vector_type<std::remove_cv_t<VectorType>>;
854 template <
typename VectorType>
866 template <
typename VectorType>
868 internal::is_dealii_petsc_vector_type<VectorType>;
878 template <
typename VectorType>
880 internal::is_dealii_petsc_matrix_type<VectorType>;
885template <
int dim,
int spacedim>
889template <
int dim,
int spacedim>
895 namespace distributed
897 template <
int dim,
int spacedim>
903 template <
int dim,
int spacedim>
907 namespace fullydistributed
909 template <
int dim,
int spacedim>
930 template <
typename Number,
typename MemorySpace>
934 template <
typename Number,
typename MemorySpace>
939#ifdef DEAL_II_TRILINOS_WITH_EPETRA
941 inline constexpr bool
942 is_distributed_vector_type<::TrilinosWrappers::MPI::Vector> =
true;
945 inline constexpr bool
946 is_distributed_vector_type<::TrilinosWrappers::MPI::BlockVector> =
950#ifdef DEAL_II_WITH_PETSC
952 inline constexpr bool
953 is_distributed_vector_type<::PETScWrappers::MPI::Vector> =
true;
956 inline constexpr bool
957 is_distributed_vector_type<::PETScWrappers::MPI::BlockVector> =
962#if defined(DEAL_II_HAVE_CXX20) || defined(DOXYGEN)
965 template <
typename T>
968 template <
int dim,
int spacedim>
969 inline constexpr bool
972 template <
int dim,
int spacedim>
976 template <
int dim,
int spacedim>
980 template <
int dim,
int spacedim>
984 template <
int dim,
int spacedim>
985 inline constexpr bool
997 template <
typename MeshType>
999 internal::is_triangulation_or_dof_handler<MeshType>;
1007 template <
typename VectorType>
1011 typename VectorType::value_type a,
1012 typename VectorType::value_type b,
1013 typename VectorType::value_type s,
1016 typename VectorType::value_type;
1017 typename VectorType::size_type;
1018 typename VectorType::real_type;
1048 } -> std::convertible_to<typename VectorType::value_type>;
1052 } -> std::convertible_to<typename VectorType::real_type>;
1056 } -> std::convertible_to<typename VectorType::real_type>;
1060 } -> std::convertible_to<typename VectorType::real_type>;
1065 } -> std::convertible_to<typename VectorType::value_type>;
1068 U.add_and_dot(a, V, W)
1069 } -> std::convertible_to<typename VectorType::value_type>;
1074 } -> std::convertible_to<typename VectorType::size_type>;
1078 } -> std::same_as<bool>;
1081 U.get_mpi_communicator()
1082 } -> std::same_as<MPI_Comm>;
1086 U.compress(operation)
1087 } -> std::same_as<void>;
1099 template <
typename MatrixType,
typename VectorType>
1101 requires(
const MatrixType &A, VectorType &dst,
const VectorType &src) {
1114 template <
typename MatrixType,
typename VectorType>
1116 requires(
const MatrixType &A, VectorType &dst,
const VectorType &src) {
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_CXX20_REQUIRES(condition)
#define DEAL_II_NAMESPACE_CLOSE
constexpr bool is_distributed_vector_type
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