zoomy_core.fvm.solver_numpy module#
FVM solver for hyperbolic PDE systems (numpy backend).
Uses the symbolic Riemann solver (riemann_solvers.py) for flux computation. No dependency on legacy flux.py or nonconservative_flux.py.
- Solver hierarchy:
- Solver (base: init, create_runtime, BCs)
- -> HyperbolicSolver (explicit time stepping + symbolic Riemann flux)
-> setup_simulation(mesh, model) -> run_simulation() -> Q, Qaux -> step(dt): apply_bcs -> reconstruct -> flux -> ode_step -> update_state
- class zoomy_core.fvm.solver_numpy.Solver(**kwargs)#
Bases:
ParameterizedBase solver class: initialization, runtime creation, boundary conditions.
- settings = None#
- initialize(mesh, model)#
- create_runtime(Q, Qaux, mesh, model)#
- get_apply_boundary_conditions(mesh, model)#
- update_q(Q, Qaux, mesh, model, parameters)#
Apply model.update_variables (h clamp, momentum ramp) at each cell.
- update_qaux(Q, Qaux, Qold, Qauxold, mesh, model, parameters, time, dt)#
- name = 'Solver'#
- class zoomy_core.fvm.solver_numpy.HyperbolicSolver(**kwargs)#
Bases:
SolverExplicit time-stepping solver using the symbolic Riemann solver.
- Core methods:
setup_simulation(mesh, model) – build all operators once run_simulation() – time loop: compute_dt -> step -> output step(dt) – one timestep (readable, no if-clauses) solve(mesh, model) – convenience: setup + run
- time_end = 0.1#
- min_dt = 1e-06#
- reconstruction_order = 1#
- limiter = 'venkatakrishnan'#
- eigenvalue_regularization = 1e-08#
- compute_dt = None#
- initialize(mesh, model)#
- get_compute_max_abs_eigenvalue(mesh, model)#
- get_flux_operator(mesh, model)#
- get_compute_source(mesh, model)#
- get_compute_source_jacobian_wrt_variables(mesh, model)#
- setup_simulation(mesh, model, write_output=True)#
Build all operators once. Stores simulation state on self.
- step(dt)#
One explicit timestep with per-stage BC application.
O1 (RK1): BCs → flux → advance O2 (RK2/Heun): BCs → flux → advance → BCs → flux → average
- run_simulation()#
Time loop: compute_dt -> step -> post_step -> output.
- solve(mesh, model, write_output=True)#
Convenience: setup_simulation + run_simulation.
- name = 'HyperbolicSolver'#
- class zoomy_core.fvm.solver_numpy.FreeSurfaceFlowSolver(**kwargs)#
Bases:
HyperbolicSolverExplicit FVM for free-surface flows (SWE, SME, VAM).
Uses positive (hydrostatic reconstruction) Rusanov with wet/dry handling. Requires model variables ‘b’ and ‘h’.
- name = 'FreeSurfaceFlowSolver'#