tud_lbm.pipeline.setup
JAX-friendly SimulationSetup and build_setup factory.
SimulationSetup is an immutable typing.NamedTuple
(i.e. a valid JAX pytree) that holds everything needed by the jitted
step function. It is built from a validated
SimulationConfig via
build_setup().
Design rationale
Closed over, not ``static_argnums``:
SimulationSetupis captured byfunctools.partial(or a closure) when constructing the scan body. JAX treats it as a compile-time constant and caches the compilation. If the setup changes, a new compilation is triggered — the correct behaviour.No mutable class instances: All fields are Python scalars, tuples, or
jax.Arrayvalues. No operator objects live here.
Usage:
from config.simulation_config import SimulationConfig
from setup.simulation_setup import build_setup
cfg = SimulationConfig(grid_shape=(64, 64), tau=0.8)
setup = build_setup(cfg)
Classes
Immutable operator container — only what the jitted step needs. |
Functions
|
Construct a JAX-friendly |
Module Contents
- class tud_lbm.pipeline.setup.SimulationSetup[source]
Bases:
NamedTupleImmutable operator container — only what the jitted step needs.
SimulationSetupstores built artifacts (operators, masks, closures) and physics scalars that the step function reads at JIT time. IO and initialisation metadata live on the originalSimulationConfig, accessible via theconfigreference.- config[source]
The original
SimulationConfig— for IO, init, and any metadata that does not enter the JIT boundary.
- forces[source]
Pre-built force setup (
ForceSetup) containing specs and source-term callable, orNoneif no forces are active.
- gradient_standard[source]
Standard gradient
∇μ(chemical potential). Always used for chemical-potential gradient. Never wetting-corrected.
- gradient_density[source]
Density gradient
∇ρused in source term. Wetting-corrected when applicable.
- laplacian_density[source]
Laplacian of density
∇²ρin chemical-potential computation. Wetting-corrected when applicable.
- gradient_density_wetting[source]
Parametric density gradient for hysteresis optimisation. Populated for hysteresis runs. Signature:
(grid, phi_l, phi_r, d_rho_l, d_rho_r) -> result.Nonefor non-hysteresis cases.
- laplacian_density_wetting[source]
Parametric Laplacian of density for hysteresis optimisation. Populated for hysteresis runs. Signature:
(grid, phi_l, phi_r, d_rho_l, d_rho_r) -> result.Nonefor non-hysteresis cases.
- step_fn[source]
The unbound step operator resolved from the registry, implementing
StepOperator. Signature:(setup, state) → state_next.
- wetting_fn[source]
The hysteresis operator for updating wetting state, implementing
HysteresisOperator. Built whenhysteresis_configis present;Noneotherwise.
- extra_state_plugins[source]
Active plugin tuple used to initialise and update operation-specific extra state (e.g. electric potential, wetting state).
- bc_masks: tud_lbm.operators.boundary.BCMasks | None = None[source]
- forces: tud_lbm.operators.force.ForceSetup | None = None[source]
- multiphase_params: tud_lbm.operators.macroscopic.MultiphaseParams | None = None[source]
- gradient_standard: tud_lbm.operators.protocols.DifferentialOperator | None = None[source]
- gradient_density: tud_lbm.operators.protocols.DifferentialOperator | None = None[source]
- laplacian_density: tud_lbm.operators.protocols.DifferentialOperator | None = None[source]
- gradient_density_wetting: tud_lbm.operators.protocols.DifferentialOperator | None = None[source]
- laplacian_density_wetting: tud_lbm.operators.protocols.DifferentialOperator | None = None[source]
- step_fn: tud_lbm.operators.protocols.StepOperator | None = None[source]
- wetting_fn: tud_lbm.operators.protocols.HysteresisOperator | None = None[source]
- extra_state_plugins: tuple[tud_lbm.operators.protocols.ExtraStatePlugin, Ellipsis] = ()[source]
- collision_fn: tud_lbm.operators.protocols.CollisionOperator | None = None[source]
- equilibrium_fn: tud_lbm.operators.protocols.EquilibriumOperator | None = None[source]
- macroscopic_fn: tud_lbm.operators.protocols.MacroscopicOperator[Ellipsis, tuple[jax.numpy.ndarray, Ellipsis]] | None = None[source]
- streaming_fn: tud_lbm.operators.protocols.StreamingOperator | None = None[source]
- bc_fn: tud_lbm.operators.protocols.BoundaryOperator | None = None[source]
- initial_f_fn: tud_lbm.operators.protocols.InitialPopulationOperator[Ellipsis, jax.numpy.ndarray] | None = None[source]
- tud_lbm.pipeline.setup.build_setup(config: tud_lbm.config.simulation_config.SimulationConfig) SimulationSetup[source]
Construct a JAX-friendly
SimulationSetupfrom a config.- Parameters:
config – A validated
SimulationConfig.- Returns:
An immutable
SimulationSetupNamedTuple ready for the jitted step function.- Raises:
ValueError – If wetting configuration is present but sim_type is not “multiphase”.