HQP
1.9.6
|
Interface for standard solvers for Ordinary Differential Equations (ODE) hiding details of sensitivity analysis. More...
#include <Omu_IntODE.h>
Public Member Functions | |
Omu_IntODE () | |
constructor | |
~Omu_IntODE () | |
destructor | |
virtual void | ode_solve (double tstart, VECP y, const VECP u, double tend)=0 |
Interface to be implemented by derived ODE solvers. More... | |
void | syseq (double t, const VECP y, const VECP u, VECP f) |
Callback routine for evaluating the model by derived ODE solvers. More... | |
Implementation of predefined methods. | |
| |
void | init (int k, const Omu_StateVec &xc, const Omu_Vec &q, const Omu_DependentVec &Fc, bool sa) |
Initialize integrator, like adaptation of array dimensions and test of pre-conditions, like explicit ODE. More... | |
void | solve (int kk, double tstart, double tend, const Omu_VariableVec &x, const Omu_VariableVec &u, Omu_Program *sys, Omu_DependentVec &Ft, Omu_StateVec &xt) |
Solve differential equations over one sample period. More... | |
Public Member Functions inherited from Omu_Integrator | |
Omu_Integrator () | |
constructor | |
virtual | ~Omu_Integrator () |
destructor | |
virtual const char * | name ()=0 |
Name of a specific integrator. More... | |
virtual void | setup_stages (const Omu_Program *sys) |
Setup stages for integrator. More... | |
virtual void | setup_struct (int k, const Omu_VariableVec &x, const Omu_VariableVec &u, const Omu_DependentVec &Ft) |
Setup struct for one stage k. More... | |
virtual void | init_stage (int k, const Omu_VariableVec &x, const Omu_VariableVec &u, const Omu_DependentVec &Ft, bool sa=false) |
Initialize solution of differential equations for stage k. More... | |
virtual void | solve (int kk, double tstart, double tend, Omu_StateVec &xc, Omu_StateVec &dxc, Omu_Vec &q, Omu_DependentVec &Fc) |
Solve differential equations over one sample period. More... | |
virtual void | residual (int kk, double t, const Omu_StateVec &xc, const Omu_StateVec &dxc, const Omu_Vec &q, Omu_DependentVec &Fc) |
Callback to evaluate residuals of continuous-time equations. More... | |
int | K () const |
get number of stages for which integrator has been set up | |
Protected Member Functions | |
Depreciated methods (provided for old versions of derived classes). | |
void | init_stage (int k, const Omu_States &x, const Omu_Vector &u, bool sa=false) |
Initialize solution of differential equations for stage k. More... | |
Protected Member Functions inherited from Omu_Integrator | |
virtual void | solve (int kk, double tstart, double tend, const Omu_States &x, const Omu_Vector &u, Omu_Program *sys, VECP xt, MATP Sx=MNULL, MATP Su=MNULL) |
Solve differential equations over sample period. More... | |
Additional Inherited Members | |
Protected Attributes inherited from Omu_Integrator | |
Omu_Program * | _sys |
Pointer to problem definition that is valid during solve. | |
int | _K |
number of stages for which integrator was set up | |
int | _k |
index of current stage | |
int | _kk |
index of current sample period | |
int | _nxt |
total number of DAE states | |
int | _nd |
number of discrete-time states | |
int | _nv |
number of expansion variables | |
int | _na |
number of algebraic states (no time derivative) | |
int | _nx |
number of states treated by optimizer (nx=nxt-nv) | |
int | _nu |
number of control parameters | |
int | _nq |
number of sensitivity parameters (nq=nx+nu) | |
bool | _sa |
Indicate if sensitivity analysis is required together with solution of differential equations. | |
bool | _serr |
Boolean to indicate if sensitivities should be considered for error tolerance (default: false). | |
int | _n |
Number of continuous-time states during integration (nxt-nd: total number minus discrete-time states). | |
int | _m |
Number of control parameters during integration (nd+nu: discrete-time states and actual control parameters). | |
If_List | _ifList |
container for interface elements | |
double | _stepsize |
Constant stepsize to be taken by integator. More... | |
double | _min_stepsize |
Minimal stepsize to be taken by integator. More... | |
double | _rtol |
Relative integration error tolerance (only for variable stepsize). | |
double | _atol |
Absolute integration error tolerance (only for variable stepsize). | |
int | _res_evals |
number of residual evaluations | |
int | _sen_evals |
number of sensitivity evaluations | |
int | _jac_evals |
number of Jacobian evaluations | |
Interface for standard solvers for Ordinary Differential Equations (ODE) hiding details of sensitivity analysis.
Sensitivity equations are appended to the model equations. This base class bypasses the high-level Omu_Integrator::solve method and directly calls sys->continuous (optionally exploiting ADOL-C). Nevertheless discrete-time states and control parameters are treated in one vector of model parameters for derived classes.
|
virtual |
Initialize integrator, like adaptation of array dimensions and test of pre-conditions, like explicit ODE.
An explicit ODE is present if Fc.Jdx.is_scalar() and Fc.Jdx[0][0] != 0.0. An algebraic state j, 0<=j<_n can be identified with Fc.Jdx.is_zero_column[j]. Note that the init method should not find consistent initial conditions of a DAE as parameters may jump between sample periods kk afterwards.
k | stage |
xc | continuous-time states, dim(xc)=_n |
q | sensitivity parameters, dim(q)=_nq |
Fc | pre-initialized data structures for evaluating residuals, dim(Fc)=_n, including structurally analyzed Jacobians, dim(Fc.Jx)=_n._n, dim(Fc.Jxp)=_n._n, dim(Fc.Jq)=_n._nq |
sa | indicates if sensitivity analysis is required |
Reimplemented from Omu_Integrator.
|
inlineprotectedvirtual |
Initialize solution of differential equations for stage k.
Reimplemented from Omu_Integrator.
|
pure virtual |
Interface to be implemented by derived ODE solvers.
y contains the initial solution and the result for values and sensitivities (dim(y)=_n=_nxt-_nd without sensitivities, dim(y)=_n*(1+_nxt-_nv+_nu) with sensitivities). u contains discrete-time states and control parameters (dim(u)=_m=_nd+_nu).
Implemented in Omu_IntRK4, Omu_IntEuler, and Omu_IntRKsuite.
|
virtual |
Solve differential equations over one sample period.
The differential-algebraic equations can be evaluated by calling Omu_Program::continuous for sys. Note that the first _nd elements of xt are discrete-time states that need to be treated like control parameters u by an integrator. Furthermore, the last _nv elements of xt are expansion variables that are not seen by the optimizer and accordingly no sensitivities are required with respect to them. The default implementation of solve calls the high-level version.
kk | sample period |
tstart | start time for integration |
tend | end time for integration |
x | state variables for optimization, including bounds etc. |
u | control parameters for optimization |
sys | problem definition for calling Omu_Program::continuous |
Ft | pre-initialized data structures for resisuals and Jacobians |
xt | start values for integration at tstart, dim(xt)=_nxt; initial sensitivity matrices xt.Sx, dim(xt.Sx)=_nxt._nx, and xt.Su, dim(xt.Su)=_nxt._nu, if _sa is true |
xt | result at tend; xt.Sx and xt.Su at tend if _sa is true |
E_CONV | indicate that the integrator failed to converge; may be caught during optimization step length test |
Reimplemented from Omu_Integrator.
Callback routine for evaluating the model by derived ODE solvers.