4.4.1 pde.solvers.base module

Package that contains base classes for solvers.

Beside the abstract base class defining the interfaces, we also provide AdaptiveSolverBase, which contains methods for implementing adaptive solvers.

class AdaptiveSolverBase(pde, *, backend='auto', adaptive=True, tolerance=0.0001)[source]

Bases: SolverBase

base class for adaptive time steppers

Parameters:
  • pde (PDEBase) – The instance describing the pde that needs to be solved

  • backend (str) – Determines how the function is created. Accepted values are ‘numpy` and ‘numba’. Alternatively, ‘auto’ lets the code decide for the most optimal backend.

  • adaptive (bool) – When enabled, the time step is adjusted during the simulation using the error tolerance set with tolerance.

  • tolerance (float) – The error tolerance used in adaptive time stepping. This is used in adaptive time stepping to choose a time step which is small enough so the truncation error of a single step is below tolerance.

dt_max: float = 10000000000.0

maximal time step that the adaptive solver will use

Type:

float

dt_min: float = 1e-10

minimal time step that the adaptive solver will use

Type:

float

make_stepper(state, dt=None)[source]

return a stepper function using an explicit scheme

Parameters:
  • state (FieldBase) – An example for the state from which the grid and other information can be extracted

  • dt (float) – Time step used (Uses SolverBase.dt_default if None). This sets the initial time step for adaptive solvers.

Returns:

Function that can be called to advance the state from time t_start to time t_end. The function call signature is (state: numpy.ndarray, t_start: float, t_end: float)

Return type:

Callable[[FieldBase, float, float], float]

exception ConvergenceError[source]

Bases: RuntimeError

indicates that an implicit step did not converge

class SolverBase(pde, *, backend='auto')[source]

Bases: object

base class for PDE solvers

Parameters:
  • pde (PDEBase) – The partial differential equation that should be solved

  • backend (str) – Determines how the function is created. Accepted values are ‘numpy` and ‘numba’. Alternatively, ‘auto’ lets the code decide for the most optimal backend.

dt_default: float = 0.001

default time step used if no time step was specified

Type:

float

classmethod from_name(name, pde, **kwargs)[source]

create solver class based on its name

Solver classes are automatically registered when they inherit from SolverBase. Note that this also requires that the respective python module containing the solver has been loaded before it is attempted to be used.

Parameters:
  • name (str) – The name of the solver to construct

  • pde (PDEBase) – The partial differential equation that should be solved

  • **kwargs – Additional arguments for the constructor of the solver

Returns:

An instance of a subclass of SolverBase

Return type:

SolverBase

make_stepper(state, dt=None)[source]

return a stepper function using an explicit scheme

Parameters:
Returns:

Function that can be called to advance the state from time t_start to time t_end. The function call signature is (state: numpy.ndarray, t_start: float, t_end: float)

Return type:

Callable[[FieldBase, float, float], float]

registered_solvers = ['AdaptiveSolverBase', 'CrankNicolsonSolver', 'ExplicitMPISolver', 'ExplicitSolver', 'ImplicitSolver', 'ScipySolver', 'crank-nicolson', 'explicit', 'explicit_mpi', 'implicit', 'scipy']