Source code for irksome.explicit_stepper
from .dirk_stepper import DIRKTimeStepper
# We can reuse the DIRK stepper to do one-stage at a time, but since we're
# just solving a mass matrix at each time step we can optimize to
# never rebuild the jacobian or preconditioner.
[docs]
class ExplicitTimeStepper(DIRKTimeStepper):
def __init__(self, F, butcher_tableau, t, dt, u0, bcs=None,
solver_parameters=None,
appctx=None):
assert butcher_tableau.is_explicit
# we just have one mass matrix we're reusing for each time step and
# each stage, so we can nudge this along
solver_parameters = {} if solver_parameters is None else solver_parameters
solver_parameters["snes_lag_jacobian_persists"] = "true"
solver_parameters["snes_lag_jacobian"] = -2
solver_parameters["snes_lag_preconditioner_persists"] = "true"
solver_parameters["snes_lag_preconditioner"] = -2
super(ExplicitTimeStepper, self).__init__(
F, butcher_tableau, t, dt, u0, bcs=bcs,
solver_parameters=solver_parameters, appctx=appctx,
nullspace=None)