Multiple Internal Heat Exchangers for Storage Tank - Modelica
I have a case where I have multiple internal heat exchangers inside the same tank. This is to take a hot feed from generators such as heat pumps and solar collectors, while providing heat for both space heating and hot water. To achieve this I am connecting the stratified enhanced internal hex models of the LBNL Buildings Library in series. Please see the attached image as an example. Is this the best approach to achieve this? If not, what are the shortfalls and is there an alternative? The issue I can see is that the heat exchangers will only be present in each tank. For example, in a hypothetical scenario, where the heat exchanger enters the top of the top tank, and leaves the bottom of the bottom tank then this approach would not be suitable. In such a situation how could the existing model be modified to have multiple heat exchangers at different heights? At the moment it appears the only parameter that dictates the position of the heat exchanger is the number of heat exchanger elements in each of the tank volumes. It would be useful to be able to specify the tank volumes where the heat exchanger is present.
Edit - Following the recommendation of Michael Wetter, I added a second heat exchanger to the Storage.StratifiedEnhancedInternalHex
to take into account buoyancy and conduction. here is a screenshot with the additional HEX. I then added parameters for the top and bottom height of the exchanger. Here is the additional script needed to run the component:
parameter Modelica.SIunits.Height hHex2_a
"Height of portHex_a of the second heat exchanger, measured from tank bottom";
parameter Modelica.SIunits.Height hHex2_b
"Height of portHex_b of the second heat exchanger, measured from tank bottom";
final parameter Integer segHex2_a = nSeg-integer(hHex2_a/segHeight)
"Tank segment in which port a1 of the heat exchanger 2 is located in"
final parameter Integer segHex2_b = nSeg-integer(hHex2_b/segHeight)
"Tank segment in which port b1 of the heat exchanger 2 is located in"
final parameter Modelica.SIunits.Length dHHex2 = abs(hHex2_a-hHex2_b)
"Vertical distance between the heat exchanger 2 inlet and outlet";
final parameter Integer nSegHex2Tan=
if segHex2_a > segHex2_b then segHex2_a-segHex2_b + 1 else segHex2_b-segHex2_a + 1
"Number of tank segments the heat exchanger resides in";
final parameter Integer nSegHex2 = nSegHex2Tan*hexSegMult
"Number of heat exchanger segments";
for j in 0:nSegHexTan-1 loop
for i in 1:hexSegMult loop
connect(indTanHex1.port[j*hexSegMult+i], heaPorVol[segHex2_a + (if hHex2_a > hHex2_b then j else -j)])
end for;
end for;