拆解test_mql变容气室RHS
This commit is contained in:
1 parent
a6e1faa2d8
commit
2c2952cff1
4 files changed
+205
No files matched your search
@@ -3856,6 +3856,23 @@ class TestMqlFullStateSnapshot:
|
||||
return self.mechanical.state_count
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class TestMqlVariableChamberRhsDiagnostic:
|
||||
chamber_alias: str
|
||||
piston_alias: str
|
||||
chamber_pressure_pa: float
|
||||
chamber_temperature_k: float
|
||||
chamber_volume_m3: float
|
||||
chamber_volume_rate_m3_s: float
|
||||
port_a_mass_flow_kg_s: float
|
||||
port_b_mass_flow_kg_s: float
|
||||
mass_derivative_kg_s: float
|
||||
port_a_energy_flow_w: float
|
||||
port_b_energy_flow_w: float
|
||||
boundary_work_w: float
|
||||
energy_derivative_w: float
|
||||
|
||||
|
||||
_PISTON_FORCE_BINDINGS = (
|
||||
("mass_friction_endstops_10", "pn_brp2_8", "p4_port3_remote_primary_chamber"),
|
||||
("mass_friction_endstops_11", "pn_brp2_9", "p4_primary_chamber"),
|
||||
@@ -3906,6 +3923,50 @@ _PNCH012_ALIAS_BY_SNAPSHOT_FIELD = {
|
||||
}
|
||||
|
||||
|
||||
_PRIMARY_CHAMBER_DIAGNOSTIC_FIELDS = {
|
||||
"pn_c1_8": (
|
||||
"p4_port3_remote_primary_chamber",
|
||||
"p4_port3_remote_primary_line",
|
||||
"p4_port3_remote_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_9": (
|
||||
"p4_primary_chamber",
|
||||
"p4_primary_line",
|
||||
"p4_primary_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_10": (
|
||||
"p4_port1_remote_primary_chamber",
|
||||
"p4_port1_remote_primary_line",
|
||||
"p4_port1_remote_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_11": (
|
||||
"p4_port1_far_primary_chamber",
|
||||
"p4_port1_far_primary_line",
|
||||
"p4_port1_far_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_12": (
|
||||
"p4_port1_next_primary_chamber",
|
||||
"p4_port1_next_primary_line",
|
||||
"p4_port1_next_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_13": (
|
||||
"p4_bridge_primary_chamber",
|
||||
"p4_bridge_primary_line",
|
||||
"p4_bridge_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_14": (
|
||||
"p4_port3_next_primary_chamber",
|
||||
"p4_port3_next_primary_line",
|
||||
"p4_port3_next_chamber_to_line_flow",
|
||||
),
|
||||
"pn_c1_15": (
|
||||
"p4_port3_far_primary_chamber",
|
||||
"p4_port3_far_primary_line",
|
||||
"p4_port3_far_chamber_to_line_flow",
|
||||
),
|
||||
}
|
||||
|
||||
|
||||
class TestMqlFullStateClosure:
|
||||
def __init__(self, *, pneumatic_closure: object, mechanical_closure: object) -> None:
|
||||
self.pneumatic_closure = pneumatic_closure
|
||||
@@ -3988,6 +4049,60 @@ class TestMqlFullStateClosure:
|
||||
),
|
||||
)
|
||||
|
||||
def variable_chamber_rhs_diagnostic(
|
||||
self,
|
||||
*,
|
||||
chamber_alias: str,
|
||||
state_vector: list[float],
|
||||
) -> TestMqlVariableChamberRhsDiagnostic:
|
||||
if chamber_alias not in _PRIMARY_CHAMBER_DIAGNOSTIC_FIELDS:
|
||||
raise KeyError(chamber_alias)
|
||||
chamber_field, line_field, flow_field = _PRIMARY_CHAMBER_DIAGNOSTIC_FIELDS[
|
||||
chamber_alias
|
||||
]
|
||||
piston_alias = next(
|
||||
piston_alias
|
||||
for _mass_alias, piston_alias, bound_chamber_field in _PISTON_FORCE_BINDINGS
|
||||
if bound_chamber_field == chamber_field
|
||||
)
|
||||
snapshot = self.snapshot(state_vector)
|
||||
chamber = getattr(self.pneumatic_closure.components, chamber_field)
|
||||
chamber_properties = getattr(snapshot.pneumatic, chamber_field)
|
||||
line_properties = getattr(snapshot.pneumatic, line_field)
|
||||
chamber_to_line_flow = getattr(snapshot.pneumatic, flow_field)
|
||||
port_a_mass_flow = -chamber_to_line_flow
|
||||
port_b_mass_flow = 0.0
|
||||
port_a_inlet_h = chamber.connection_inlet_enthalpy(
|
||||
port_m_flow=port_a_mass_flow,
|
||||
connected_h=line_properties.h,
|
||||
internal_h=chamber_properties.h,
|
||||
)
|
||||
port_b_inlet_h = chamber.connection_inlet_enthalpy(
|
||||
port_m_flow=port_b_mass_flow,
|
||||
connected_h=chamber_properties.h,
|
||||
internal_h=chamber_properties.h,
|
||||
)
|
||||
port_a_energy_flow = port_a_mass_flow * port_a_inlet_h
|
||||
port_b_energy_flow = port_b_mass_flow * port_b_inlet_h
|
||||
boundary_work = -chamber_properties.p * chamber.volume_rate_m3_s()
|
||||
return TestMqlVariableChamberRhsDiagnostic(
|
||||
chamber_alias=chamber_alias,
|
||||
piston_alias=piston_alias,
|
||||
chamber_pressure_pa=chamber_properties.p,
|
||||
chamber_temperature_k=chamber_properties.T,
|
||||
chamber_volume_m3=chamber.volume,
|
||||
chamber_volume_rate_m3_s=chamber.volume_rate_m3_s(),
|
||||
port_a_mass_flow_kg_s=port_a_mass_flow,
|
||||
port_b_mass_flow_kg_s=port_b_mass_flow,
|
||||
mass_derivative_kg_s=port_a_mass_flow + port_b_mass_flow,
|
||||
port_a_energy_flow_w=port_a_energy_flow,
|
||||
port_b_energy_flow_w=port_b_energy_flow,
|
||||
boundary_work_w=boundary_work,
|
||||
energy_derivative_w=(
|
||||
port_a_energy_flow + port_b_energy_flow + boundary_work
|
||||
),
|
||||
)
|
||||
|
||||
def data_path_values(
|
||||
self,
|
||||
*,
|
||||
|
||||
Reference in new issue
Block a user