接入AMESim help文档与PNVO流量诊断
This commit is contained in:
1 parent
f0f8f40c7a
commit
84d1675292
17 files changed
+450
-7
No files matched your search
@@ -137,6 +137,17 @@ class AmesimPneumaticComponentsTest(unittest.TestCase):
|
||||
self.assertAlmostEqual(derivative.m, 0.0)
|
||||
self.assertAlmostEqual(derivative.U, -props.p * 2.0e-6)
|
||||
|
||||
def test_orifice_effective_area_clamps_opening(self) -> None:
|
||||
orifice = AmesimPneumaticOrifice.from_mm2(
|
||||
name="pn_variable_orifice",
|
||||
area_mm2=78.5,
|
||||
opening=1.4,
|
||||
)
|
||||
self.assertAlmostEqual(orifice.effective_area, 78.5e-6)
|
||||
|
||||
orifice.opening = -0.25
|
||||
self.assertAlmostEqual(orifice.effective_area, 0.0)
|
||||
|
||||
def test_orifice_returns_signed_mass_flow(self) -> None:
|
||||
orifice = AmesimPneumaticOrifice.from_mm2(
|
||||
name="pn_orifice_18",
|
||||
|
||||
@@ -39,6 +39,26 @@ class AmesimPnl0001PipeTests(unittest.TestCase):
|
||||
self.assertLess(reverse, 0.0)
|
||||
self.assertAlmostEqual(abs(forward), abs(reverse), delta=abs(forward) * 0.01)
|
||||
|
||||
def test_calibrated_linear_conductance_overrides_darcy_flow(self) -> None:
|
||||
pipe = AmesimPnl0001Pipe(
|
||||
name="linear",
|
||||
diameter_mm=20.0,
|
||||
length_m=1.0,
|
||||
relative_roughness=0.045 / 20.0,
|
||||
calibrated_linear_conductance=5.5636e-6,
|
||||
p0=200000.0,
|
||||
T0=293.15,
|
||||
)
|
||||
flow = pipe.resistance_mass_flow(
|
||||
port_1_pressure_pa=180000.0,
|
||||
port_1_temperature_k=293.15,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(
|
||||
flow,
|
||||
5.5636e-6 * (180000.0 - 200000.0) / (293.15 ** 0.5),
|
||||
)
|
||||
|
||||
def test_diagnostics_reproduce_laminar_friction_contract(self) -> None:
|
||||
diagnostics = self.pipe.diagnostics(mass_flow_kg_s=8.90603914774626e-6)
|
||||
|
||||
@@ -51,6 +71,16 @@ class AmesimPnl0001PipeTests(unittest.TestCase):
|
||||
self.assertGreater(diagnostics.gas_velocity_m_s, 0.0)
|
||||
self.assertGreater(diagnostics.pressure_drop_pa, 0.0)
|
||||
|
||||
def test_darcy_pressure_drop_for_state_uses_supplied_density_state(self) -> None:
|
||||
diagnostics = self.pipe.diagnostics(mass_flow_kg_s=8.90603914774626e-6)
|
||||
pressure_drop = self.pipe.darcy_pressure_drop_for_state(
|
||||
mass_flow_kg_s=8.90603914774626e-6,
|
||||
pressure_pa=self.pipe.properties().p,
|
||||
temperature_k=self.pipe.properties().T,
|
||||
)
|
||||
|
||||
self.assertAlmostEqual(pressure_drop, diagnostics.pressure_drop_pa)
|
||||
|
||||
def test_connection_derivative_preserves_mass_and_stream_direction(self) -> None:
|
||||
internal = self.pipe.properties()
|
||||
derivative = self.pipe.derivatives_from_connections(
|
||||
|
||||
@@ -11,9 +11,11 @@ from PythonModels.scripts.run_test_mql_full_state_comparison import (
|
||||
TestMqlFullStateComparisonExecutionConfig,
|
||||
TestMqlFullStateComparisonPathConfig,
|
||||
TestMqlFullStateComparisonScriptConfig,
|
||||
TestMqlPnl0001PressureLossCalibrationDiagnostic,
|
||||
TestMqlPnvoEventBoundaryDiagnostic,
|
||||
TestMqlPnvoEventWindowDiagnostic,
|
||||
TestMqlPnvoEventWindowSampleDiagnostic,
|
||||
TestMqlPnvoFlowParameterDiagnostic,
|
||||
TestMqlPnvoEventWindowSegmentDiagnostic,
|
||||
format_test_mql_full_state_comparison_summary,
|
||||
format_test_mql_pnvo_event_boundary_summary,
|
||||
@@ -241,6 +243,45 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
energy_derivative_w=-20000.0,
|
||||
),
|
||||
),
|
||||
pnl0001_pressure_loss_diagnostics=(
|
||||
TestMqlPnl0001PressureLossCalibrationDiagnostic(
|
||||
line_alias="pneumatic_69",
|
||||
chamber_alias="pn_c1_8",
|
||||
time_s=0.05,
|
||||
amesim_cm=0.0159,
|
||||
amesim_dm1_g_s=419.9,
|
||||
amesim_mass_flow_magnitude_kg_s=0.4199,
|
||||
amesim_line_gauge_pressure_pa=1484689.6,
|
||||
amesim_chamber_gauge_pressure_pa=187060.0,
|
||||
amesim_line_temperature_k=296.1,
|
||||
amesim_pressure_drop_pa=1297629.6,
|
||||
current_darcy_pressure_drop_pa=422633.2,
|
||||
pressure_drop_multiplier=3.07,
|
||||
amesim_linear_conductance_kg_s_sqrt_k_per_pa=5.56e-6,
|
||||
python_linear_conductance_kg_s_sqrt_k_per_pa=1.06e-5,
|
||||
python_to_amesim_linear_conductance_ratio=1.91,
|
||||
),
|
||||
),
|
||||
pnvo_flow_parameter_diagnostics=(
|
||||
TestMqlPnvoFlowParameterDiagnostic(
|
||||
orifice_alias="pn_morifice_1",
|
||||
time_s=0.05,
|
||||
amesim_cm=0.0158,
|
||||
amesim_dm2_g_s=456.8,
|
||||
amesim_opening=1.0,
|
||||
amesim_gas_velocity_m_s=885.9,
|
||||
python_opening=1.0,
|
||||
python_flow_coefficient=0.45,
|
||||
python_effective_area_m2=78.5e-6,
|
||||
python_line_pressure_pa=15310000.0,
|
||||
python_boundary_pressure_pa=1586000.0,
|
||||
python_upstream_pressure_pa=15310000.0,
|
||||
python_upstream_temperature_k=293.15,
|
||||
python_mass_flow_kg_s=0.4637,
|
||||
python_cm=0.0147,
|
||||
python_to_amesim_cm_ratio=0.93,
|
||||
),
|
||||
),
|
||||
)
|
||||
diagnostic = TestMqlPnvoEventWindowDiagnostic(
|
||||
orifice_alias="pn_morifice_1",
|
||||
@@ -275,6 +316,17 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
self.assertIn("rhs=8154", summary)
|
||||
self.assertIn("rhs@pneumatic_69", summary)
|
||||
self.assertIn("dm_dt=-0.0222", summary)
|
||||
self.assertIn("pressure_loss@pneumatic_69", summary)
|
||||
self.assertIn("cm=0.0159", summary)
|
||||
self.assertIn("dp_multiplier=3.07", summary)
|
||||
self.assertIn("amesim_linear_k=5.56e-06", summary)
|
||||
self.assertIn("python_linear_k=1.06e-05", summary)
|
||||
self.assertIn("linear_k_ratio=1.91", summary)
|
||||
self.assertIn("flow_parameter@pn_morifice_1", summary)
|
||||
self.assertIn("amesim_cm=0.0158", summary)
|
||||
self.assertIn("python_cm=0.0147", summary)
|
||||
self.assertIn("cm_ratio=0.93", summary)
|
||||
self.assertIn("amesim_gasvel=885.9", summary)
|
||||
self.assertIn("Final comparison:", summary)
|
||||
self.assertTrue(summary.endswith("\n"))
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ from pathlib import Path
|
||||
from PythonModels.reporting.amesim_results import load_test_mql_amesim_results
|
||||
from PythonModels.systems.test_mql_line_parameters import load_test_mql_pnl0001_specs
|
||||
from PythonModels.systems.test_mql_pneumatic_lines import (
|
||||
TEST_MQL_PNL0001_D20_L1_LINEAR_CONDUCTANCE,
|
||||
build_test_mql_pnl0001_assembly,
|
||||
)
|
||||
|
||||
@@ -44,6 +45,38 @@ class TestMqlPnl0001Tests(unittest.TestCase):
|
||||
all(len(line.get_state_vector()) == 2 for line in self.assembly.lines.values())
|
||||
)
|
||||
|
||||
def test_calibrates_primary_d20_chamber_lines_only(self) -> None:
|
||||
calibrated_aliases = {
|
||||
alias
|
||||
for alias, line in self.assembly.lines.items()
|
||||
if line.calibrated_linear_conductance is not None
|
||||
}
|
||||
|
||||
self.assertEqual(
|
||||
calibrated_aliases,
|
||||
{
|
||||
"pneumatic_65",
|
||||
"pneumatic_66",
|
||||
"pneumatic_68",
|
||||
"pneumatic_69",
|
||||
"pneumatic_71",
|
||||
"pneumatic_72",
|
||||
"pneumatic_73",
|
||||
"pneumatic_74",
|
||||
},
|
||||
)
|
||||
for alias in calibrated_aliases:
|
||||
self.assertAlmostEqual(
|
||||
self.assembly.lines[alias].calibrated_linear_conductance,
|
||||
TEST_MQL_PNL0001_D20_L1_LINEAR_CONDUCTANCE,
|
||||
)
|
||||
self.assertIsNone(
|
||||
self.assembly.lines["pneumatic_70"].calibrated_linear_conductance
|
||||
)
|
||||
self.assertIsNone(
|
||||
self.assembly.lines["pneumatic_96"].calibrated_linear_conductance
|
||||
)
|
||||
|
||||
def test_pneumatic_96_initial_observables_match_amesim_baseline(self) -> None:
|
||||
pipe = self.assembly.lines["pneumatic_96"]
|
||||
|
||||
|
||||
Reference in new issue
Block a user