1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// SPDX-License-Identifier: GPL-3.0-only
// Copyright (C) 2026 OUTRAM PARK contributors
// Derived from OpenFOAM (www.openfoam.com)
// Copyright (C) 2004-2023 OpenFOAM Foundation
// Copyright (C) 2016-2023 OpenCFD Ltd.
//
// This file is part of OUTRAM PARK.
//
// OUTRAM PARK is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation, either version 3 of the License, or (at your
// option) any later version.
//
// OUTRAM PARK is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with OUTRAM PARK. If not, see <https://www.gnu.org/licenses/>.
//! **This is OUTRAM PARK's independent Rust translation of selected
//! OpenFOAM® primitive/finite-volume algorithms — it is not the official
//! OpenFOAM® software and is not affiliated with, endorsed by, or
//! sanctioned by OpenCFD Ltd. or the ESI Group.** OpenFOAM® is a registered
//! trademark of OpenCFD Limited. See `TRADEMARKS.md` (this crate's
//! directory, mirrored from the workspace root) for the full attribution
//! and non-affiliation notice.
/// Cross-layer — where a numerical kernel runs (`ComputeBackend`: serial,
/// multi-CPU via `rayon`, or GPU via `wgpu`), the worker-count policy, and the
/// backend-selection rule. Dispatch only, no kernels.
/// Layer 2 — field containers (`VolField`/`SurfaceField`), boundary
/// conditions, and field-level tensor algebra.
/// Layer 4 — field-level fluid and solid thermodynamics (`FluidThermo`,
/// `SolidThermo`, `PsiThermo`, `RhoThermo`).
/// Layer 3 — finite-volume discretisation operators (`fvc` explicit, `fvm`
/// implicit, and `adjust_phi` continuity correction).
/// Layer 3 — optional source terms attached to finite-volume equations,
/// OpenFOAM's `fvOptions` (Foundation `fvModels`) mechanism.
/// Layer 1f — one-dimensional data interpolation (linear and spline).
/// OpenFOAM ASCII case I/O — `FoamFile` dictionaries, `polyMesh` read/write,
/// time-directory field read/write, and whole-case reading.
/// Layer 2 — asymmetric Krylov iterative solvers (BiCGStab, restarted GMRES)
/// and preconditioners (Jacobi, ILU(0)) for the sparse `LduMatrix`.
/// Layer 2 — sparse LDU (lower/diagonal/upper) matrices, the assembled
/// `FvMatrix`, and iterative linear solvers (CG, Gauss–Seidel, GAMG).
/// Layer 2 — the discretisation-agnostic `LinearOperator` contract and the
/// generic Krylov drivers (`cg_op`, `bicgstab_op`, `gmres_op`) written against
/// it, so a finite-element crate can reuse this solver layer without adopting
/// the finite-volume `LduMatrix` layout (GitHub issue #175). Purely additive:
/// the existing finite-volume solvers are unchanged.
/// Layer 1g — mathematical special functions (inverse error function,
/// incomplete gamma functions and their inverse).
/// Layer 1b — dense `SquareMatrix` with direct (LU) solve.
/// Layer 2 — the finite-volume mesh: cells, faces, boundary patches, and
/// geometric metrics.
/// Layer 1e — ordinary-differential-equation solvers (Euler, RKF45,
/// Rosenbrock23).
/// Layers 1c/1d — polynomial evaluation and closed-form equation solvers
/// (linear, quadratic, cubic).
/// Convenience re-exports of the most commonly used types and functions.
/// Layer 1a — dimensionless scalar constants and the tensor-algebra
/// primitives (`Vector3`, `Tensor`, `SymmTensor`, `SphericalTensor`).
/// Layer 5 (small solver) — steady heat conduction with a volumetric source,
/// the steady form of `laplacianFoam`, with radial and voxel meshers, a
/// closed-form verification reference and an energy balance (gh:#949).
/// Layer 1h — specie-level thermophysics: equations of state, thermo, and
/// transport models.
/// this part is extension in Rust
/// Now under here, I want to expose the openfoam primitives to something
/// that can be human readable
///
/// Also useful add-ons for the underlying libraries are put here,
/// eg. generating one dimensional meshes for system code type simulations
/// in TAMPINES