56 template <
typename NLS,
typename PF = ArcLength,
typename ASS>
57 consteval bool checkPathFollowingTemplates() {
58 return Concepts::PathFollowingStrategy<PF, std::remove_cvref_t<typename NLS::DifferentiableFunction>,
60 Concepts::AdaptiveStepSizingStrategy<ASS, NonLinearSolverInformation, SubsidiaryArgs,
61 std::remove_cvref_t<typename NLS::DifferentiableFunction>> and
62 Concepts::NonLinearSolverCheckForPathFollowing<NLS>;
66 struct PathFollowingStateFactory
69 using SignatureTraits =
typename F::Traits;
70 using Domain =
typename SignatureTraits::Domain;
73 using type = PathFollowingState<Domain>;
86template <
typename NLS,
typename PF,
typename ASS>
87requires(Impl::checkPathFollowingTemplates<NLS, PF, ASS>())
97template <
typename PF_ = ArcLength,
typename ASS_ = AdaptiveStepSizing::NoOp>
110PathFollowingConfig(
int,
double) -> PathFollowingConfig<>;
112template <
typename PF>
113PathFollowingConfig(
int,
double, PF) -> PathFollowingConfig<PF>;
115template <
typename PF,
typename ASS>
116PathFollowingConfig(
int,
double, PF, ASS) -> PathFollowingConfig<PF, ASS>;
118template <
typename ASS>
119PathFollowingConfig(
int,
double, ArcLength, ASS) -> PathFollowingConfig<ArcLength, ASS>;
131template <
typename NLS,
typename PFConfig>
132requires traits::isSpecialization<PathFollowingConfig, std::remove_cvref_t<PFConfig>>::value
135 std::forward<NLS>(nonlinearSolver), config.steps, config.stepSize, config.pathFollowingFunction,
136 config.adaptiveStepSizingFunction);
168template <
typename NLS,
typename PF = ArcLength,
typename ASS = AdaptiveStepSizing::NoOp>
169requires(Impl::checkPathFollowingTemplates<NLS, PF, ASS>())
176 constexpr auto name()
const {
return std::string(
"Path following with " + pathFollowingType_.name()); }
187 ASS adaptiveStepSizing = {})
188 : nonLinearSolver_{nls},
191 pathFollowingType_{pathFollowingType},
192 adaptiveStepSizing_{adaptiveStepSizing} {
194 DUNE_THROW(Dune::InvalidStateException,
"Number of steps should be greater than zero.");
204 [[nodiscard]] ControlInformation run(
typename NLS::Domain& d);
210 std::shared_ptr<NLS> nonLinearSolver_;
214 PF pathFollowingType_;
215 ASS adaptiveStepSizing_;
Contains the generic DifferentiableFunctionFactory class.
Contains the generic NonlinearSolverFactory class.
Enums for observer messages.
Factory for controlroutines.
Contains the AdaptiveStepSizing namespace with strategies for adaptive step sizing.
Implementation of the run function.
Base for all control routines.
Defines the ControlInformation structure for storing control results.
Defines structures and methods related to subsidiary functions for control routines.
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:173
constexpr auto name() const
The name of the PathFollowing method.
Definition: pathfollowing.hh:176
NLS & nonLinearSolver()
Definition: pathfollowing.hh:207
PathFollowing(const std::shared_ptr< NLS > &nls, int steps, double stepSize, PF pathFollowingType=ArcLength{}, ASS adaptiveStepSizing={})
Constructor for PathFollowing.
Definition: pathfollowing.hh:186
Config for the Path-Following control routine.
Definition: pathfollowing.hh:99
ASS adaptiveStepSizingFunction
Definition: pathfollowing.hh:106
double stepSize
Definition: pathfollowing.hh:104
PF pathFollowingFunction
Definition: pathfollowing.hh:105
ASS_ ASS
Definition: pathfollowing.hh:101
PF_ PF
Definition: pathfollowing.hh:100
int steps
Definition: pathfollowing.hh:103
Structure containing arguments for subsidiary functions.
Definition: pathfollowingfunctions.hh:40
Structure representing the subsidiary function for the standard arc-length method.
Definition: pathfollowingfunctions.hh:80
Information about the result of a non-linear solver.
Definition: solverinfos.hh:21
int iterations
Definition: solverinfos.hh:31