This user's guide describes the storage tank models. There are three storage tank models in the this package.

Model name Description

This is a model of a stratified storage tank as shown in the figure below.

Image of a storage tank

The tank uses several volumes to model the stratification. Heat conduction is modeled between the volumes through the fluid, and between the volumes and the ambient.

The heat port heaPorVol may be used to connect a temperature sensor that measures the fluid temperature of an individual volume. It may also be used to add heat to individual volumes, for example if the tank contains an electrical resistance heater.

Similarly, the fluid port fluPorVol may be used to connect a fluid pipe to an individual volume. This allows for example to draw water from that volume whose temperature is close to the temperature required by the consumer. Conversely, water could be added to that tank volume whose temperature is close to the inlet water temperature. If you don't use such a pipe, simply leave the ports unconnected.

The tank has nSeg fluid volumes. The top segment has the index 1. Thus, to add a heating element to the bottom element, connect a heat input to heaPorVol[nSeg].

The heat ports outside the tank insulation can be used to specify an ambient temperature. Leave these ports unconnected to force adiabatic boundary conditions. Note, however, that all heat conduction elements through the tank wall (but not the top and bottom) are connected to the heat port heaPorSid. Thus, not connecting heaPorSid means an adiabatic boundary condition in the sense that heaPorSid.Q_flow = 0. This, however, still allows heat to flow through the tank walls, modeled by conWal, from one fluid volume to another one.


The model is identical to Buildings.Fluid.Storage.Stratified, except for the following:

  • It adds a correction that reduces the numerical dissipation.
  • It does not contain the fluid ports fluPorVol that connect from the outside to the individual volumes.

The correction uses a third order upwind scheme to compute the outlet temperatures of the segments in the tank. This model is implemented in Buildings.Fluid.Storage.BaseClasses.ThirdOrderStratifier.


This model is identical to Buildings.Fluid.Storage.StratifiedEnhanced except that it adds a heat exchanger to the tank.

The modifications consist of adding a heat exchanger and fluid ports to connect to the heat exchanger. The modifications allow to run a fluid through the tank causing heat transfer to the stored fluid. A typical example is a storage tank in a solar hot water system.

The heat exchanger model assumes flow through the inside of a helical coil heat exchanger, and stagnant fluid on the outside. Parameters are used to describe the heat transfer on the inside of the heat exchanger at nominal conditions, and geometry of the outside of the heat exchanger. This information is used to compute an hA-value for each side of the coil. Convection calculations are then performed to identify heat transfer between the heat transfer fluid and the fluid in the tank.

The location of the heat exchanger can be parameterized as follows: The parameters hHex_a and hHex_b are the heights of the heat exchanger ports portHex_a and portHex_b, measured from the bottom of the tank. For example, to place the port portHex_b at the bottom of the tank, set hHexB_b=0. The parameters hHex_a and hHex_b are then used to provide a default value for the parameters segHex_a and segHex_b, which are the numbers of the tank segments to which the heat exchanger ports portHex_a and portHex_b are connected.

Image of a storage tank

Optionally, this model computes a dynamic response of the heat exchanger. This can be configured using the parameters energyDynamicsHexSolid, energyDynamicsHex and massDynamicsHex. For this computation, the fluid volume inside the heat exchanger and the heat capacity of the heat exchanger wall CHex are approximated. Both depend on the length lHex of the heat exchanger. The model provides default values for these parameters, as well as for the heat exchanger material which is assumed to be steel. These default values can be overwritten by the user. The default values for the heat exchanger geometry are computed assuming that there is a cylindrical heat exchanger made of steel whose diameter is half the diameter of the tank, e.g., rHex=rTan/2. Hence, the length of the heat exchanger is approximated as lHex = 2 rHex π h = 2 rTan/2 π h, where h is the distance between the heat exchanger inlet and outlet. The wall thickness is assumed to be 10% of the heat exchanger outer diameter. For typical applications, users do not need to change these values.

Setting energyDynamicsHexSolid to a dynamic balance and energyDynamicsHex to a steady-state balance may be of interest to remove very fast dynamics of the fluid, while still modeling slower dynamics that arises from the metal of the heat exchanger. By default, energyDynamicsHexSolid is set to the same value as energyDynamicsHex as this seems to be the typical configuration.

The heat exchanger is implemented in Buildings.Fluid.Storage.BaseClasses.IndirectTankHeatExchanger.

Generated at 2021-05-09T00:47:37Z by OpenModelicaOpenModelica 1.18.0~dev-269-g83ff1a1 using GenerateDoc.mos