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,HyperbolicSolverIMEX: 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:
IMEXSolverIMEX 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'#