HQP  1.9.6
Omu_IntODE Class Referenceabstract

Interface for standard solvers for Ordinary Differential Equations (ODE) hiding details of sensitivity analysis. More...

#include <Omu_IntODE.h>

Inheritance diagram for Omu_IntODE:
[legend]

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
 

Detailed Description

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.

Member Function Documentation

void Omu_IntODE::init ( int  k,
const Omu_StateVec xc,
const Omu_Vec q,
const Omu_DependentVec Fc,
bool  sa 
)
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.

Parameters
kstage
xccontinuous-time states, dim(xc)=_n
qsensitivity parameters, dim(q)=_nq
Fcpre-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
saindicates if sensitivity analysis is required

Reimplemented from Omu_Integrator.

void Omu_IntODE::init_stage ( int  k,
const Omu_States x,
const Omu_Vector u,
bool  sa = false 
)
inlineprotectedvirtual

Initialize solution of differential equations for stage k.

Reimplemented from Omu_Integrator.

virtual void Omu_IntODE::ode_solve ( double  tstart,
VECP  y,
const VECP  u,
double  tend 
)
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).

See Also
Omu_Integrator for more details about the dimensions.

Implemented in Omu_IntRK4, Omu_IntEuler, and Omu_IntRKsuite.

void Omu_IntODE::solve ( int  kk,
double  tstart,
double  tend,
const Omu_VariableVec x,
const Omu_VariableVec u,
Omu_Program sys,
Omu_DependentVec Ft,
Omu_StateVec xt 
)
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.

Parameters
kksample period
tstartstart time for integration
tendend time for integration
xstate variables for optimization, including bounds etc.
ucontrol parameters for optimization
sysproblem definition for calling Omu_Program::continuous
Ftpre-initialized data structures for resisuals and Jacobians
xtstart 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
Return values
xtresult at tend; xt.Sx and xt.Su at tend if _sa is true
Exceptions
E_CONVindicate that the integrator failed to converge; may be caught during optimization step length test

Reimplemented from Omu_Integrator.

void Omu_IntODE::syseq ( double  t,
const VECP  y,
const VECP  u,
VECP  f 
)

Callback routine for evaluating the model by derived ODE solvers.


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