modelBorefield
Geothermal borefield model
Extends from Buildings.Fluid.Geothermal.Borefields.TwoUTubes (Borefield model containing double U-tube boreholes).
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.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Real | mSenFac (from PartialBorefield) | 1 | Factor for scaling the sensible thermal mass of the volume |
| Modelica.Units.SI.Time | tLoaAgg (from PartialBorefield) | 300 | Time resolution of load aggregation |
| Integer | nCel (from PartialBorefield) | 5 | Number of cells per aggregation level |
| Integer | nSeg (from PartialBorefield) | 10 | Number of segments to use in vertical discretization of the boreholes |
| Buildings.Fluid.Geothermal.Borefields.Data.Borefield.Template | borFieDat (from PartialBorefield) | Borefield data | |
| Integer | nBor | borFieDat.conDat.nBor | Number of boreholes |
| Real | dxyBor | 10 | Distance between boreholes |
| Modelica.Units.SI.Length[nBor,2] | cooBor | {dxyBor*{mod(i - 1, 10), floor((i - 1)/10)} for i in 1:nBor} | Cartesian coordinates of the boreholes in meters |
| Assumptions | |||
| Boolean | allowFlowReversal (from PartialTwoPort) | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
| Nominal condition | |||
| Modelica.Units.SI.MassFlowRate | m_flow_nominal (from PartialTwoPortInterface) | Nominal mass flow rate | |
| Modelica.Units.SI.PressureDifference | dp_nominal (from TwoPortFlowResistanceParameters) | Pressure difference | |
| Advanced | |||
| Modelica.Units.SI.MassFlowRate | m_flow_small (from PartialTwoPortInterface) | 1E-4*abs(m_flow_nominal) | Small mass flow rate for regularization of zero flow |
| Advanced › Diagnostics | |||
| Boolean | show_T (from PartialTwoPortInterface) | false | = true, if actual temperature at port is computed |
| Flow resistance | |||
| Boolean | computeFlowResistance (from TwoPortFlowResistanceParameters) | true | =true, compute flow resistance. Set to false to assume no friction |
| Boolean | from_dp (from TwoPortFlowResistanceParameters) | false | = true, use m_flow = f(dp) else dp = f(m_flow) |
| Real | n (from TwoPortFlowResistanceParameters) | 2 | Flow exponent, n=1 for laminar, n=2 for turbulent |
| Boolean | linearizeFlowResistance (from TwoPortFlowResistanceParameters) | false | = true, use linear relation between m_flow and dp for any flow rate |
| Real | deltaM (from TwoPortFlowResistanceParameters) | 0.1 | Fraction of nominal flow rate where flow transitions to laminar |
| Dynamics › Conservation equations | |||
| Modelica.Fluid.Types.Dynamics | energyDynamics (from PartialBorefield) | Modelica.Fluid.Types.Dynamics.DynamicFreeInitial | Type of energy balance: dynamic (3 initialization options) or steady state |
| Initialization | |||
| Medium.AbsolutePressure | p_start (from PartialBorefield) | Medium.p_default | Start value of pressure |
| Modelica.Units.SI.Temperature[nSeg] | TFlu_start (from PartialBorefield) | TGro_start | Start value of fluid temperature |
| Advanced › g-function | |||
| Boolean | forceGFunCalc (from PartialBorefield) | 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 (from PartialBorefield) | 12 | Number of segments to use in the calculation of the g-function |
| Integer | nClu (from PartialBorefield) | 5 | Number of borehole clusters to use in the calculation of the g-function |
| Initialization › Soil | |||
| Modelica.Units.SI.Temperature | TExt0_start (from PartialBorefield) | 283.15 | Initial far field temperature |
| Modelica.Units.SI.Temperature[nSeg] | TExt_start (from PartialBorefield) | {if z[i] >= z0 then TExt0_start + (z[i] - z0)*dT_dz else TExt0_start for i in 1:nSeg} | Temperature of the undisturbed ground |
| Initialization › Filling material | |||
| Modelica.Units.SI.Temperature[nSeg] | TGro_start (from PartialBorefield) | TExt_start | Start value of grout temperature |
| Initialization › Temperature profile | |||
| Modelica.Units.SI.Height | z0 (from PartialBorefield) | 10 | Depth below which the temperature gradient starts |
| Real | dT_dz (from PartialBorefield) | 0.01 | Vertical temperature gradient of the undisturbed soil for h below z0 |
Connectors
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Fluid.Interfaces.FluidPort_a | port_a (from PartialTwoPort) | Fluid connector a (positive design flow direction is from port_a to port_b) | |
| Modelica.Fluid.Interfaces.FluidPort_b | port_b (from PartialTwoPort) | Fluid connector b (positive design flow direction is from port_a to port_b) | |
| Modelica.Blocks.Interfaces.RealOutput | TBorAve (from PartialBorefield) | Average borehole wall temperature in the borefield | |
| Buildings.Controls.OBC.CDL.Interfaces.RealOutput | Q_flow | Rate at which heat is extracted from soil |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Modelica.Units.SI.MassFlowRate | m_flow (from PartialTwoPortInterface) | port_a.m_flow | Mass flow rate from port_a to port_b (m_flow > 0 is design flow direction) |
| Modelica.Units.SI.PressureDifference | dp (from PartialTwoPortInterface) | port_a.p - port_b.p | Pressure difference between port_a and port_b |
| Medium.ThermodynamicState | sta_a (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_a.p, noEvent(actualStream(port_a.h_outflow)), noEvent(actualStream(port_a.Xi_outflow))) else Medium.setState_phX(port_a.p, noEvent(inStream(port_a.h_outflow)), noEvent(inStream(port_a.Xi_outflow))) | Medium properties in port_a |
| Medium.ThermodynamicState | sta_b (from PartialTwoPortInterface) | if allowFlowReversal then Medium.setState_phX(port_b.p, noEvent(actualStream(port_b.h_outflow)), noEvent(actualStream(port_b.Xi_outflow))) else Medium.setState_phX(port_b.p, noEvent(port_b.h_outflow), noEvent(port_b.Xi_outflow)) | Medium properties in port_b |
| Buildings.Fluid.Geothermal.Borefields.BaseClasses.HeatTransfer.GroundTemperatureResponse | groTemRes (from PartialBorefield) | Ground temperature response | |
| Buildings.Fluid.Geothermal.Borefields.BaseClasses.Boreholes.BaseClasses.PartialBorehole | borHol (from PartialBorefield) |
Revisions
-
May 17, 2024, by Michael Wetter:
Updated model due to removal of parameterdynFil.
This is for IBPSA, #1885. -
January 8, 2024, by David Blum:
Moved toBuildings.DHC.Examples.Combined.BaseClasses.Borefield. This is for issue 3628. -
May 31, 2023, by Michael Wetter:
Removedfinalmodifier forborFieDatto allow record to be replaced in models that extend this model. -
February 23, 2021, by Antoine Gautier:
Updated documentation. -
January 12, 2020, by Michael Wetter:
Added documentation.