version 0.4
Ikarus::PathFollowing< NonLinearSolver, PathFollowingType, AdaptiveStepSizing > Class Template Reference

The PathFollowing control routine for path-following analysis. More...

#include <ikarus/controlroutines/pathfollowing.hh>

Inheritance diagram for Ikarus::PathFollowing< NonLinearSolver, PathFollowingType, AdaptiveStepSizing >:
[legend]

Public Member Functions

constexpr auto name () const
 The name of the PathFollowing method. More...
 
 PathFollowing (const std::shared_ptr< NonLinearSolver > &p_nonLinearSolver, int steps, double stepSize, PathFollowingType p_pathFollowingType=ArcLength{}, AdaptiveStepSizing p_adaptiveStepSizing={})
 Constructor for PathFollowing. More...
 
ControlInformation run ()
 Executes the PathFollowing routine. More...
 
void subscribe (ControlMessages message, std::shared_ptr< IObserver< ControlMessages > > observer)
 Subscribe an observer to receive notifications for a specific message type. More...
 
void subscribeAll (std::shared_ptr< IObserver< ControlMessages > > observer)
 Subscribe an observer to receive notifications for all message types. More...
 
void subscribeAll (std::initializer_list< std::shared_ptr< IObserver< ControlMessages > > > observers)
 Subscribe multiple observers to receive notifications for all message types. More...
 
void unSubscribe (ControlMessages message, std::shared_ptr< IObserver< ControlMessages > > observer)
 Unsubscribe an observer from receiving notifications for a specific message type. More...
 
void unSubscribeAll (std::shared_ptr< IObserver< ControlMessages > > observer)
 Unsubscribe an observer from receiving notifications for all message types. More...
 
void notify (ControlMessages message)
 Notify observers about a specific message type. More...
 
void notify (ControlMessages message, ScalarType val)
 Notify observers about a specific message type with a floating-point value. More...
 
void notify (ControlMessages message, int val)
 Notify observers about a specific message type with an integer value. More...
 
void notify (ControlMessages message, const std::string &val)
 Notify observers about a specific message type with a string value. More...
 
void notify (ControlMessages message, int val1, double val2)
 Notify observers about a specific message type with an integer and a double value. More...
 
void notify (ControlMessages message, int val1, const std::string &val2)
 Notify observers about a specific message type with an integer value and a string value. More...
 
void notify (ControlMessages message, Eigen::VectorX< ScalarType > vec)
 Notify observers about a specific message type with an Eigen::VectorX. More...
 

Detailed Description

template<typename NonLinearSolver, typename PathFollowingType = ArcLength, typename AdaptiveStepSizing = AdaptiveStepSizing::NoOp>
requires ( Impl::checkPathFollowingTemplates<NonLinearSolver, PathFollowingType, AdaptiveStepSizing>())
class Ikarus::PathFollowing< NonLinearSolver, PathFollowingType, AdaptiveStepSizing >

This class represents the PathFollowing control routine, which utilizes a nonlinear solver, such as Newton's method with scalar subsidiary function, which has to be fulfilled for solving the system along a predefined path.

Consider a non-linear system of equations

\[\mathbf{R}: \require{cases}\begin{cases}\mathbb{R}^n \times \mathbb{R} &\rightarrow \mathbb{R}^n \\ (\mathbf{D},\lambda) &\mapsto \mathbf{R}(\mathbf{D},\lambda) \end{cases}.\]

Then in each step \(k+1\) of the path following algorithm, the following problem is solved

\[ \begin{align} \mathbf{R}(\mathbf{D}_k+ \mathrm{D}\mathbf{D}, \lambda_k+ \mathrm{D} \lambda) &= \mathbf{0} \\ f(\mathrm{D}\mathbf{D}, \mathrm{D} \lambda) &= 0 \end{align} \]

where \(\mathrm{D}\mathbf{D}\) is the increment of the solution vector and \(\mathrm{D} \lambda\) is the load factor increment. The subsidiary function \(f\) is provided by the user and needs to fulfill the concept Concepts::PathFollowingStrategy. This subsidiary function makes the given problem well-posed.

Currently the following subsidiary functions are implemented LoadControlSubsidiaryFunction, ArcLength and DisplacementControl

Template Parameters
NonLinearSolverType of the nonlinear solver used in the control routine.
PathFollowingTypeType of the path-following strategy.
AdaptiveStepSizingType of the adaptive step sizing strategy.

Constructor & Destructor Documentation

◆ PathFollowing()

template<typename NonLinearSolver , typename PathFollowingType = ArcLength, typename AdaptiveStepSizing = AdaptiveStepSizing::NoOp>
Ikarus::PathFollowing< NonLinearSolver, PathFollowingType, AdaptiveStepSizing >::PathFollowing ( const std::shared_ptr< NonLinearSolver > &  p_nonLinearSolver,
int  steps,
double  stepSize,
PathFollowingType  p_pathFollowingType = ArcLength{},
AdaptiveStepSizing  p_adaptiveStepSizing = {} 
)
inline
Parameters
p_nonLinearSolverShared pointer to the nonlinear solver.
stepsNumber of steps in the control routine.
stepSizeSize of each step.
p_pathFollowingTypeType of the path-following function.
p_adaptiveStepSizingType of the adaptive step sizing strategy.

Member Function Documentation

◆ name()

template<typename NonLinearSolver , typename PathFollowingType = ArcLength, typename AdaptiveStepSizing = AdaptiveStepSizing::NoOp>
constexpr auto Ikarus::PathFollowing< NonLinearSolver, PathFollowingType, AdaptiveStepSizing >::name ( ) const
inlineconstexpr

◆ notify() [1/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message)
inherited
Parameters
messageThe message type to notify about.

◆ notify() [2/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message,
const std::string &  val 
)
inherited
Parameters
messageThe message type to notify about.
valThe string value to be sent with the notification.

◆ notify() [3/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message,
Eigen::VectorX< ScalarType >  vec 
)
inherited
Template Parameters
ScalarTypeThe type of the elements in the Eigen::VectorX.
Parameters
messageThe message type to notify about.
vecThe Eigen::VectorX to be sent with the notification.

◆ notify() [4/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message,
int  val 
)
inherited
Parameters
messageThe message type to notify about.
valThe integer value to be sent with the notification.

◆ notify() [5/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message,
int  val1,
const std::string &  val2 
)
inherited
Parameters
messageThe message type to notify about.
val1The integer value to be sent with the notification.
val2The string value to be sent with the notification.

◆ notify() [6/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message,
int  val1,
double  val2 
)
inherited
Parameters
messageThe message type to notify about.
val1The integer value to be sent with the notification.
val2The double value to be sent with the notification.

◆ notify() [7/7]

void Ikarus::IObservable< ControlMessages >::notify ( ControlMessages  message,
ScalarType  val 
)
inherited
Template Parameters
ScalarTypeThe type of the floating-point value.
Parameters
messageThe message type to notify about.
valThe floating-point value to be sent with the notification.

◆ run()

template<typename NonLinearSolver , typename PathFollowingType , typename AdaptiveStepSizing >
requires (Impl::checkPathFollowingTemplates<NonLinearSolver,PathFollowingType,AdaptiveStepSizing>())
ControlInformation Ikarus::PathFollowing< NonLinearSolver, PathFollowingType, AdaptiveStepSizing >::run
Returns
ControlInformation structure containing information about the control results.

Initializing solver

Calculate predictor for a particular step

◆ subscribe()

void Ikarus::IObservable< ControlMessages >::subscribe ( ControlMessages  message,
std::shared_ptr< IObserver< ControlMessages > >  observer 
)
inherited
Parameters
messageThe message type to subscribe to.
observerThe observer to be subscribed.

◆ subscribeAll() [1/2]

void Ikarus::IObservable< ControlMessages >::subscribeAll ( std::initializer_list< std::shared_ptr< IObserver< ControlMessages > > >  observers)
inherited
Parameters
observersList of observers to be subscribed.

◆ subscribeAll() [2/2]

void Ikarus::IObservable< ControlMessages >::subscribeAll ( std::shared_ptr< IObserver< ControlMessages > >  observer)
inherited
Parameters
observerThe observer to be subscribed.

◆ unSubscribe()

void Ikarus::IObservable< ControlMessages >::unSubscribe ( ControlMessages  message,
std::shared_ptr< IObserver< ControlMessages > >  observer 
)
inherited
Parameters
messageThe message type to unsubscribe from.
observerThe observer to be unsubscribed.

◆ unSubscribeAll()

void Ikarus::IObservable< ControlMessages >::unSubscribeAll ( std::shared_ptr< IObserver< ControlMessages > >  observer)
inherited
Parameters
observerThe observer to be unsubscribed.

The documentation for this class was generated from the following files: