修正动态管与阀门诊断输出
This commit is contained in:
1 parent
f725f038b6
commit
53f8601fec
6 files changed
+219
-16
No files matched your search
@@ -35,6 +35,7 @@ _FLOWSET_USES_CV = (ParameterCondition("flowset", (2.0,)),)
|
||||
_FLOWSET_USES_KV = (ParameterCondition("flowset", (3.0,)),)
|
||||
_PN_PRESSURE_RATIO_ACCURACY = 0.9999
|
||||
_PN_LAMINAR_SMOOTHING_GAIN = 12.0
|
||||
_PNVO001_CLOSED_OPENING_ABS_TOL = 1.0e-12
|
||||
_PNOR001_FLOW_COEFFICIENT_GROUP = ParameterGroupDisplaySpec(
|
||||
id="flow_coefficient",
|
||||
label="流量系数",
|
||||
@@ -835,6 +836,16 @@ class AmesimPnvo001FixedOpening(AlgebraicComponent):
|
||||
downstream_pressure=downstream_pressure,
|
||||
upstream_temperature=upstream_temperature,
|
||||
)
|
||||
# AMESim reports no vena-contracta velocity while the valve is closed.
|
||||
# Signal propagation around a step can leave a round-off-sized opening,
|
||||
# so apply the same numerical-zero convention to this diagnostic only.
|
||||
if isclose(
|
||||
self.opening,
|
||||
0.0,
|
||||
rel_tol=0.0,
|
||||
abs_tol=_PNVO001_CLOSED_OPENING_ABS_TOL,
|
||||
):
|
||||
gas_velocity = 0.0
|
||||
return {
|
||||
"xv": self.opening,
|
||||
"cm": mass_flow_parameter,
|
||||
|
||||
@@ -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, ...]:
|
||||
|
||||
Reference in new issue
Block a user