Harmony
HARMONic stabilitY assessment of PE-penetrated power systems
Loading...
Searching...
No Matches
Differential_equations.h
Go to the documentation of this file.
1#ifndef _DIFFERENTIAL_EQUATIONS_H_
2#define _DIFFERENTIAL_EQUATIONS_H_
3
13#include "../../Constants.h"
14
16using RHSFunc = std::function<Eigen::VectorXd(double t,
17 const Eigen::VectorXd& x, const Eigen::VectorXd& u)>;
18
20using JacFunc = std::function<Eigen::MatrixXd(double t,
21 const Eigen::VectorXd& x, const Eigen::VectorXd& u)>;
22
27 double rtol = 1e-8;
28 double atol = 1e-10;
29 double dt_max = 1e-3;
30 bool use_analytical_jac = false;
31};
32
37 std::vector<double> time;
38 std::vector<Eigen::VectorXd> states;
39};
40
54 const RHSFunc& rhs,
55 const Eigen::VectorXd& x0,
56 const std::function<Eigen::VectorXd(double t)>& inputFn,
57 double t0, double tEnd, double dt_output,
58 const CVODEConfig& cfg = {},
59 const JacFunc& jac = nullptr);
60
64enum class KINSOLStrategy {
65 Newton,
67 Picard,
69};
70
75 double ftol = 1e-10;
76 double stol = 1e-10;
77 int max_iter = 200;
78 bool use_analytical_jac = false;
80 double maa = 0;
81 double damping = 1.0;
82 Eigen::VectorXd x_scale;
83 Eigen::VectorXd f_scale;
84};
85
95Eigen::VectorXd findEquilibrium(
96 const RHSFunc& rhs,
97 const Eigen::VectorXd& x0,
98 const Eigen::VectorXd& u,
99 const KINSOLConfig& cfg = {},
100 const JacFunc& jac = nullptr);
101
114Eigen::VectorXd findEquilibriumRobust(
115 const RHSFunc& rhs,
116 const Eigen::VectorXd& x0,
117 const Eigen::VectorXd& u,
118 const JacFunc& jac = nullptr);
119
129std::pair<Eigen::MatrixXd, Eigen::MatrixXd> computeJacobians(
130 const RHSFunc& rhs,
131 const Eigen::VectorXd& x,
132 const Eigen::VectorXd& u,
133 double t = 0.0,
134 double eps = 1e-8);
135
144void padeDelaySystem3(double tdelay, Eigen::MatrixXd& A, Eigen::MatrixXd& B,
145 Eigen::MatrixXd& C, Eigen::MatrixXd& D);
146
156void padeDelaySystemMulti3(double tdelay, Eigen::MatrixXd& A, Eigen::MatrixXd& B,
157 Eigen::MatrixXd& C, Eigen::MatrixXd& D, int num_signals);
158
167void padeDelaySystem2(double tdelay, Eigen::MatrixXd& A, Eigen::MatrixXd& B,
168 Eigen::MatrixXd& C, Eigen::MatrixXd& D);
169
179void padeDelaySystemMulti2(double tdelay, Eigen::MatrixXd& A, Eigen::MatrixXd& B,
180 Eigen::MatrixXd& C, Eigen::MatrixXd& D, int num_signals);
181
194void discretizeABCD(
195 const Eigen::MatrixXd& A, const Eigen::MatrixXd& B,
196 const Eigen::MatrixXd& C, const Eigen::MatrixXd& D,
197 double Ts,
198 Eigen::MatrixXd& Ad, Eigen::MatrixXd& Bd,
199 Eigen::MatrixXd& Cd, Eigen::MatrixXd& Dd);
200
201
202#endif
std::function< Eigen::VectorXd(double t, const Eigen::VectorXd &x, const Eigen::VectorXd &u)> RHSFunc
Right-hand side of dx/dt = f(t, x, u).
Definition Differential_equations.h:17
CVODEResult integrate(const RHSFunc &rhs, const Eigen::VectorXd &x0, const std::function< Eigen::VectorXd(double t)> &inputFn, double t0, double tEnd, double dt_output, const CVODEConfig &cfg={}, const JacFunc &jac=nullptr)
Integrates an ODE system using CVODE (BDF, stiff).
Definition Differential_equations.cpp:311
void padeDelaySystemMulti2(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D, int num_signals)
Second-order Padé delay approximation for multiple independent signals.
void discretizeABCD(const Eigen::MatrixXd &A, const Eigen::MatrixXd &B, const Eigen::MatrixXd &C, const Eigen::MatrixXd &D, double Ts, Eigen::MatrixXd &Ad, Eigen::MatrixXd &Bd, Eigen::MatrixXd &Cd, Eigen::MatrixXd &Dd)
Discretizes a continuous-time state-space model using the Tustin (bilinear) method.
Definition Differential_equations.cpp:449
void padeDelaySystemMulti3(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D, int num_signals)
First-order Padé delay approximation for multiple independent signals.
void padeDelaySystem2(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D)
Second-order Padé delay approximation (single signal, order 2).
std::function< Eigen::MatrixXd(double t, const Eigen::VectorXd &x, const Eigen::VectorXd &u)> JacFunc
Jacobian J = ∂f/∂x(t, x, u).
Definition Differential_equations.h:21
Eigen::VectorXd findEquilibriumRobust(const RHSFunc &rhs, const Eigen::VectorXd &x0, const Eigen::VectorXd &u, const JacFunc &jac=nullptr)
Robust equilibrium finder with a cascade of solver strategies.
Definition Differential_equations.cpp:226
std::pair< Eigen::MatrixXd, Eigen::MatrixXd > computeJacobians(const RHSFunc &rhs, const Eigen::VectorXd &x, const Eigen::VectorXd &u, double t=0.0, double eps=1e-8)
Computes ∂f/∂x and ∂f/∂u by central finite differences.
Definition Differential_equations.cpp:373
Eigen::VectorXd findEquilibrium(const RHSFunc &rhs, const Eigen::VectorXd &x0, const Eigen::VectorXd &u, const KINSOLConfig &cfg={}, const JacFunc &jac=nullptr)
Finds a steady-state equilibrium dx/dt = 0 for fixed input u.
Definition Differential_equations.cpp:211
KINSOLStrategy
Nonlinear solver strategy for KINSOL equilibrium finding.
Definition Differential_equations.h:64
void padeDelaySystem3(double tdelay, Eigen::MatrixXd &A, Eigen::MatrixXd &B, Eigen::MatrixXd &C, Eigen::MatrixXd &D)
First-order Padé delay approximation (single signal, order 3).
Tolerance and step-size settings for CVODE integration.
Definition Differential_equations.h:26
double atol
Definition Differential_equations.h:28
double rtol
Definition Differential_equations.h:27
double dt_max
Definition Differential_equations.h:29
bool use_analytical_jac
Definition Differential_equations.h:30
Time histories returned by CVODE integration.
Definition Differential_equations.h:36
std::vector< double > time
Definition Differential_equations.h:37
std::vector< Eigen::VectorXd > states
Definition Differential_equations.h:38
Convergence and scaling settings for KINSOL.
Definition Differential_equations.h:74
int max_iter
Definition Differential_equations.h:77
double damping
Definition Differential_equations.h:81
Eigen::VectorXd f_scale
Definition Differential_equations.h:83
double maa
Definition Differential_equations.h:80
Eigen::VectorXd x_scale
Definition Differential_equations.h:82
double ftol
Definition Differential_equations.h:75
KINSOLStrategy strategy
Definition Differential_equations.h:79
bool use_analytical_jac
Definition Differential_equations.h:78
double stol
Definition Differential_equations.h:76