Extends from Modelica_Fluid.Icons.BaseClassLibrary (Icon for library).
| Name | Description |
|---|---|
| Partial model for a hydraulic resistance | |
| Flow splitter with partial resistance model at each port | |
| Polynomial function | |
| Function that is quadratic in first argument and linear in second argument |
Buildings.Fluids.BaseClasses.PartialResistance
Partial model for a flow resistance, possible with variable flow coefficient.
Extends from Modelica_Fluid.Interfaces.PartialTwoPortTransport (Partial element transporting fluid between two ports without storage of mass or energy).
| Type | Name | Default | Description |
|---|---|---|---|
| replaceable package Medium | Modelica.Media.Interfaces.Pa... | Medium in the component | |
| Nominal condition | |||
| MassFlowRate | m0_flow | Nominal mass flow rate [kg/s] | |
| Assumptions | |||
| Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
| Advanced | |||
| AbsolutePressure | dp_start | 0.01*system.p_start | Guess value of dp = port_a.p - port_b.p [Pa] |
| MassFlowRate | m_flow_start | system.m_flow_start | Guess value of m_flow = port_a.m_flow [kg/s] |
| MassFlowRate | m_flow_small | 1E-4*m0_flow | Small mass flow rate for regularization of zero flow [kg/s] |
| Boolean | from_dp | true | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Boolean | linearized | false | = true, use linear relation between m_flow and dp for any flow rate |
| Diagnostics | |||
| Boolean | show_T | true | = true, if temperatures at port_a and port_b are computed |
| Boolean | show_V_flow | true | = true, if volume flow rate at inflowing port is computed |
| Type | Name | Description |
|---|---|---|
| FluidPort_a | port_a | Fluid connector a (positive design flow direction is from port_a to port_b) |
| FluidPort_b | port_b | Fluid connector b (positive design flow direction is from port_a to port_b) |
partial model PartialResistance
"Partial model for a hydraulic resistance"
extends Modelica_Fluid.Interfaces.PartialTwoPortTransport(m_flow_small = 1E-4*m0_flow);
parameter Boolean from_dp = true
"= true, use m_flow = f(dp) else dp = f(m_flow)";
parameter Medium.MassFlowRate m0_flow(min=0) "Nominal mass flow rate";
parameter Boolean linearized = false
"= true, use linear relation between m_flow and dp for any flow rate";
parameter Medium.AbsolutePressure dp_start = 0.01*system.p_start
"Guess value of dp = port_a.p - port_b.p";
Modelica.SIunits.Pressure dp(start=dp_start)
"Pressure difference between port_a and port_b (= port_a.p - port_b.p)";
protected
Real k(start=1) "Flow coefficient, k=m_flow/sqrt(dp), with unit=(kg.m)^(1/2)";
Real kInv(unit="1/(kg.m)", start=1)
"Flow coefficient for inverse flow computation, kInv=dp/m_flow^2";
Modelica.SIunits.AbsolutePressure dp_laminar
"Turbulent flow if |dp| >= dp_small, not a parameter because k can be a function of time";
Medium.MassFlowRate m_flow_laminar
"Turbulent flow if |m_flow| >= m_flow_laminar, not a parameter because k can be a function of time";
parameter Medium.ThermodynamicState sta0=
Medium.setState_pTX(T=Medium.T_default, p=Medium.p_default, X=Medium.X_default);
parameter Modelica.SIunits.DynamicViscosity eta0=Medium.dynamicViscosity(sta0)
"Dynamic viscosity, used to compute laminar/turbulent transition";
parameter Modelica.SIunits.SpecificEnthalpy h0=Medium.h_default
"Initial value for solver for specific enthalpy"; //specificEnthalpy(sta0)
equation
1=k*k*kInv;
dp_laminar = kInv * m_flow_laminar^2;
if linearized then
m_flow = k * dp;
else
if from_dp then
m_flow = Buildings.Fluids.Utilities.massFlowRate_dp(dp=dp, dp_small=dp_laminar, k=k);
else
dp = Buildings.Fluids.Utilities.pressureLoss_m_flow(m_flow=m_flow,m_small_flow=m_flow_laminar,k=kInv);
end if;
end if;
// Isenthalpic state transformation (no storage and no loss of energy)
port_a.h_outflow = inStream(port_b.h_outflow);
port_b.h_outflow = inStream(port_a.h_outflow);
end PartialResistance;
Buildings.Fluids.BaseClasses.PartialThreeWayResistance
Partial model for flow resistances with three ports such as a flow mixer/splitter or a three way valve.
Extends from Buildings.BaseClasses.BaseIcon (Base icon).
| Type | Name | Default | Description |
|---|---|---|---|
| PartialTwoPortTransport | res1 | redeclare Modelica_Fluid.Int... | Partial model, to be replaced with a fluid component |
| PartialTwoPortTransport | res2 | redeclare Modelica_Fluid.Int... | Partial model, to be replaced with a fluid component |
| PartialTwoPortTransport | res3 | redeclare Modelica_Fluid.Int... | Partial model, to be replaced with a fluid component |
| Advanced | |||
| Boolean | from_dp | true | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Type | Name | Description |
|---|---|---|
| FluidPort_a | port_1 | |
| FluidPort_b | port_2 | |
| FluidPort_a | port_3 |
partial model PartialThreeWayResistance
"Flow splitter with partial resistance model at each port"
extends Buildings.BaseClasses.BaseIcon;
replaceable package Medium = Modelica.Media.Interfaces.PartialMedium
"Fluid medium model";
Modelica_Fluid.Interfaces.FluidPort_a port_1(redeclare package Medium =
Medium, m_flow(min=if (portFlowDirection_1 == Modelica_Fluid.Types.PortFlowDirection.Entering) then
0.0 else -Modelica.Constants.inf, max=if (portFlowDirection_1
== Modelica_Fluid.Types.PortFlowDirection.Leaving) then 0.0 else Modelica.Constants.inf));
Modelica_Fluid.Interfaces.FluidPort_b port_2(redeclare package Medium =
Medium, m_flow(min=if (portFlowDirection_2 == Modelica_Fluid.Types.PortFlowDirection.Entering) then
0.0 else -Modelica.Constants.inf, max=if (portFlowDirection_2
== Modelica_Fluid.Types.PortFlowDirection.Leaving) then 0.0 else Modelica.Constants.inf));
Modelica_Fluid.Interfaces.FluidPort_a port_3(
redeclare package Medium=Medium,
m_flow(min=if (portFlowDirection_3==Modelica_Fluid.Types.PortFlowDirection.Entering) then 0.0 else -Modelica.Constants.inf,
max=if (portFlowDirection_3==Modelica_Fluid.Types.PortFlowDirection.Leaving) then 0.0 else Modelica.Constants.inf));
parameter Boolean from_dp = true
"= true, use m_flow = f(dp) else dp = f(m_flow)";
replaceable Modelica_Fluid.Interfaces.PartialTwoPortTransport res1(redeclare
package Medium = Medium)
"Partial model, to be replaced with a fluid component";
replaceable Modelica_Fluid.Interfaces.PartialTwoPortTransport res2(redeclare
package Medium = Medium)
"Partial model, to be replaced with a fluid component";
replaceable Modelica_Fluid.Interfaces.PartialTwoPortTransport res3(redeclare
package Medium = Medium)
"Partial model, to be replaced with a fluid component";
protected
parameter Modelica_Fluid.Types.PortFlowDirection portFlowDirection_1=Modelica_Fluid.Types.PortFlowDirection.Bidirectional
"Flow direction for port_1";
parameter Modelica_Fluid.Types.PortFlowDirection portFlowDirection_2=Modelica_Fluid.Types.PortFlowDirection.Bidirectional
"Flow direction for port_2";
parameter Modelica_Fluid.Types.PortFlowDirection portFlowDirection_3=Modelica_Fluid.Types.PortFlowDirection.Bidirectional
"Flow direction for port_3";
protected
Modelica_Fluid.Interfaces.FluidPort_b port_m(redeclare package Medium =
Medium) "Mixing port";
equation
connect(port_1, res1.port_a);
connect(res2.port_b, port_2);
connect(res3.port_a, port_3);
connect(res1.port_b, port_m);
connect(res2.port_a, port_m);
connect(res3.port_b, port_m);
end PartialThreeWayResistance;
| Type | Name | Default | Description |
|---|---|---|---|
| Real | a[:] | Coefficients | |
| Real | x | Independent variable |
| Type | Name | Description |
|---|---|---|
| Real | y | Result |
function polynomial "Polynomial function"
input Real a[:] "Coefficients";
input Real x "Independent variable";
output Real y "Result";
protected
parameter Integer n = size(a, 1)-1;
Real xp[n+1] "Powers of x";
algorithm
xp[1] :=1;
for i in 1:n loop
xp[i+1] :=xp[i]*x;
end for;
y :=a*xp;
end polynomial;
y = a1 + a2 * x1 + a3 *x1^2
+ (a4 + a5 * x1 + a6 *x1^2) * x2
| Type | Name | Default | Description |
|---|---|---|---|
| Real | a[6] | Coefficients | |
| Real | x1 | Independent variable for quadratic part | |
| Real | x2 | Independent variable for linear part |
| Type | Name | Description |
|---|---|---|
| Real | y | Result |
function quadraticLinear "Function that is quadratic in first argument and linear in second argument" input Real a[6] "Coefficients"; input Real x1 "Independent variable for quadratic part"; input Real x2 "Independent variable for linear part"; output Real y "Result"; protected Real x1Sq; algorithm x1Sq :=x1*x1; y :=a[1] + a[2]*x1 + a[3]*x1Sq + (a[4] + a[5]*x1 + a[6]*x1Sq)*x2; end quadraticLinear;