16#include <dune/functions/functionspacebases/basistags.hh>
17#include <dune/functions/functionspacebases/lagrangebasis.hh>
19#include <Eigen/Sparse>
24 template <
typename Derived>
29 template <auto stressIndexPair,
typename MaterialImpl>
30 struct VanishingStress;
32 template <
typename Derived>
44 template <
typename Basis>
46 std::is_same_v<typename Basis::PreBasis::IndexMergingStrategy, Dune::Functions::BasisFactory::FlatInterleaved>;
50 template <
template <
typename,
int,
typename>
class U,
typename T>
51 struct LagrangeNodeHelper : std::false_type {};
52 template <
template <
typename,
int,
typename>
class U,
typename GV,
int k,
typename R>
53 struct LagrangeNodeHelper<U, U<GV, k, R>> : std::true_type {};
55 template <
template <
typename,
int,
typename>
class U,
typename T,
int k>
56 struct LagrangeNodeHelperOfOrder : std::false_type {};
57 template <
template <
typename,
int,
typename>
class U,
typename GV,
int k,
typename R>
58 struct LagrangeNodeHelperOfOrder<U, U<GV, k, R>, k> : std::true_type {};
68 template <
typename Node>
69 concept LagrangeNode = Impl::LagrangeNodeHelper<Dune::Functions::LagrangeNode, Node>::value;
78 template <
typename Node,
int order>
79 concept LagrangeNodeOfOrder = Impl::LagrangeNodeHelperOfOrder<Dune::Functions::LagrangeNode, Node, order>::value;
89 template <
typename Basis>
91 std::is_same_v<typename Basis::PreBasis::IndexMergingStrategy, Dune::Functions::BasisFactory::FlatLexicographic>;
102 template <
typename Basis>
113 template <
typename Basis>
115 std::is_same_v<typename Basis::PreBasis::IndexMergingStrategy, Dune::Functions::BasisFactory::BlockedInterleaved>;
126 template <
typename Basis>
128 std::is_same_v<
typename Basis::PreBasis::IndexMergingStrategy,
129 Dune::Functions::BasisFactory::BlockedLexicographic>;
137 template <
typename DuneLocalBasisImpl>
139 typename DuneLocalBasisImpl::Traits::RangeType;
140 typename DuneLocalBasisImpl::Traits::JacobianType;
141 DuneLocalBasisImpl::Traits::dimDomain;
142 typename DuneLocalBasisImpl::Traits::DomainType;
144 typename DuneLocalBasisImpl::Traits::DomainFieldType;
145 typename DuneLocalBasisImpl::Traits::RangeFieldType;
147 duneLocalBasis.evaluateFunction(std::declval<typename DuneLocalBasisImpl::Traits::DomainType>(),
148 std::declval<std::vector<typename DuneLocalBasisImpl::Traits::RangeType>&>());
149 duneLocalBasis.evaluateJacobian(std::declval<typename DuneLocalBasisImpl::Traits::DomainType>(),
150 std::declval<std::vector<typename DuneLocalBasisImpl::Traits::JacobianType>&>());
162 template <
typename Basis>
173 template <
typename Basis>
175 Basis::PreBasis::Node::isPower ==
true;
185 template <
typename PathFollowingImpl,
typename NonLinearOperator,
typename Subs
idiaryArgs>
187 { pft(args) } -> std::same_as<void>;
188 { pft.initialPrediction(nop, args) } -> std::same_as<void>;
189 { pft.intermediatePrediction(nop, args) } -> std::same_as<void>;
203 SubsidiaryArgs args, NonLinearOperator nop) {
204 { adaptiveSS(info, args, nop) } -> std::same_as<void>;
205 { adaptiveSS.targetIterations() } -> std::same_as<int>;
206 { adaptiveSS.setTargetIterations(std::declval<int>()) } -> std::same_as<void>;
217 template <
typename LinearSolver,
typename MatrixType,
typename VectorType>
219 linearSolver.analyzePattern(Ax);
220 linearSolver.factorize(Ax);
221 linearSolver.solve(vec, vec);
231 template <
typename NonLinearSolver>
233 std::tuple_size<typename NonLinearSolver::NonLinearOperator::ParameterValues>::value == 2;
235 typename NonLinearSolver::NonLinearOperator::ValueType,
236 double> and ((traits::isSpecializationTypeAndNonTypes<Eigen::Matrix, typename NonLinearSolver::NonLinearOperator::DerivativeType>::value) or (traits::isSpecializationTypeNonTypeAndType<Eigen::SparseMatrix, typename NonLinearSolver::NonLinearOperator::DerivativeType>::value)));
246 template <
typename L,
typename R>
258 template <
typename L,
typename R>
270 template <
typename L,
typename R>
283 template <
typename L,
typename R>
296 template <
typename L,
typename R>
309 template <
typename L,
typename R>
322 template <
typename L,
typename R>
334 template <
typename L,
typename R>
345 template <
typename L>
356 template <
typename L>
368 template <
typename Op,
typename... Args>
380 template <
typename V>
381 concept EigenVector =
static_cast<bool>(V::IsVectorAtCompileTime);
383#define MAKE_EIGEN_FIXED_VECTOR_CONCEPT(Size) \
384 template <typename V> \
385 concept EigenVector##Size \
386 = static_cast<bool>(V::IsVectorAtCompileTime) and static_cast<bool>(V::SizeAtCompileTime == Size);
395#define MAKE_EIGEN_FIXED_MATRIX_CONCEPT(Size1, Size2) \
396 template <typename M> \
397 concept EigenMatrix##Size1##Size2 = static_cast<bool>(std::remove_cvref_t<M>::RowsAtCompileTime == Size1) \
398 and static_cast<bool>(std::remove_cvref_t<M>::ColsAtCompileTime == Size2);
437#define MAKE_EIGEN_FIXED_MATRIX_OR_VOIGT_CONCEPT(Size1, Size2) \
438 template <typename M> \
439 concept EigenMatrixOrVoigtNotation##Size1 = EigenMatrix##Size1##Size1<M> or EigenVector##Size2<M>;
446 template <
template <
typename...>
class MaterialToCheck,
typename Material>
447 consteval bool isMaterial() {
448 if constexpr (traits::isSpecialization<MaterialToCheck, Material>::value)
return true;
450 if constexpr (traits::isSpecializationNonTypeAndTypes<VanishingStress, Material>::value) {
451 if constexpr (traits::isSpecialization<MaterialToCheck, typename Material::Underlying>::value) {
472 template <
template <
typename...>
class MaterialToCheck,
typename Material>
473 concept IsMaterial = Impl::isMaterial<MaterialToCheck, Material>();
#define MAKE_EIGEN_FIXED_MATRIX_CONCEPT(Size1, Size2)
Definition: concepts.hh:395
#define MAKE_EIGEN_FIXED_MATRIX_OR_VOIGT_CONCEPT(Size1, Size2)
Definition: concepts.hh:437
#define MAKE_EIGEN_FIXED_VECTOR_CONCEPT(Size)
Definition: concepts.hh:383
Contains stl-like type traits.
Definition: simpleassemblers.hh:21
auto transpose(const Eigen::EigenBase< Derived > &A)
LinearSolverTemplate< double > LinearSolver
Definition: linearsolver.hh:234
Definition: truncatedconjugategradient.hh:24
Structure containing arguments for subsidiary functions.
Definition: pathfollowingfunctions.hh:38
Information about the result of a non-linear solver.
Definition: solverinfos.hh:18
Definition: concepts.hh:25
Represents a NonLinearOperator class for handling nonlinear operators.
Definition: nonlinearoperator.hh:154
Concept to check if a basis uses FlatInterleaved indexing strategy.
Definition: concepts.hh:45
Concept to check if a node in a basis tree is a Lagrangian node.
Definition: concepts.hh:69
Definition: concepts.hh:79
Concept to check if a basis uses FlatLexicographic indexing strategy.
Definition: concepts.hh:90
Concept to check if a basis uses FlatIndex indexing strategy.
Definition: concepts.hh:103
Concept to check if a basis uses BlockedInterleaved indexing strategy.
Definition: concepts.hh:114
Concept to check if a basis uses BlockedLexicographic indexing strategy.
Definition: concepts.hh:127
Concept to check if a local basis is a duneLocalBasis.
Definition: concepts.hh:138
Concept to check if a basis uses either BlockedLexicographic or BlockedInterleaved indexing strategy.
Definition: concepts.hh:163
Concept to check if a basis uses power indexing strategy.
Definition: concepts.hh:174
Concept defining the requirements for a path-following strategy.
Definition: concepts.hh:186
Concept to check if a type implements all the needed functions to be an adaptive step sizing method.
Definition: concepts.hh:202
Concept to check if a linear solver implements all the needed functions for given vector and matrix t...
Definition: concepts.hh:218
Concept to check if a non-linear solver with its non-linear operator satisfies requirements for path ...
Definition: concepts.hh:232
Concept defining the requirements for types that support multiplication.
Definition: concepts.hh:247
Concept defining the requirements for types that support addition.
Definition: concepts.hh:259
Concept defining the requirements for types that support subtraction.
Definition: concepts.hh:271
Concept defining the requirements for types that support in-place multiplication.
Definition: concepts.hh:284
Concept defining the requirements for types that support in-place division.
Definition: concepts.hh:297
Concept defining the requirements for types that support in-place addition.
Definition: concepts.hh:310
Concept defining the requirements for types that support in-place subtraction.
Definition: concepts.hh:323
Concept defining the requirements for types that support division.
Definition: concepts.hh:335
Concept defining the requirements for types that support negation.
Definition: concepts.hh:346
Concept defining the requirements for types that support transposition.
Definition: concepts.hh:357
Concept defining the requirements for functors with arguments.
Definition: concepts.hh:369
Concept defining the requirements for Eigen vectors.
Definition: concepts.hh:381
Concept defining the requirements for a material type.
Definition: concepts.hh:473