collocation.hpp
1 /*
2  * This file is part of CasADi.
3  *
4  * CasADi -- A symbolic framework for dynamic optimization.
5  * Copyright (C) 2010-2023 Joel Andersson, Joris Gillis, Moritz Diehl,
6  * KU Leuven. All rights reserved.
7  * Copyright (C) 2011-2014 Greg Horn
8  *
9  * CasADi is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 3 of the License, or (at your option) any later version.
13  *
14  * CasADi is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with CasADi; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22  *
23  */
24 
25 
26 #ifndef CASADI_COLLOCATION_HPP
27 #define CASADI_COLLOCATION_HPP
28 
29 #include "casadi/core/integrator_impl.hpp"
30 #include "casadi/core/integration_tools.hpp"
31 #include <casadi/solvers/casadi_integrator_collocation_export.h>
32 
46 namespace casadi {
47 
57  class Collocation : public ImplicitFixedStepIntegrator {
58  public:
59 
61  Collocation(const std::string& name, const Function& dae,
62  double t0, const std::vector<double>& tout);
63 
65  static Integrator* creator(const std::string& name, const Function& dae,
66  double t0, const std::vector<double>& tout) {
67  return new Collocation(name, dae, t0, tout);
68  }
69 
71  ~Collocation() override;
72 
73  // Get name of the plugin
74  const char* plugin_name() const override { return "collocation";}
75 
76  // Get name of the class
77  std::string class_name() const override { return "Collocation";}
78 
80 
81  static const Options options_;
82  const Options& get_options() const override { return options_;}
84 
86  void init(const Dict& opts) override;
87 
89  void setup_step() override;
90 
91  // Return zero if smaller than machine epsilon
92  static double zeroIfSmall(double x);
93 
95  void reset(IntegratorMemory* mem,
96  const double* u, const double* x, const double* z, const double* p) const override;
97 
98  MX algebraic_state_init(const MX& x0, const MX& z0) const override;
99  MX algebraic_state_output(const MX& Z) const override;
100 
101  // Interpolation order
102  casadi_int deg_;
103 
104  // Collocation scheme
105  std::string collocation_scheme_;
106 
108  static const std::string meta_doc;
109 
111  void serialize_body(SerializingStream &s) const override;
112 
114  static ProtoFunction* deserialize(DeserializingStream& s) { return new Collocation(s); }
115 
116  protected:
117 
119  explicit Collocation(DeserializingStream& s);
120  };
121 
122 } // namespace casadi
124 #endif // CASADI_COLLOCATION_HPP
The casadi namespace.
GenericType::Dict Dict
C++ equivalent of Python's dict or MATLAB's struct.