merge/model-development-into-main #2

Merged
lujingze merged 126 commits from merge/model-development-into-main into main 2026-07-31 09:52:44 +08:00
2 changed files with 200 additions and 0 deletions
Showing only changes of commit 532fdb4e6b - Show all commits

No files matched your search

@@ -590,6 +590,17 @@ class TestMqlPneumatic96InletLineDiagnostic:
amesim_storage_mass_derivative_residual_g_s: float amesim_storage_mass_derivative_residual_g_s: float
amesim_chamber_pressure_pa: float amesim_chamber_pressure_pa: float
amesim_chamber_temperature_k: float amesim_chamber_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
amesim_port_2_enthalpy_dtemp_component_k_s: float
amesim_mass_offset_dtemp_component_k_s: float
amesim_reference_temperature_derivative_sum_k_s: float
amesim_reference_temperature_derivative_residual_k_s: float
amesim_pressure_derivative_mass_component_pa_s: float
amesim_pressure_derivative_temperature_component_pa_s: float
amesim_pressure_derivative_eos_sum_pa_s: float
amesim_pressure_derivative_eos_residual_pa_s: float
python_line_pressure_pa: float python_line_pressure_pa: float
python_line_temperature_k: float python_line_temperature_k: float
python_line_mass_g: float python_line_mass_g: float
@@ -604,6 +615,15 @@ class TestMqlPneumatic96InletLineDiagnostic:
python_storage_mass_derivative_error_g_s: float python_storage_mass_derivative_error_g_s: float
python_chamber_pressure_pa: float python_chamber_pressure_pa: float
python_chamber_temperature_k: float python_chamber_temperature_k: float
python_current_temperature_derivative_k_s: float
python_port_1_current_dtemp_component_k_s: float
python_port_2_current_dtemp_component_k_s: float
python_heat_dtemp_component_k_s: float
python_temperature_derivative_error_k_s: float
python_pressure_derivative_mass_component_pa_s: float
python_pressure_derivative_temperature_component_pa_s: float
python_pressure_derivative_eos_sum_pa_s: float
python_pressure_derivative_eos_error_pa_s: float
python_chamber_pressure_error_pa: float python_chamber_pressure_error_pa: float
python_chamber_temperature_error_k: float python_chamber_temperature_error_k: float
@@ -2516,6 +2536,103 @@ def _pneumatic_96_inlet_line_diagnostic(
snapshot.inlet_node_to_line_flow - snapshot.inlet_line_to_chamber_flow snapshot.inlet_node_to_line_flow - snapshot.inlet_line_to_chamber_flow
) * 1.0e3 ) * 1.0e3
amesim_line_temperature_fd = _series_finite_difference_at(
times=amesim_results.times,
values=amesim_results.series(f"t2@{line_alias}"),
time_s=time_s,
)
amesim_line_pressure_fd = _series_finite_difference_at(
times=amesim_results.times,
values=amesim_results.series(f"p2@{line_alias}"),
time_s=time_s,
)
amesim_dh1 = amesim_value(f"dh1@{line_alias}")
amesim_dh2 = amesim_value(f"dh2@{orifice_alias}")
amesim_line_mass_kg = amesim_line_mass * 1.0e-3
amesim_storage_kg_s = amesim_storage_from_ports * 1.0e-3
amesim_reference_temperature_k = 298.15
amesim_mass_offset_flow = (
line.gas.cp * amesim_reference_temperature_k
- line.gas.cv * amesim_line_temperature
) * amesim_storage_kg_s
def amesim_dtemp_component(flow_w: float) -> float:
return flow_w / (amesim_line_mass_kg * line.gas.cv)
amesim_port_1_dtemp = amesim_dtemp_component(-amesim_dh1)
amesim_port_2_dtemp = amesim_dtemp_component(amesim_dh2)
amesim_mass_offset_dtemp = amesim_dtemp_component(amesim_mass_offset_flow)
amesim_reference_dtemp_sum = (
amesim_port_1_dtemp + amesim_port_2_dtemp + amesim_mass_offset_dtemp
)
(
amesim_pressure_mass_component,
amesim_pressure_temperature_component,
amesim_pressure_eos_sum,
) = _pressure_derivative_components_from_density_temperature(
gas=line.gas,
density_kg_m3=amesim_line_mass_kg / line.volume,
temperature_k=amesim_line_temperature,
density_derivative_kg_m3_s=amesim_storage_kg_s / line.volume,
temperature_derivative_k_s=amesim_line_temperature_fd,
)
python_port_1_flow = snapshot.inlet_node_to_line_flow
python_port_2_flow = -snapshot.inlet_line_to_chamber_flow
python_heat_flow = (
line.heat_transfer_coefficient
* line.heat_transfer_area
* (line.external_temperature - snapshot.inlet_line.T)
)
python_port_1_u = (
snapshot.inlet_node.h / line.gas.gamma
if python_port_1_flow > 0.0
else snapshot.inlet_line.u
)
python_port_2_u = (
snapshot.chamber.h / line.gas.gamma
if python_port_2_flow > 0.0
else snapshot.inlet_line.u
)
def python_current_dtemp_component(
*,
mass_flow_kg_s: float,
inlet_u_j_kg: float,
) -> float:
return (
mass_flow_kg_s
* (inlet_u_j_kg - snapshot.inlet_line.u)
/ (line.state.m * line.gas.cv)
)
python_port_1_dtemp = python_current_dtemp_component(
mass_flow_kg_s=python_port_1_flow,
inlet_u_j_kg=python_port_1_u,
)
python_port_2_dtemp = python_current_dtemp_component(
mass_flow_kg_s=python_port_2_flow,
inlet_u_j_kg=python_port_2_u,
)
python_heat_dtemp = python_heat_flow / (line.state.m * line.gas.cv)
python_current_dtemp = (
python_port_1_dtemp + python_port_2_dtemp + python_heat_dtemp
)
(
python_pressure_mass_component,
python_pressure_temperature_component,
python_pressure_eos_sum,
) = _pressure_derivative_components_from_density_temperature(
gas=line.gas,
density_kg_m3=line.state.m / line.volume,
temperature_k=snapshot.inlet_line.T,
density_derivative_kg_m3_s=(
(snapshot.inlet_node_to_line_flow - snapshot.inlet_line_to_chamber_flow)
/ line.volume
),
temperature_derivative_k_s=python_current_dtemp,
)
return TestMqlPneumatic96InletLineDiagnostic( return TestMqlPneumatic96InletLineDiagnostic(
line_alias=line_alias, line_alias=line_alias,
node_alias=node_alias, node_alias=node_alias,
@@ -2534,6 +2651,27 @@ def _pneumatic_96_inlet_line_diagnostic(
), ),
amesim_chamber_pressure_pa=amesim_chamber_pressure, amesim_chamber_pressure_pa=amesim_chamber_pressure,
amesim_chamber_temperature_k=amesim_chamber_temperature, amesim_chamber_temperature_k=amesim_chamber_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,
amesim_port_2_enthalpy_dtemp_component_k_s=amesim_port_2_dtemp,
amesim_mass_offset_dtemp_component_k_s=amesim_mass_offset_dtemp,
amesim_reference_temperature_derivative_sum_k_s=(
amesim_reference_dtemp_sum
),
amesim_reference_temperature_derivative_residual_k_s=(
amesim_reference_dtemp_sum - amesim_line_temperature_fd
),
amesim_pressure_derivative_mass_component_pa_s=(
amesim_pressure_mass_component
),
amesim_pressure_derivative_temperature_component_pa_s=(
amesim_pressure_temperature_component
),
amesim_pressure_derivative_eos_sum_pa_s=amesim_pressure_eos_sum,
amesim_pressure_derivative_eos_residual_pa_s=(
amesim_pressure_eos_sum - amesim_line_pressure_fd
),
python_line_pressure_pa=snapshot.inlet_line.p, python_line_pressure_pa=snapshot.inlet_line.p,
python_line_temperature_k=snapshot.inlet_line.T, python_line_temperature_k=snapshot.inlet_line.T,
python_line_mass_g=line.state.m * 1.0e3, python_line_mass_g=line.state.m * 1.0e3,
@@ -2556,6 +2694,23 @@ def _pneumatic_96_inlet_line_diagnostic(
), ),
python_chamber_pressure_pa=snapshot.chamber.p, python_chamber_pressure_pa=snapshot.chamber.p,
python_chamber_temperature_k=snapshot.chamber.T, python_chamber_temperature_k=snapshot.chamber.T,
python_current_temperature_derivative_k_s=python_current_dtemp,
python_port_1_current_dtemp_component_k_s=python_port_1_dtemp,
python_port_2_current_dtemp_component_k_s=python_port_2_dtemp,
python_heat_dtemp_component_k_s=python_heat_dtemp,
python_temperature_derivative_error_k_s=(
python_current_dtemp - amesim_line_temperature_fd
),
python_pressure_derivative_mass_component_pa_s=(
python_pressure_mass_component
),
python_pressure_derivative_temperature_component_pa_s=(
python_pressure_temperature_component
),
python_pressure_derivative_eos_sum_pa_s=python_pressure_eos_sum,
python_pressure_derivative_eos_error_pa_s=(
python_pressure_eos_sum - amesim_line_pressure_fd
),
python_chamber_pressure_error_pa=( python_chamber_pressure_error_pa=(
snapshot.chamber.p - amesim_chamber_pressure snapshot.chamber.p - amesim_chamber_pressure
), ),
@@ -3223,6 +3378,26 @@ def format_test_mql_pnvo_event_window_summary(
f"python_storage_dm_error={inlet_line.python_storage_mass_derivative_error_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_p_abs={inlet_line.python_chamber_pressure_pa}, "
f"python_chamber_t={inlet_line.python_chamber_temperature_k}, " f"python_chamber_t={inlet_line.python_chamber_temperature_k}, "
f"amesim_fd_dT={inlet_line.amesim_line_temperature_derivative_fd_k_s}, "
f"amesim_dT_p1_h={inlet_line.amesim_port_1_enthalpy_dtemp_component_k_s}, "
f"amesim_dT_p2_h={inlet_line.amesim_port_2_enthalpy_dtemp_component_k_s}, "
f"amesim_dT_m_offset={inlet_line.amesim_mass_offset_dtemp_component_k_s}, "
f"amesim_ref_dT_sum={inlet_line.amesim_reference_temperature_derivative_sum_k_s}, "
f"amesim_ref_dT_residual={inlet_line.amesim_reference_temperature_derivative_residual_k_s}, "
f"python_current_dT={inlet_line.python_current_temperature_derivative_k_s}, "
f"python_dT_p1={inlet_line.python_port_1_current_dtemp_component_k_s}, "
f"python_dT_p2={inlet_line.python_port_2_current_dtemp_component_k_s}, "
f"python_dT_heat={inlet_line.python_heat_dtemp_component_k_s}, "
f"python_dT_error={inlet_line.python_temperature_derivative_error_k_s}, "
f"amesim_fd_dP={inlet_line.amesim_line_pressure_derivative_fd_pa_s}, "
f"amesim_dP_m={inlet_line.amesim_pressure_derivative_mass_component_pa_s}, "
f"amesim_dP_T={inlet_line.amesim_pressure_derivative_temperature_component_pa_s}, "
f"amesim_dP_sum={inlet_line.amesim_pressure_derivative_eos_sum_pa_s}, "
f"amesim_dP_residual={inlet_line.amesim_pressure_derivative_eos_residual_pa_s}, "
f"python_dP_m={inlet_line.python_pressure_derivative_mass_component_pa_s}, "
f"python_dP_T={inlet_line.python_pressure_derivative_temperature_component_pa_s}, "
f"python_dP_sum={inlet_line.python_pressure_derivative_eos_sum_pa_s}, "
f"python_dP_error={inlet_line.python_pressure_derivative_eos_error_pa_s}, "
f"python_chamber_p_error={inlet_line.python_chamber_pressure_error_pa}, " f"python_chamber_p_error={inlet_line.python_chamber_pressure_error_pa}, "
f"python_chamber_t_error={inlet_line.python_chamber_temperature_error_k}" f"python_chamber_t_error={inlet_line.python_chamber_temperature_error_k}"
) )
@@ -511,6 +511,17 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
amesim_storage_mass_derivative_residual_g_s=0.0, amesim_storage_mass_derivative_residual_g_s=0.0,
amesim_chamber_pressure_pa=15131788.1, amesim_chamber_pressure_pa=15131788.1,
amesim_chamber_temperature_k=291.9, amesim_chamber_temperature_k=291.9,
amesim_line_temperature_derivative_fd_k_s=149.5,
amesim_line_pressure_derivative_fd_pa_s=-17835932.3,
amesim_port_1_enthalpy_dtemp_component_k_s=1234.0,
amesim_port_2_enthalpy_dtemp_component_k_s=-724.0,
amesim_mass_offset_dtemp_component_k_s=-351.0,
amesim_reference_temperature_derivative_sum_k_s=159.0,
amesim_reference_temperature_derivative_residual_k_s=9.5,
amesim_pressure_derivative_mass_component_pa_s=-30562435.9,
amesim_pressure_derivative_temperature_component_pa_s=12794597.7,
amesim_pressure_derivative_eos_sum_pa_s=-17767838.2,
amesim_pressure_derivative_eos_residual_pa_s=68094.1,
python_line_pressure_pa=14257000.0, python_line_pressure_pa=14257000.0,
python_line_temperature_k=290.1, python_line_temperature_k=290.1,
python_line_mass_g=3.52, python_line_mass_g=3.52,
@@ -525,6 +536,15 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
python_storage_mass_derivative_error_g_s=0.0, python_storage_mass_derivative_error_g_s=0.0,
python_chamber_pressure_pa=15131800.0, python_chamber_pressure_pa=15131800.0,
python_chamber_temperature_k=292.0, python_chamber_temperature_k=292.0,
python_current_temperature_derivative_k_s=261.9,
python_port_1_current_dtemp_component_k_s=0.0,
python_port_2_current_dtemp_component_k_s=261.9,
python_heat_dtemp_component_k_s=0.0,
python_temperature_derivative_error_k_s=112.4,
python_pressure_derivative_mass_component_pa_s=-17917501.3,
python_pressure_derivative_temperature_component_pa_s=650331.8,
python_pressure_derivative_eos_sum_pa_s=-17267169.5,
python_pressure_derivative_eos_error_pa_s=568762.8,
python_chamber_pressure_error_pa=11.9, python_chamber_pressure_error_pa=11.9,
python_chamber_temperature_error_k=0.1, python_chamber_temperature_error_k=0.1,
), ),
@@ -699,6 +719,11 @@ class RunTestMqlFullStateComparisonScriptTests(unittest.TestCase):
self.assertIn("python_line_to_node_dm=453.0", 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_line_to_node_dm_error=0.8", summary)
self.assertIn("python_storage_dm_error=0.0", summary) self.assertIn("python_storage_dm_error=0.0", summary)
self.assertIn("amesim_fd_dT=149.5", summary)
self.assertIn("amesim_dT_m_offset=-351.0", summary)
self.assertIn("python_current_dT=261.9", summary)
self.assertIn("python_dT_error=112.4", summary)
self.assertIn("python_dP_error=568762.8", summary)
self.assertIn("pnl0003_energy@pneumatic_87", summary) self.assertIn("pnl0003_energy@pneumatic_87", summary)
self.assertIn("amesim_sdm1=-462.7", summary) self.assertIn("amesim_sdm1=-462.7", summary)
self.assertIn("amesim_sdh2=3028.0", summary) self.assertIn("amesim_sdh2=3028.0", summary)