Buildings.Experimental.DHC.Plants.Reservoir
Package of models for district-scale thermal reservoirs
Information
This package contains models for district scale thermal reservoirs.
Extends from Modelica.Icons.Package (Icon for standard packages).
Package Content
Name | Description |
---|---|
BoreField | Geothermal borefield model |
Buildings.Experimental.DHC.Plants.Reservoir.BoreField
Geothermal borefield model
Information
This model represents a borefield composed of 350 boreholes, with the following main assumptions.
- The soil is made of sandstone.
- The boreholes are filled with a bentonite grout.
- The boreholes have a height of 300 m and a diameter of 190 mm. They are discretized vertically in five segments.
- A distance of 10 m between each borehole is considered.
- HDPE pipes with a diameter of 40 mm are considered, in a double U-tube parallel configuration.
Extends from Buildings.Fluid.Geothermal.Borefields.TwoUTubes (Borefield model containing double U-tube boreholes).
Parameters
Type | Name | Default | Description |
---|---|---|---|
replaceable package Medium | PartialMedium | Medium in the component | |
Integer | nCel | 5 | Number of cells per aggregation level |
Integer | nSeg | 5 | Number of segments to use in vertical discretization of the boreholes |
Integer | nBor | borFieDat.conDat.nBor | Number of boreholes |
Real | dxyBor | 10 | Distance between boreholes |
Assumptions | |||
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Advanced | |||
MassFlowRate | m_flow_small | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow [kg/s] |
Diagnostics | |||
Boolean | show_T | true | = true, if actual temperature at port is computed |
g-function | |||
Boolean | forceGFunCalc | false | Set to true to force the thermal response to be calculated at the start instead of checking whether this has been pre-computed |
Integer | nSegGFun | 12 | Number of segments to use in the calculation of the g-function |
Integer | nClu | 5 | Number of borehole clusters to use in the calculation of the g-function |
Flow resistance | |||
Boolean | from_dp | false | = 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 |
Dynamics | |||
Conservation equations | |||
Dynamics | energyDynamics | Modelica.Fluid.Types.Dynamic... | Type of energy balance: dynamic (3 initialization options) or steady state |
Boolean | dynFil | true | Set to false to remove the dynamics of the filling material. |
Initialization | |||
AbsolutePressure | p_start | Medium.p_default | Start value of pressure [Pa] |
Temperature | TFlu_start[nSeg] | TGro_start | Start value of fluid temperature [K] |
Soil | |||
Temperature | TExt0_start | 282.55 | Initial far field temperature [K] |
Temperature | TExt_start[nSeg] | {if z[i] >= z0 then TExt0_st... | Temperature of the undisturbed ground [K] |
Filling material | |||
Temperature | TGro_start[nSeg] | TExt_start | Start value of grout temperature [K] |
Temperature profile | |||
Height | z0 | 10 | Depth below which the temperature gradient starts [m] |
Real | dT_dz | 0.02 | Vertical temperature gradient of the undisturbed soil for h below z0 [K/m] |
Connectors
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) |
output RealOutput | TBorAve | Average borehole wall temperature in the borefield [K] |
output RealOutput | Q_flow | Rate at which heat is extracted from soil [W] |
Modelica definition
model BoreField "Geothermal borefield model"
extends Buildings.Fluid.Geothermal.Borefields.TwoUTubes(
final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final tLoaAgg(displayUnit="h") = 3600,
final nSeg=5,
TExt0_start=282.55,
final z0=10,
final dT_dz=0.02,
final dynFil=true,
borFieDat(
filDat=Buildings.Fluid.Geothermal.Borefields.Data.Filling.Bentonite(
kFil=2.0,
cFil=3040,
dFil=1450),
soiDat=Buildings.Fluid.Geothermal.Borefields.Data.Soil.SandStone(
kSoi=2.3,
cSoi=1000,
dSoi=2600),
conDat=Buildings.Fluid.Geothermal.Borefields.Data.Configuration.Example(
borCon=Buildings.Fluid.Geothermal.Borefields.Types.BoreholeConfiguration.DoubleUTubeParallel,
dp_nominal=35000,
hBor=300,
rBor=0.095,
nBor=350,
cooBor=cooBor,
dBor=1,
rTub=0.02,
kTub=0.5,
eTub=0.0037,
xC=0.05)),
show_T=true);
/*
Some parameters (such as nBor) cannot be propagated down to
borFieDat.conDat otherwise Dymola fails to expand.
We assign them literally within borFieDat.conDat and propagate them up here
to compute dependent parameters.
*/
parameter Integer nBor = borFieDat.conDat.nBor
"Number of boreholes";
parameter Real dxyBor = 10
"Distance between boreholes";
final parameter Modelica.Units.SI.Length cooBor[nBor,2]={dxyBor*{mod(i - 1,
10),floor((i - 1)/10)} for i in 1:nBor}
"Cartesian coordinates of the boreholes in meters";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput Q_flow(final unit="W")
"Rate at which heat is extracted from soil";
equation
connect(gaiQ_flow.y, Q_flow);
end BoreField;