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
Showing only changes of commit a52019c5e9 - Show all commits
+112 -76
View File
@@ -280,6 +280,14 @@ class TestMqlPn3P4NodeChamberSegmentComponents:
spec: TestMqlPneumaticChamberSegmentSpec spec: TestMqlPneumaticChamberSegmentSpec
@dataclass(frozen=True)
class TestMqlP4NodeBalancePort:
flow_kg_s: float
node_h: float
connected_h: float
port_mass_flow_kg_s: float
@dataclass(frozen=True) @dataclass(frozen=True)
class TestMqlPn3P4NodeChamberSegmentSnapshot: class TestMqlPn3P4NodeChamberSegmentSnapshot:
inlet_line: ThermodynamicProperties inlet_line: ThermodynamicProperties
@@ -1214,50 +1222,50 @@ class TestMqlPn3P4NodeChamberSegmentClosure:
p4_boundary=p4_port3_remote_primary_line, p4_boundary=p4_port3_remote_primary_line,
orifice=self.components.p4_port3_remote_orifice, orifice=self.components.p4_port3_remote_orifice,
) )
p4_balance = self.components.p4_node.balance( p4_balance = self._p4_node_balance(
port_2_temperature_k=p4_primary_line.T, node=self.components.p4_node,
port_2_pressure_pa=p4_primary_line.p, primary_properties=p4_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_to_port1_line_flow, flow_kg_s=p4_to_port1_line_flow,
node_h=p4_primary_line.h, node_h=p4_primary_line.h,
connected_h=p4_port1_line.h, connected_h=p4_port1_line.h,
port_mass_flow_kg_s=-p4_to_port1_line_flow,
), ),
port_1_mass_flow_g_s=-p4_to_port1_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_to_port3_line_flow, flow_kg_s=p4_to_port3_line_flow,
node_h=p4_primary_line.h, node_h=p4_primary_line.h,
connected_h=p4_port3_line.h, connected_h=p4_port3_line.h,
port_mass_flow_kg_s=-p4_to_port3_line_flow,
), ),
port_3_mass_flow_g_s=-p4_to_port3_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=pnl0003_to_p4_flow, flow_kg_s=pnl0003_to_p4_flow,
node_h=node_line_port_2.h, node_h=node_line_port_2.h,
connected_h=p4_primary_line.h, connected_h=p4_primary_line.h,
port_mass_flow_kg_s=pnl0003_to_p4_flow,
), ),
port_4_mass_flow_g_s=pnl0003_to_p4_flow * 1.0e3,
) )
p4_node_to_primary_line_flow = p4_balance.port_2_mass_flow_g_s * 1.0e-3 p4_node_to_primary_line_flow = p4_balance.port_2_mass_flow_g_s * 1.0e-3
p4_port1_remote_balance = self.components.p4_port1_remote_node.balance( p4_port1_remote_balance = self._p4_node_balance(
port_2_temperature_k=p4_port1_remote_primary_line.T, node=self.components.p4_port1_remote_node,
port_2_pressure_pa=p4_port1_remote_primary_line.p, primary_properties=p4_port1_remote_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_port1_remote_to_port1_line_flow, flow_kg_s=p4_port1_remote_to_port1_line_flow,
node_h=p4_port1_remote_primary_line.h, node_h=p4_port1_remote_primary_line.h,
connected_h=p4_port1_remote_port1_line.h, connected_h=p4_port1_remote_port1_line.h,
port_mass_flow_kg_s=-p4_port1_remote_to_port1_line_flow,
), ),
port_1_mass_flow_g_s=-p4_port1_remote_to_port1_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port1_remote_node_to_line_flow, flow_kg_s=p4_port1_remote_node_to_line_flow,
node_h=p4_port1_remote_primary_line.h, node_h=p4_port1_remote_primary_line.h,
connected_h=p4_port1_line.h, connected_h=p4_port1_line.h,
port_mass_flow_kg_s=-p4_port1_remote_node_to_line_flow,
), ),
port_3_mass_flow_g_s=-p4_port1_remote_node_to_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port1_remote_orifice_to_node_flow, flow_kg_s=p4_port1_remote_orifice_to_node_flow,
node_h=p4_port1_remote_orifice_line_port_2.h, node_h=p4_port1_remote_orifice_line_port_2.h,
connected_h=p4_port1_remote_primary_line.h, connected_h=p4_port1_remote_primary_line.h,
port_mass_flow_kg_s=p4_port1_remote_orifice_to_node_flow,
), ),
port_4_mass_flow_g_s=p4_port1_remote_orifice_to_node_flow * 1.0e3,
) )
p4_port1_remote_node_to_primary_line_flow = ( p4_port1_remote_node_to_primary_line_flow = (
p4_port1_remote_balance.port_2_mass_flow_g_s * 1.0e-3 p4_port1_remote_balance.port_2_mass_flow_g_s * 1.0e-3
@@ -1283,156 +1291,152 @@ class TestMqlPn3P4NodeChamberSegmentClosure:
port_3_mass_flow_g_s=-node_to_resistance_flow * 1.0e3, port_3_mass_flow_g_s=-node_to_resistance_flow * 1.0e3,
) )
) )
p4_port1_far_balance = self.components.p4_port1_far_node.balance( p4_port1_far_balance = self._p4_node_balance(
port_2_temperature_k=p4_port1_far_primary_line.T, node=self.components.p4_port1_far_node,
port_2_pressure_pa=p4_port1_far_primary_line.p, primary_properties=p4_port1_far_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_port1_far_to_next_line_flow, flow_kg_s=p4_port1_far_to_next_line_flow,
node_h=p4_port1_far_primary_line.h, node_h=p4_port1_far_primary_line.h,
connected_h=p4_port1_far_port1_line.h, connected_h=p4_port1_far_port1_line.h,
port_mass_flow_kg_s=-p4_port1_far_to_next_line_flow,
), ),
port_1_mass_flow_g_s=-p4_port1_far_to_next_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port1_far_node_to_line_flow, flow_kg_s=p4_port1_far_node_to_line_flow,
node_h=p4_port1_far_primary_line.h, node_h=p4_port1_far_primary_line.h,
connected_h=p4_port1_remote_port1_line.h, connected_h=p4_port1_remote_port1_line.h,
port_mass_flow_kg_s=-p4_port1_far_node_to_line_flow,
), ),
port_3_mass_flow_g_s=-p4_port1_far_node_to_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port1_next_orifice_resistance_to_p4_flow, flow_kg_s=p4_port1_next_orifice_resistance_to_p4_flow,
node_h=p4_port1_next_orifice_resistance_line_port_2.h, node_h=p4_port1_next_orifice_resistance_line_port_2.h,
connected_h=p4_port1_far_primary_line.h, connected_h=p4_port1_far_primary_line.h,
), port_mass_flow_kg_s=p4_port1_next_orifice_resistance_to_p4_flow,
port_4_mass_flow_g_s=(
p4_port1_next_orifice_resistance_to_p4_flow * 1.0e3
), ),
) )
p4_port1_far_node_to_primary_line_flow = ( p4_port1_far_node_to_primary_line_flow = (
p4_port1_far_balance.port_2_mass_flow_g_s * 1.0e-3 p4_port1_far_balance.port_2_mass_flow_g_s * 1.0e-3
) )
p4_port1_next_balance = self.components.p4_port1_next_node.balance( p4_port1_next_balance = self._p4_node_balance(
port_2_temperature_k=p4_port1_next_primary_line.T, node=self.components.p4_port1_next_node,
port_2_pressure_pa=p4_port1_next_primary_line.p, primary_properties=p4_port1_next_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_port1_next_to_bridge_line_flow, flow_kg_s=p4_port1_next_to_bridge_line_flow,
node_h=p4_port1_next_primary_line.h, node_h=p4_port1_next_primary_line.h,
connected_h=p4_port1_next_port1_line.h, connected_h=p4_port1_next_port1_line.h,
port_mass_flow_kg_s=-p4_port1_next_to_bridge_line_flow,
), ),
port_1_mass_flow_g_s=-p4_port1_next_to_bridge_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port1_next_node_to_line_flow, flow_kg_s=p4_port1_next_node_to_line_flow,
node_h=p4_port1_next_primary_line.h, node_h=p4_port1_next_primary_line.h,
connected_h=p4_port1_far_port1_line.h, connected_h=p4_port1_far_port1_line.h,
port_mass_flow_kg_s=-p4_port1_next_node_to_line_flow,
), ),
port_3_mass_flow_g_s=-p4_port1_next_node_to_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port1_next_orifice_p4_to_output_line_flow, flow_kg_s=p4_port1_next_orifice_p4_to_output_line_flow,
node_h=p4_port1_next_primary_line.h, node_h=p4_port1_next_primary_line.h,
connected_h=p4_port1_next_orifice_output_line.h, connected_h=p4_port1_next_orifice_output_line.h,
), port_mass_flow_kg_s=-p4_port1_next_orifice_p4_to_output_line_flow,
port_4_mass_flow_g_s=(
-p4_port1_next_orifice_p4_to_output_line_flow * 1.0e3
), ),
) )
p4_port1_next_node_to_primary_line_flow = ( p4_port1_next_node_to_primary_line_flow = (
p4_port1_next_balance.port_2_mass_flow_g_s * 1.0e-3 p4_port1_next_balance.port_2_mass_flow_g_s * 1.0e-3
) )
p4_port3_remote_balance = self.components.p4_port3_remote_node.balance( p4_port3_remote_balance = self._p4_node_balance(
port_2_temperature_k=p4_port3_remote_primary_line.T, node=self.components.p4_port3_remote_node,
port_2_pressure_pa=p4_port3_remote_primary_line.p, primary_properties=p4_port3_remote_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_port3_remote_node_to_line_flow, flow_kg_s=p4_port3_remote_node_to_line_flow,
node_h=p4_port3_remote_primary_line.h, node_h=p4_port3_remote_primary_line.h,
connected_h=p4_port3_line.h, connected_h=p4_port3_line.h,
port_mass_flow_kg_s=-p4_port3_remote_node_to_line_flow,
), ),
port_1_mass_flow_g_s=-p4_port3_remote_node_to_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_remote_to_port3_line_flow, flow_kg_s=p4_port3_remote_to_port3_line_flow,
node_h=p4_port3_remote_primary_line.h, node_h=p4_port3_remote_primary_line.h,
connected_h=p4_port3_remote_port3_line.h, connected_h=p4_port3_remote_port3_line.h,
port_mass_flow_kg_s=-p4_port3_remote_to_port3_line_flow,
), ),
port_3_mass_flow_g_s=-p4_port3_remote_to_port3_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_remote_orifice_to_node_flow, flow_kg_s=p4_port3_remote_orifice_to_node_flow,
node_h=p4_port3_remote_orifice_line_port_2.h, node_h=p4_port3_remote_orifice_line_port_2.h,
connected_h=p4_port3_remote_primary_line.h, connected_h=p4_port3_remote_primary_line.h,
port_mass_flow_kg_s=p4_port3_remote_orifice_to_node_flow,
), ),
port_4_mass_flow_g_s=p4_port3_remote_orifice_to_node_flow * 1.0e3,
) )
p4_port3_remote_node_to_primary_line_flow = ( p4_port3_remote_node_to_primary_line_flow = (
p4_port3_remote_balance.port_2_mass_flow_g_s * 1.0e-3 p4_port3_remote_balance.port_2_mass_flow_g_s * 1.0e-3
) )
p4_port3_far_balance = self.components.p4_port3_far_node.balance( p4_port3_far_balance = self._p4_node_balance(
port_2_temperature_k=p4_port3_far_primary_line.T, node=self.components.p4_port3_far_node,
port_2_pressure_pa=p4_port3_far_primary_line.p, primary_properties=p4_port3_far_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_port3_far_node_to_line_flow, flow_kg_s=p4_port3_far_node_to_line_flow,
node_h=p4_port3_far_primary_line.h, node_h=p4_port3_far_primary_line.h,
connected_h=p4_port3_remote_port3_line.h, connected_h=p4_port3_remote_port3_line.h,
port_mass_flow_kg_s=-p4_port3_far_node_to_line_flow,
), ),
port_1_mass_flow_g_s=-p4_port3_far_node_to_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_far_to_next_line_flow, flow_kg_s=p4_port3_far_to_next_line_flow,
node_h=p4_port3_far_primary_line.h, node_h=p4_port3_far_primary_line.h,
connected_h=p4_port3_far_port3_line.h, connected_h=p4_port3_far_port3_line.h,
port_mass_flow_kg_s=-p4_port3_far_to_next_line_flow,
), ),
port_3_mass_flow_g_s=-p4_port3_far_to_next_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_remote_resistance_output_to_p4_flow, flow_kg_s=p4_port3_remote_resistance_output_to_p4_flow,
node_h=p4_port3_remote_resistance_output_line.h, node_h=p4_port3_remote_resistance_output_line.h,
connected_h=p4_port3_far_primary_line.h, connected_h=p4_port3_far_primary_line.h,
port_mass_flow_kg_s=p4_port3_remote_resistance_output_to_p4_flow,
), ),
port_4_mass_flow_g_s=p4_port3_remote_resistance_output_to_p4_flow * 1.0e3,
) )
p4_port3_far_node_to_primary_line_flow = ( p4_port3_far_node_to_primary_line_flow = (
p4_port3_far_balance.port_2_mass_flow_g_s * 1.0e-3 p4_port3_far_balance.port_2_mass_flow_g_s * 1.0e-3
) )
p4_port3_next_balance = self.components.p4_port3_next_node.balance( p4_port3_next_balance = self._p4_node_balance(
port_2_temperature_k=p4_port3_next_primary_line.T, node=self.components.p4_port3_next_node,
port_2_pressure_pa=p4_port3_next_primary_line.p, primary_properties=p4_port3_next_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_port3_next_node_to_line_flow, flow_kg_s=p4_port3_next_node_to_line_flow,
node_h=p4_port3_next_primary_line.h, node_h=p4_port3_next_primary_line.h,
connected_h=p4_port3_far_port3_line.h, connected_h=p4_port3_far_port3_line.h,
port_mass_flow_kg_s=-p4_port3_next_node_to_line_flow,
), ),
port_1_mass_flow_g_s=-p4_port3_next_node_to_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_next_to_bridge_line_flow, flow_kg_s=p4_port3_next_to_bridge_line_flow,
node_h=p4_port3_next_primary_line.h, node_h=p4_port3_next_primary_line.h,
connected_h=p4_port3_next_port3_line.h, connected_h=p4_port3_next_port3_line.h,
port_mass_flow_kg_s=-p4_port3_next_to_bridge_line_flow,
), ),
port_3_mass_flow_g_s=-p4_port3_next_to_bridge_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_next_orifice_output_to_p4_flow, flow_kg_s=p4_port3_next_orifice_output_to_p4_flow,
node_h=p4_port3_next_orifice_output_line.h, node_h=p4_port3_next_orifice_output_line.h,
connected_h=p4_port3_next_primary_line.h, connected_h=p4_port3_next_primary_line.h,
port_mass_flow_kg_s=p4_port3_next_orifice_output_to_p4_flow,
), ),
port_4_mass_flow_g_s=p4_port3_next_orifice_output_to_p4_flow * 1.0e3,
) )
p4_port3_next_node_to_primary_line_flow = ( p4_port3_next_node_to_primary_line_flow = (
p4_port3_next_balance.port_2_mass_flow_g_s * 1.0e-3 p4_port3_next_balance.port_2_mass_flow_g_s * 1.0e-3
) )
p4_bridge_balance = self.components.p4_bridge_node.balance( p4_bridge_balance = self._p4_node_balance(
port_2_temperature_k=p4_bridge_primary_line.T, node=self.components.p4_bridge_node,
port_2_pressure_pa=p4_bridge_primary_line.p, primary_properties=p4_bridge_primary_line,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node( port_1=TestMqlP4NodeBalancePort(
flow_kg_s=p4_bridge_to_port3_next_line_flow, flow_kg_s=p4_bridge_to_port3_next_line_flow,
node_h=p4_bridge_primary_line.h, node_h=p4_bridge_primary_line.h,
connected_h=p4_port3_next_port3_line.h, connected_h=p4_port3_next_port3_line.h,
port_mass_flow_kg_s=-p4_bridge_to_port3_next_line_flow,
), ),
port_1_mass_flow_g_s=-p4_bridge_to_port3_next_line_flow * 1.0e3, port_3=TestMqlP4NodeBalancePort(
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_bridge_to_port1_next_line_flow, flow_kg_s=p4_bridge_to_port1_next_line_flow,
node_h=p4_bridge_primary_line.h, node_h=p4_bridge_primary_line.h,
connected_h=p4_port1_next_port1_line.h, connected_h=p4_port1_next_port1_line.h,
port_mass_flow_kg_s=-p4_bridge_to_port1_next_line_flow,
), ),
port_3_mass_flow_g_s=-p4_bridge_to_port1_next_line_flow * 1.0e3, port_4=TestMqlP4NodeBalancePort(
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=p4_port3_next_resistance_output_to_p4_flow, flow_kg_s=p4_port3_next_resistance_output_to_p4_flow,
node_h=p4_port3_next_resistance_output_line.h, node_h=p4_port3_next_resistance_output_line.h,
connected_h=p4_bridge_primary_line.h, connected_h=p4_bridge_primary_line.h,
port_mass_flow_kg_s=p4_port3_next_resistance_output_to_p4_flow,
), ),
port_4_mass_flow_g_s=p4_port3_next_resistance_output_to_p4_flow * 1.0e3,
) )
p4_bridge_node_to_primary_line_flow = ( p4_bridge_node_to_primary_line_flow = (
p4_bridge_balance.port_2_mass_flow_g_s * 1.0e-3 p4_bridge_balance.port_2_mass_flow_g_s * 1.0e-3
@@ -1770,6 +1774,38 @@ class TestMqlPn3P4NodeChamberSegmentClosure:
connected_h=connected_h, connected_h=connected_h,
) )
def _p4_node_balance(
self,
*,
node: TestMqlPneumaticNode4,
primary_properties: ThermodynamicProperties,
port_1: TestMqlP4NodeBalancePort,
port_3: TestMqlP4NodeBalancePort,
port_4: TestMqlP4NodeBalancePort,
) -> TestMqlPneumaticNode4Balance:
return node.balance(
port_2_temperature_k=primary_properties.T,
port_2_pressure_pa=primary_properties.p,
port_1_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=port_1.flow_kg_s,
node_h=port_1.node_h,
connected_h=port_1.connected_h,
),
port_1_mass_flow_g_s=port_1.port_mass_flow_kg_s * 1.0e3,
port_3_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=port_3.flow_kg_s,
node_h=port_3.node_h,
connected_h=port_3.connected_h,
),
port_3_mass_flow_g_s=port_3.port_mass_flow_kg_s * 1.0e3,
port_4_enthalpy_flow_w=self._enthalpy_flow_from_node(
flow_kg_s=port_4.flow_kg_s,
node_h=port_4.node_h,
connected_h=port_4.connected_h,
),
port_4_mass_flow_g_s=port_4.port_mass_flow_kg_s * 1.0e3,
)
def _write_fixed_chamber_segment( def _write_fixed_chamber_segment(
self, self,
*, *,