补充test_mql pneumatic_96入口支路诊断

This commit is contained in:
huojiarong committed 2026-07-29 07:31:08 +00:00
1 parent bf4dc0af3d
commit bd7c8c99e9
2 files changed
+233

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}: "