merge/model-development-into-main #2
No files matched your search
@@ -573,6 +573,41 @@ class TestMqlPnch012EnergyEquationDiagnostic:
|
||||
reference_temperature_k: float
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TestMqlPneumatic96InletLineDiagnostic:
|
||||
line_alias: str
|
||||
node_alias: str
|
||||
orifice_alias: str
|
||||
chamber_alias: str
|
||||
time_s: float
|
||||
amesim_line_pressure_pa: float
|
||||
amesim_line_temperature_k: float
|
||||
amesim_line_mass_g: float
|
||||
amesim_line_mass_derivative_fd_g_s: float
|
||||
amesim_line_to_node_mass_flow_g_s: float
|
||||
amesim_orifice_to_line_mass_flow_g_s: float
|
||||
amesim_storage_mass_derivative_from_ports_g_s: float
|
||||
amesim_storage_mass_derivative_residual_g_s: float
|
||||
amesim_chamber_pressure_pa: float
|
||||
amesim_chamber_temperature_k: float
|
||||
python_line_pressure_pa: float
|
||||
python_line_temperature_k: float
|
||||
python_line_mass_g: float
|
||||
python_line_pressure_error_pa: float
|
||||
python_line_temperature_error_k: float
|
||||
python_line_mass_error_g: float
|
||||
python_line_to_node_mass_flow_g_s: float
|
||||
python_line_to_node_mass_flow_error_g_s: float
|
||||
python_orifice_to_line_mass_flow_g_s: float
|
||||
python_orifice_to_line_mass_flow_error_g_s: float
|
||||
python_storage_mass_derivative_g_s: float
|
||||
python_storage_mass_derivative_error_g_s: float
|
||||
python_chamber_pressure_pa: float
|
||||
python_chamber_temperature_k: float
|
||||
python_chamber_pressure_error_pa: float
|
||||
python_chamber_temperature_error_k: float
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TestMqlPnvoEventWindowSampleDiagnostic:
|
||||
time_s: float
|
||||
@@ -602,6 +637,9 @@ class TestMqlPnvoEventWindowSampleDiagnostic:
|
||||
pnl0003_energy_diagnostics: tuple[
|
||||
TestMqlPnl0003EnergyDiagnostic, ...
|
||||
] = field(default_factory=tuple)
|
||||
pneumatic_96_inlet_line_diagnostics: tuple[
|
||||
TestMqlPneumatic96InletLineDiagnostic, ...
|
||||
] = field(default_factory=tuple)
|
||||
pnch012_energy_equation_diagnostics: tuple[
|
||||
TestMqlPnch012EnergyEquationDiagnostic, ...
|
||||
] = field(default_factory=tuple)
|
||||
@@ -2424,6 +2462,109 @@ def _pnl0003_energy_diagnostic(
|
||||
)
|
||||
|
||||
|
||||
def _pneumatic_96_inlet_line_diagnostic(
|
||||
*,
|
||||
closure: object,
|
||||
amesim_results: AmesimResults,
|
||||
state_vector: list[float],
|
||||
line_alias: str,
|
||||
node_alias: str,
|
||||
orifice_alias: str,
|
||||
chamber_alias: str,
|
||||
time_s: float,
|
||||
) -> TestMqlPneumatic96InletLineDiagnostic:
|
||||
if line_alias != "pneumatic_96":
|
||||
raise KeyError(f"Unsupported inlet line diagnostic: {line_alias}")
|
||||
if node_alias != "pn_node3_8" or orifice_alias != "pn_orifice_18":
|
||||
raise KeyError(
|
||||
f"Unsupported inlet path diagnostic: {node_alias}/{orifice_alias}"
|
||||
)
|
||||
|
||||
snapshot = closure.snapshot_at(time_s, state_vector).pneumatic
|
||||
line = closure.pneumatic_closure.components.inlet_line
|
||||
|
||||
def amesim_value(data_path: str) -> float:
|
||||
return interpolate_series_value(
|
||||
amesim_results.times,
|
||||
amesim_results.series(data_path),
|
||||
time_s,
|
||||
)
|
||||
|
||||
amesim_line_pressure = (
|
||||
amesim_value(f"p2@{line_alias}") + AMESIM_REFERENCE_PRESSURE_PA
|
||||
)
|
||||
amesim_line_temperature = amesim_value(f"t2@{line_alias}")
|
||||
amesim_line_mass = amesim_value(f"mgas@{line_alias}")
|
||||
amesim_line_mass_fd = _series_finite_difference_at(
|
||||
times=amesim_results.times,
|
||||
values=amesim_results.series(f"mgas@{line_alias}"),
|
||||
time_s=time_s,
|
||||
)
|
||||
amesim_line_to_node_flow = amesim_value(f"dm1@{line_alias}")
|
||||
amesim_orifice_to_line_flow = amesim_value(f"dm2@{orifice_alias}")
|
||||
amesim_storage_from_ports = (
|
||||
amesim_orifice_to_line_flow - amesim_line_to_node_flow
|
||||
)
|
||||
amesim_chamber_pressure = (
|
||||
amesim_value(f"press@{chamber_alias}") + AMESIM_REFERENCE_PRESSURE_PA
|
||||
)
|
||||
amesim_chamber_temperature = amesim_value(f"temp@{chamber_alias}")
|
||||
|
||||
python_line_to_node_flow = -snapshot.inlet_node_to_line_flow * 1.0e3
|
||||
python_orifice_to_line_flow = -snapshot.inlet_line_to_chamber_flow * 1.0e3
|
||||
python_storage_derivative = (
|
||||
snapshot.inlet_node_to_line_flow - snapshot.inlet_line_to_chamber_flow
|
||||
) * 1.0e3
|
||||
|
||||
return TestMqlPneumatic96InletLineDiagnostic(
|
||||
line_alias=line_alias,
|
||||
node_alias=node_alias,
|
||||
orifice_alias=orifice_alias,
|
||||
chamber_alias=chamber_alias,
|
||||
time_s=time_s,
|
||||
amesim_line_pressure_pa=amesim_line_pressure,
|
||||
amesim_line_temperature_k=amesim_line_temperature,
|
||||
amesim_line_mass_g=amesim_line_mass,
|
||||
amesim_line_mass_derivative_fd_g_s=amesim_line_mass_fd,
|
||||
amesim_line_to_node_mass_flow_g_s=amesim_line_to_node_flow,
|
||||
amesim_orifice_to_line_mass_flow_g_s=amesim_orifice_to_line_flow,
|
||||
amesim_storage_mass_derivative_from_ports_g_s=amesim_storage_from_ports,
|
||||
amesim_storage_mass_derivative_residual_g_s=(
|
||||
amesim_storage_from_ports - amesim_line_mass_fd
|
||||
),
|
||||
amesim_chamber_pressure_pa=amesim_chamber_pressure,
|
||||
amesim_chamber_temperature_k=amesim_chamber_temperature,
|
||||
python_line_pressure_pa=snapshot.inlet_line.p,
|
||||
python_line_temperature_k=snapshot.inlet_line.T,
|
||||
python_line_mass_g=line.state.m * 1.0e3,
|
||||
python_line_pressure_error_pa=snapshot.inlet_line.p - amesim_line_pressure,
|
||||
python_line_temperature_error_k=(
|
||||
snapshot.inlet_line.T - amesim_line_temperature
|
||||
),
|
||||
python_line_mass_error_g=line.state.m * 1.0e3 - amesim_line_mass,
|
||||
python_line_to_node_mass_flow_g_s=python_line_to_node_flow,
|
||||
python_line_to_node_mass_flow_error_g_s=(
|
||||
python_line_to_node_flow - amesim_line_to_node_flow
|
||||
),
|
||||
python_orifice_to_line_mass_flow_g_s=python_orifice_to_line_flow,
|
||||
python_orifice_to_line_mass_flow_error_g_s=(
|
||||
python_orifice_to_line_flow - amesim_orifice_to_line_flow
|
||||
),
|
||||
python_storage_mass_derivative_g_s=python_storage_derivative,
|
||||
python_storage_mass_derivative_error_g_s=(
|
||||
python_storage_derivative - amesim_storage_from_ports
|
||||
),
|
||||
python_chamber_pressure_pa=snapshot.chamber.p,
|
||||
python_chamber_temperature_k=snapshot.chamber.T,
|
||||
python_chamber_pressure_error_pa=(
|
||||
snapshot.chamber.p - amesim_chamber_pressure
|
||||
),
|
||||
python_chamber_temperature_error_k=(
|
||||
snapshot.chamber.T - amesim_chamber_temperature
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def _pnch012_energy_equation_diagnostic(
|
||||
*,
|
||||
closure: object,
|
||||
@@ -2836,6 +2977,18 @@ def run_test_mql_pnvo_event_window_diagnostic(
|
||||
time_s=sample_time,
|
||||
),
|
||||
)
|
||||
pneumatic_96_inlet_line_diagnostics = (
|
||||
_pneumatic_96_inlet_line_diagnostic(
|
||||
closure=closure,
|
||||
amesim_results=amesim_results,
|
||||
state_vector=state_vector_by_sample_time[sample_time],
|
||||
line_alias="pneumatic_96",
|
||||
node_alias="pn_node3_8",
|
||||
orifice_alias="pn_orifice_18",
|
||||
chamber_alias="pn_general_chamber",
|
||||
time_s=sample_time,
|
||||
),
|
||||
)
|
||||
pnch012_rhs_diagnostics = (
|
||||
closure.variable_chamber_rhs_diagnostic(
|
||||
chamber_alias="pn_c1_8",
|
||||
@@ -2878,6 +3031,9 @@ def run_test_mql_pnvo_event_window_diagnostic(
|
||||
pnvo_upstream_enthalpy_diagnostics
|
||||
),
|
||||
pnl0003_energy_diagnostics=pnl0003_energy_diagnostics,
|
||||
pneumatic_96_inlet_line_diagnostics=(
|
||||
pneumatic_96_inlet_line_diagnostics
|
||||
),
|
||||
pnch012_energy_equation_diagnostics=(
|
||||
pnch012_energy_equation_diagnostics
|
||||
),
|
||||
@@ -3037,6 +3193,39 @@ def format_test_mql_pnvo_event_window_summary(
|
||||
f"python_real_ref_dh2_error="
|
||||
f"{pnvo_enthalpy.python_real_gas_reference_port_2_enthalpy_error_w}"
|
||||
)
|
||||
for inlet_line in sample.pneumatic_96_inlet_line_diagnostics:
|
||||
lines.append(
|
||||
f" - inlet_line@{inlet_line.line_alias}: "
|
||||
f"node={inlet_line.node_alias}, "
|
||||
f"orifice={inlet_line.orifice_alias}, "
|
||||
f"chamber={inlet_line.chamber_alias}, "
|
||||
f"amesim_p2_abs={inlet_line.amesim_line_pressure_pa}, "
|
||||
f"amesim_t2={inlet_line.amesim_line_temperature_k}, "
|
||||
f"amesim_mgas={inlet_line.amesim_line_mass_g}, "
|
||||
f"amesim_fd_dmgas={inlet_line.amesim_line_mass_derivative_fd_g_s}, "
|
||||
f"amesim_line_to_node_dm1={inlet_line.amesim_line_to_node_mass_flow_g_s}, "
|
||||
f"amesim_orifice_to_line_dm2={inlet_line.amesim_orifice_to_line_mass_flow_g_s}, "
|
||||
f"amesim_storage_dm_ports={inlet_line.amesim_storage_mass_derivative_from_ports_g_s}, "
|
||||
f"amesim_storage_dm_residual={inlet_line.amesim_storage_mass_derivative_residual_g_s}, "
|
||||
f"amesim_chamber_p_abs={inlet_line.amesim_chamber_pressure_pa}, "
|
||||
f"amesim_chamber_t={inlet_line.amesim_chamber_temperature_k}, "
|
||||
f"python_p2_abs={inlet_line.python_line_pressure_pa}, "
|
||||
f"python_t2={inlet_line.python_line_temperature_k}, "
|
||||
f"python_mgas={inlet_line.python_line_mass_g}, "
|
||||
f"python_p2_error={inlet_line.python_line_pressure_error_pa}, "
|
||||
f"python_t2_error={inlet_line.python_line_temperature_error_k}, "
|
||||
f"python_mgas_error={inlet_line.python_line_mass_error_g}, "
|
||||
f"python_line_to_node_dm={inlet_line.python_line_to_node_mass_flow_g_s}, "
|
||||
f"python_line_to_node_dm_error={inlet_line.python_line_to_node_mass_flow_error_g_s}, "
|
||||
f"python_orifice_to_line_dm={inlet_line.python_orifice_to_line_mass_flow_g_s}, "
|
||||
f"python_orifice_to_line_dm_error={inlet_line.python_orifice_to_line_mass_flow_error_g_s}, "
|
||||
f"python_storage_dm={inlet_line.python_storage_mass_derivative_g_s}, "
|
||||
f"python_storage_dm_error={inlet_line.python_storage_mass_derivative_error_g_s}, "
|
||||
f"python_chamber_p_abs={inlet_line.python_chamber_pressure_pa}, "
|
||||
f"python_chamber_t={inlet_line.python_chamber_temperature_k}, "
|
||||
f"python_chamber_p_error={inlet_line.python_chamber_pressure_error_pa}, "
|
||||
f"python_chamber_t_error={inlet_line.python_chamber_temperature_error_k}"
|
||||
)
|
||||
for pnl0003_energy in sample.pnl0003_energy_diagnostics:
|
||||
lines.append(
|
||||
f" - pnl0003_energy@{pnl0003_energy.line_alias}: "
|
||||
|
||||
@@ -14,6 +14,7 @@ from PythonModels.scripts.run_test_mql_full_state_comparison import (
|
||||
TestMqlPnl0001EnergyFlowDiagnostic,
|
||||
TestMqlP4NodeEnthalpyBreakdownDiagnostic,
|
||||
TestMqlPnl0003EnergyDiagnostic,
|
||||
TestMqlPneumatic96InletLineDiagnostic,
|
||||
TestMqlPnch012EnergyEquationDiagnostic,
|
||||
TestMqlPnvoUpstreamEnthalpyDiagnostic,
|
||||
TestMqlPnl0001PressureLossCalibrationDiagnostic,
|
||||
@@ -493,6 +494,41 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
python_port_2_temperature_error_to_amesim_k=-5.5,
|
||||
),
|
||||
),
|
||||
pneumatic_96_inlet_line_diagnostics=(
|
||||
TestMqlPneumatic96InletLineDiagnostic(
|
||||
line_alias="pneumatic_96",
|
||||
node_alias="pn_node3_8",
|
||||
orifice_alias="pn_orifice_18",
|
||||
chamber_alias="pn_general_chamber",
|
||||
time_s=0.05,
|
||||
amesim_line_pressure_pa=14256386.8,
|
||||
amesim_line_temperature_k=289.8,
|
||||
amesim_line_mass_g=3.51,
|
||||
amesim_line_mass_derivative_fd_g_s=-6.0,
|
||||
amesim_line_to_node_mass_flow_g_s=452.2,
|
||||
amesim_orifice_to_line_mass_flow_g_s=446.2,
|
||||
amesim_storage_mass_derivative_from_ports_g_s=-6.0,
|
||||
amesim_storage_mass_derivative_residual_g_s=0.0,
|
||||
amesim_chamber_pressure_pa=15131788.1,
|
||||
amesim_chamber_temperature_k=291.9,
|
||||
python_line_pressure_pa=14257000.0,
|
||||
python_line_temperature_k=290.1,
|
||||
python_line_mass_g=3.52,
|
||||
python_line_pressure_error_pa=613.2,
|
||||
python_line_temperature_error_k=0.3,
|
||||
python_line_mass_error_g=0.01,
|
||||
python_line_to_node_mass_flow_g_s=453.0,
|
||||
python_line_to_node_mass_flow_error_g_s=0.8,
|
||||
python_orifice_to_line_mass_flow_g_s=447.0,
|
||||
python_orifice_to_line_mass_flow_error_g_s=0.8,
|
||||
python_storage_mass_derivative_g_s=-6.0,
|
||||
python_storage_mass_derivative_error_g_s=0.0,
|
||||
python_chamber_pressure_pa=15131800.0,
|
||||
python_chamber_temperature_k=292.0,
|
||||
python_chamber_pressure_error_pa=11.9,
|
||||
python_chamber_temperature_error_k=0.1,
|
||||
),
|
||||
),
|
||||
pnl0001_energy_flow_diagnostics=(
|
||||
TestMqlPnl0001EnergyFlowDiagnostic(
|
||||
line_alias="pneumatic_69",
|
||||
@@ -655,6 +691,14 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
|
||||
self.assertIn("python_current_dh2=679490.8", summary)
|
||||
self.assertIn("python_ref_dh2=-38478.5", summary)
|
||||
self.assertIn("python_real_ref_dh2=-32998.5", summary)
|
||||
self.assertIn("inlet_line@pneumatic_96", summary)
|
||||
self.assertIn("node=pn_node3_8", summary)
|
||||
self.assertIn("orifice=pn_orifice_18", summary)
|
||||
self.assertIn("amesim_line_to_node_dm1=452.2", summary)
|
||||
self.assertIn("amesim_orifice_to_line_dm2=446.2", summary)
|
||||
self.assertIn("python_line_to_node_dm=453.0", summary)
|
||||
self.assertIn("python_line_to_node_dm_error=0.8", summary)
|
||||
self.assertIn("python_storage_dm_error=0.0", summary)
|
||||
self.assertIn("pnl0003_energy@pneumatic_87", summary)
|
||||
self.assertIn("amesim_sdm1=-462.7", summary)
|
||||
self.assertIn("amesim_sdh2=3028.0", summary)
|
||||
|
||||
Reference in new issue
Block a user