Description: "Package with base classes for Buildings.Fluid.MixingVolumes"

- Home > Modelica

## Buildings.Fluid.MixingVolumes.BaseClasses

Package with base classes for Buildings.Fluid.MixingVolumes

### Information

This package contains base classes that are used to construct the models in Buildings.Fluid.MixingVolumes.

Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).

### Package Content

Name | Description
--- | ---
PartialMixingVolume | Partial mixing volume with inlet and outlet ports (flow reversal is allowed)

## Buildings.Fluid.MixingVolumes.BaseClasses.PartialMixingVolume

Partial mixing volume with inlet and outlet ports (flow reversal is allowed)

### Information

This is a partial model of an instantaneously mixed volume. It is used as the base class for all fluid volumes of the package Buildings.Fluid.MixingVolumes.

#### Implementation

If the model is operated in steady-state and has two fluid ports connected, then the same energy and mass balance implementation is used as in steady-state component models, i.e., the use of `actualStream` is not used for the properties at the port.

For simple models that uses this model, see Buildings.Fluid.MixingVolumes.

Extends from Buildings.Fluid.Interfaces.LumpedVolumeDeclarations (Declarations for lumped volumes).

### Parameters

Type | Name | Default | Description
--- | --- | --- | ---
replaceable package Medium | PartialMedium | Medium in the component
Volume | V |  | Volume [m3]
Nominal condition
MassFlowRate | m_flow_nominal |  | Nominal mass flow rate [kg/s]
Dynamics
Equations
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Formulation of energy balance
Dynamics | massDynamics | energyDynamics | Formulation of mass balance
Real | mSenFac | 1 | Factor for scaling the sensible thermal mass of the volume
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
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s]
Assumptions
Boolean | allowFlowReversal | true | = true to allow flow reversal in medium, false restricts to design direction (ports[1] -> ports[2]). Used only if model has two ports.
Heat transfer
Boolean | prescribedHeatFlowRate | false | Set to true if the model has a prescribed heat flow at its heatPort

### Connectors

Type | Name | Description
--- | --- | ---
VesselFluidPorts_b | ports[nPorts] | Fluid inlets and outlets
HeatPort_a | heatPort | Heat port for sensible heat input

### Modelica definition

partial model PartialMixingVolume "Partial mixing volume with inlet and outlet ports (flow reversal is allowed)" extends Buildings.Fluid.Interfaces.LumpedVolumeDeclarations; constant Boolean initialize_p = not Medium.singleState "= true to set up initial equations for pressure"; parameter Modelica.SIunits.MassFlowRate m_flow_nominal(min=0) "Nominal mass flow rate"; // Port definitions parameter Integer nPorts=0 "Number of ports"; parameter Modelica.SIunits.MassFlowRate m_flow_small(min=0) = 1E-4*abs(m_flow_nominal) "Small mass flow rate for regularization of zero flow"; parameter Boolean allowFlowReversal = true "= true to allow flow reversal in medium, false restricts to design direction (ports[1] -> ports[2]). Used only if model has two ports."; parameter Modelica.SIunits.Volume V "Volume"; parameter Boolean prescribedHeatFlowRate=false "Set to true if the model has a prescribed heat flow at its heatPort"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b ports[nPorts]( redeclare each package Medium = Medium) "Fluid inlets and outlets"; Modelica.Thermal.HeatTransfer.Interfaces.HeatPort_a heatPort "Heat port for sensible heat input"; Modelica.SIunits.Temperature T "Temperature of the fluid"; Modelica.SIunits.Pressure p "Pressure of the fluid"; Modelica.SIunits.MassFraction Xi[Medium.nXi] "Species concentration of the fluid"; Medium.ExtraProperty C[Medium.nC](nominal=C_nominal) "Trace substance mixture content"; // Models for the steady-state and dynamic energy balance. protected Buildings.Fluid.Interfaces.StaticTwoPortConservationEquation steBal( sensibleOnly = true, redeclare final package Medium=Medium, final m_flow_nominal = m_flow_nominal, final allowFlowReversal = allowFlowReversal, final m_flow_small = m_flow_small) if useSteadyStateTwoPort "Model for steady-state balance if nPorts=2"; Buildings.Fluid.Interfaces.ConservationEquation dynBal( redeclare final package Medium = Medium, final energyDynamics=energyDynamics, final massDynamics=massDynamics, final p_start=p_start, final T_start=T_start, final X_start=X_start, final C_start=C_start, final C_nominal=C_nominal, final fluidVolume = V, final initialize_p = initialize_p, m(start=V*rho_start), nPorts=nPorts, U(start=V*rho_start*Medium.specificInternalEnergy(state_start) + (T_start - Medium.reference_T)*dynBal.CSen), final mSenFac=mSenFac) if not useSteadyStateTwoPort "Model for dynamic energy balance"; // Density at start values, used to compute initial values and start guesses parameter Modelica.SIunits.Density rho_start=Medium.density( state=state_start) "Density, used to compute start and guess values"; final parameter Medium.ThermodynamicState state_default = Medium.setState_pTX( T=Medium.T_default, p=Medium.p_default, X=Medium.X_default[1:Medium.nXi]) "Medium state at default values"; // Density at medium default values, used to compute the size of control volumes final parameter Modelica.SIunits.Density rho_default=Medium.density( state=state_default) "Density, used to compute fluid mass"; final parameter Medium.ThermodynamicState state_start = Medium.setState_pTX( T=T_start, p=p_start, X=X_start[1:Medium.nXi]) "Medium state at start values"; final parameter Boolean useSteadyStateTwoPort=(nPorts == 2) and prescribedHeatFlowRate and ( energyDynamics == Modelica.Fluid.Types.Dynamics.SteadyState) and ( massDynamics == Modelica.Fluid.Types.Dynamics.SteadyState) and ( substanceDynamics == Modelica.Fluid.Types.Dynamics.SteadyState) and ( traceDynamics == Modelica.Fluid.Types.Dynamics.SteadyState) "Flag, true if the model has two ports only and uses a steady state balance"; // Outputs that are needed to assign the medium properties Modelica.Blocks.Interfaces.RealOutput hOut_internal(unit="J/kg") "Internal connector for leaving temperature of the component"; Modelica.Blocks.Interfaces.RealOutput XiOut_internal[Medium.nXi](each unit="1") "Internal connector for leaving species concentration of the component"; Modelica.Blocks.Interfaces.RealOutput COut_internal[Medium.nC](each unit="1") "Internal connector for leaving trace substances of the component"; Modelica.Blocks.Sources.RealExpression QSen_flow(y=heatPort.Q_flow) "Block to set sensible heat input into volume"; equation /////////////////////////////////////////////////////////////////////////// // asserts if not allowFlowReversal then assert(ports[1].m_flow > -m_flow_small, "Model has flow reversal, but the parameter allowFlowReversal is set to false. m_flow_small = " + String(m_flow_small) + " ports[1].m_flow = " + String(ports[1].m_flow) + " "); end if; // Actual definition of port variables. // // If the model computes the energy and mass balances as steady-state, // and if it has only two ports, // then we use the same base class as for all other steady state models. if useSteadyStateTwoPort then connect(steBal.port_a, ports[1]); connect(steBal.port_b, ports[2]); connect(hOut_internal, steBal.hOut); connect(XiOut_internal, steBal.XiOut); connect(COut_internal, steBal.COut); else connect(dynBal.ports, ports); connect(hOut_internal, dynBal.hOut); connect(XiOut_internal, dynBal.XiOut); connect(COut_internal, dynBal.COut); end if; // Medium properties p = if nPorts > 0 then ports[1].p else p_start; T = Medium.temperature_phX(p=p, h=hOut_internal, X=cat(1,Xi,{1-sum(Xi)})); Xi = XiOut_internal; C = COut_internal; // Port properties heatPort.T = T; end PartialMixingVolume;