56 template <
typename NLS,
typename PF = ArcLength,
typename ASS>
57 consteval bool checkPathFollowingTemplates() {
58 return Concepts::PathFollowingStrategy<PF, std::remove_cvref_t<NLS>, SubsidiaryArgs> and
59 Concepts::AdaptiveStepSizingStrategy<ASS, NonLinearSolverInformation, SubsidiaryArgs,
60 std::remove_cvref_t<typename NLS::DifferentiableFunction>> and
61 Concepts::NonLinearSolverCheckForPathFollowing<NLS>;
65 struct PathFollowingStateFactory
68 using SignatureTraits =
typename F::Traits;
69 using Domain =
typename SignatureTraits::Domain;
72 using type = PathFollowingState<Domain>;
85template <
typename NLS,
typename PF,
typename ASS>
86requires(Impl::checkPathFollowingTemplates<NLS, PF, ASS>())
96template <
typename PF_ = ArcLength,
typename ASS_ = AdaptiveStepSizing::NoOp>
109PathFollowingConfig(
int,
double) -> PathFollowingConfig<>;
111template <
typename PF>
112PathFollowingConfig(
int,
double, PF) -> PathFollowingConfig<PF>;
114template <
typename PF,
typename ASS>
115PathFollowingConfig(
int,
double, PF, ASS) -> PathFollowingConfig<PF, ASS>;
117template <
typename ASS>
118PathFollowingConfig(
int,
double, ArcLength, ASS) -> PathFollowingConfig<ArcLength, ASS>;
130template <
typename NLS,
typename PFConfig>
131requires traits::isSpecialization<PathFollowingConfig, std::remove_cvref_t<PFConfig>>::value
134 std::forward<NLS>(nonlinearSolver), config.steps, config.stepSize, config.pathFollowingFunction,
135 config.adaptiveStepSizingFunction);
167template <
typename NLS,
typename PF = ArcLength,
typename ASS = AdaptiveStepSizing::NoOp>
168requires(Impl::checkPathFollowingTemplates<NLS, PF, ASS>())
175 constexpr auto name()
const {
return std::string(
"Path following with " + pathFollowingType_.name()); }
186 ASS adaptiveStepSizing = {})
187 : nonLinearSolver_{nls},
190 pathFollowingType_{pathFollowingType},
191 adaptiveStepSizing_{adaptiveStepSizing} {
193 DUNE_THROW(Dune::InvalidStateException,
"Number of steps should be greater than zero.");
203 [[nodiscard]] ControlInformation run(
typename NLS::Domain& d);
209 std::shared_ptr<NLS> nonLinearSolver_;
213 PF pathFollowingType_;
214 ASS adaptiveStepSizing_;
Contains the generic DifferentiableFunctionFactory class.
Enums for observer messages.
Contains the generic NonlinearSolverFactory class.
Defines the ControlInformation structure for storing control results.
Base for all control routines.
Implementation of the run function.
Contains the AdaptiveStepSizing namespace with strategies for adaptive step sizing.
Defines structures and methods related to subsidiary functions for control routines.
Factory for controlroutines.
Definition: assemblermanipulatorbuildingblocks.hh:22
auto createControlRoutine(const LoadControlConfig &config, NLS &&nonlinearSolver)
Function to create a load control instance.
Definition: loadcontrol.hh:45
Structure containing information about the control results.
Definition: controlinfos.hh:23
int totalIterations
Total number of iterations performed.
Definition: controlinfos.hh:30
std::vector< Ikarus::NonLinearSolverInformation > solverInfos
Vector containing information from nonlinear solvers.
Definition: controlinfos.hh:29
Base for all control routines. Defines the message interface that can be broadcasted to listeners.
Definition: controlroutinebase.hh:24
State for path following control routine.
Definition: pathfollowing.hh:32
double stepSize
Definition: pathfollowing.hh:40
const ControlInformation & information
Definition: pathfollowing.hh:36
const Domain & domain
Definition: pathfollowing.hh:35
int loadStep
Definition: pathfollowing.hh:39
D Domain
Definition: pathfollowing.hh:33
const SubsidiaryArgs & subsidiaryArgs
Definition: pathfollowing.hh:37
The PathFollowing control routine for path-following analysis.
Definition: pathfollowing.hh:172
constexpr auto name() const
The name of the PathFollowing method.
Definition: pathfollowing.hh:175
NLS & nonLinearSolver()
Definition: pathfollowing.hh:206
PathFollowing(const std::shared_ptr< NLS > &nls, int steps, double stepSize, PF pathFollowingType=ArcLength{}, ASS adaptiveStepSizing={})
Constructor for PathFollowing.
Definition: pathfollowing.hh:185
Config for the Path-Following control routine.
Definition: pathfollowing.hh:98
ASS adaptiveStepSizingFunction
Definition: pathfollowing.hh:105
double stepSize
Definition: pathfollowing.hh:103
PF pathFollowingFunction
Definition: pathfollowing.hh:104
ASS_ ASS
Definition: pathfollowing.hh:100
PF_ PF
Definition: pathfollowing.hh:99
int steps
Definition: pathfollowing.hh:102
Structure containing arguments for subsidiary functions.
Definition: pathfollowingfunctions.hh:49
Structure representing the subsidiary function for the standard arc-length method.
Definition: pathfollowingfunctions.hh:89
Information about the result of a non-linear solver.
Definition: solverinfos.hh:21
int iterations
Definition: solverinfos.hh:31