Description: "Package with valve models"

- Home > Modelica

## Buildings.Fluid.Actuators.Valves

Package with valve models

### Information

This package contains components models for two- and three-way valves. For motor models, see Buildings.Fluid.Actuators.Motors.

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

### Package Content

Name | Description
--- | ---
ThreeWayEqualPercentageLinear | Three way valve with equal percentage and linear characteristics
ThreeWayLinear | Three way valve with linear characteristics
TwoWayEqualPercentage | Two way valve with linear flow characteristics
TwoWayLinear | Two way valve with linear flow characteristics
TwoWayPressureIndependent | Model of a pressure-independent two way valve
TwoWayQuickOpening | Two way valve with linear flow characteristics
TwoWayTable | Two way valve with linear flow characteristics
Data | Data files for valves
Examples | Collection of models that illustrate model use and test models

## Buildings.Fluid.Actuators.Valves.ThreeWayEqualPercentageLinear

Three way valve with equal percentage and linear characteristics

### Information

Three way valve with equal percentage characteristics between `port_1` and `port_2` and linear opening characteristic between `port_1` and `port_2`. Such opening characteristics were typical for valves from Landis & Gyr (now Siemens).

This model is based on the partial valve models Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve and Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve. See Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve for the implementation of the three way valve and see Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve for the implementation of the regularization near the origin.

Extends from BaseClasses.PartialThreeWayValve (Partial three way valve).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | fraK | 0.7 | Fraction Kv(port_3&rarr;port_2)/Kv(port_1&rarr;port_2)
Real | l[2] | {0,0} | Valve leakage, l=Kv(y=0)/Kv(y=1)
Real | R | 50 | Rangeability, R=50...100 typically
Real | delta0 | 0.01 | Range of significant deviation from equal percentage law
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal[2] | {0,0} | Nominal pressure drop of pipes and other equipment in flow legs at port_1 and port_3 [Pa]
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Boolean | dynamicBalance | true | Set to true to use a dynamic balance, which often leads to smaller systems of equations
Nominal condition
Time | tau | 10 | Time constant at nominal flow for dynamic energy and momentum balance [s]
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output
Initialization
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa]
Temperature | T_start | Medium.T_default | Start value of temperature [K]
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg]
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances
ExtraProperty | C_nominal[Medium.nC] | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.)
Advanced
Boolean | from_dp | true | = true, use m_flow = f(dp) else dp = f(m_flow)
PortFlowDirection | portFlowDirection_1 | Modelica.Fluid.Types.PortFlo... | Flow direction for port_1
PortFlowDirection | portFlowDirection_2 | Modelica.Fluid.Types.PortFlo... | Flow direction for port_2
PortFlowDirection | portFlowDirection_3 | Modelica.Fluid.Types.PortFlo... | Flow direction for port_3
Boolean | linearized[2] | {false,false} | = true, use linear relation between m_flow and dp for any flow rate
Boolean | homotopyInitialization | true | = true, use homotopy method
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]

### Connectors

Type | Name | Description
--- | --- | ---
FluidPort_a | port_1 | First port, typically inlet
FluidPort_b | port_2 | Second port, typically outlet
FluidPort_a | port_3 | Third port, can be either inlet or outlet
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model ThreeWayEqualPercentageLinear "Three way valve with equal percentage and linear characteristics" extends BaseClasses.PartialThreeWayValve( redeclare TwoWayEqualPercentage res1(R=R, delta0=delta0), redeclare TwoWayLinear res3); parameter Real R = 50 "Rangeability, R=50...100 typically"; parameter Real delta0 = 0.01 "Range of significant deviation from equal percentage law"; equation connect(inv.y, res3.y); connect(y_actual, inv.u2); connect(y_actual, res1.y); end ThreeWayEqualPercentageLinear;

## Buildings.Fluid.Actuators.Valves.ThreeWayLinear

Three way valve with linear characteristics

### Information

Three way valve with linear opening characteristic.

This model is based on the partial valve models Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve and Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve. See Buildings.Fluid.Actuators.BaseClasses.PartialThreeWayValve for the implementation of the three way valve and see Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve for the implementation of the regularization near the origin.

Extends from BaseClasses.PartialThreeWayValve (Partial three way valve).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | fraK | 0.7 | Fraction Kv(port_3&rarr;port_2)/Kv(port_1&rarr;port_2)
Real | l[2] | {0,0} | Valve leakage, l=Kv(y=0)/Kv(y=1)
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal[2] | {0,0} | Nominal pressure drop of pipes and other equipment in flow legs at port_1 and port_3 [Pa]
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Boolean | dynamicBalance | true | Set to true to use a dynamic balance, which often leads to smaller systems of equations
Nominal condition
Time | tau | 10 | Time constant at nominal flow for dynamic energy and momentum balance [s]
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output
Initialization
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa]
Temperature | T_start | Medium.T_default | Start value of temperature [K]
MassFraction | X_start[Medium.nX] | Medium.X_default | Start value of mass fractions m_i/m [kg/kg]
ExtraProperty | C_start[Medium.nC] | fill(0, Medium.nC) | Start value of trace substances
ExtraProperty | C_nominal[Medium.nC] | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.)
Advanced
Boolean | from_dp | true | = true, use m_flow = f(dp) else dp = f(m_flow)
PortFlowDirection | portFlowDirection_1 | Modelica.Fluid.Types.PortFlo... | Flow direction for port_1
PortFlowDirection | portFlowDirection_2 | Modelica.Fluid.Types.PortFlo... | Flow direction for port_2
PortFlowDirection | portFlowDirection_3 | Modelica.Fluid.Types.PortFlo... | Flow direction for port_3
Boolean | linearized[2] | {false,false} | = true, use linear relation between m_flow and dp for any flow rate
Boolean | homotopyInitialization | true | = true, use homotopy method
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]

### Connectors

Type | Name | Description
--- | --- | ---
FluidPort_a | port_1 | First port, typically inlet
FluidPort_b | port_2 | Second port, typically outlet
FluidPort_a | port_3 | Third port, can be either inlet or outlet
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model ThreeWayLinear "Three way valve with linear characteristics" extends BaseClasses.PartialThreeWayValve( redeclare TwoWayLinear res1, redeclare TwoWayLinear res3); equation connect(inv.y, res3.y); connect(y_actual, inv.u2); connect(y_actual, res1.y); end ThreeWayLinear;

## Buildings.Fluid.Actuators.Valves.TwoWayEqualPercentage

Two way valve with linear flow characteristics

### Information

Two way valve with an equal percentage valve opening characteristic.

This model is based on the partial valve model Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve. Check this model for more information, such as the regularization near the origin.

Extends from BaseClasses.PartialTwoWayValveKv (Partial model for a two way valve using a Kv characteristic).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | l | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1)
Real | phi | if homotopyInitialization th... | Ratio actual to nominal mass flow rate of valve, phi=Kv(y)/Kv(y=1)
Real | R | 50 | Rangeability, R=50...100 typically
Real | delta0 | 0.01 | Range of significant deviation from equal percentage law
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal | 0 | Pressure drop of pipe and other resistances that are in series [Pa]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed
Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow)
Boolean | homotopyInitialization | true | = true, use homotopy method
Boolean | linearized | false | = true, use linear relation between m_flow and dp for any flow rate
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]
Dynamics
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output

### Connectors

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)
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model TwoWayEqualPercentage "Two way valve with linear flow characteristics" extends BaseClasses.PartialTwoWayValveKv(phi=if homotopyInitialization then homotopy(actual=Buildings.Fluid.Actuators.BaseClasses.equalPercentage( y_actual, R, l, delta0), simplified=l + y_actual*(1 - l)) else Buildings.Fluid.Actuators.BaseClasses.equalPercentage( y_actual, R, l, delta0)); parameter Real R=50 "Rangeability, R=50...100 typically"; parameter Real delta0=0.01 "Range of significant deviation from equal percentage law"; initial equation // Since the flow model Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow computes // 1/k^2, the parameter l must not be zero. assert(l > 0, "Valve leakage parameter l must be bigger than zero."); assert(l < 1/R, "Wrong parameters in valve model.\n" + " Rangeability R = " + String(R) + "\n" + " Leakage flow l = " + String(l) + "\n" + " Must have l < 1/R = " + String(1/R)); end TwoWayEqualPercentage;

## Buildings.Fluid.Actuators.Valves.TwoWayLinear

Two way valve with linear flow characteristics

### Information

Two way valve with linear opening characteristic.

This model is based on the partial valve model Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve. Check this model for more information, such as the regularization near the origin.

Extends from BaseClasses.PartialTwoWayValveKv (Partial model for a two way valve using a Kv characteristic).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | l | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1)
Real | phi | l + y_actual*(1 - l) | Ratio actual to nominal mass flow rate of valve, phi=Kv(y)/Kv(y=1)
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal | 0 | Pressure drop of pipe and other resistances that are in series [Pa]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed
Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow)
Boolean | homotopyInitialization | true | = true, use homotopy method
Boolean | linearized | false | = true, use linear relation between m_flow and dp for any flow rate
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]
Dynamics
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output

### Connectors

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)
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model TwoWayLinear "Two way valve with linear flow characteristics" extends BaseClasses.PartialTwoWayValveKv(phi=l + y_actual*(1 - l)); initial equation // Since the flow model Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow computes // 1/k^2, the parameter l must not be zero. assert(l > 0, "Valve leakage parameter l must be bigger than zero."); end TwoWayLinear;

## Buildings.Fluid.Actuators.Valves.TwoWayPressureIndependent

Model of a pressure-independent two way valve

### Information

Two way valve with a pressure-independent valve opening characteristic. The mass flow rate is controlled such that it is nearly equal to its set point `y*m_flow_nominal`, unless the pressure `dp` is too low, in which case a regular `Kv` characteristic is used.

#### Main equations

First the minimum pressure head `dp_min` required for delivering the requested mass flow rate `y*m_flow_nominal` is computed. If `dp > dp_min` then the requested mass flow rate is supplied. If `dp < dp_min` then `m_flow = Kv/sqrt(dp)`. Transition between these two flow regimes happens in a smooth way.

#### Typical use and important parameters

This model is configured by setting `m_flow_nominal` to the mass flow rate that the valve should supply when it is completely open, i.e., `y = 1`. The pressure drop corresponding to this working point can be set using `dpValve_nominal`, or using a `Kv`, `Cv` or `Av` value. The parameter `dpValve_fixed` can be used to add additional pressure drops, although in this valve it is equivalent to add these to `dpValve_nominal`.

The parameter `l2` represents the non-ideal leakage behaviour of this valve for high pressures. It is assumed that the mass flow rate will rise beyond the requested mass flow rate `y*m_flow_nominal` if `dp > dpValve_nominal+dpFixed_nominal`. The parameter `l2` represents the slope of this rise: `d(m_flow)/d(dp) = l2* m_flow_nominal/dp_nominal`. In the ideal case `l2=0`, but this may introduce singularities, for instance when connecting this component with a fixed mass flow source.

#### Options

Parameter `deltax` sets the duration of the transition region between the two flow regimes as a fraction of `dp_nominal` or `m_flow_nominal`, depending on the value of `from_dp`.

#### Implementation

Note that the result in the transition region when using `from_dp = true` is not identical to the result when using `from_dp = false`.

Extends from Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve (Partial model for a two way valve).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | l | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1)
Real | phi | l + y_actual*(1 - l) | Ratio actual to nominal mass flow rate of valve, phi=Kv(y)/Kv(y=1)
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal | 0 | Pressure drop of pipe and other resistances that are in series [Pa]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed
Boolean | from_dp | true | = true, use m_flow = f(dp) else dp = f(m_flow)
Boolean | homotopyInitialization | true | = true, use homotopy method
Boolean | linearized | false | = true, use linear relation between m_flow and dp for any flow rate
Real | l2 | 0.01 | Gain for mass flow increase if pressure is above nominal pressure
Real | deltax | 0.1 | Transition interval for flow rate
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]
Dynamics
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output

### Connectors

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)
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model TwoWayPressureIndependent "Model of a pressure-independent two way valve" extends Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve( final linearized = false, from_dp=true, phi=l + y_actual*(1 - l)); parameter Real l2(min=1e-10) = 0.01 "Gain for mass flow increase if pressure is above nominal pressure"; parameter Real deltax = 0.1 "Transition interval for flow rate"; protected Modelica.SIunits.MassFlowRate m_flow_set "Requested mass flow rate"; Modelica.SIunits.Pressure dp_min "Minimum dp required for delivering requested mass flow rate"; equation m_flow_set = m_flow_nominal*phi; dp_min = Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow( m_flow=m_flow_set, k=k, m_flow_turbulent=m_flow_turbulent); kVal = Kv_SI; if (dpFixed_nominal > Modelica.Constants.eps) then k = sqrt(1/(1/kFixed^2 + 1/kVal^2)); else k = kVal; end if; if homotopyInitialization then if from_dp then m_flow=homotopy(actual=Buildings.Utilities.Math.Functions.spliceFunction( x=dp-dp_min, pos= m_flow_set + l2*(dp-dp_min)/dp_nominal*m_flow_nominal, neg= Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_dp( dp=dp, k=k, m_flow_turbulent=m_flow_turbulent), deltax=dp_nominal_pos*deltax), simplified=m_flow_nominal_pos*dp/dp_nominal_pos); else dp=homotopy(actual=Buildings.Utilities.Math.Functions.spliceFunction( x=m_flow-m_flow_set, pos= dp_min + (m_flow-m_flow_set)/m_flow_nominal*dp_nominal/l2, neg= Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow( m_flow=m_flow, k=k, m_flow_turbulent=m_flow_turbulent), deltax=m_flow_nominal_pos*deltax*l2), simplified=dp_nominal_pos*m_flow/m_flow_nominal_pos); end if; else // do not use homotopy if from_dp then m_flow=Buildings.Utilities.Math.Functions.spliceFunction( x=dp-dp_min, pos= m_flow_set + l2*(dp-dp_min)/dp_nominal*m_flow_nominal, neg= Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_dp( dp=dp, k=k, m_flow_turbulent=m_flow_turbulent), deltax=dp_nominal_pos*deltax); else dp=Buildings.Utilities.Math.Functions.spliceFunction( x=m_flow-m_flow_set, pos= dp_min + (m_flow-m_flow_set)/m_flow_nominal*dp_nominal/l2, neg= Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow( m_flow=m_flow, k=k, m_flow_turbulent=m_flow_turbulent), deltax=m_flow_nominal_pos*deltax*l2); end if; end if; // homotopyInitialization end TwoWayPressureIndependent;

## Buildings.Fluid.Actuators.Valves.TwoWayQuickOpening

Two way valve with linear flow characteristics

### Information

Two way valve with a power function for the valve opening characteristic. Valves that need to open quickly typically have such a valve characteristics.

This model is based on the partial valve model Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve. Check this model for more information, such as the regularization near the origin.

Extends from BaseClasses.PartialTwoWayValveKv (Partial model for a two way valve using a Kv characteristic).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | l | 0.0001 | Valve leakage, l=Kv(y=0)/Kv(y=1)
Real | phi | if homotopyInitialization th... | Ratio actual to nominal mass flow rate of valve, phi=Kv(y)/Kv(y=1)
Real | alp | 2 | Parameter for valve characteristics, alp>0
Real | delta0 | 0.01 | Range of significant deviation from power law
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal | 0 | Pressure drop of pipe and other resistances that are in series [Pa]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed
Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow)
Boolean | homotopyInitialization | true | = true, use homotopy method
Boolean | linearized | false | = true, use linear relation between m_flow and dp for any flow rate
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]
Dynamics
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output

### Connectors

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)
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model TwoWayQuickOpening "Two way valve with linear flow characteristics" extends BaseClasses.PartialTwoWayValveKv(phi=if homotopyInitialization then homotopy(actual=l + Modelica.Fluid.Utilities.regPow( y_actual, alpInv, delta0)*(1 - l), simplified=l + y_actual*(1 - l)) else l + Modelica.Fluid.Utilities.regPow( y_actual, alpInv, delta0)*(1 - l)); parameter Real alp = 2 "Parameter for valve characteristics, alp>0"; parameter Real delta0 = 0.01 "Range of significant deviation from power law"; protected parameter Real alpInv = 1/alp "Inverse of alpha"; initial equation // Since the flow model Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow computes // 1/k^2, the parameter l must not be zero. assert(l > 0, "Valve leakage parameter l must be bigger than zero."); end TwoWayQuickOpening;

## Buildings.Fluid.Actuators.Valves.TwoWayTable

Two way valve with linear flow characteristics

### Information

Two way valve with opening characteristic that is configured through a table.

The mass flow rate for the fully open valve is determined based on the value of the parameter `CvData`. For the different valve positions y ∈ [0, 1], this nominal flow rate is scaled by the values of the parameter `flowCharacteristics`. The parameter `flowCharacteristics` declares a table of the form

y | 0 | ... | 1
φ | l | ... | 1

where l = Kv(y=0)/Kv(y=1) > 0 is the valve leakage. The first row is the valve opening, and the second row is the mass flow rate, relative to the mass flow rate of the fully open valve, under the assumption of a constant pressure difference across the valve. A suggested value for the valve leakage is l=0.0001. If l = 0, then this model will replace it with l = 10-8 for numerical reasons. For example, if a valve has Kv=0.5 [m3/h/bar1/2] and a linear opening characteristics and a valve leakage of l=0.0001, then one would set

     CvData=Buildings.Fluid.Types.CvTypes.Kv
     Kv = 0.5
     flowCharacteristics(y={0,1}, phi={0.0001,1})

Note, however, that Buildings.Fluid.Actuators.Valves.TwoWayLinear provides a more efficient implementation for this simple case.

The parameter `flowCharacteristics` must meet the following requirements, otherwise the model stops with an error:

- The arrays in `flowCharacteristics.y` and `flowCharacteristics.phi` must be strictly monotonic increasing.
- The first value must satisfy `flowCharacteristics.y[1]=0`, and `flowCharacteristics.phi[1]` must be equal to the leakage flow rate, which must be bigger than zero. Otherwise, a default value of `1E-8` is used.
- The last values must satisfy `flowCharacteristics.y[end]=1` and `flowCharacteristics.phi[end]=1`.

This model is based on the partial valve model Buildings.Fluid.Actuators.BaseClasses.PartialTwoWayValve. Check this model for more information, such as the regularization near the origin.

For an example that specifies an opening characteristics, see Buildings.Fluid.Actuators.Valves.Examples.TwoWayValveTable.

Extends from BaseClasses.PartialTwoWayValveKv (Partial model for a two way valve using a Kv characteristic).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Real | l | phiLooUp.table[1, 2] | Valve leakage, l=Kv(y=0)/Kv(y=1)
Real | phi | phiLooUp.y[1] | Ratio actual to nominal mass flow rate of valve, phi=Kv(y)/Kv(y=1)
Generic | flowCharacteristics |  | Table with flow characteristics
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Pressure | dpValve_nominal |  | Nominal pressure drop of fully open valve, used if CvData=Buildings.Fluid.Types.CvTypes.OpPoint [Pa]
Pressure | dpFixed_nominal | 0 | Pressure drop of pipe and other resistances that are in series [Pa]
Initialization
MassFlowRate | m_flow.start | 0 | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressure | dp.start | 0 | Pressure difference between port_a and port_b [Pa]
Flow Coefficient
CvTypes | CvData | Buildings.Fluid.Types.CvType... | Selection of flow coefficient
Real | Kv |  | Kv (metric) flow coefficient [m3/h/(bar)^(1/2)]
Real | Cv |  | Cv (US) flow coefficient [USG/min/(psi)^(1/2)]
Area | Av |  | Av (metric) flow coefficient [m2]
Pressure-flow linearization
Real | deltaM | 0.02 | Fraction of nominal flow rate where linearization starts, if y=1
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
Diagnostics
Boolean | show_T | false | = true, if actual temperature at port is computed
Boolean | from_dp | false | = true, use m_flow = f(dp) else dp = f(m_flow)
Boolean | homotopyInitialization | true | = true, use homotopy method
Boolean | linearized | false | = true, use linear relation between m_flow and dp for any flow rate
Nominal condition
Density | rhoStd | Medium.density_pTX(101325, 2... | Inlet density for which valve coefficients are defined [kg/m3]
Dynamics
Filtered opening
Boolean | filteredOpening | true | = true, if opening is filtered with a 2nd order CriticalDamping filter
Time | riseTime | 120 | Rise time of the filter (time to reach 99.6 % of an opening step) [s]
Init | init | Modelica.Blocks.Types.Init.I... | Type of initialization (no init/steady state/initial state/initial output)
Real | y_start | 1 | Initial value of output

### Connectors

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)
input RealInput | y | Actuator position (0: closed, 1: open)
output RealOutput | y_actual | Actual valve position

### Modelica definition

model TwoWayTable "Two way valve with linear flow characteristics" extends BaseClasses.PartialTwoWayValveKv( phi=phiLooUp.y[1], final l = phiLooUp.table[1, 2]); parameter Data.Generic flowCharacteristics "Table with flow characteristics"; // Since the flow model Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow computes // 1/k^2, the flowCharacteristics.phi[1] must not be zero. // We therefore set a lower bound. protected Modelica.Blocks.Tables.CombiTable1D phiLooUp( final tableOnFile=false, final table=[flowCharacteristics.y, cat( 1, {max(flowCharacteristics.phi[1], 1E-8)}, {flowCharacteristics.phi[i] for i in 2:size(flowCharacteristics.phi, 1)})], final columns=2:2, final smoothness=Modelica.Blocks.Types.Smoothness.ContinuousDerivative) "Normalized mass flow rate for the given valve position under the assumption of a constant pressure"; initial equation assert(flowCharacteristics.y[1] == 0, "flowCharateristics.y[1] must be 0."); assert(flowCharacteristics.y[size(flowCharacteristics.y, 1)] == 1, "flowCharateristics.y[end] must be 1."); assert(flowCharacteristics.phi[size(flowCharacteristics.phi, 1)] == 1, "flowCharateristics.phi[end] must be 1."); // Assert that the sequences are strictly monotonic increasing assert(Buildings.Utilities.Math.Functions.isMonotonic( x=flowCharacteristics.y, strict=true), "The values for y in flowCharacteristics must be strictly monotone increasing."); assert(Buildings.Utilities.Math.Functions.isMonotonic( x=flowCharacteristics.phi, strict=true), "The values for phi in flowCharacteristics must be strictly monotone increasing."); equation connect(phiLooUp.u[1], y_actual); end TwoWayTable;