modelAdsolair58
Extends from IDEAS.Fluid.Interfaces.LumpedVolumeDeclarations (Declarations for lumped volumes), IDEAS.Fluid.Interfaces.PartialFourPortInterface (Partial model with four ports and declaration of quantities that are used by many models).
Information
Validated model of Menerga type 58 air handling unit with a nominal air flow rate of 14200m3/h. This is not a generic model, but a detailed model of a single air handling unit.
Main equations
See references.
Assumption and limitations
Flow reversal is not supported. Dynamics are simplified. The chiller contains hard-coded performance data.
Typical use and important parameters
When using the model a temperature set point and the supply/return pressure
set points need to be provided.
The unit can either be configured to be always on, or an additional boolean
input may be used to control the status of the unit.
Parameter per allows setting the type-specific performance data of the unit.
Additional pressure drop due to fouling of filters may be specified.
Other parameters were calibrated in the validation.
Options
Parameters k1 and alpha were calibrated.
An additional heat exchanger may be added by redeclaring hexSupOut.
The controller model may be changed by redeclaring adsCon.
Dynamics
The evaporator, condensor and indirect evaporative heat exchanger contain dynamics. Furthermore some temperature sensors contain dynamics and the PI controllers contain a state for the integrator. All these states have a time constant in the order of 1 minute by default.
Validation
This model has been validated using measurement data. See the references for a detailed discussion.
References
For more information and the model validation see
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| IDEAS.Airflow.AHU.BaseClasses.Adsolair14200 | per | ||
| Boolean | use_onOffSignal | true | Set to true to switch device on/off using external signal |
| Boolean | onOff | true | Set to true if device is on |
| Modelica.Units.SI.Pressure | dp_fouling_top | 0 | Nominal pressure drop in top channel due to filter fouling |
| Modelica.Units.SI.Pressure | dp_fouling_bot | 0 | Nominal pressure drop in bottom channel due to filter fouling |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from LumpedVolumeDeclarations) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | substanceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of independent mass fraction balance: dynamic (3 initialization options) or steady state |
| Modelica.Fluid.Types.Dynamics | traceDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of trace substance balance: dynamic (3 initialization options) or steady state |
| Advanced › Dynamics | |||
| Modelica.Fluid.Types.Dynamics | massDynamics (from LumpedVolumeDeclarations) | energyDynamics | Type of mass balance: dynamic (3 initialization options) or steady state, must be steady state if energyDynamics is steady state |
| Initialization | |||
| Medium.AbsolutePressure | p_start (from LumpedVolumeDeclarations) | Medium.p_default | Start value of pressure |
| Medium.Temperature | T_start (from LumpedVolumeDeclarations) | Medium.T_default | Start value of temperature |
| Medium.MassFraction[Medium.nX] | X_start (from LumpedVolumeDeclarations) | Medium.X_default | Start value of mass fractions m_i/m |
| Medium.ExtraProperty[Medium.nC] | C_start (from LumpedVolumeDeclarations) | fill(0, Medium.nC) | Start value of trace substances |
| Medium.ExtraProperty[Medium.nC] | C_nominal (from LumpedVolumeDeclarations) | fill(1E-2, Medium.nC) | Nominal value of trace substances. (Set to typical order of magnitude.) |
| Dynamics | |||
| Real | mSenFac (from LumpedVolumeDeclarations) | 1 | Factor for scaling the sensible thermal mass of the volume |
| Assumptions | |||
| Boolean | allowFlowReversal1 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 1 |
| Boolean | allowFlowReversal2 (from PartialFourPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal for medium 2 |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m1_flow_nominal (from PartialFourPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.MassFlowRate | m2_flow_nominal (from PartialFourPortInterface) | Nominal mass flow rate | |
| Advanced | |||
| Medium1.MassFlowRate | m1_flow_small (from PartialFourPortInterface) | 1E-4*abs(m1_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Medium2.MassFlowRate | m2_flow_small (from PartialFourPortInterface) | 1E-4*abs(m2_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Boolean | allowFlowReversal | false | Flow reversal is not supported |
| Modelica.Units.SI.MassFlowRate | m_flow_small | m1_flow_nominal/50 | Small mass flow rate for regularization of zero flow |
| Modelica.Units.SI.Time | tau | 60 | Thermal time constant of evaporator, condensor and heat recovery unit at nominal flow rate |
| Real | alpha | 0.5 | Pressure recovery factor for fixed pressure drop in bottom bypass channel |
| Real | k1 | 0.45 | Flow coefficient for y=1, k1 = pressure drop divided by dynamic pressure |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialFourPortInterface) | false | = true, if actual temperature at port is computed |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a1 (from PartialFourPort) | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b1 (from PartialFourPort) | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) | |
| Modelica.Fluid.Interfaces.FluidPort_a | port_a2 (from PartialFourPort) | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b2 (from PartialFourPort) | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) | |
| Modelica.Blocks.Interfaces.BooleanInput | on | ||
| Modelica.Blocks.Interfaces.RealInput | Tset | Setpoints of the valves | |
| Modelica.Blocks.Interfaces.RealInput | dpSet | Top and bottom fan pressure set points | |
| Modelica.Blocks.Interfaces.RealOutput | P | ||
| Modelica.Blocks.Interfaces.RealOutput | TFanSupOut | Temperature measured behind supply fan |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Medium1.MassFlowRate | m1_flow (from PartialFourPortInterface) | port_a1.m_flow | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp1 (from PartialFourPortInterface) | port_a1.p - port_b1.p | Pressure difference between port_a1 and port_b1 |
| Medium2.MassFlowRate | m2_flow (from PartialFourPortInterface) | port_a2.m_flow | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp2 (from PartialFourPortInterface) | port_a2.p - port_b2.p | Pressure difference between port_a2 and port_b2 |
| Medium1.ThermodynamicState | sta_a1 (from PartialFourPortInterface) | if allowFlowReversal1 then Medium1.setState_phX(port_a1.p, noEvent(actualStream(port_a1.h_outflow)), noEvent(actualStream(port_a1.Xi_outflow))) else Medium1.setState_phX(port_a1.p, inStream(port_a1.h_outflow), inStream(port_a1.Xi_outflow)) | Medium properties in port_a1 |
| Medium1.ThermodynamicState | sta_b1 (from PartialFourPortInterface) | if allowFlowReversal1 then Medium1.setState_phX(port_b1.p, noEvent(actualStream(port_b1.h_outflow)), noEvent(actualStream(port_b1.Xi_outflow))) else Medium1.setState_phX(port_b1.p, port_b1.h_outflow, port_b1.Xi_outflow) | Medium properties in port_b1 |
| Medium2.ThermodynamicState | sta_a2 (from PartialFourPortInterface) | if allowFlowReversal2 then Medium2.setState_phX(port_a2.p, noEvent(actualStream(port_a2.h_outflow)), noEvent(actualStream(port_a2.Xi_outflow))) else Medium2.setState_phX(port_a2.p, inStream(port_a2.h_outflow), inStream(port_a2.Xi_outflow)) | Medium properties in port_a2 |
| Medium2.ThermodynamicState | sta_b2 (from PartialFourPortInterface) | if allowFlowReversal2 then Medium2.setState_phX(port_b2.p, noEvent(actualStream(port_b2.h_outflow)), noEvent(actualStream(port_b2.Xi_outflow))) else Medium2.setState_phX(port_b2.p, port_b2.h_outflow, port_b2.Xi_outflow) | Medium properties in port_b2 |
| Modelica.Units.SI.Energy | E | IEH.E + eva.U + con.U | |
| Real | BPF | min(1, max(0, IDEAS.Utilities.Math.Functions.spliceFunction(x = abs(IEH.TOutBot - eva.heatPort.T) - 0.2, pos = (eva.heatPort.T - com.Teva)*IDEAS.Utilities.Math.Functions.inverseXRegularized(x = IEH.TOutBot - com.Teva, delta = 0.1), neg = 1, deltax = 0.1))) | Fraction of air that is bypassed in the evaporator |
| Real | X_sat_evap | IDEAS.Utilities.Psychrometrics.Functions.X_pSatpphi(pSat = IDEAS.Media.Air.saturationPressure(com.Teva), p = eva.ports[1].p, phi = 1) | Water fraction at saturation in evaporator at refrigerant temperature |
| Real | x_out | BPF*IEH.port_b2.Xi_outflow[1] + (1 - BPF)*min(X_sat_evap, IEH.port_b2.Xi_outflow[1]) | Outlet water mass fraction based on BPF |
| Modelica.Units.SI.MassFlowRate | m_condens | IEH.port_a2.m_flow*(IEH.port_b2.Xi_outflow[1] - x_out) | Water condensation mass flow rate in the evaporator. |
| IDEAS.Airflow.AHU.BaseClasses.AdsolairController | adsCon | ||
| DummyExchanger | hexSupOut | ||
| IDEAS.Airflow.AHU.BaseClasses.SimpleCompressorTable | com | ||
| Modelica.Blocks.Sources.BooleanExpression | onExp | AHU control signal | |
| Modelica.Blocks.Sources.RealExpression | TEvaExp | Evaporator outlet temperature | |
| IDEAS.Fluid.HeatExchangers.IndirectEvaporativeHex | IEH | Indirect evaporative heat exchanger | |
| IDEAS.Fluid.MixingVolumes.MixingVolume | con | Simple condensor model for active chiller | |
| IDEAS.Fluid.Movers.FlowControlled_dp | fanTop | Top fan | |
| IDEAS.Fluid.MixingVolumes.MixingVolumeMoistAir | eva | Simple evaporator model for active chiller | |
| IDEAS.Fluid.Movers.FlowControlled_dp | fanBot | Bottom fan | |
| Modelica.Blocks.Math.Sum | sum | Total electrical power consumption | |
| IDEAS.Fluid.Sensors.TemperatureTwoPort | TSupIn | Supply inlet air temperature | |
| Modelica.Blocks.Sources.RealExpression | m_condens_exp | Real expression for setting water condensation mass flow rate | |
| Modelica.Thermal.HeatTransfer.Components.ThermalConductor | conCon | Conductor describing the temperature drop in the condensor | |
| Modelica.Blocks.Sources.RealExpression[2] | fan_flow_set | Fan flow set points | |
| Modelica.Thermal.HeatTransfer.Sources.FixedTemperature | fixedTemperature | ||
| IDEAS.Fluid.FixedResistances.PressureDrop | resTop | Top pressure drop component | |
| IDEAS.Fluid.FixedResistances.PressureDrop | resBot | Bottom pressure drop component | |
| TwoWayEqualPercentageAdd | valBypassBottom | ||
| TwoWayEqualPercentageAdd | valRecupBot | ||
| TwoWayEqualPercentageAdd | valBypassTop | ||
| TwoWayEqualPercentageAdd | valRecupTop | ||
| IDEAS.Fluid.Sensors.TemperatureTwoPort | senTemFanSupOut | Inlet temperature of the heater | |
| Modelica.Blocks.Sources.RealExpression | PPum | Electrical power consumption of circulation pump | |
| Modelica.Blocks.Sources.BooleanConstant | booleanConstant | Only valRecupTop has conditional Kv value | |
| Modelica.Blocks.Sources.RealExpression | PUnit | Remaing electrical power consumption from unit |
Contents
| Name | Description |
|---|---|
| Air medium model | |
| Heat exchanger that sets absolute pressure for unconnected ports | |
| Damper with possibility for adding fixed pressure drop using boolean input |
Revisions
-
October 30, 2024, by Lucas Verleyen and Jelger Jansen:
Updates according to IBPSA.
See #1383 (and IBPSA, #1926, IBPSA, #1704, Buildings, #3845, and Buildings, #2668). -
April 26, 2022, by Filip Jorissen:
Removed experiment annotation for #1254. -
April 11, 2022, by Filip Jorissen:
Added dummy heat exchanger implementation for avoiding singularity after MSL4 update. -
January 26, 2018, by Filip Jorissen:
Improved adsolair controller performance. See #751, #730, #729, #754. -
April 27, 2017, by Filip Jorissen:
Removed thermal resistors at pumps. These are no longer required since movers are regularised such that they dissipate no power at zero flow. -
April 27, 2017, by Filip Jorissen:
Made compressor model replaceable. See #719. -
October 11, 2016, by Filip Jorissen:
First implementation.