fix: align PNL0003 Reynolds diagnostic with AMESim

This commit is contained in:
huojiarong committed 2026-08-19 10:40:57 +00:00
1 parent 60b743dd81
commit 27f9f4add8
5 files changed
+100 -3

No files matched your search

@@ -2,7 +2,7 @@ from __future__ import annotations
from collections.abc import Callable, Sequence
from dataclasses import dataclass
from math import isfinite
from math import exp, isfinite, log
from typing import ClassVar
from app.simulation.core.errors import RecoverableTrialStateError
@@ -55,6 +55,12 @@ class AmesimHeliumPengRobinsonMedium(IdealGasMedium):
fluid: ClassVar[PengRobinsonFluid] = HELIUM_PR
nasa_cp_over_R: ClassVar[float] = 2.5
nasa_enthalpy_constant_K: ClassVar[float] = -745.375
nasa_viscosity_coefficients: ClassVar[tuple[float, float, float, float]] = (
0.7501594,
35.76324,
-2212.129,
0.9212635,
)
name: str = "AMESimHeliumPengRobinson"
R_gas: float = HELIUM_PR.specific_gas_constant
@@ -73,6 +79,19 @@ class AmesimHeliumPengRobinsonMedium(IdealGasMedium):
del T
return self.cv
def diagnostic_dynamic_viscosity(self, T: float) -> float:
"""Return the AMESim NASA-table viscosity used by pipe diagnostics.
pn2pipefr reports Reynolds number with sagum viscosity. Keep this
separate from dynamic_viscosity so matching that diagnostic cannot
alter the already-validated pipe flow or friction dynamics.
"""
if T <= 0.0:
raise ValueError("Temperature must be positive.")
a, b, c, d = self.nasa_viscosity_coefficients
return 1.0e-7 * exp(a * log(T) + b / T + c / (T * T) + d)
@profile_property("density")
@cache_property_calculation("density")
def density(self, p: float, T: float) -> float: