diff --git a/IBPSA/Fluid/Geothermal/Aquifer/Examples/CoolingOffice.mo b/IBPSA/Fluid/Geothermal/Aquifer/Examples/CoolingOffice.mo index c76d3d63d0..c835436b9c 100644 --- a/IBPSA/Fluid/Geothermal/Aquifer/Examples/CoolingOffice.mo +++ b/IBPSA/Fluid/Geothermal/Aquifer/Examples/CoolingOffice.mo @@ -23,6 +23,7 @@ model CoolingOffice redeclare package Medium = IBPSA.Media.Water, nVol=80, h=20, + rMax=500, TCoo_start=285.15, THot_start=285.15, aquDat=IBPSA.Fluid.Geothermal.Aquifer.Data.Rock(), diff --git a/IBPSA/Fluid/Geothermal/Aquifer/MultiWell.mo b/IBPSA/Fluid/Geothermal/Aquifer/MultiWell.mo index 6bc701b141..9c8ff1b760 100644 --- a/IBPSA/Fluid/Geothermal/Aquifer/MultiWell.mo +++ b/IBPSA/Fluid/Geothermal/Aquifer/MultiWell.mo @@ -30,8 +30,7 @@ model MultiWell "Model of a single well for aquifer thermal energy storage" parameter Modelica.Units.SI.MassFlowRate m_flow_nominal "Nominal mass flow rate" annotation ( Dialog(group="Hydraulic circuit")); parameter Modelica.Units.SI.PressureDifference dpAquifer_nominal(displayUnit= - "Pa") "Pressure drop at nominal mass flow rate in the aquifer" - annotation ( + "Pa") "Pressure drop at nominal mass flow rate in the aquifer" annotation ( Dialog(group="Hydraulic circuit")); parameter Modelica.Units.SI.PressureDifference dpWell_nominal(displayUnit="Pa") "Pressure drop at nominal mass flow rate in the well" annotation ( @@ -39,6 +38,10 @@ model MultiWell "Model of a single well for aquifer thermal energy storage" parameter Modelica.Units.SI.PressureDifference dpExt_nominal(displayUnit="Pa") "Pressure drop at nominal mass flow rate in the above-surface system (used to size the head of the well pump)" annotation ( Dialog(group="Hydraulic circuit")); + parameter Modelica.Units.SI.Radius rC[nVol](each fixed=false) + "Radius to the center of the i-th domain"; + Modelica.Units.SI.Temperature TAquHot[nVol]; + Modelica.Units.SI.Temperature TAquCol[nVol]; Modelica.Blocks.Interfaces.RealInput u( final min=-1, @@ -73,25 +76,6 @@ model MultiWell "Model of a single well for aquifer thermal energy storage" rotation=90, origin={80,20}))); - IBPSA.Fluid.MixingVolumes.MixingVolume volCoo[nVol]( - redeclare final package Medium = Medium, - each final T_start=TCoo_start, - each final m_flow_nominal=m_flow_nominal, - final V=VWat*nCoo, - each nPorts=2) - "Array of fluid volumes representing the fluid flow in the cold side of the aquifer" - annotation (Placement(transformation(extent={{-40,-10},{-60,10}}))); - - Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCapCoo[nVol]( - C=C*nCoo, - each T(start=TCoo_start, fixed=true)) - "Array of thermal capacitor in the cold side of the aquifer" - annotation (Placement(transformation(extent={{-22,-60},{-2,-40}}))); - Modelica.Thermal.HeatTransfer.Components.ThermalResistor theResCoo[nVol]( - R=R/nCoo) - "Array of thermal resistances in the cold side of the aquifer" - annotation (Placement(transformation(extent={{-40,-70},{-60,-50}}))); - Airflow.Multizone.Point_m_flow powCoo( redeclare final package Medium = Medium, m=1, @@ -103,23 +87,6 @@ model MultiWell "Model of a single well for aquifer thermal energy storage" rotation=-90, origin={-80,-10}))); - MixingVolumes.MixingVolume volHot[nVol]( - redeclare final package Medium = Medium, - each T_start=THot_start, - each m_flow_nominal=m_flow_nominal, - V=VWat*nHot, - each nPorts=2) - "Array of fluid volumes representing the fluid flow in the warm side of the aquifer" - annotation (Placement(transformation(extent={{40,-10},{60,10}}))); - Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCapHot[nVol]( - C=C*nHot, - each T(start=THot_start, fixed=true)) - "Array of thermal capacitor in the warm side of the aquifer" - annotation (Placement(transformation(extent={{22,-60},{2,-40}}))); - Modelica.Thermal.HeatTransfer.Components.ThermalResistor theResHot[nVol]( - R=R/nHot) - "Array of thermal resistances in the warm side of the aquifer" - annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); FixedResistances.PressureDrop resCoo( redeclare final package Medium = Medium, final m_flow_nominal=m_flow_nominal, @@ -152,8 +119,6 @@ model MultiWell "Model of a single well for aquifer thermal energy storage" protected parameter Modelica.Units.SI.Radius r[nVol + 1](each fixed=false) "Radius to the boundary of the i-th domain"; - parameter Modelica.Units.SI.Radius rC[nVol](each fixed=false) - "Radius to the center of the i-th domain"; parameter Modelica.Units.SI.SpecificHeatCapacity cpWat(fixed=false) "Water specific heat capacity"; parameter Modelica.Units.SI.Density rhoWat(fixed=false) @@ -171,6 +136,43 @@ protected parameter Real kVol(each fixed=false) "Heat conductivity normalized with volume"; + IBPSA.Fluid.MixingVolumes.MixingVolume volCoo[nVol]( + redeclare final package Medium = Medium, + each final T_start=TCoo_start, + each final m_flow_nominal=m_flow_nominal, + final V=VWat*nCoo, + each nPorts=2) + "Array of fluid volumes representing the fluid flow in the cold side of the aquifer" + annotation (Placement(transformation(extent={{-40,-10},{-60,10}}))); + + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCapCoo[nVol]( + C=C*nCoo, + each T(start=TCoo_start, fixed=true)) + "Array of thermal capacitor in the cold side of the aquifer" + annotation (Placement(transformation(extent={{-22,-60},{-2,-40}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor theResCoo[nVol]( + R=R/nCoo) + "Array of thermal resistances in the cold side of the aquifer" + annotation (Placement(transformation(extent={{-40,-70},{-60,-50}}))); + + MixingVolumes.MixingVolume volHot[nVol]( + redeclare final package Medium = Medium, + each T_start=THot_start, + each m_flow_nominal=m_flow_nominal, + V=VWat*nHot, + each nPorts=2) + "Array of fluid volumes representing the fluid flow in the warm side of the aquifer" + annotation (Placement(transformation(extent={{40,-10},{60,10}}))); + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor heaCapHot[nVol]( + C=C*nHot, + each T(start=THot_start, fixed=true)) + "Array of thermal capacitor in the warm side of the aquifer" + annotation (Placement(transformation(extent={{22,-60},{2,-40}}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor theResHot[nVol]( + R=R/nHot) + "Array of thermal resistances in the warm side of the aquifer" + annotation (Placement(transformation(extent={{40,-70},{60,-50}}))); + Modelica.Thermal.HeatTransfer.Sources.FixedTemperature groTemCoo( final T=TGroCoo) "Boundary condition ground temperature in the cold side of the aquifer" @@ -234,6 +236,8 @@ initial equation end for; equation + TAquHot=heaCapHot.T; + TAquCol=heaCapCoo.T; if nVol > 1 then for i in 1:(nVol - 1) loop connect(volCoo[i].ports[2], volCoo[i + 1].ports[1]); @@ -415,6 +419,10 @@ Circulation pumps are included in the model and they can be controlled by acting clockwise (extraction from the cold well and injection into the warm well). A negative value will circulate water anticlockwise (extraction from the warm well and injection into the cold well).

+The temperature values in the warm and cold aquifers can be accessed using TAquHot and cTAquCol. These temperatures correspond to the temperatures of each thermal capacitance +in the discretized domain. The location of the thermal capacitance is expressed by rC. +

+

The nominal pressure drops in the circuit must be selected according to the figure below.

diff --git a/IBPSA/Fluid/Geothermal/Aquifer/Validation/NumberWells.mo b/IBPSA/Fluid/Geothermal/Aquifer/Validation/NumberWells.mo index b0a3f1660c..d5d981f566 100644 --- a/IBPSA/Fluid/Geothermal/Aquifer/Validation/NumberWells.mo +++ b/IBPSA/Fluid/Geothermal/Aquifer/Validation/NumberWells.mo @@ -34,10 +34,10 @@ model NumberWells annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); Sources.Boundary_pT bou(redeclare package Medium = IBPSA.Media.Water, nPorts=2) "Sink" annotation (Placement(transformation(extent={{60,-10},{40,10}}))); - Modelica.Blocks.Sources.RealExpression temWel1(y=aquWel1.heaCapHot[10].T) + Modelica.Blocks.Sources.RealExpression temWel1(y=aquWel1.TAquHot[10]) "Temperature output from aquifer model with one pair of wells" annotation (Placement(transformation(extent={{20,72},{40,92}}))); - Modelica.Blocks.Sources.RealExpression temWel2(y=aquWel2.heaCapHot[10].T) + Modelica.Blocks.Sources.RealExpression temWel2(y=aquWel2.TAquHot[10]) "Temperature output from aquifer model with two pairs of wells" annotation (Placement(transformation(extent={{20,40},{40,60}}))); Utilities.Diagnostics.CheckEquality cheEqu