Buildings.Fluid.MassExchangers

Package with mass exchanger models

Information


This package contains models for mass exchangers.
For heat exchanger models with humidity transfer, see the package

Buildings.Fluid.HeatExchangers.

Package Content

NameDescription
Buildings.Fluid.MassExchangers.ConstantEffectiveness ConstantEffectiveness Heat and moisture exchanger with constant effectiveness
Buildings.Fluid.MassExchangers.HumidifierPrescribed HumidifierPrescribed Ideal humidifier or dehumidifier with prescribed water mass flow rate addition or subtraction
Buildings.Fluid.MassExchangers.Examples Examples Collection of models that illustrate model use and test models


Buildings.Fluid.MassExchangers.ConstantEffectiveness Buildings.Fluid.MassExchangers.ConstantEffectiveness

Heat and moisture exchanger with constant effectiveness

Buildings.Fluid.MassExchangers.ConstantEffectiveness

Information


Model for a heat and moisture exchanger with constant effectiveness.

This model transfers heat and moisture in the amount of

  Q = epsS * Q_max,
  m = epsL * mWat_max,
where epsS and epsL are constant effectiveness for the sensible and latent heat transfer, Q_max is the maximum heat that can be transferred and mWat_max is the maximum moisture that can be transferred.

In the region mK_flow_small > abs(mK_flow) > mK_flow_small/2, for K = 1 or 2, the effectivness epsS and epsL are transitioned from their user-specified value to 0. This improves the numerical robustness near zero flow.

For a sensible heat exchanger, use Buildings.Fluid.HeatExchangers.ConstantEffectiveness instead of this model.

This model can only be used with medium models that define the integer constant Water which needs to be equal to the index of the water mass fraction in the species vector.

Extends from Buildings.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness (Partial model to implement heat exchangers based on effectiveness model).

Parameters

TypeNameDefaultDescription
replaceable package Medium1PartialMediumMedium 1 in the component
replaceable package Medium2PartialMediumMedium 2 in the component
RealepsS0.8Sensible heat exchanger effectiveness
RealepsL0.8Latent heat exchanger effectiveness
Nominal condition
MassFlowRatem1_flow_nominal Nominal mass flow rate [kg/s]
MassFlowRatem2_flow_nominal Nominal mass flow rate [kg/s]
Pressuredp1_nominal Pressure [Pa]
Pressuredp2_nominal Pressure [Pa]
Initialization
MassFlowRatem1_flow.start0Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) [kg/s]
Pressuredp1.start0Pressure difference between port_a1 and port_b1 [Pa]
MassFlowRatem2_flow.start0Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) [kg/s]
Pressuredp2.start0Pressure difference between port_a2 and port_b2 [Pa]
Assumptions
BooleanallowFlowReversal1system.allowFlowReversal= true to allow flow reversal in medium 1, false restricts to design direction (port_a -> port_b)
BooleanallowFlowReversal2system.allowFlowReversal= true to allow flow reversal in medium 2, false restricts to design direction (port_a -> port_b)
Initialization
SpecificEnthalpyh_outflow_a1_startMedium1.h_defaultStart value for enthalpy flowing out of port a1 [J/kg]
SpecificEnthalpyh_outflow_b1_startMedium1.h_defaultStart value for enthalpy flowing out of port b1 [J/kg]
SpecificEnthalpyh_outflow_a2_startMedium2.h_defaultStart value for enthalpy flowing out of port a2 [J/kg]
SpecificEnthalpyh_outflow_b2_startMedium2.h_defaultStart value for enthalpy flowing out of port b2 [J/kg]
Advanced
MassFlowRatem1_flow_small1E-4*m1_flow_nominalSmall mass flow rate for regularization of zero flow [kg/s]
MassFlowRatem2_flow_small1E-4*m2_flow_nominalSmall mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_V_flowfalse= true, if volume flow rate at inflowing port is computed
Flow resistance
Medium 1
Booleanfrom_dp1false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance1false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM10.1Fraction of nominal flow rate where flow transitions to laminar
Medium 2
Booleanfrom_dp2false= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistance2false= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM20.1Fraction of nominal flow rate where flow transitions to laminar

Connectors

TypeNameDescription
FluidPort_aport_a1Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_bport_b1Fluid connector b1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_a2Fluid connector a2 (positive design flow direction is from port_a2 to port_b2)
FluidPort_bport_b2Fluid connector b2 (positive design flow direction is from port_a2 to port_b2)

Modelica definition

model ConstantEffectiveness 
  "Heat and moisture exchanger with constant effectiveness"
  extends Buildings.Fluid.HeatExchangers.BaseClasses.PartialEffectiveness(
  sensibleOnly1=false,
  sensibleOnly2=false);
  parameter Real epsS(min=0, max=1) = 0.8 
    "Sensible heat exchanger effectiveness";
  parameter Real epsL(min=0, max=1) = 0.8 "Latent heat exchanger effectiveness";

  Medium1.MassFraction X_w_in1 "Inlet water mass fraction of medium 1";
  Medium2.MassFraction X_w_in2 "Inlet water mass fraction of medium 2";

  Modelica.SIunits.MassFlowRate mWat_flow 
    "Water flow rate from medium 2 to medium 1";
  Modelica.SIunits.MassFlowRate mMax_flow 
    "Maximum water flow rate from medium 2 to medium 1";

equation 
  // transfered heat
  Q1_flow = epsS * QMax_flow;
  // no heat loss to ambient
  0 = Q1_flow + Q2_flow;
  // Definitions for effectiveness model
  X_w_in1 = Modelica.Fluid.Utilities.regStep(m1_flow,
                  state_a1_inflow.X[Medium1.Water],
                  state_b1_inflow.X[Medium1.Water], m1_flow_small);
  X_w_in2 = Modelica.Fluid.Utilities.regStep(m2_flow,
                  state_a2_inflow.X[Medium2.Water],
                  state_b2_inflow.X[Medium2.Water], m2_flow_small);

  // mass exchange
  mMax_flow = smooth(1, min(smooth(1, gai1 * abs(m1_flow)),
                            smooth(1, gai2 * abs(m2_flow)))) * (X_w_in2 - X_w_in1);
  mWat_flow = epsL * mMax_flow;

  for i in 1:Medium1.nXi loop
     mXi1_flow[i] = if ( i == Medium1.Water) then mWat_flow else 0;
  end for;

  for i in 1:Medium2.nXi loop
     mXi2_flow[i] = if ( i == Medium2.Water) then -mWat_flow else 0;
  end for;
end ConstantEffectiveness;

Buildings.Fluid.MassExchangers.HumidifierPrescribed Buildings.Fluid.MassExchangers.HumidifierPrescribed

Ideal humidifier or dehumidifier with prescribed water mass flow rate addition or subtraction

Buildings.Fluid.MassExchangers.HumidifierPrescribed

Information


Model for an air humidifier or dehumidifier.

This model adds (or removes) moisture from the air stream. The amount of exchanged moisture is equal to m_flow = u * m_flow_nominal. The input signal u and the nominal moisture flow rate added to the air stream m_flow_nominal can be positive or negative. If the product u * m_flow_nominal is positive, then moisture is added to the air stream, otherwise it is removed.

If the connector T_in is left unconnected, the value set by the parameter T is used for temperature of the water that is added to the air stream.

Note that for non-zero m_flow, if the mass flow rate tends to zero, then the moisture difference over this component tends to infinity. Hence, using a proper control for u is essential when using this component.

This model can only be used with medium models that define the integer constant Water which needs to be equal to the index of the water mass fraction in the species vector.

Extends from Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer (Partial model transporting fluid between two ports without storing mass or energy).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
Booleanuse_T_infalseGet the temperature from the input connector
TemperatureT293.15Temperature of water that is added to the fluid stream (used if use_T_in=false) [K]
MassFlowRatemWat0_flow Water mass flow rate at u=1, positive for humidification [kg/s]
Nominal condition
MassFlowRatem_flow_nominal Nominal mass flow rate [kg/s]
Pressuredp_nominal Pressure [Pa]
Initialization
MassFlowRatem_flow.start0Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) [kg/s]
Pressuredp.start0Pressure difference between port_a and port_b [Pa]
Assumptions
BooleanallowFlowReversalsystem.allowFlowReversal= true to allow flow reversal, false restricts to design direction (port_a -> port_b)
Advanced
MassFlowRatem_flow_small1E-4*m_flow_nominalSmall mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_V_flowfalse= true, if volume flow rate at inflowing port is computed
Booleanshow_Tfalse= true, if actual temperature at port is computed (may lead to events)
Flow resistance
Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
input RealInputT_inTemperature of water added to the fluid stream
input RealInputuControl input

Modelica definition

model HumidifierPrescribed 
  "Ideal humidifier or dehumidifier with prescribed water mass flow rate addition or subtraction"
  extends Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer(
     sensibleOnly = false);

  parameter Boolean use_T_in= false 
    "Get the temperature from the input connector";

  parameter Modelica.SIunits.Temperature T = 293.15 
    "Temperature of water that is added to the fluid stream (used if use_T_in=false)";

  parameter Modelica.SIunits.MassFlowRate mWat0_flow 
    "Water mass flow rate at u=1, positive for humidification";

  Modelica.Blocks.Interfaces.RealInput T_in if use_T_in 
    "Temperature of water added to the fluid stream";
  Modelica.Blocks.Interfaces.RealInput u "Control input";
protected 
  constant Modelica.SIunits.MassFraction[Medium.nXi] Xi_w = {1} 
    "Mass fraction of water";
  Modelica.SIunits.MassFlowRate mWat_flow "Water flow rate";
  Modelica.Blocks.Interfaces.RealInput T_in_internal 
    "Needed to connect to conditional connector";
equation 
  connect(T_in, T_in_internal);
  if not use_T_in then
    T_in_internal = T;
  end if;

  mWat_flow = u * mWat0_flow;
  Q_flow = Medium.enthalpyOfLiquid(T_in_internal) * mWat_flow;
  for i in 1:Medium.nXi loop
     mXi_flow[i] = if ( i == Medium.Water) then  mWat_flow else 0;
  end for;
end HumidifierPrescribed;

HTML-documentation generated by Dymola Thu Jun 24 16:54:41 2010.