补充氦气Peng-Robinson物性库
This commit is contained in:
1 parent
056b71fead
commit
cdead78977
5 files changed
+289
-2
No files matched your search
@@ -0,0 +1,65 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from PythonModels.core.peng_robinson import AIR_PR, HELIUM_PR, NITROGEN_PR, PengRobinsonFluid
|
||||
|
||||
|
||||
class PengRobinsonTest(unittest.TestCase):
|
||||
def test_helium_near_ideal_at_atmospheric_condition(self) -> None:
|
||||
z = HELIUM_PR.compressibility_factor(101_325.0, 300.0)
|
||||
density = HELIUM_PR.density(101_325.0, 300.0)
|
||||
|
||||
self.assertAlmostEqual(z, 1.0, delta=1.0e-3)
|
||||
self.assertAlmostEqual(density, 0.1625, delta=0.002)
|
||||
|
||||
def test_helium_density_pressure_round_trip(self) -> None:
|
||||
pressure = 15.3e6
|
||||
temperature = 293.15
|
||||
density = HELIUM_PR.density(pressure, temperature)
|
||||
|
||||
self.assertGreater(HELIUM_PR.compressibility_factor(pressure, temperature), 1.0)
|
||||
self.assertAlmostEqual(
|
||||
HELIUM_PR.pressure_from_density(temperature, density),
|
||||
pressure,
|
||||
delta=pressure * 1.0e-12,
|
||||
)
|
||||
|
||||
def test_air_reference_remains_available_for_other_models(self) -> None:
|
||||
z = AIR_PR.compressibility_factor(101_325.0, 300.0)
|
||||
density = AIR_PR.density(101_325.0, 300.0)
|
||||
|
||||
self.assertAlmostEqual(z, 1.0, delta=1.0e-3)
|
||||
self.assertAlmostEqual(density, 1.177, delta=0.01)
|
||||
|
||||
def test_nitrogen_can_return_multiple_roots(self) -> None:
|
||||
roots = NITROGEN_PR.compressibility_roots(1.0e6, 100.0)
|
||||
|
||||
self.assertEqual(len(roots), 3)
|
||||
self.assertLess(roots[0], roots[-1])
|
||||
self.assertEqual(NITROGEN_PR.compressibility_factor(1.0e6, 100.0, phase="liquid"), roots[0])
|
||||
self.assertEqual(NITROGEN_PR.compressibility_factor(1.0e6, 100.0, phase="vapor"), roots[-1])
|
||||
|
||||
def test_custom_fluid_can_be_defined_explicitly(self) -> None:
|
||||
fluid = PengRobinsonFluid(
|
||||
name="custom_helium",
|
||||
molar_mass=0.004002602,
|
||||
critical_temperature=5.1953,
|
||||
critical_pressure=227_460.0,
|
||||
acentric_factor=-0.385,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(fluid.specific_gas_constant, 2077.3, delta=0.5)
|
||||
self.assertAlmostEqual(fluid.compressibility_factor(1.0e6, 298.15), HELIUM_PR.compressibility_factor(1.0e6, 298.15))
|
||||
|
||||
def test_rejects_invalid_states(self) -> None:
|
||||
with self.assertRaises(ValueError):
|
||||
HELIUM_PR.compressibility_factor(0.0, 300.0)
|
||||
with self.assertRaises(ValueError):
|
||||
HELIUM_PR.density(101_325.0, 0.0)
|
||||
with self.assertRaises(ValueError):
|
||||
HELIUM_PR.pressure_from_density(300.0, -1.0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user