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
// 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/>.
//! The scalar floating-point type and OpenFOAM's small/large numeric
//! guard constants.
//!
//! `Scalar` is OpenFOAM's `scalar` (double-precision, dimensionless) and
//! `Label` is its `label` (signed integer index/count). The constants are
//! the fixed thresholds OpenFOAM uses to guard against divide-by-zero and
//! overflow; they are dimensionless and identical in value to the upstream
//! `doubleScalar` definitions.
/// OpenFOAM `scalar` — a dimensionless double-precision floating-point value.
pub type Scalar = f64;
/// OpenFOAM `label` — a signed integer used for indices and counts.
pub type Label = i64;
/// Small number used to guard against division by (near-)zero (1e-15).
pub const SMALL: Scalar = 1e-15;
/// Very small number near the underflow floor (1e-300).
pub const VSMALL: Scalar = 1e-300;
/// Square root of `SMALL` (≈ 3.162e-8).
pub const ROOT_SMALL: Scalar = 3.162_277_660_168_379_5e-8; // sqrt(1e-15)
/// Square root of `VSMALL` (1e-150).
pub const ROOT_VSMALL: Scalar = 1e-150; // sqrt(1e-300)
/// Large number used as a finite stand-in for "infinity" (1e15).
pub const GREAT: Scalar = 1e15;
/// Very large number near the overflow ceiling (1e300).
pub const VGREAT: Scalar = 1e300;
/// Square root of `GREAT` (≈ 3.162e7).
pub const ROOT_GREAT: Scalar = 3.162_277_660_168_379_5e7; // sqrt(1e15)