Advanced solver controls

FluxCore is a complete GPU-native CFD and multiphysics solver. Its typed control objects expose physical models, nonlinear progression, time advancement, GPU-native linear-system solution, multigrid policy, monitoring and result production without exposing the proprietary algorithms beneath them.

Automatic settings are the recommended starting point. Expert controls are available for verification, difficult meshes, time-resolved studies and repeatable production workflows.

Note

FluxCore is not a repackaging of a conventional segregated CPU solver. The simulation path—from equation assembly through convergence assessment and result production—is designed for GPU execution as one coordinated system.

Aggregate configuration

class gradientdynamics.fluxcore.AdvancedControls(*, spatial: SpatialControls | None = None, progression: ProgressionControls | None = None, convergence: ConvergenceCriteria | None = None, turbulence: TurbulenceModel | None = None, time: SteadyTimeControls | PhysicalTimeControls | None = None, linear_solvers: LinearSolverSet | None = None, outputs: OutputControls | None = None, rotating_zones: Sequence[RotatingZone] = (), thermal: ThermalControls | None = None, checkpoints: CheckpointControls | None = None, compute: ComputePreference | None = None)

Optional expert controls attached to SimulationConfig.

Unspecified groups use FluxCore’s validated automatic policies. The detailed objects are documented under Turbulence models, Time integration, Linear solvers and multigrid and Output and monitoring controls.

classmethod production() AdvancedControls

Create balanced production defaults with automatic stability management, convergence monitoring and checkpointing.

classmethod validation() AdvancedControls

Create stricter reporting and convergence defaults for verification and validation work.

Spatial controls

class gradientdynamics.fluxcore.SpatialControls(*, accuracy: str = 'second_order', boundedness: str = 'automatic', gradient_quality: str = 'enhanced', non_orthogonal_handling: str = 'automatic', wall_resolution: str = 'resolved')

Accuracy and robustness policy for spatial operators on polyhedral meshes.

accuracy: Literal['first_order', 'second_order']

Requested formal spatial accuracy. First order is intended for diagnosis and initialisation, not final production results.

boundedness: Literal['automatic', 'strict', 'low_dissipation']

Policy for maintaining physical states near steep gradients and difficult cells.

gradient_quality: Literal['standard', 'enhanced']

Gradient accuracy policy for irregular polyhedra and boundary-layer cells.

non_orthogonal_handling: Literal['automatic', 'conservative', 'aggressive']

Treatment level for non-orthogonal and skewed cells.

Nonlinear progression

class gradientdynamics.fluxcore.ProgressionControls(*, initial_cfl: float = 1.0, target_cfl: float = 100.0, ramp_iterations: int = 500, growth_factor: float = 1.25, retreat_factor: float = 0.5, update_limit: float | None = None, adaptive: bool = True, recovery: str = 'automatic')

Controls how a steady or inner transient solve advances from a robust startup state toward high-throughput convergence.

initial_cfl: float

Starting pseudo-time Courant number.

target_cfl: float

Maximum requested pseudo-time Courant number after successful progression.

ramp_iterations: int

Nominal pseudo-iterations over which the target is earned.

growth_factor: float

Maximum CFL growth after a successful convergence window.

retreat_factor: float

CFL multiplier used after a rejected or unstable update.

adaptive: bool

Allow FluxCore to advance or retreat based on observed nonlinear behaviour.

recovery: Literal['automatic', 'strict', 'disabled']

Policy when an attempted update does not satisfy stability and progress gates.

Convergence criteria

class gradientdynamics.fluxcore.ConvergenceCriteria(*, residual: float = 1e-6, minimum_iterations: int = 100, monitor_window: int = 50, mass_imbalance: float | None = 1e-4, energy_imbalance: float | None = None, force_coefficient_delta: float | None = None, heat_balance: float | None = None, require_all: bool = True)

Multi-signal definition of a converged engineering state.

residual: float

Normalised equation-residual target.

mass_imbalance: float | None

Optional domain mass-balance tolerance.

energy_imbalance: float | None

Optional energy-balance tolerance for thermal and CHT workflows.

force_coefficient_delta: float | None

Maximum change in a monitored coefficient across the rolling window.

heat_balance: float | None

Optional normalised heat-flux balance target across selected interfaces.

require_all: bool

Require every enabled criterion rather than residual reduction alone.

Rotating zones

class gradientdynamics.fluxcore.RotatingZone(*, zone: str, axis: tuple[float, float, float], angular_speed: float, origin: tuple[float, float, float] = (0.0, 0.0, 0.0), rotating_patches: Sequence[str] = (), stationary_patches: Sequence[str] = ())

Moving-reference-frame definition for fans, pumps and turbomachinery.

zone: str

Named mesh cell zone.

axis: tuple[float, float, float]
angular_speed: float

Angular speed in radians per second.

Thermal coupling

class gradientdynamics.fluxcore.ThermalControls(*, specific_heat: float | None = None, laminar_prandtl: float = 0.71, turbulent_prandtl: float = 0.85, wall_heat_transfer: str = 'automatic', contact_resistance: Mapping[tuple[str, str], float] | None = None, outer_iterations: int | None = None, outer_tolerance: float | None = None)

Fluid energy and multi-region solid-coupling policy.

contact_resistance: Mapping[tuple[str, str], float] | None

Optional thermal contact resistance for named region-interface pairs.

outer_iterations: int | None

Maximum fluid–solid coupling transactions.

outer_tolerance: float | None

Coupled temperature and heat-flux convergence target.

Checkpoints and restart

class gradientdynamics.fluxcore.CheckpointControls(*, every_pseudo_steps: int | None = 250, every_physical_steps: int | None = 25, keep_last: int = 2, resume_from: str | Path | None = None, restart_required: bool = False, export_final_state: bool = True)

Checkpoint, warm-start and restart policy.

every_pseudo_steps: int | None

Checkpoint cadence for steady pseudo-time advancement.

every_physical_steps: int | None

Checkpoint cadence for physical-time simulations.

resume_from: str | Path | None

Compatible steady or transient state used to initialise the run.

restart_required: bool

Fail instead of starting from the default initial state if a requested checkpoint is missing or incompatible.

Compute selection

class gradientdynamics.fluxcore.ComputePreference(*, accelerator: str = 'auto', device_count: int | str = 'auto', precision: str = 'automatic', memory_profile: str = 'balanced', partitioning: str = 'automatic')

Managed GPU-capacity preference. Availability is organisation-specific.

accelerator: Literal['auto', 'a100', 'h100', 'b200']
device_count: int | Literal['auto']
memory_profile: Literal['balanced', 'capacity', 'throughput']
partitioning: Literal['automatic', 'geometry', 'balanced']

High-level distribution policy for supported multi-GPU runs.

Composed example

from gradientdynamics.fluxcore import (
    AdvancedControls,
    CheckpointControls,
    ComputePreference,
    ConvergenceCriteria,
    ProgressionControls,
    SpatialControls,
)

advanced = AdvancedControls(
    spatial=SpatialControls(accuracy="second_order", gradient_quality="enhanced"),
    progression=ProgressionControls(
        initial_cfl=1.0,
        target_cfl=200.0,
        ramp_iterations=800,
        adaptive=True,
    ),
    convergence=ConvergenceCriteria(
        residual=1e-7,
        mass_imbalance=1e-5,
        force_coefficient_delta=2e-5,
        monitor_window=100,
    ),
    turbulence=turbulence,
    time=time_controls,
    linear_solvers=linear_solvers,
    outputs=output_controls,
    checkpoints=CheckpointControls(
        every_pseudo_steps=250,
        every_physical_steps=25,
        keep_last=3,
    ),
    compute=ComputePreference(
        accelerator="h100",
        device_count="auto",
        memory_profile="throughput",
    ),
)

The four variables composed above are fully defined on the dedicated API pages. The public surface communicates FluxCore’s depth while its algorithms, GPU kernels, data structures and solver architecture remain proprietary.