1#ifndef CGMRES__CONTINUATION_GMRES_HPP_
2#define CGMRES__CONTINUATION_GMRES_HPP_
17 static constexpr int nx = NLP::nx;
18 static constexpr int nu = NLP::nu;
19 static constexpr int nc = NLP::nc;
20 static constexpr int dim = NLP::dim;
25 finite_difference_epsilon_(finite_difference_epsilon),
33 if (finite_difference_epsilon <= 0.0) {
34 throw std::invalid_argument(
"[ContinuationGMRES]: 'finite_difference_epsilon' must be positive!");
37 throw std::invalid_argument(
"[ContinuationGMRES]: 'zeta' must be positive!");
49 template <
typename VectorType>
54 template <
typename VectorType1,
typename VectorType2,
typename VectorType3,
typename VectorType4>
63 const Scalar t1 =
t + finite_difference_epsilon_;
64 nlp_.ocp().eval_f(
t,
x.derived().data(),
solution.derived().data(), dx_.data());
65 x_1_ =
x + finite_difference_epsilon_ * dx_;
69 nlp_.eval_fonc_hu(
t1, x_1_,
solution, fonc_1_);
70 nlp_.eval_fonc_hu(
t1, x_1_, updated_solution_, fonc_2_);
73 - fonc_2_ / finite_difference_epsilon_;
76 template <
typename VectorType1,
typename VectorType2,
typename VectorType3,
typename VectorType4>
84 const Scalar t1 =
t + finite_difference_epsilon_;
86 nlp_.eval_fonc_hu(
t1, x_1_, updated_solution_, fonc_2_);
92 nlp_.retrieve_dummy(
solution, fonc_1_, min_dummy);
100 decltype(
auto)
x()
const {
return nlp_.x(); }
102 decltype(
auto)
lmd()
const {
return nlp_.lmd(); }
112 Scalar finite_difference_epsilon_, zeta_;
113 Vector<dim> updated_solution_, fonc_, fonc_1_, fonc_2_;
Definition continuation_gmres.hpp:15
ContinuationGMRES(const NLP &nlp, const Scalar finite_difference_epsilon, const Scalar zeta)
Definition continuation_gmres.hpp:22
void eval_Ax(const Scalar t, const MatrixBase< VectorType1 > &x, const MatrixBase< VectorType2 > &solution, const MatrixBase< VectorType3 > &solution_update, const MatrixBase< VectorType4 > &ax_vec)
Definition continuation_gmres.hpp:77
static constexpr int nc
Definition continuation_gmres.hpp:19
void retrieve_mu(Vector< dim > &solution)
Definition continuation_gmres.hpp:95
decltype(auto) x() const
Definition continuation_gmres.hpp:100
void eval_fonc(const Scalar t, const MatrixBase< VectorType > &x, const Vector< dim > &solution)
Definition continuation_gmres.hpp:50
static constexpr int nu
Definition continuation_gmres.hpp:18
ContinuationGMRES()=default
void retrieve_dummy(Vector< dim > &solution, const Scalar min_dummy)
Definition continuation_gmres.hpp:90
void eval_b(const Scalar t, const MatrixBase< VectorType1 > &x, const MatrixBase< VectorType2 > &solution, const MatrixBase< VectorType3 > &solution_update, const MatrixBase< VectorType4 > &b_vec)
Definition continuation_gmres.hpp:55
void synchronize_ocp()
Definition continuation_gmres.hpp:106
static constexpr int dim
Definition continuation_gmres.hpp:20
Scalar optError() const
Definition continuation_gmres.hpp:45
~ContinuationGMRES()=default
const NLP & get_nlp() const
Definition continuation_gmres.hpp:104
static constexpr int nx
Definition continuation_gmres.hpp:17
decltype(auto) lmd() const
Definition continuation_gmres.hpp:102
#define CGMRES_EIGEN_CONST_CAST(TYPE, OBJ)
Definition macros.hpp:7
Definition continuation_gmres.hpp:11
Eigen::Map< MatrixType > Map
Alias of Eigen::Map.
Definition types.hpp:54
Eigen::Matrix< Scalar, size, 1 > Vector
Alias of Eigen::Vector.
Definition types.hpp:27
double Scalar
Alias of double.
Definition types.hpp:15