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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// 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/>.
//! OpenFOAM ASCII **case I/O** — read and write OpenFOAM cases the way the
//! upstream utilities do.
//!
//! This module is the foundation the OUTRAM PARK CLI reads/writes OpenFOAM
//! cases with. The format and algorithms are OpenFOAM-derived (the `FoamFile`
//! dictionary grammar, the `polyMesh` list layout, the time-directory field
//! layout); this is an independent Rust re-implementation of the ASCII reader
//! and writer, not the official OpenFOAM software.
//!
//! ## What lives here
//!
//! - [`dict`] — the `FoamFile` **dictionary** format: a tokeniser (strips
//! `//` and `/* */` comments; treats `( ) { } ; [ ]` as delimiters), an
//! in-memory AST ([`FoamDict`], [`FoamEntry`], [`FoamValue`],
//! [`Dimensioned`]), the [`FoamHeader`] block, and an exact-round-trip
//! writer. Handles `system/controlDict`, `fvSchemes`, `fvSolution`-style
//! dictionaries.
//! - [`poly_mesh`] — [`PolyMesh`]: read/write `constant/polyMesh/{points,
//! faces, owner, neighbour, boundary}` and convert to the crate's
//! geometry-carrying [`crate::mesh::FvMesh`] via [`PolyMesh::to_fv_mesh`].
//! - [`field`] — read/write a time-directory field file
//! (`0/p` volScalarField, `0/U` volVectorField): the `dimensions`,
//! `internalField`, and `boundaryField` blocks ↔ the crate's
//! [`crate::fields::VolScalarField`] / [`crate::fields::VolVectorField`].
//! - [`case`] — [`FoamCase`]: read a whole case directory (`system/…`,
//! `constant/polyMesh`, `0/…`) into memory, with a best-effort writer.
//!
//! ## Round-trip guarantee
//!
//! The writer and parser are inverse at the **AST level**: constructing a
//! [`FoamDict`] / [`PolyMesh`] / field, serialising it, and parsing it back
//! reproduces an equal in-memory value. (It is not a byte-for-byte re-emitter
//! of an arbitrary pre-existing file — comment banners and incidental
//! whitespace are normalised — but every value round-trips.)
pub use FoamCase;
pub use ;
pub use ;
pub use ;
/// Errors raised while reading or writing OpenFOAM ASCII case files.