Loading...
Searching...
No Matches
ODESolver Class Referenceabstract

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

#include <ODESolver.H>

Inheritance diagram for ODESolver:
Collaboration diagram for ODESolver:

Classes

class  stepState

Public Member Functions

 TypeName ("ODESolver")
 Runtime type information.
 declareRunTimeSelectionTable (autoPtr, ODESolver, dictionary,(const ODESystem &ode, const dictionary &dict),(ode, dict))
 ODESolver (const ODESystem &ode, const dictionary &dict)
 Construct for given ODESystem.
 ODESolver (const ODESystem &ode, const scalarField &absTol, const scalarField &relTol)
 Construct for given ODESystem specifying tolerances.
virtual ~ODESolver ()=default
 Destructor.
label nEqns () const noexcept
 The number of equations to solve.
scalarFieldabsTol () noexcept
 Access to the absolute tolerance field.
scalarFieldrelTol () noexcept
 Access to the relative tolerance field.
virtual bool resize ()=0
 Resize the ODE solver.
template<class Type>
void resizeField (UList< Type > &f) const
void resizeMatrix (scalarSquareMatrix &m) const
virtual void solve (scalar &x, scalarField &y, scalar &dxTry) const
 Solve the ODE system as far as possible up to dxTry.
virtual void solve (scalar &x, scalarField &y, stepState &step) const
 Solve the ODE system as far as possible up to dxTry.
virtual void solve (const scalar xStart, const scalar xEnd, scalarField &y, scalar &dxEst) const
 Solve the ODE system from xStart to xEnd, update the state.

Static Public Member Functions

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

Protected Member Functions

scalar normalizeError (const scalarField &y0, const scalarField &y, const scalarField &err) const
 Return the nomalized scalar error.
 ODESolver (const ODESolver &)=delete
 No copy construct.
void operator= (const ODESolver &)=delete
 No copy assignment.

Protected Attributes

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

Friends

class ODESystem

Detailed Description

Abstract base-class for ODE system solvers.

Source files

Definition at line 52 of file ODESolver.H.

Constructor & Destructor Documentation

◆ ODESolver() [1/3]

ODESolver ( const ODESolver & )
protecteddelete

◆ ODESolver() [2/3]

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

Construct for given ODESystem.

Definition at line 56 of file ODESolver.C.

References absTol_, dict, e, maxN_, maxSteps_, n_, nEqns(), odes_, ODESystem, and relTol_.

Here is the call graph for this function:

◆ ODESolver() [3/3]

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

Construct for given ODESystem specifying tolerances.

Definition at line 67 of file ODESolver.C.

References absTol(), absTol_, maxN_, maxSteps_, n_, nEqns(), odes_, ODESystem, relTol(), and relTol_.

Here is the call graph for this function:

◆ ~ODESolver()

virtual ~ODESolver ( )
virtualdefault

Destructor.

Member Function Documentation

◆ normalizeError()

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

Return the nomalized scalar error.

Definition at line 35 of file ODESolver.C.

References absTol_, forAll, Foam::mag(), Foam::max(), relTol_, y, and Foam::y0().

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

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

◆ operator=()

void operator= ( const ODESolver & )
protecteddelete

No copy assignment.

References ODESolver().

Here is the call graph for this function:

◆ TypeName()

TypeName ( "ODESolver" )

Runtime type information.

◆ declareRunTimeSelectionTable()

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

References absTol(), dict, ODESolver(), ODESystem, and relTol().

Here is the call graph for this function:

◆ New()

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

Select null constructed.

Definition at line 26 of file ODESolverNew.C.

References dict, Foam::endl(), Foam::exit(), Foam::FatalIOError, FatalIOErrorInLookup, Foam::Info, and ODESystem.

Referenced by thermoCoupleProbes::thermoCoupleProbes().

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

◆ nEqns()

label nEqns ( ) const
inlinenoexcept

The number of equations to solve.

Definition at line 199 of file ODESolver.H.

References n_, and Foam::noexcept.

Referenced by ODESolver(), and ODESolver().

Here is the caller graph for this function:

◆ absTol()

scalarField & absTol ( )
inlinenoexcept

Access to the absolute tolerance field.

Definition at line 204 of file ODESolver.H.

References absTol_, and Foam::noexcept.

Referenced by declareRunTimeSelectionTable(), and ODESolver().

Here is the caller graph for this function:

◆ relTol()

scalarField & relTol ( )
inlinenoexcept

Access to the relative tolerance field.

Definition at line 209 of file ODESolver.H.

References Foam::noexcept, and relTol_.

Referenced by declareRunTimeSelectionTable(), and ODESolver().

Here is the caller graph for this function:

◆ resize()

bool resize ( )
pure virtual

◆ resizeField() [1/2]

template<class Type>
void resizeField ( UList< Type > & f,
const label n )
inlinestatic

◆ resizeField() [2/2]

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

Definition at line 32 of file ODESolverI.H.

References f(), and n_.

Here is the call graph for this function:

◆ resizeMatrix()

void resizeMatrix ( scalarSquareMatrix & m) const
inline

Definition at line 39 of file ODESolverI.H.

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

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

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,
scalar & dxTry ) const
virtual

Solve the ODE system 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 Euler, EulerSI, RKCK45, RKDP45, RKF45, rodas23, rodas34, Rosenbrock12, Rosenbrock23, Rosenbrock34, SIBS, and Trapezoid.

Definition at line 109 of file ODESolver.C.

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

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

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

◆ solve() [2/3]

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

Solve the ODE system 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 Euler, EulerSI, RKCK45, RKDP45, RKF45, rodas23, rodas34, Rosenbrock12, Rosenbrock23, Rosenbrock34, seulex, and Trapezoid.

Definition at line 122 of file ODESolver.C.

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

Here is the call graph for this function:

◆ solve() [3/3]

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

Solve the ODE system from xStart to xEnd, update the state.

and return an estimate for the next step in dxTry

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

Definition at line 135 of file ODESolver.C.

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

Here is the call graph for this function:

◆ ODESystem

Member Data Documentation

◆ odes_

◆ maxN_

const label maxN_
protected

Maximum size of the ODESystem.

Definition at line 66 of file ODESolver.H.

Referenced by ODESolver(), ODESolver(), and resize().

◆ n_

◆ absTol_

scalarField absTol_
protected

Absolute convergence tolerance per step.

Definition at line 76 of file ODESolver.H.

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

◆ relTol_

scalarField relTol_
protected

Relative convergence tolerance per step.

Definition at line 81 of file ODESolver.H.

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

◆ maxSteps_

label maxSteps_
protected

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

Definition at line 86 of file ODESolver.H.

Referenced by ODESolver(), ODESolver(), and solve().


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