tud_lbm.operators.obstacle ========================== .. py:module:: tud_lbm.operators.obstacle .. autoapi-nested-parse:: Interior-obstacle operators — composite builder. Public API: build_obstacle_mask(), build_obstacle_fn() Implementation modules (_circle.py) are internal. .. rubric:: Example from tud_lbm.operators.obstacle import build_obstacle_mask, build_obstacle_fn mask = build_obstacle_mask({"shape": "circle", "center_x": 80, "center_y": 50, "radius": 10}, (400, 100, 1)) obstacle_fn = build_obstacle_fn(mask, lattice) f_stream = obstacle_fn(f_stream, f_collision) Functions --------- .. autoapisummary:: tud_lbm.operators.obstacle.build_obstacle_mask tud_lbm.operators.obstacle.build_obstacle_fn Package Contents ---------------- .. py:function:: build_obstacle_mask(obstacle_config: dict[str, Any] | None, grid_shape: tuple[int, int, int]) -> jax.numpy.ndarray | None Build a static solid-cell mask from an obstacle config. :param obstacle_config: Mapping with an optional ``shape`` key (default ``"circle"``) plus shape-specific geometry params. ``None`` means no obstacle. :param grid_shape: Spatial dimensions ``(nx, ny, nz)``. :returns: Boolean jax array, shape ``(nx, ny, nz, 1, 1)``, or ``None`` if *obstacle_config* is ``None``. .. py:function:: build_obstacle_fn(mask: jax.numpy.ndarray | None, lattice: tud_lbm.lattice.lattice.Lattice) -> tud_lbm.operators.protocols.ObstacleOperator | None Build an obstacle bounce-back closure from a precomputed mask. :param mask: Boolean solid-cell mask, shape ``(nx, ny, nz, 1, 1)``, or ``None`` if there is no obstacle. :param lattice: :class:`~tud_lbm.lattice.lattice.Lattice`. :returns: A callable ``obstacle_fn(f_stream, f_col) -> f_stream`` satisfying :class:`~tud_lbm.operators.protocols.ObstacleOperator`, or ``None`` if *mask* is ``None``.