Name | Description |
---|---|
BaseClasses | Package with base classes for heat exchanger models |
ConstantEffectiveness | Heat exchanger with constant effectiveness |
CoolingTowers | Package with cooling tower models |
DryCoilDiscretized | Coil with discretization along the flow paths and no humidity condensation |
Examples | Collection of models that illustrate model use and test models |
HeaterCoolerPrescribed | Heater or cooler with prescribed heat flow rate |
Radiators | Package with radiators models for hydronic space heating systems |
WetCoilDiscretized | Coil with discretization along the flow paths and humidity condensation |
Model for a heat exchanger with constant effectiveness.
This model transfers heat in the amount of
Q = Q_max * eps,where eps is a constant effectiveness and Q_max is the maximum heat that can be transferred.
For a heat and moisture exchanger, use Buildings.Fluid.MassExchangers.ConstantEffectiveness instead of this model.
Extends from Fluid.Interfaces.PartialStaticFourPortHeatMassTransfer (Partial model transporting two fluid streams between four ports without storing mass or energy), Buildings.BaseClasses.BaseIcon (Base icon).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium1 | PartialMedium | Medium 1 in the component | |
replaceable package Medium2 | PartialMedium | Medium 2 in the component | |
Real | eps | 0.8 | Heat exchanger effectiveness |
Nominal condition | |||
MassFlowRate | m1_flow_nominal | Nominal mass flow rate [kg/s] | |
MassFlowRate | m2_flow_nominal | m1_flow_nominal | Nominal mass flow rate [kg/s] |
Pressure | dp1_nominal | Pressure [Pa] | |
Pressure | dp2_nominal | Pressure [Pa] | |
Initialization | |||
MassFlowRate | m1_flow.start | 0 | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) [kg/s] |
Pressure | dp1.start | 0 | Pressure difference between port_a1 and port_b1 [Pa] |
MassFlowRate | m2_flow.start | 0 | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) [kg/s] |
Pressure | dp2.start | 0 | Pressure difference between port_a2 and port_b2 [Pa] |
Assumptions | |||
Boolean | allowFlowReversal1 | system.allowFlowReversal | = true to allow flow reversal in medium 1, false restricts to design direction (port_a -> port_b) |
Boolean | allowFlowReversal2 | system.allowFlowReversal | = true to allow flow reversal in medium 2, false restricts to design direction (port_a -> port_b) |
Advanced | |||
MassFlowRate | m1_flow_small | 1E-4*m1_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
MassFlowRate | m2_flow_small | 1E-4*m2_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
Diagnostics | |||
Boolean | show_V_flow | true | = true, if volume flow rate at inflowing port is computed |
Initialization | |||
AbsolutePressure | p_a1_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b1_start | p_a1_start | Guess value for outlet pressure [Pa] |
AbsolutePressure | p_a2_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b2_start | p_a2_start | Guess value for outlet pressure [Pa] |
Flow resistance | |||
Medium 1 | |||
Boolean | from_dp1 | true | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance1 | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM1 | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Medium 2 | |||
Boolean | from_dp2 | true | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance2 | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM2 | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a1 | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_b | port_b1 | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_a | port_a2 | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) |
FluidPort_b | port_b2 | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) |
model ConstantEffectiveness "Heat exchanger with constant effectiveness" extends Fluid.Interfaces.PartialStaticFourPortHeatMassTransfer; extends Buildings.BaseClasses.BaseIcon; parameter Real eps(min=0, max=1) = 0.8 "Heat exchanger effectiveness"; Modelica.SIunits.Temperature T_in1 "Inlet temperature medium 1"; Modelica.SIunits.Temperature T_in2 "Inlet temperature medium 2"; Modelica.SIunits.ThermalConductance C1_flow "Heat capacity flow rate medium 1"; Modelica.SIunits.ThermalConductance C2_flow "Heat capacity flow rate medium 2"; Modelica.SIunits.ThermalConductance CMin_flow(min=0) "Minimum heat capacity flow rate"; Modelica.SIunits.HeatFlowRate QMax_flow "Maximum heat flow rate"; equation // Definitions for heat transfer effectiveness model T_in1 = if m1_flow >= 0 then Medium1.temperature(sta_a1) else Medium1.temperature(sta_b1); T_in2 = if m2_flow >= 0 then Medium2.temperature(sta_a2) else Medium2.temperature(sta_b2); // The specific heat capacity is computed using the state of the // medium at port_a. For forward flow, this is correct, for reverse flow, // this is an approximation. C1_flow = abs(m1_flow)* Medium1.specificHeatCapacityCp(sta_a1); C2_flow = abs(m2_flow)* Medium2.specificHeatCapacityCp(sta_a2); CMin_flow = min(C1_flow, C2_flow); QMax_flow = CMin_flow * (T_in2 - T_in1); // transferred heat Q1_flow = eps * QMax_flow; 0 = Q1_flow + Q2_flow; // no mass exchange mXi1_flow = zeros(Medium1.nXi); mXi2_flow = zeros(Medium2.nXi); end ConstantEffectiveness;
Model of a discretized coil with no water vapor condensation. The coil consists of nReg registers that are perpendicular to the air flow path. Each register consists of nPipPar parallel pipes, and each pipe can be divided into nPipSeg pipe segments along the pipe length. Thus, the smallest element of the coil consists of a pipe segment. Each pipe segment is modeled by an instance of Buildings.Fluid.HeatExchangers.BaseClasses.HexElement. Each element has a state variable for the metal. Depending on the value of the boolean parameters steadyState_1 and steadyState_2, the fluid states are modeled dynamically or in steady state. If the parameter steadyStateDuctConnection is set the false, then a mixing volume of length dl is added to the duct connection. This can help reducing the dimension of the nonlinear system of equations.
The convective heat transfer coefficients can, for each fluid individually, be computed as a function of the flow rate and/or the temperature, or assigned to a constant. This computation is done using an instance of Buildings.Fluid.HeatExchangers.BaseClasses.HADryCoil.
In this model, the water (or liquid) flow path needs to be connected to port_a1 and port_b1, and the air flow path need to be connected to the other two ports.
To model humidity condensation, use the model Buildings.Fluid.HeatExchangers.WetCoilDiscretized instead of this model, as this model computes only sensible heat transfer.
Extends from Fluid.Interfaces.PartialStaticFourPortInterface (Partial model transporting fluid between two ports without storing mass or energy), Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters (Parameters for flow resistance for models with four ports).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium1 | PartialMedium | Medium 1 in the component | |
replaceable package Medium2 | PartialMedium | Medium 2 in the component | |
Nominal condition | |||
MassFlowRate | m1_flow_nominal | Nominal mass flow rate [kg/s] | |
MassFlowRate | m2_flow_nominal | m1_flow_nominal | Nominal mass flow rate [kg/s] |
Pressure | dp1_nominal | Pressure [Pa] | |
Pressure | dp2_nominal | Pressure [Pa] | |
TemperatureDifference | dT_nominal | 10 | Temperature difference [K] |
HeatFlowRate | Q_flow_nominal | 1000 | Heat transfer at dT_nominal [W] |
ThermalConductance | UA_nominal | Q_flow_nominal/dT_nominal | Thermal conductance at nominal flow, used to compute heat capacity [W/K] |
Time | tau1 | 20 | Time constant at nominal flow for medium 1 [s] |
Time | tau2 | 1 | Time constant at nominal flow for medium 2 [s] |
Time | tau_m | 20 | Time constant of metal at nominal UA value [s] |
Initialization | |||
MassFlowRate | m1_flow.start | 0 | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) [kg/s] |
Pressure | dp1.start | 0 | Pressure difference between port_a1 and port_b1 [Pa] |
MassFlowRate | m2_flow.start | 0 | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) [kg/s] |
Pressure | dp2.start | 0 | Pressure difference between port_a2 and port_b2 [Pa] |
MassFlowRate | mStart_flow_a1 | m1_flow_nominal | Guess value for mass flow rate at port_a1 [kg/s] |
MassFlowRate | mStart_flow_a2 | m2_flow_nominal | Guess value for mass flow rate at port_a2 [kg/s] |
Geometry | |||
Integer | nReg | 2 | Number of registers |
Integer | nPipPar | 3 | Number of parallel pipes in each register |
Integer | nPipSeg | 4 | Number of pipe segments per register used for discretization |
Length | dh1 | 0.025 | Hydraulic diameter for a single pipe [m] |
Length | dh2 | 1 | Hydraulic diameter for duct [m] |
Assumptions | |||
Boolean | allowFlowReversal1 | system.allowFlowReversal | = true to allow flow reversal in medium 1, false restricts to design direction (port_a -> port_b) |
Boolean | allowFlowReversal2 | system.allowFlowReversal | = true to allow flow reversal in medium 2, false restricts to design direction (port_a -> port_b) |
Dynamics | |||
Dynamics | energyDynamics1 | Modelica.Fluid.Types.Dynamic... | Default formulation of energy balances for volume 1 |
Dynamics | energyDynamics2 | Modelica.Fluid.Types.Dynamic... | Default formulation of energy balances for volume 2 |
Dynamics | ductConnectionDynamics | Modelica.Fluid.Types.Dynamic... | Default formulation of energy balances for duct connection |
Length | dl | 0.3 | Length of mixing volume for duct connection [m] |
Advanced | |||
MassFlowRate | m1_flow_small | 1E-4*m1_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
MassFlowRate | m2_flow_small | 1E-4*m2_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
Boolean | use_dh1 | false | Set to true to specify hydraulic diameter for pipe pressure drop |
Boolean | use_dh2 | false | Set to true to specify hydraulic diameter for duct pressure drop) |
Real | ReC_1 | 4000 | Reynolds number where transition to turbulent starts inside pipes |
Real | ReC_2 | 4000 | Reynolds number where transition to turbulent starts inside ducts |
Diagnostics | |||
Boolean | show_V_flow | true | = true, if volume flow rate at inflowing port is computed |
Initialization | |||
AbsolutePressure | p_a1_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b1_start | p_a1_start | Guess value for outlet pressure [Pa] |
AbsolutePressure | p_a2_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b2_start | p_a2_start | Guess value for outlet pressure [Pa] |
Flow resistance | |||
Medium 1 | |||
Boolean | computeFlowResistance1 | true | =true, compute flow resistance. Set to false to assume no friction |
Boolean | from_dp1 | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance1 | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM1 | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Medium 2 | |||
Boolean | computeFlowResistance2 | true | =true, compute flow resistance. Set to false to assume no friction |
Boolean | from_dp2 | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance2 | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM2 | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Heat transfer | |||
Boolean | waterSideFlowDependent | false | Set to false to make water-side hA independent of mass flow rate |
Boolean | airSideFlowDependent | false | Set to false to make air-side hA independent of mass flow rate |
Boolean | waterSideTemperatureDependent | false | Set to false to make water-side hA independent of temperature |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a1 | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_b | port_b1 | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_a | port_a2 | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) |
FluidPort_b | port_b2 | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) |
model DryCoilDiscretized "Coil with discretization along the flow paths and no humidity condensation" extends Fluid.Interfaces.PartialStaticFourPortInterface; extends Buildings.Fluid.Interfaces.FourPortFlowResistanceParameters( final computeFlowResistance1=true, final computeFlowResistance2=true, from_dp1 = false, from_dp2 = false); parameter Modelica.SIunits.TemperatureDifference dT_nominal(min=0) = 10 "Temperature difference"; parameter Modelica.SIunits.HeatFlowRate Q_flow_nominal(min=0) = 1000 "Heat transfer at dT_nominal"; parameter Modelica.SIunits.ThermalConductance UA_nominal(min=0) = Q_flow_nominal/dT_nominal "Thermal conductance at nominal flow, used to compute heat capacity"; parameter Integer nReg(min=2)=2 "Number of registers"; parameter Integer nPipPar(min=1) = 3 "Number of parallel pipes in each register"; parameter Integer nPipSeg(min=1) = 4 "Number of pipe segments per register used for discretization"; parameter Boolean use_dh1 = false "Set to true to specify hydraulic diameter for pipe pressure drop"; parameter Boolean use_dh2 = false "Set to true to specify hydraulic diameter for duct pressure drop)"; parameter Modelica.Fluid.Types.Dynamics energyDynamics1= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Default formulation of energy balances for volume 1"; parameter Modelica.Fluid.Types.Dynamics energyDynamics2= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Default formulation of energy balances for volume 2"; Buildings.Fluid.HeatExchangers.BaseClasses.CoilRegister hexReg[nReg]( redeclare each package Medium1 = Medium1, redeclare each package Medium2 = Medium2, each final allowFlowReversal1=allowFlowReversal1, each final allowFlowReversal2=allowFlowReversal2, each final nPipPar=nPipPar, each final nPipSeg=nPipSeg, each final UA_nominal=Q_flow_nominal/dT_nominal/nReg, each final m1_flow_nominal=m1_flow_nominal/nPipPar, each final m2_flow_nominal=m1_flow_nominal/nPipPar/nPipSeg, each tau1=tau1, each tau2=tau2, each tau_m=tau_m, each final energyDynamics1=energyDynamics1, each final energyDynamics2=energyDynamics2, each allowCondensation=allowCondensation, each from_dp1=from_dp1, each linearizeFlowResistance1=linearizeFlowResistance1, each deltaM1=deltaM1, each from_dp2=from_dp2, each linearizeFlowResistance2=linearizeFlowResistance2, each deltaM2=deltaM2, each dp1_nominal=dp1_nominal/nReg, each dp2_nominal=dp2_nominal/nReg) "Heat exchanger register"; Buildings.Fluid.HeatExchangers.BaseClasses.PipeManifoldFixedResistance pipMan_a( redeclare package Medium = Medium1, final nPipPar=nPipPar, final m_flow_nominal=m1_flow_nominal, final dp_nominal=dp1_nominal, final dh=dh1, final ReC=ReC_1, final mStart_flow_a=mStart_flow_a1, final linearized=linearizeFlowResistance1, final use_dh=use_dh1, final deltaM=deltaM1, final from_dp=from_dp1, final allowFlowReversal=allowFlowReversal1) "Pipe manifold at port a"; Buildings.Fluid.HeatExchangers.BaseClasses.PipeManifoldNoResistance pipMan_b( redeclare package Medium = Medium1, final nPipPar=nPipPar, final mStart_flow_a=-mStart_flow_a1, final allowFlowReversal=allowFlowReversal1) "Pipe manifold at port b"; Buildings.Fluid.HeatExchangers.BaseClasses.DuctManifoldNoResistance ducMan_b( redeclare package Medium = Medium2, final nPipPar=nPipPar, final nPipSeg=nPipSeg, final mStart_flow_a=-mStart_flow_a2, final allowFlowReversal=allowFlowReversal2) "Duct manifold at port b"; Buildings.Fluid.HeatExchangers.BaseClasses.DuctManifoldFixedResistance ducMan_a( redeclare package Medium = Medium2, final nPipPar = nPipPar, final nPipSeg = nPipSeg, final m_flow_nominal=m2_flow_nominal, final dp_nominal=dp2_nominal, final dh=dh2, final ReC=ReC_2, final dl=dl, final mStart_flow_a=mStart_flow_a2, final linearized=linearizeFlowResistance2, final use_dh=use_dh2, final deltaM=deltaM2, final from_dp=from_dp2, final allowFlowReversal=allowFlowReversal2, final energyDynamics=ductConnectionDynamics) "Duct manifold at port a"; public parameter Modelica.SIunits.Length dh1=0.025 "Hydraulic diameter for a single pipe"; parameter Real ReC_1=4000 "Reynolds number where transition to turbulent starts inside pipes"; parameter Real ReC_2=4000 "Reynolds number where transition to turbulent starts inside ducts"; parameter Modelica.SIunits.MassFlowRate m1_flow_nominal "Mass flow rate at port_a1 for all pipes"; parameter Modelica.SIunits.Length dh2=1 "Hydraulic diameter for duct"; Modelica.SIunits.HeatFlowRate Q1_flow "Heat transfered from solid into medium 1"; Modelica.SIunits.HeatFlowRate Q2_flow "Heat transfered from solid into medium 2"; parameter Modelica.SIunits.Time tau1=20 "Time constant at nominal flow for medium 1"; parameter Modelica.SIunits.Time tau2=1 "Time constant at nominal flow for medium 2"; parameter Modelica.SIunits.Time tau_m=20 "Time constant of metal at nominal UA value"; protected BaseClasses.CoilHeader hea1[nReg/2]( redeclare each final package Medium = Medium1, each final nPipPar = nPipPar, each final mStart_flow_a=mStart_flow_a1, each allowFlowReversal=allowFlowReversal1) if nReg > 1 "Pipe header to redirect flow into next register"; BaseClasses.CoilHeader hea2[nReg/2-1]( redeclare each final package Medium = Medium1, each final nPipPar = nPipPar, each final mStart_flow_a=mStart_flow_a1, each allowFlowReversal=allowFlowReversal1) if nReg > 2 "Pipe header to redirect flow into next register"; Modelica.Blocks.Math.Gain gai_1(k=1/nReg) "Gain medium-side 1 to take discretization into account"; Modelica.Blocks.Math.Gain gai_2(k=1/nReg) "Gain medium-side 2 to take discretization into account"; public parameter Boolean waterSideFlowDependent = false "Set to false to make water-side hA independent of mass flow rate"; parameter Boolean airSideFlowDependent = false "Set to false to make air-side hA independent of mass flow rate"; parameter Boolean waterSideTemperatureDependent = false "Set to false to make water-side hA independent of temperature"; constant Boolean airSideTemperatureDependent = false "Set to false to make air-side hA independent of temperature"; BaseClasses.HADryCoil hA( final UA_nominal=UA_nominal, final m_flow_nominal_a=m2_flow_nominal, final m_flow_nominal_w=m1_flow_nominal, final waterSideTemperatureDependent=waterSideTemperatureDependent, final waterSideFlowDependent=waterSideFlowDependent, final airSideTemperatureDependent=airSideTemperatureDependent, final airSideFlowDependent=airSideFlowDependent) "Model for convective heat transfer coefficient"; protected constant Boolean allowCondensation = false "Set to false to compute sensible heat transfer only"; protected Buildings.Fluid.Sensors.TemperatureTwoPort temSen_1( redeclare package Medium = Medium1) "Temperature sensor"; Buildings.Fluid.Sensors.MassFlowRate masFloSen_1(redeclare package Medium = Medium1) "Mass flow rate sensor"; Buildings.Fluid.Sensors.TemperatureTwoPort temSen_2( redeclare package Medium = Medium2) "Temperature sensor"; Buildings.Fluid.Sensors.MassFlowRate masFloSen_2(redeclare package Medium = Medium2) "Mass flow rate sensor"; public parameter Modelica.Fluid.Types.Dynamics ductConnectionDynamics= Modelica.Fluid.Types.Dynamics.DynamicFreeInitial "Default formulation of energy balances for duct connection"; parameter Modelica.SIunits.Length dl=0.3 "Length of mixing volume for duct connection"; parameter Modelica.SIunits.MassFlowRate mStart_flow_a1=m1_flow_nominal "Guess value for mass flow rate at port_a1"; parameter Modelica.SIunits.MassFlowRate mStart_flow_a2=m2_flow_nominal "Guess value for mass flow rate at port_a2"; initial equation assert(dT_nominal>0, "Parameter dT_nominal is negative. Check heat exchanger parameters."); assert(Q_flow_nominal>0, "Parameter Q_flow_nominal is negative. Check heat exchanger parameters."); equation Q1_flow = sum(hexReg[i].Q1_flow for i in 1:nReg); Q2_flow = sum(hexReg[i].Q2_flow for i in 1:nReg); // air stream connections for i in 2:nReg loop connect(hexReg[i].port_a2, hexReg[i-1].port_b2); end for; connect(ducMan_a.port_b, hexReg[1].port_a2); connect(hexReg[nReg].port_b2, ducMan_b.port_b); connect(pipMan_a.port_b, hexReg[1].port_a1); connect(hexReg[nReg].port_b1, pipMan_b.port_b); connect(pipMan_b.port_a, port_b1); connect(ducMan_b.port_a, port_b2); for i in 1:2:nReg loop // header after first hex register connect(hexReg[i].port_b1, hea1[(i+1)/2].port_a); connect(hea1[(i+1)/2].port_b, hexReg[i+1].port_b1); end for; // header after 2nd hex register for i in 2:2:(nReg-1) loop connect(hexReg[i].port_a1, hea2[i/2].port_a); connect(hea2[i/2].port_b, hexReg[i+1].port_a1); end for; connect(masFloSen_1.m_flow, hA.m1_flow); connect(port_a2, masFloSen_2.port_a); connect(masFloSen_2.port_b, temSen_2.port_a); connect(temSen_2.port_b, ducMan_a.port_a); connect(temSen_2.T, hA.T_2); connect(masFloSen_2.m_flow, hA.m2_flow); connect(hA.hA_1, gai_1.u); connect(hA.hA_2, gai_2.u); for i in 1:nReg loop connect(gai_1.y, hexReg[i].Gc_1); connect(gai_2.y, hexReg[i].Gc_2); end for; connect(port_a1, masFloSen_1.port_a); connect(masFloSen_1.port_b, temSen_1.port_a); connect(temSen_1.port_b, pipMan_a.port_a); connect(temSen_1.T, hA.T_1); end DryCoilDiscretized;
Model for an ideal heater or cooler with prescribed heat flow rate to the medium.
This model adds heat in the amount of Q_flow = u Q_flow_nominal to the medium. The input signal u and the nominal heat flow rate Q_flow_nominal can be positive or negative.
Note that for non-zero Q_flow, if the mass flow rate tends to zero, the temperature difference over this component tends to infinity. Hence, using a proper control for u is essential when using this component.
Extends from Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer (Partial model transporting fluid between two ports without storing mass or energy), Buildings.BaseClasses.BaseIcon (Base icon).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
HeatFlowRate | Q_flow_nominal | Heat flow rate at u=1, positive for heating [W] | |
Nominal condition | |||
MassFlowRate | m_flow_nominal | Nominal mass flow rate [kg/s] | |
Pressure | dp_nominal | Pressure [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] |
Assumptions | |||
Boolean | allowFlowReversal | system.allowFlowReversal | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*m_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
Diagnostics | |||
Boolean | show_V_flow | true | = true, if volume flow rate at inflowing port is computed |
Initialization | |||
AbsolutePressure | p_a_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b_start | p_a_start | Guess value for outlet pressure [Pa] |
Flow resistance | |||
Boolean | from_dp | true | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
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 | u | Control input |
model HeaterCoolerPrescribed "Heater or cooler with prescribed heat flow rate" extends Fluid.Interfaces.PartialStaticTwoPortHeatMassTransfer; extends Buildings.BaseClasses.BaseIcon; parameter Modelica.SIunits.HeatFlowRate Q_flow_nominal "Heat flow rate at u=1, positive for heating"; Modelica.Blocks.Interfaces.RealInput u "Control input"; equation Q_flow = Q_flow_nominal * u; mXi_flow = zeros(Medium.nXi); // no mass added or removed (sensible heat only) end HeaterCoolerPrescribed;
Model of a discretized coil with humidity condensation. This model is identical to Buildings.Fluid.HeatExchangers.DryCoilDiscretized but in addition, the mass transfer from fluid 2 to the metal is computed. The mass transfer is computed using a similarity law between heat and mass transfer, as implemented by the model Buildings.Fluid.HeatExchangers.BaseClasses.MassExchange. See this model for details.
This model can only be used with medium models that implement the function enthalpyOfLiquid and that contain an integer variable Water whose value is the element number where the water vapor is stored in the species concentration vector. Examples for such media are Buildings.Media.PerfectGases.MoistAir and Modelica.Media.Air.MoistAir.
Extends from DryCoilDiscretized (Coil with discretization along the flow paths and no humidity condensation).
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium1 | PartialMedium | Medium 1 in the component | |
replaceable package Medium2 | PartialMedium | Medium 2 in the component | |
Nominal condition | |||
MassFlowRate | m1_flow_nominal | Nominal mass flow rate [kg/s] | |
MassFlowRate | m2_flow_nominal | m1_flow_nominal | Nominal mass flow rate [kg/s] |
Pressure | dp1_nominal | Pressure [Pa] | |
Pressure | dp2_nominal | Pressure [Pa] | |
TemperatureDifference | dT_nominal | 10 | Temperature difference [K] |
HeatFlowRate | Q_flow_nominal | 1000 | Heat transfer at dT_nominal [W] |
ThermalConductance | UA_nominal | Q_flow_nominal/dT_nominal | Thermal conductance at nominal flow, used to compute heat capacity [W/K] |
Time | tau1 | 20 | Time constant at nominal flow for medium 1 [s] |
Time | tau2 | 1 | Time constant at nominal flow for medium 2 [s] |
Time | tau_m | 20 | Time constant of metal at nominal UA value [s] |
Initialization | |||
MassFlowRate | m1_flow.start | 0 | Mass flow rate from port_a1 to port_b1 (m1_flow > 0 is design flow direction) [kg/s] |
Pressure | dp1.start | 0 | Pressure difference between port_a1 and port_b1 [Pa] |
MassFlowRate | m2_flow.start | 0 | Mass flow rate from port_a2 to port_b2 (m2_flow > 0 is design flow direction) [kg/s] |
Pressure | dp2.start | 0 | Pressure difference between port_a2 and port_b2 [Pa] |
MassFlowRate | mStart_flow_a1 | m1_flow_nominal | Guess value for mass flow rate at port_a1 [kg/s] |
MassFlowRate | mStart_flow_a2 | m2_flow_nominal | Guess value for mass flow rate at port_a2 [kg/s] |
Geometry | |||
Integer | nReg | 2 | Number of registers |
Integer | nPipPar | 3 | Number of parallel pipes in each register |
Integer | nPipSeg | 4 | Number of pipe segments per register used for discretization |
Length | dh1 | 0.025 | Hydraulic diameter for a single pipe [m] |
Length | dh2 | 1 | Hydraulic diameter for duct [m] |
Assumptions | |||
Boolean | allowFlowReversal1 | system.allowFlowReversal | = true to allow flow reversal in medium 1, false restricts to design direction (port_a -> port_b) |
Boolean | allowFlowReversal2 | system.allowFlowReversal | = true to allow flow reversal in medium 2, false restricts to design direction (port_a -> port_b) |
Dynamics | |||
Dynamics | energyDynamics1 | Modelica.Fluid.Types.Dynamic... | Default formulation of energy balances for volume 1 |
Dynamics | energyDynamics2 | Modelica.Fluid.Types.Dynamic... | Default formulation of energy balances for volume 2 |
Dynamics | ductConnectionDynamics | Modelica.Fluid.Types.Dynamic... | Default formulation of energy balances for duct connection |
Length | dl | 0.3 | Length of mixing volume for duct connection [m] |
Advanced | |||
MassFlowRate | m1_flow_small | 1E-4*m1_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
MassFlowRate | m2_flow_small | 1E-4*m2_flow_nominal | Small mass flow rate for regularization of zero flow [kg/s] |
Boolean | use_dh1 | false | Set to true to specify hydraulic diameter for pipe pressure drop |
Boolean | use_dh2 | false | Set to true to specify hydraulic diameter for duct pressure drop) |
Real | ReC_1 | 4000 | Reynolds number where transition to turbulent starts inside pipes |
Real | ReC_2 | 4000 | Reynolds number where transition to turbulent starts inside ducts |
Diagnostics | |||
Boolean | show_V_flow | true | = true, if volume flow rate at inflowing port is computed |
Initialization | |||
AbsolutePressure | p_a1_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b1_start | p_a1_start | Guess value for outlet pressure [Pa] |
AbsolutePressure | p_a2_start | system.p_start | Guess value for inlet pressure [Pa] |
AbsolutePressure | p_b2_start | p_a2_start | Guess value for outlet pressure [Pa] |
Flow resistance | |||
Medium 1 | |||
Boolean | from_dp1 | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance1 | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM1 | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Medium 2 | |||
Boolean | from_dp2 | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
Boolean | linearizeFlowResistance2 | false | = true, use linear relation between m_flow and dp for any flow rate |
Real | deltaM2 | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
Heat transfer | |||
Boolean | waterSideFlowDependent | false | Set to false to make water-side hA independent of mass flow rate |
Boolean | airSideFlowDependent | false | Set to false to make air-side hA independent of mass flow rate |
Boolean | waterSideTemperatureDependent | false | Set to false to make water-side hA independent of temperature |
Type | Name | Description |
---|---|---|
FluidPort_a | port_a1 | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_b | port_b1 | Fluid connector b1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_a | port_a2 | Fluid connector a2 (positive design flow direction is from port_a2 to port_b2) |
FluidPort_b | port_b2 | Fluid connector b2 (positive design flow direction is from port_a2 to port_b2) |
model WetCoilDiscretized "Coil with discretization along the flow paths and humidity condensation" // When replacing the volume, the Medium is constrained so that the enthalpyOfLiquid // function is known. Otherwise, checkModel(...) will fail extends DryCoilDiscretized(final allowCondensation=true, each hexReg(ele(redeclare each Buildings.Fluid.MixingVolumes.MixingVolumeMoistAir vol2( final use_HeatTransfer = true, medium(T(stateSelect=StateSelect.never)))))); end WetCoilDiscretized;