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
Buildings.Experimental.DHC.Plants.Reservoir.BoreField BoreField Geothermal borefield model

Buildings.Experimental.DHC.Plants.Reservoir.BoreField Buildings.Experimental.DHC.Plants.Reservoir.BoreField

Geothermal borefield model

Buildings.Experimental.DHC.Plants.Reservoir.BoreField

Information

This model represents a borefield composed of 350 boreholes, with the following main assumptions.

Extends from Buildings.Fluid.Geothermal.Borefields.TwoUTubes (Borefield model containing double U-tube boreholes).

Parameters

TypeNameDefaultDescription
replaceable package MediumPartialMediumMedium in the component
IntegernCel5Number of cells per aggregation level
IntegernSeg5Number of segments to use in vertical discretization of the boreholes
IntegernBorborFieDat.conDat.nBorNumber of boreholes
RealdxyBor10Distance between boreholes
Assumptions
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
Advanced
MassFlowRatem_flow_small1E-4*abs(m_flow_nominal)Small mass flow rate for regularization of zero flow [kg/s]
Diagnostics
Booleanshow_Ttrue= true, if actual temperature at port is computed
g-function
BooleanforceGFunCalcfalseSet to true to force the thermal response to be calculated at the start instead of checking whether this has been pre-computed
IntegernSegGFun12Number of segments to use in the calculation of the g-function
IntegernClu5Number of borehole clusters to use in the calculation of the g-function
Flow resistance
Booleanfrom_dpfalse= true, use m_flow = f(dp) else dp = f(m_flow)
BooleanlinearizeFlowResistancefalse= true, use linear relation between m_flow and dp for any flow rate
RealdeltaM0.1Fraction of nominal flow rate where flow transitions to laminar
Dynamics
Conservation equations
DynamicsenergyDynamicsModelica.Fluid.Types.Dynamic...Type of energy balance: dynamic (3 initialization options) or steady state
BooleandynFiltrueSet to false to remove the dynamics of the filling material.
Initialization
AbsolutePressurep_startMedium.p_defaultStart value of pressure [Pa]
TemperatureTFlu_start[nSeg]TGro_startStart value of fluid temperature [K]
Soil
TemperatureTExt0_start282.55Initial far field temperature [K]
TemperatureTExt_start[nSeg]{if z[i] >= z0 then TExt0_st...Temperature of the undisturbed ground [K]
Filling material
TemperatureTGro_start[nSeg]TExt_startStart value of grout temperature [K]
Temperature profile
Heightz010Depth below which the temperature gradient starts [m]
RealdT_dz0.02Vertical temperature gradient of the undisturbed soil for h below z0 [K/m]

Connectors

TypeNameDescription
FluidPort_aport_aFluid connector a (positive design flow direction is from port_a to port_b)
FluidPort_bport_bFluid connector b (positive design flow direction is from port_a to port_b)
output RealOutputTBorAveAverage borehole wall temperature in the borefield [K]
output RealOutputQ_flowRate 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;