补充test_mql pneumatic_96流量反事实诊断

This commit is contained in:
huojiarong committed 2026-07-29 08:15:36 +00:00
1 parent cd2fa800b9
commit 71da73ef70
2 files changed
+206

No files matched your search

@@ -590,6 +590,8 @@ class TestMqlPneumatic96InletLineDiagnostic:
amesim_storage_mass_derivative_residual_g_s: float
amesim_chamber_pressure_pa: float
amesim_chamber_temperature_k: float
amesim_node_pressure_pa: float
amesim_node_temperature_k: float
amesim_line_temperature_derivative_fd_k_s: float
amesim_line_pressure_derivative_fd_pa_s: float
amesim_port_1_enthalpy_dtemp_component_k_s: float
@@ -613,6 +615,20 @@ class TestMqlPneumatic96InletLineDiagnostic:
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_line_to_node_amesim_node_mass_flow_g_s: float
python_line_to_node_amesim_node_mass_flow_error_g_s: float
python_line_to_node_amesim_line_mass_flow_g_s: float
python_line_to_node_amesim_line_mass_flow_error_g_s: float
python_line_to_node_amesim_node_line_mass_flow_g_s: float
python_line_to_node_amesim_node_line_mass_flow_error_g_s: float
python_orifice_to_line_amesim_line_mass_flow_g_s: float
python_orifice_to_line_amesim_line_mass_flow_error_g_s: float
python_orifice_to_line_amesim_chamber_mass_flow_g_s: float
python_orifice_to_line_amesim_chamber_mass_flow_error_g_s: float
python_orifice_to_line_amesim_line_chamber_mass_flow_g_s: float
python_orifice_to_line_amesim_line_chamber_mass_flow_error_g_s: float
python_storage_amesim_boundary_states_mass_derivative_g_s: float
python_storage_amesim_boundary_states_mass_derivative_error_g_s: float
python_chamber_pressure_pa: float
python_chamber_temperature_k: float
python_current_temperature_derivative_k_s: float
@@ -2547,6 +2563,10 @@ def _pneumatic_96_inlet_line_diagnostic(
amesim_value(f"press@{chamber_alias}") + AMESIM_REFERENCE_PRESSURE_PA
)
amesim_chamber_temperature = amesim_value(f"temp@{chamber_alias}")
amesim_node_pressure = (
amesim_value(f"press1@{node_alias}") + AMESIM_REFERENCE_PRESSURE_PA
)
amesim_node_temperature = amesim_value(f"temp1@{node_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
@@ -2554,6 +2574,112 @@ def _pneumatic_96_inlet_line_diagnostic(
snapshot.inlet_node_to_line_flow - snapshot.inlet_line_to_chamber_flow
) * 1.0e3
orifice = closure.pneumatic_closure.components.inlet_orifice
def node_to_line_flow_from_states(
*,
node_pressure_pa: float,
node_temperature_k: float,
line_pressure_pa: float,
line_temperature_k: float,
) -> float:
pressure_difference = node_pressure_pa - line_pressure_pa
if pressure_difference == 0.0:
return 0.0
if line.calibrated_linear_conductance is not None:
return (
line.calibrated_linear_conductance
* pressure_difference
/ sqrt(line_temperature_k)
)
upstream_pressure = max(node_pressure_pa, line_pressure_pa)
upstream_temperature = (
node_temperature_k if pressure_difference > 0.0 else line_temperature_k
)
density = line.gas.density(upstream_pressure, upstream_temperature)
magnitude = line._mass_flow_for_pressure_drop(
abs(pressure_difference),
density=density,
temperature=upstream_temperature,
)
return magnitude if pressure_difference > 0.0 else -magnitude
def line_to_node_flow_from_states_g_s(
*,
node_pressure_pa: float,
node_temperature_k: float,
line_pressure_pa: float,
line_temperature_k: float,
) -> float:
return -1.0e3 * node_to_line_flow_from_states(
node_pressure_pa=node_pressure_pa,
node_temperature_k=node_temperature_k,
line_pressure_pa=line_pressure_pa,
line_temperature_k=line_temperature_k,
)
def orifice_to_line_flow_from_states_g_s(
*,
line_pressure_pa: float,
line_temperature_k: float,
chamber_pressure_pa: float,
chamber_temperature_k: float,
) -> float:
upstream_temperature = (
line_temperature_k
if line_pressure_pa >= chamber_pressure_pa
else chamber_temperature_k
)
line_to_chamber = orifice.mass_flow(
line_pressure_pa,
chamber_pressure_pa,
upstream_temperature,
)
return -1.0e3 * line_to_chamber
python_line_to_node_amesim_node_flow = line_to_node_flow_from_states_g_s(
node_pressure_pa=amesim_node_pressure,
node_temperature_k=amesim_node_temperature,
line_pressure_pa=snapshot.inlet_line.p,
line_temperature_k=snapshot.inlet_line.T,
)
python_line_to_node_amesim_line_flow = line_to_node_flow_from_states_g_s(
node_pressure_pa=snapshot.inlet_node.p,
node_temperature_k=snapshot.inlet_node.T,
line_pressure_pa=amesim_line_pressure,
line_temperature_k=amesim_line_temperature,
)
python_line_to_node_amesim_node_line_flow = line_to_node_flow_from_states_g_s(
node_pressure_pa=amesim_node_pressure,
node_temperature_k=amesim_node_temperature,
line_pressure_pa=amesim_line_pressure,
line_temperature_k=amesim_line_temperature,
)
python_orifice_to_line_amesim_line_flow = orifice_to_line_flow_from_states_g_s(
line_pressure_pa=amesim_line_pressure,
line_temperature_k=amesim_line_temperature,
chamber_pressure_pa=snapshot.chamber.p,
chamber_temperature_k=snapshot.chamber.T,
)
python_orifice_to_line_amesim_chamber_flow = orifice_to_line_flow_from_states_g_s(
line_pressure_pa=snapshot.inlet_line.p,
line_temperature_k=snapshot.inlet_line.T,
chamber_pressure_pa=amesim_chamber_pressure,
chamber_temperature_k=amesim_chamber_temperature,
)
python_orifice_to_line_amesim_line_chamber_flow = (
orifice_to_line_flow_from_states_g_s(
line_pressure_pa=amesim_line_pressure,
line_temperature_k=amesim_line_temperature,
chamber_pressure_pa=amesim_chamber_pressure,
chamber_temperature_k=amesim_chamber_temperature,
)
)
python_storage_amesim_boundary_states = (
python_orifice_to_line_amesim_line_chamber_flow
- python_line_to_node_amesim_node_line_flow
)
amesim_line_temperature_fd = _series_finite_difference_at(
times=amesim_results.times,
values=amesim_results.series(f"t2@{line_alias}"),
@@ -2750,6 +2876,8 @@ def _pneumatic_96_inlet_line_diagnostic(
),
amesim_chamber_pressure_pa=amesim_chamber_pressure,
amesim_chamber_temperature_k=amesim_chamber_temperature,
amesim_node_pressure_pa=amesim_node_pressure,
amesim_node_temperature_k=amesim_node_temperature,
amesim_line_temperature_derivative_fd_k_s=amesim_line_temperature_fd,
amesim_line_pressure_derivative_fd_pa_s=amesim_line_pressure_fd,
amesim_port_1_enthalpy_dtemp_component_k_s=amesim_port_1_dtemp,
@@ -2791,6 +2919,49 @@ def _pneumatic_96_inlet_line_diagnostic(
python_storage_mass_derivative_error_g_s=(
python_storage_derivative - amesim_storage_from_ports
),
python_line_to_node_amesim_node_mass_flow_g_s=(
python_line_to_node_amesim_node_flow
),
python_line_to_node_amesim_node_mass_flow_error_g_s=(
python_line_to_node_amesim_node_flow - amesim_line_to_node_flow
),
python_line_to_node_amesim_line_mass_flow_g_s=(
python_line_to_node_amesim_line_flow
),
python_line_to_node_amesim_line_mass_flow_error_g_s=(
python_line_to_node_amesim_line_flow - amesim_line_to_node_flow
),
python_line_to_node_amesim_node_line_mass_flow_g_s=(
python_line_to_node_amesim_node_line_flow
),
python_line_to_node_amesim_node_line_mass_flow_error_g_s=(
python_line_to_node_amesim_node_line_flow - amesim_line_to_node_flow
),
python_orifice_to_line_amesim_line_mass_flow_g_s=(
python_orifice_to_line_amesim_line_flow
),
python_orifice_to_line_amesim_line_mass_flow_error_g_s=(
python_orifice_to_line_amesim_line_flow - amesim_orifice_to_line_flow
),
python_orifice_to_line_amesim_chamber_mass_flow_g_s=(
python_orifice_to_line_amesim_chamber_flow
),
python_orifice_to_line_amesim_chamber_mass_flow_error_g_s=(
python_orifice_to_line_amesim_chamber_flow - amesim_orifice_to_line_flow
),
python_orifice_to_line_amesim_line_chamber_mass_flow_g_s=(
python_orifice_to_line_amesim_line_chamber_flow
),
python_orifice_to_line_amesim_line_chamber_mass_flow_error_g_s=(
python_orifice_to_line_amesim_line_chamber_flow
- amesim_orifice_to_line_flow
),
python_storage_amesim_boundary_states_mass_derivative_g_s=(
python_storage_amesim_boundary_states
),
python_storage_amesim_boundary_states_mass_derivative_error_g_s=(
python_storage_amesim_boundary_states - amesim_storage_from_ports
),
python_chamber_pressure_pa=snapshot.chamber.p,
python_chamber_temperature_k=snapshot.chamber.T,
python_current_temperature_derivative_k_s=python_current_dtemp,
@@ -3523,6 +3694,22 @@ def format_test_mql_pnvo_event_window_summary(
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"amesim_node_p_abs={inlet_line.amesim_node_pressure_pa}, "
f"amesim_node_t={inlet_line.amesim_node_temperature_k}, "
f"python_line_to_node_amesim_node_dm={inlet_line.python_line_to_node_amesim_node_mass_flow_g_s}, "
f"python_line_to_node_amesim_node_dm_error={inlet_line.python_line_to_node_amesim_node_mass_flow_error_g_s}, "
f"python_line_to_node_amesim_line_dm={inlet_line.python_line_to_node_amesim_line_mass_flow_g_s}, "
f"python_line_to_node_amesim_line_dm_error={inlet_line.python_line_to_node_amesim_line_mass_flow_error_g_s}, "
f"python_line_to_node_amesim_node_line_dm={inlet_line.python_line_to_node_amesim_node_line_mass_flow_g_s}, "
f"python_line_to_node_amesim_node_line_dm_error={inlet_line.python_line_to_node_amesim_node_line_mass_flow_error_g_s}, "
f"python_orifice_to_line_amesim_line_dm={inlet_line.python_orifice_to_line_amesim_line_mass_flow_g_s}, "
f"python_orifice_to_line_amesim_line_dm_error={inlet_line.python_orifice_to_line_amesim_line_mass_flow_error_g_s}, "
f"python_orifice_to_line_amesim_chamber_dm={inlet_line.python_orifice_to_line_amesim_chamber_mass_flow_g_s}, "
f"python_orifice_to_line_amesim_chamber_dm_error={inlet_line.python_orifice_to_line_amesim_chamber_mass_flow_error_g_s}, "
f"python_orifice_to_line_amesim_line_chamber_dm={inlet_line.python_orifice_to_line_amesim_line_chamber_mass_flow_g_s}, "
f"python_orifice_to_line_amesim_line_chamber_dm_error={inlet_line.python_orifice_to_line_amesim_line_chamber_mass_flow_error_g_s}, "
f"python_storage_amesim_boundary_states_dm={inlet_line.python_storage_amesim_boundary_states_mass_derivative_g_s}, "
f"python_storage_amesim_boundary_states_dm_error={inlet_line.python_storage_amesim_boundary_states_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"amesim_fd_dT={inlet_line.amesim_line_temperature_derivative_fd_k_s}, "