zoomy_core.fvm.solver_imex_numpy module

zoomy_core.fvm.solver_imex_numpy module#

IMEX solver: explicit flux + implicit source (numpy backend).

Extends HyperbolicSolver with: - Derivative-aware auxiliary variable updates (DerivativeAwareSolverMixin) - Implicit source stepping: local (cell-wise Newton) or global (Newton-GMRES)

Solver hierarchy:
IMEXSolver(HyperbolicSolver)
-> step(dt):

apply_bcs -> reconstruct -> flux -> ode_step -> implicit_diffusion -> implicit_source -> update_state

class zoomy_core.fvm.solver_imex_numpy.IMEXStats(n_steps: int = 0, source_mode: str = 'auto', implicit_calls: int = 0, implicit_time_s: float = 0.0, init_time_s: float = 0.0, runtime_only_s: float = 0.0, total_time_s: float = 0.0)#

Bases: object

Parameters:
  • n_steps (int) –

  • source_mode (str) –

  • implicit_calls (int) –

  • implicit_time_s (float) –

  • init_time_s (float) –

  • runtime_only_s (float) –

  • total_time_s (float) –

n_steps: int = 0#
source_mode: str = 'auto'#
implicit_calls: int = 0#
implicit_time_s: float = 0.0#
init_time_s: float = 0.0#
runtime_only_s: float = 0.0#
total_time_s: float = 0.0#
class zoomy_core.fvm.solver_imex_numpy.IMEXSolver(**kwargs)#

Bases: DerivativeAwareSolverMixin, HyperbolicSolver

IMEX: explicit flux (Riemann solver) + implicit source (Newton/GMRES).

Inherits the symbolic Riemann solver from HyperbolicSolver. Adds derivative-aware Qaux updates and implicit source stepping.

Parameters:
  • source_mode ("auto", "local", or "global") – “local”: cell-wise Newton (no inter-cell coupling in source) “global”: Newton-GMRES (for derivative-coupled sources) “auto”: chooses based on model.derivative_specs

  • jv_backend ("analytic" or "fd") – Jacobian-vector product method for global mode.

source_mode = 'auto'#
implicit_tol = 1e-08#
implicit_maxiter = 8#
gmres_tol = 1e-07#
gmres_maxiter = 40#
jv_backend = 'analytic'#
fd_eps = 1e-07#
setup_simulation(mesh, model, write_output=False)#

Build all operators. Extends HyperbolicSolver.setup_simulation.

step(dt)#

One IMEX timestep: explicit flux -> implicit diffusion -> implicit source.

Each line is one physics operation. No if-clauses.

run_simulation()#

Time loop for IMEX solver.

solve(mesh, model, write_output=False)#

Convenience: setup_simulation + run_simulation.

name = 'IMEXSolver'#
class zoomy_core.fvm.solver_imex_numpy.FSFIMEXSolver(**kwargs)#

Bases: IMEXSolver

IMEX solver for free-surface flows (SWE, SME, VAM).

Combines: - Positive (hydrostatic reconstruction) Rusanov for explicit flux - Implicit source stepping (local/global Newton-GMRES) - Derivative-aware Qaux updates

Requires model variables ‘b’ and ‘h’.

name = 'FSFIMEXSolver'#