Source code for tud_lbm.operators.macroscopic.eos

"""Equation-of-state operators for multiphase macroscopic computation.

Public API: build_eos_fn()
"""

from __future__ import annotations
from typing import TYPE_CHECKING
from typing import cast
from tud_lbm.operators._loader import auto_load_operators
from tud_lbm.operators.factory import build_operator
from tud_lbm.operators.macroscopic.eos._carnahan_starling import carnahan_starling_pressure

if TYPE_CHECKING:
    from tud_lbm.operators.macroscopic import MultiphaseParams
    from tud_lbm.operators.protocols import EOSFunction

# Auto-discover EOS modules in this subpackage.
auto_load_operators("tud_lbm.operators.macroscopic.eos")


[docs] def build_eos_fn(eos: str, mp: MultiphaseParams) -> EOSFunction: """Build an EOS callable with bound parameters. Args: eos: EOS scheme name from config (e.g. ``"double-well"``). mp: :class:`~tud_lbm.operators.macroscopic.MultiphaseParams` carrying all EOS-specific scalars. Returns: A bound :class:`~tud_lbm.operators.protocols.EOSFunction` ``eos_fn(rho) -> mu_0``. Raises: ValueError: If *eos* is not registered in the EOS registry. """ eos_builder = build_operator("eos", eos) return cast("EOSFunction", eos_builder(mp))
__all__ = ["build_eos_fn", "carnahan_starling_pressure"]