修正动态管与阀门诊断输出

This commit is contained in:
huojiarong committed 2026-08-18 10:24:29 +00:00
1 parent f725f038b6
commit 53f8601fec
6 files changed
+219 -16

No files matched your search

+55 -15
View File
@@ -75,6 +75,31 @@ def _reported_friction_factor(value: float) -> float:
return min(float(value), _MAX_REPORTED_FRICTION_FACTOR)
def _bare_pipe_mass_flow_parameter(
mass_flow: float,
*,
area: float,
diameter: float,
upstream_pressure: float,
upstream_temperature: float,
resistance_length: float,
friction_factor: float,
) -> float:
"""Return Amesim's ``Cm`` without the pipe flow coefficient ``Cq``."""
flow_coefficient = sqrt(
diameter / (resistance_length * friction_factor)
)
return (
abs(mass_flow)
* sqrt(upstream_temperature)
/ max(
flow_coefficient * area * upstream_pressure,
1.0e-18,
)
)
_DYNAMIC_PIPE_POLYTROPIC_MODE = ParameterCondition("mode", (1.0,))
_DYNAMIC_PIPE_HEAT_EXCHANGE_MODE = ParameterCondition("mode", (2.0,))
_DYNAMIC_PIPE_PARAMETER_GROUPS = (
@@ -1014,6 +1039,7 @@ class AmesimPnl0001(ThermodynamicVolumeComponent):
upstream_pressure = max(self.port_1.p, props.p, 1.0)
density = max(self.medium.density(upstream_pressure, props.T), 1.0e-12)
reynolds = self.reynolds_number(flow, props.T)
friction = self.friction_factor(reynolds)
return {
"m": self.state.m,
"U": self.state.U,
@@ -1023,13 +1049,17 @@ class AmesimPnl0001(ThermodynamicVolumeComponent):
"u": props.u,
"h": props.h,
"re": reynolds,
"cm": (
abs(flow)
* sqrt(props.T)
/ max(self.area * upstream_pressure, 1.0e-18)
"cm": _bare_pipe_mass_flow_parameter(
flow,
area=self.area,
diameter=self.diam,
upstream_pressure=upstream_pressure,
upstream_temperature=props.T,
resistance_length=self.le,
friction_factor=friction,
),
"v": flow / (density * self.area),
"ff": _reported_friction_factor(self.friction_factor(reynolds)),
"ff": _reported_friction_factor(friction),
}
def pressure_flow_equation_values(self) -> tuple[float, ...]:
@@ -1344,16 +1374,21 @@ class AmesimPnl0002(AmesimPnl0001):
1.0e-12,
)
reynolds = self.reynolds_number(flow, upstream_temperature)
friction = self.friction_factor(reynolds)
resistance_diagnostics.append(
(
reynolds,
(
abs(flow)
* sqrt(upstream_temperature)
/ max(self.area * upstream_pressure, 1.0e-18)
_bare_pipe_mass_flow_parameter(
flow,
area=self.area,
diameter=self.diam,
upstream_pressure=upstream_pressure,
upstream_temperature=upstream_temperature,
resistance_length=self.resistance_length,
friction_factor=friction,
),
abs(flow) / (density * self.area),
self.friction_factor(reynolds),
friction,
)
)
reynolds, cm, velocity, friction = (
@@ -1699,6 +1734,7 @@ class AmesimPnl0003(DynamicComponent):
center_flow = self.resistance_mass_flow()
upstream = port_1 if center_flow >= 0.0 else port_2
reynolds = self.reynolds_number(center_flow, upstream.T)
friction = self.friction_factor(reynolds)
return {
"m1": self.state_1.m,
"U1": self.state_1.U,
@@ -1716,13 +1752,17 @@ class AmesimPnl0003(DynamicComponent):
"h2": port_2.h,
"dmctr": center_flow,
"re": reynolds,
"cm": (
abs(center_flow)
* sqrt(upstream.T)
/ max(self.area * max(port_1.p, port_2.p, 1.0), 1.0e-18)
"cm": _bare_pipe_mass_flow_parameter(
center_flow,
area=self.area,
diameter=self.diam,
upstream_pressure=max(port_1.p, port_2.p, 1.0),
upstream_temperature=upstream.T,
resistance_length=self.le,
friction_factor=friction,
),
"v": center_flow / (max(upstream.rho, 1.0e-12) * self.area),
"ff": _reported_friction_factor(self.friction_factor(reynolds)),
"ff": _reported_friction_factor(friction),
}
def pressure_flow_equation_values(self) -> tuple[float, ...]: