ODESolver Class Referenceabstract

Abstract base-class for ODE system solvers. More...

Inheritance diagram for ODESolver:
Collaboration diagram for ODESolver:

Classes

class  stepState
 

Public Member Functions

 TypeName ("ODESolver")
 Runtime type information. More...
 
 declareRunTimeSelectionTable (autoPtr, ODESolver, dictionary,(const ODESystem &ode, const dictionary &dict),(ode, dict))
 
 ODESolver (const ODESystem &ode, const dictionary &dict)
 Construct for given ODESystem. More...
 
 ODESolver (const ODESystem &ode, const scalarField &absTol, const scalarField &relTol)
 Construct for given ODESystem specifying tolerances. More...
 
 ODESolver (const ODESolver &)=delete
 Disallow default bitwise copy construction. More...
 
virtual ~ODESolver ()
 Destructor. More...
 
label nEqns () const
 Return the number of equations to solve. More...
 
scalarFieldabsTol ()
 Return access to the absolute tolerance field. More...
 
scalarFieldrelTol ()
 Return access to the relative tolerance field. More...
 
virtual bool resize ()=0
 Resize the ODE solver. More...
 
template<class Type >
void resizeField (UList< Type > &f) const
 
void resizeMatrix (scalarSquareMatrix &m) const
 
virtual void solve (scalar &x, scalarField &y, const label li, scalar &dxTry) const
 Solve the ODE system from the current state xStart, y. More...
 
virtual void solve (scalar &x, scalarField &y, const label li, stepState &step) const
 Solve the ODE system from the current state xStart, y. More...
 
virtual void solve (const scalar xStart, const scalar xEnd, scalarField &y, const label li, scalar &dxEst) const
 Solve the ODE system from the current state xStart, y. More...
 
void operator= (const ODESolver &)=delete
 Disallow default bitwise assignment. More...
 

Static Public Member Functions

static autoPtr< ODESolverNew (const ODESystem &ode, const dictionary &dict)
 Select null constructed. More...
 
template<class Type >
static void resizeField (UList< Type > &f, const label n)
 

Protected Member Functions

scalar normaliseError (const scalarField &y0, const scalarField &y, const scalarField &err) const
 Return the normalised scalar error. More...
 

Protected Attributes

const ODESystemodes_
 Reference to ODESystem. More...
 
const label maxN_
 Maximum size of the ODESystem. More...
 
label n_
 Size of the ODESystem (adjustable) More...
 
scalarField absTol_
 Absolute convergence tolerance per step. More...
 
scalarField relTol_
 Relative convergence tolerance per step. More...
 
label maxSteps_
 The maximum number of sub-steps allowed for the integration step. More...
 

Friends

class ODESystem
 

Detailed Description

Abstract base-class for ODE system solvers.

Source files

Definition at line 50 of file ODESolver.H.

Constructor & Destructor Documentation

◆ ODESolver() [1/3]

ODESolver ( const ODESystem ode,
const dictionary dict 
)

Construct for given ODESystem.

Definition at line 60 of file ODESolver.C.

Referenced by ODESolver::stepState::stepState().

Here is the caller graph for this function:

◆ ODESolver() [2/3]

ODESolver ( const ODESystem ode,
const scalarField absTol,
const scalarField relTol 
)

Construct for given ODESystem specifying tolerances.

Definition at line 72 of file ODESolver.C.

◆ ODESolver() [3/3]

ODESolver ( const ODESolver )
delete

Disallow default bitwise copy construction.

◆ ~ODESolver()

virtual ~ODESolver ( )
inlinevirtual

Member Function Documentation

◆ normaliseError()

Foam::scalar normaliseError ( const scalarField y0,
const scalarField y,
const scalarField err 
) const
protected

Return the normalised scalar error.

Definition at line 40 of file ODESolver.C.

References forAll, Foam::mag(), and Foam::max().

Referenced by Trapezoid::solve(), Euler::solve(), EulerSI::solve(), Rosenbrock12::solve(), Rosenbrock23::solve(), rodas23::solve(), RKCK45::solve(), rodas34::solve(), RKDP45::solve(), RKF45::solve(), and Rosenbrock34::solve().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TypeName()

TypeName ( "ODESolver"  )

Runtime type information.

◆ declareRunTimeSelectionTable()

declareRunTimeSelectionTable ( autoPtr  ,
ODESolver  ,
dictionary  ,
(const ODESystem &ode, const dictionary &dict ,
(ode, dict  
)

Referenced by ODESolver::stepState::stepState().

Here is the caller graph for this function:

◆ New()

Foam::autoPtr< Foam::ODESolver > New ( const ODESystem ode,
const dictionary dict 
)
static

Select null constructed.

Definition at line 31 of file ODESolverNew.C.

References dict, Foam::endl(), Foam::exit(), Foam::FatalError, FatalErrorInFunction, Foam::Info, dictionary::lookup(), and Foam::nl.

Referenced by ODESolver::stepState::stepState().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ nEqns()

Foam::label nEqns ( ) const
inline

Return the number of equations to solve.

Definition at line 29 of file ODESolverI.H.

References ODESolver::n_.

Referenced by ODESolver::~ODESolver().

Here is the caller graph for this function:

◆ absTol()

Foam::scalarField & absTol ( )
inline

Return access to the absolute tolerance field.

Definition at line 35 of file ODESolverI.H.

References ODESolver::absTol_.

Referenced by ODESolver::stepState::stepState(), and ODESolver::~ODESolver().

Here is the caller graph for this function:

◆ relTol()

Foam::scalarField & relTol ( )
inline

Return access to the relative tolerance field.

Definition at line 41 of file ODESolverI.H.

References ODESolver::relTol_.

Referenced by ODESolver::stepState::stepState(), and ODESolver::~ODESolver().

Here is the caller graph for this function:

◆ resize()

◆ resizeField() [1/2]

◆ resizeField() [2/2]

void resizeField ( UList< Type > &  f) const
inline

Definition at line 55 of file ODESolverI.H.

References ODESolver::n_, and ODESolver::resizeField().

Here is the call graph for this function:

◆ resizeMatrix()

void resizeMatrix ( scalarSquareMatrix m) const
inline

Definition at line 61 of file ODESolverI.H.

References ODESolver::n_, and SquareMatrix< Type >::shallowResize().

Referenced by EulerSI::resize(), Rosenbrock12::resize(), rodas23::resize(), Rosenbrock23::resize(), rodas34::resize(), Rosenbrock34::resize(), SIBS::resize(), seulex::resize(), and ODESolver::~ODESolver().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ solve() [1/3]

void solve ( scalar &  x,
scalarField y,
const label  li,
scalar &  dxTry 
) const
virtual

Solve the ODE system from the current state xStart, y.

and the optional index into the list of systems to solve li as far as possible up to dxTry adjusting the step as necessary to provide a solution within the specified tolerance. Update the state and return an estimate for the next step in dxTry

Reimplemented in SIBS, Rosenbrock34, RKF45, RKDP45, RKCK45, rodas34, rodas23, Rosenbrock23, Rosenbrock12, EulerSI, Euler, and Trapezoid.

Definition at line 116 of file ODESolver.C.

References ODESolver::stepState::dxTry.

Referenced by ODESolver::resize(), ODESolver::solve(), Euler::~Euler(), EulerSI::~EulerSI(), ODESolver::~ODESolver(), RKCK45::~RKCK45(), RKDP45::~RKDP45(), RKF45::~RKF45(), rodas23::~rodas23(), rodas34::~rodas34(), Rosenbrock12::~Rosenbrock12(), Rosenbrock23::~Rosenbrock23(), Rosenbrock34::~Rosenbrock34(), and Trapezoid::~Trapezoid().

Here is the caller graph for this function:

◆ solve() [2/3]

void solve ( scalar &  x,
scalarField y,
const label  li,
stepState step 
) const
virtual

Solve the ODE system from the current state xStart, y.

and the optional index into the list of systems to solve li as far as possible up to step.dxTry adjusting the step as necessary to provide a solution within the specified tolerance. Update the state and return the step actually taken in step.dxDid and an estimate for the next step in step.dxTry

Reimplemented in seulex.

Definition at line 130 of file ODESolver.C.

References ODESolver::stepState::dxDid, ODESolver::stepState::dxTry, ODESolver::solve(), and x.

Here is the call graph for this function:

◆ solve() [3/3]

void solve ( const scalar  xStart,
const scalar  xEnd,
scalarField y,
const label  li,
scalar &  dxEst 
) const
virtual

Solve the ODE system from the current state xStart, y.

and the optional index into the list of systems to solve li to xEnd and return an estimate for the next step in dxTry

Definition at line 144 of file ODESolver.C.

References ODESolver::stepState::dxDid, ODESolver::stepState::dxTry, Foam::exit(), Foam::FatalError, FatalErrorInFunction, ODESolver::stepState::first, ODESolver::stepState::last, ODESolver::maxSteps_, Foam::nl, ODESolver::stepState::prevReject, ODESolver::stepState::reject, ODESolver::solve(), and x.

Here is the call graph for this function:

◆ operator=()

void operator= ( const ODESolver )
delete

Disallow default bitwise assignment.

Referenced by ODESolver::~ODESolver().

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ ODESystem

friend class ODESystem
friend

Definition at line 89 of file ODESolver.H.

Member Data Documentation

◆ odes_

◆ maxN_

const label maxN_
protected

Maximum size of the ODESystem.

Definition at line 61 of file ODESolver.H.

Referenced by ODESolver::resize().

◆ n_

◆ absTol_

scalarField absTol_
protected

Absolute convergence tolerance per step.

Definition at line 67 of file ODESolver.H.

Referenced by ODESolver::absTol(), ODESolver::resize(), SIBS::solve(), and seulex::solve().

◆ relTol_

scalarField relTol_
protected

Relative convergence tolerance per step.

Definition at line 70 of file ODESolver.H.

Referenced by ODESolver::relTol(), ODESolver::resize(), SIBS::solve(), and seulex::solve().

◆ maxSteps_

label maxSteps_
protected

The maximum number of sub-steps allowed for the integration step.

Definition at line 73 of file ODESolver.H.

Referenced by ODESolver::solve().


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