Linear solvers and multigrid¶
FluxCore’s nonlinear physics creates several large sparse systems with different numerical character. The API can assign a typed GPU-native linear policy to the primary coupled system, turbulence transport, fluid energy and solid energy while retaining an automatic production default.
These objects configure convergence behaviour and computational budgets. They do not reveal FluxCore’s proprietary algorithms, GPU kernels or data layout.
Iterative linear solver¶
- class gradientdynamics.fluxcore.IterativeLinearSolver(*, convergence: LinearConvergence = LinearConvergence(), precision: str = 'automatic', relaxation: float = 1.0, restart_budget: int = 3, recovery: str = 'automatic')¶
General GPU-native iterative policy.
- precision: Literal['automatic', 'mixed', 'double']¶
Precision policy. Automatic balances throughput with achieved convergence on the selected GPU generation.
- relaxation: float¶
Linear update multiplier.
- restart_budget: int¶
Maximum automatic restart transactions before control returns to the enclosing nonlinear step.
- recovery: Literal['automatic', 'strict', 'fail_fast']¶
Behaviour after stagnation, loss of finite state or excessive residual growth.
Multigrid hierarchy¶
- class gradientdynamics.fluxcore.MultigridControls(*, maximum_levels: int = 20, minimum_coarse_size: int = 8, cycle: MultigridCycle | str = 'v', pre_sweeps: int = 1, post_sweeps: int = 1, coarse_iterations: int = 50, coarse_tolerance: float = 0.1, relaxation: float = 0.75, smoother: str = 'automatic', rebuild: str = 'automatic', freeze_after_pseudo_step: int | None = 300)¶
GPU-resident hierarchy and cycling policy.
- maximum_levels: int¶
Maximum hierarchy depth. Construction stops earlier when the coarse-size criterion is met.
- minimum_coarse_size: int¶
Minimum aggregate size used while constructing coarse levels.
- cycle: MultigridCycle | Literal['v', 'w', 'f']¶
Traversal used across hierarchy levels.
- pre_sweeps: int¶
Smoothing passes before coarse-level correction.
- post_sweeps: int¶
Smoothing passes after coarse-level correction.
- coarse_iterations: int¶
Iteration budget on the coarsest active level.
- smoother: Literal['automatic', 'point', 'block']¶
High-level smoothing policy. Automatic is recommended across mixed physics.
- rebuild: Literal['automatic', 'every_step', 'frozen']¶
Hierarchy refresh policy as nonlinear coefficients and physical time evolve.
- freeze_after_pseudo_step: int | None¶
Allow reuse after the hierarchy has stabilised for the requested number of pseudo-steps. Set to
Noneto keep automatic rebuild decisions active.
- class gradientdynamics.fluxcore.MultigridLinearSolver(*, convergence: LinearConvergence = LinearConvergence(), multigrid: MultigridControls = MultigridControls(), maximum_cycles: int = 15, precision: str = 'automatic', recovery: str = 'automatic')¶
GPU-native multigrid linear policy.
- maximum_cycles: int¶
Maximum hierarchy cycles for one linear transaction.
- multigrid: MultigridControls¶
Hierarchy construction, traversal and smoothing controls.
Per-system assignment¶
- class gradientdynamics.fluxcore.LinearSolverSet(*, primary: IterativeLinearSolver | MultigridLinearSolver | None = None, turbulence: IterativeLinearSolver | MultigridLinearSolver | None = None, fluid_energy: IterativeLinearSolver | MultigridLinearSolver | None = None, solid_energy: IterativeLinearSolver | MultigridLinearSolver | None = None, default: IterativeLinearSolver | MultigridLinearSolver | None = None)¶
Linear policies assigned by equation group.
- primary: IterativeLinearSolver | MultigridLinearSolver | None¶
Policy for the primary coupled flow system.
- turbulence: IterativeLinearSolver | MultigridLinearSolver | None¶
Policy for turbulence transport equations.
- fluid_energy: IterativeLinearSolver | MultigridLinearSolver | None¶
Policy for the fluid energy equation in thermal simulations.
- solid_energy: IterativeLinearSolver | MultigridLinearSolver | None¶
Policy for solid-region conduction systems.
- default: IterativeLinearSolver | MultigridLinearSolver | None¶
Fallback for equation groups without an explicit policy. Omit all policies to use FluxCore’s validated automatic selection.
Multigrid example¶
from gradientdynamics.fluxcore import (
IterativeLinearSolver,
LinearConvergence,
LinearSolverSet,
MultigridControls,
MultigridLinearSolver,
)
flow_solver = MultigridLinearSolver(
convergence=LinearConvergence(
relative_tolerance=1e-4,
maximum_iterations=250,
stagnation_window=16,
),
multigrid=MultigridControls(
maximum_levels=16,
cycle="v",
pre_sweeps=2,
post_sweeps=2,
coarse_iterations=60,
smoother="block",
rebuild="automatic",
),
maximum_cycles=20,
precision="automatic",
)
transport_solver = IterativeLinearSolver(
convergence=LinearConvergence(
relative_tolerance=5e-4,
maximum_iterations=120,
),
recovery="automatic",
)
linear_solvers = LinearSolverSet(
primary=flow_solver,
turbulence=transport_solver,
fluid_energy=flow_solver,
solid_energy=flow_solver,
)