Buildings.Fluid.Geothermal.BuriedPipes.Validation
Collection of validation models
Information
This package contains validation models for the classes in Buildings.Fluid.Geothermal.BuriedPipes.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
Name | Description |
---|---|
GroundCouplingAIT | Validation for pipe and ground coupling against data from Austrian Institute of Technology |
Buildings.Fluid.Geothermal.BuriedPipes.Validation.GroundCouplingAIT
Validation for pipe and ground coupling against data from Austrian Institute of Technology
Information
Validation of Buildings.Fluid.Geothermal.BuriedPipes.GroundCoupling using the experimental data collected by the Austrian Institute of Technology.
See Buildings.Fluid.FixedResistances.Validation.PlugFlowPipes.PlugFlowAIT for more info.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
---|---|---|---|
Length | Lcap | 1 | Length over which transient effects typically take place [m] |
Real | R80 | 1/(2*0.024*Modelica.Constant... | Thermal resistance per unit length of service pipes [(m.K)/W] |
Boolean | pipVol | true | Flag to decide whether volumes are included at the end points of the pipe |
Boolean | allowFlowReversal | true | = true to allow flow reversal, false restricts to design direction (port_a -> port_b) |
MassFlowRate | m_flow_nominal | 1 | Nominal mass flow rate, used for regularization near zero flow [kg/s] |
Time | tauHeaTra | 6500 | Time constant for heat transfer, default 20 minutes [s] |
Length | thickness | 0.0032 | Pipe wall thickness [m] |
Generic | cliCon | cliCon(TSurMea=281.53, TSurA... | Climatic constants in Pongau, Austria |
Generic | soiDat | soiDat(k=2.4, c=1000, d=1600) | Soil thermal properties |
Modelica definition
model GroundCouplingAIT
"Validation for pipe and ground coupling against data from Austrian Institute of Technology"
extends Modelica.Icons.Example;
package Medium = Buildings.Media.Water;
parameter Modelica.Units.SI.Length Lcap=1
"Length over which transient effects typically take place";
parameter Real R80(unit="(m.K)/W")=1/(2*0.024*Modelica.Constants.pi)
*log(0.07/0.0337) + 1/(2*2.4*Modelica.Constants.pi)*log(2/0.07) "Thermal resistance per unit length of service pipes";
parameter Boolean pipVol=true
"Flag to decide whether volumes are included at the end points of the pipe";
parameter Boolean allowFlowReversal=true
"= true to allow flow reversal, false restricts to design direction (port_a -> port_b)";
parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1
"Nominal mass flow rate, used for regularization near zero flow";
parameter Modelica.Units.SI.Time tauHeaTra=6500
"Time constant for heat transfer, default 20 minutes";
parameter Modelica.Units.SI.Length thickness=0.0032 "Pipe wall thickness";
Fluid.Sources.MassFlowSource_T Point1(
redeclare package Medium = Medium,
use_T_in=true,
use_m_flow_in=true,
nPorts=1) "Mass flow source";
Fluid.Sources.MassFlowSource_T Point4(
redeclare package Medium = Medium,
use_m_flow_in=true,
nPorts=1) "Substation 4";
Fluid.Sources.MassFlowSource_T Point3(
nPorts=1,
redeclare package Medium = Medium,
use_m_flow_in=true) "Subsation 3";
Fluid.Sources.MassFlowSource_T Point2(
redeclare package Medium = Medium,
use_m_flow_in=true,
nPorts=1) "Subtation 2";
FixedResistances.PlugFlowPipe pip1(
redeclare package Medium = Medium,
dh=0.0825,
dIns=0.045,
kIns=0.024,
length=115,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=0.3,
thickness=thickness,
cPip=500,
rhoPip=8000,
initDelay=false,
m_flow_start=0) "Pipe 1";
FixedResistances.PlugFlowPipe pip4(
dh=0.0273,
redeclare package Medium = Medium,
length=29,
dIns=0.0182,
kIns=0.024,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=0.3,
thickness=thickness,
cPip=500,
rhoPip=8000,
initDelay=false,
m_flow_start=0) "Pipe 4";
FixedResistances.PlugFlowPipe pip5(
redeclare package Medium = Medium,
length=20,
dh=0.0825,
kIns=0.024,
dIns=0.045,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=0.3,
thickness=thickness,
cPip=500,
rhoPip=8000,
initDelay=false,
m_flow_start=0) "Pipe 5";
FixedResistances.PlugFlowPipe pip2(
redeclare package Medium = Medium,
length=76,
dIns=0.0182,
kIns=0.024,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=0.3,
thickness=thickness,
dh=0.0273,
cPip=500,
rhoPip=8000,
initDelay=false,
m_flow_start=0) "Pipe 2";
FixedResistances.PlugFlowPipe pip3(
redeclare package Medium = Medium,
length=38,
dIns=0.0182,
kIns=0.024,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=0.3,
thickness=thickness,
dh=0.0273,
cPip=500,
rhoPip=8000,
initDelay=false,
m_flow_start=0) "Pipe 3";
Modelica.Blocks.Sources.CombiTimeTable DataReader(
tableOnFile=true,
tableName="dat",
columns=2:pipeDataAIT151218.nCol,
fileName=pipeDataAIT151218.filNam)
"Read measurement data";
FixedResistances.Validation.PlugFlowPipes.Data.PipeDataAIT151218 pipeDataAIT151218
"Measurement data from AIT network";
Modelica.Blocks.Sources.RealExpression m_flow_p3(y=-DataReader.y[7])
"Mass flow rate for substation 3";
Modelica.Blocks.Sources.RealExpression m_flow_p4(y=-DataReader.y[8])
"Mass flow rate of substation 4";
Modelica.Blocks.Sources.RealExpression m_flow_p2(y=-DataReader.y[6]);
Modelica.Blocks.Sources.RealExpression T_p1(y=DataReader.y[1])
"Inlet temperature";
Fluid.Sensors.TemperatureTwoPort senTem_p3(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
transferHeat=true,
tauHeaTra=tauHeaTra) "Temperature sensor";
Fluid.Sensors.TemperatureTwoPort senTem_p2(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
transferHeat=true,
tauHeaTra=tauHeaTra) "Temperature sensor";
Fluid.Sensors.TemperatureTwoPort senTem_p4(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
transferHeat=true,
tauHeaTra=tauHeaTra) "Temperature sensor";
Fluid.Sensors.TemperatureTwoPort senTem_p1(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
transferHeat=true,
tauHeaTra=tauHeaTra) "Temperature sensor";
FixedResistances.PlugFlowPipe pip0(
redeclare package Medium = Medium,
dh=0.0825,
dIns=0.045,
kIns=0.024,
length=20,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=0.3,
thickness=thickness,
cPip=500,
rhoPip=8000,
initDelay=false,
m_flow_start=0) "Pipe 0";
Buildings.Fluid.Sources.Boundary_pT ExcludedBranch(
redeclare package Medium = Medium, nPorts=1)
"Mass flow sink for excluded branch";
Fluid.Sensors.TemperatureTwoPort senTemIn_p2(
redeclare package Medium = Medium,
m_flow_nominal=m_flow_nominal,
transferHeat=true,
tauHeaTra=tauHeaTra) "Temperature sensor";
Modelica.Blocks.Logical.Switch switch
"Decide if mass flow rate is below measurement noise threshold or not";
Modelica.Blocks.Sources.RealExpression m_flow_zero(y=0)
"Default value if mass flow rate is below measurement noise threshold";
Modelica.Blocks.Logical.LessThreshold lessThreshold(threshold=-0.001)
"Measurement noise threshold";
Modelica.Blocks.Logical.Switch switch1
"Decide if mass flow rate is below measurement noise threshold or not";
Fluid.Sources.MassFlowSource_T Point5(
redeclare package Medium = Medium,
use_m_flow_in=true,
nPorts=1)
"Bypass temperature sensor when flow rate is below measurement threshold";
GroundCoupling groMai(
nPip=1,
nSeg=3,
soiDat=soiDat,
cliCon=cliCon,
len={pip0.length,pip1.length,pip5.length},
dep={1},
pos={0},
rad={0.0889}) "Main line pipes ground coupling";
parameter BoundaryConditions.GroundTemperature.ClimaticConstants.Generic cliCon(
TSurMea=281.53,
TSurAmp=9.88,
sinPha=9002880)
"Climatic constants in Pongau, Austria";
parameter HeatTransfer.Data.Soil.Generic soiDat(
k=2.4,
c=1000,
d=1600) "Soil thermal properties";
GroundCoupling groSup(
nPip=1,
nSeg=3,
soiDat=soiDat,
cliCon=cliCon,
len={pip2.length,pip3.length,pip4.length},
dep={1},
pos={0},
rad={0.0337}) "Customers supply pipes ground coupling";
FixedResistances.Junction splPip2(
redeclare package Medium = Medium,
m_flow_nominal={pip5.m_flow_nominal,pip2.m_flow_nominal,pip3.m_flow_nominal},
from_dp=true,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
dp_nominal(each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
"Splitter coming out of pip5";
FixedResistances.Junction splPip1(
redeclare package Medium = Medium,
m_flow_nominal={pip1.m_flow_nominal,pip5.m_flow_nominal,pip4.m_flow_nominal},
from_dp=true,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
dp_nominal(each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_2=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_3=if allowFlowReversal then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
"Splitter coming out of pip1";
equation
connect(m_flow_p3.y, Point3.m_flow_in);
connect(Point2.m_flow_in, m_flow_p2.y);
connect(T_p1.y, Point1.T_in);
connect(DataReader.y[5], Point1.m_flow_in);
connect(senTem_p2.port_b, Point2.ports[1]);
connect(Point3.ports[1], senTem_p3.port_b);
connect(senTem_p4.port_b, Point4.ports[1]);
connect(Point1.ports[1], senTem_p1.port_b);
connect(senTem_p1.port_a, pip0.port_a);
connect(switch.u1, m_flow_p4.y);
connect(m_flow_zero.y, switch.u3);
connect(switch.y, Point4.m_flow_in);
connect(switch.u2, lessThreshold.y);
connect(lessThreshold.u, m_flow_p4.y);
connect(senTemIn_p2.port_a, pip2.port_a);
connect(switch1.y, Point5.m_flow_in);
connect(m_flow_p4.y, switch1.u3);
connect(m_flow_zero.y, switch1.u1);
connect(lessThreshold.y, switch1.u2);
connect(groMai.ports[1, 1], pip0.heatPort);
connect(groMai.ports[1, 2], pip1.heatPort);
connect(groMai.ports[1, 2], pip5.heatPort);
connect(groSup.ports[1, 1], pip2.heatPort);
connect(groSup.ports[1, 2], pip3.heatPort);
connect(groSup.ports[1, 3], pip4.heatPort);
connect(senTem_p2.port_a, pip2.port_b);
connect(pip5.port_a, splPip1.port_2);
connect(pip1.port_b, splPip1.port_1);
connect(pip4.port_a, splPip1.port_3);
connect(pip5.port_b, splPip2.port_1);
connect(senTemIn_p2.port_b, splPip2.port_2);
connect(pip3.port_a, splPip2.port_3);
connect(pip1.port_a, pip0.port_b);
connect(pip4.port_b, senTem_p4.port_a);
connect(pip4.port_b, Point5.ports[1]);
connect(pip0.port_b, ExcludedBranch.ports[1]);
connect(pip3.port_b, senTem_p3.port_a);
end GroundCouplingAIT;