OGS
CreateBHECoaxial.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "CreateBHECoaxial.h"
5
6#include "BHE_CXA.h"
7#include "BHE_CXC.h"
9#include "BaseLib/Error.h"
11namespace ProcessLib
12{
13namespace HeatTransportBHE
14{
15namespace BHE
16{
20 BaseLib::ConfigTree const& config,
21 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
22 std::map<std::string,
23 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
24 curves,
25 std::vector<MeshLib::Node*> const& bhe_nodes)
26{
27 // if the BHE is using python boundary condition
28 auto const bhe_if_use_python_bc_conf =
30 config.getConfigParameter<bool>("use_bhe_pipe_network", false);
31 DBUG("If using python boundary condition : {:s}",
32 (bhe_if_use_python_bc_conf) ? "true" : "false");
33
34 auto const borehole_geometry =
36 createBoreholeGeometry(config.getConfigSubtree("borehole"), parameters,
37 bhe_nodes);
38
40 auto const& pipes_config = config.getConfigSubtree("pipes");
42 Pipe const outer_pipe = createPipe(pipes_config.getConfigSubtree("outer"));
43 Pipe const inner_pipe =
45 createPipe(pipes_config.getConfigSubtree("inner"));
46 const auto pipe_longitudinal_dispersion_length =
48 pipes_config.getConfigParameter<double>(
49 "longitudinal_dispersion_length");
50 PipeConfigurationCoaxial const pipes{inner_pipe, outer_pipe,
51 pipe_longitudinal_dispersion_length};
52
53 double const annulus_diameter =
54 coaxialPipesAnnulusDiameter(pipes.inner_pipe, pipes.outer_pipe);
55 if (annulus_diameter <= 0)
56 {
58 "Invalid coaxial pipe geometry: outer pipe inner diameter ({:g}) "
59 "must be greater than inner pipe outside diameter ({:g}).",
60 pipes.outer_pipe.diameter, pipes.inner_pipe.outsideDiameter());
61 }
62
63 double const outer_pipe_outside_diameter =
64 pipes.outer_pipe.outsideDiameter();
65 for (int section_index = 0;
66 section_index < borehole_geometry.sections.getNumberOfSections();
67 ++section_index)
68 {
69 double const D =
70 borehole_geometry.sections.diameterAtSection(section_index);
71 if (D <= outer_pipe_outside_diameter)
72 {
74 "Invalid coaxial geometry at section {:d}: borehole diameter "
75 "{:g} must be greater than outer pipe outside diameter {:g}.",
76 section_index, D, outer_pipe_outside_diameter);
77 }
78 }
79
81 auto const grout = createGroutParameters(config.getConfigSubtree("grout"));
82
83 auto const refrigerant =
85 createRefrigerantProperties(config.getConfigSubtree("refrigerant"));
86
87 auto const flowAndTemperatureControl = createFlowAndTemperatureControl(
89 config.getConfigSubtree("flow_and_temperature_control"),
90 parameters,
91 curves,
92 refrigerant);
93
94 return {borehole_geometry, refrigerant, grout,
95 flowAndTemperatureControl, pipes, bhe_if_use_python_bc_conf};
96}
97
98template <typename T_BHE>
100 BaseLib::ConfigTree const& config,
101 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
102 std::map<std::string,
103 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
104 curves,
105 std::vector<MeshLib::Node*> const& bhe_nodes)
106{
107 auto coaxial = parseBHECoaxialConfig(config, parameters, curves, bhe_nodes);
108 return {std::get<0>(coaxial), std::get<1>(coaxial), std::get<2>(coaxial),
109 std::get<3>(coaxial), std::get<4>(coaxial), std::get<5>(coaxial)};
110}
111
113 BaseLib::ConfigTree const& config,
114 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
115 std::map<std::string,
116 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
117 curves,
118 std::vector<MeshLib::Node*> const& bhe_nodes);
119
121 BaseLib::ConfigTree const& config,
122 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
123 std::map<std::string,
124 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
125 curves,
126 std::vector<MeshLib::Node*> const& bhe_nodes);
127} // namespace BHE
128} // namespace HeatTransportBHE
129} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
T getConfigParameter(std::string const &param) const
ConfigTree getConfigSubtree(std::string const &root) const
RefrigerantProperties createRefrigerantProperties(BaseLib::ConfigTree const &config)
BoreholeGeometry createBoreholeGeometry(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, std::vector< MeshLib::Node * > const &bhe_nodes)
T_BHE createBHECoaxial(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, std::vector< MeshLib::Node * > const &bhe_nodes)
Pipe createPipe(BaseLib::ConfigTree const &config)
Definition Pipe.cpp:15
double coaxialPipesAnnulusDiameter(Pipe const &inner_pipe, Pipe const &outer_pipe)
Definition Pipe.h:50
FlowAndTemperatureControl createFlowAndTemperatureControl(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, RefrigerantProperties const &refrigerant)
template BHE_CXA createBHECoaxial< BHE_CXA >(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, std::vector< MeshLib::Node * > const &bhe_nodes)
std::variant< InflowTemperature, Power, BuildingPower, BuildingPowerHotWaterActiveCooling, BuildingPowerHotWaterPassiveCooling, BuildingPowerHotWater, BuildingPowerActiveCooling, BuildingPowerPassiveCooling, ActiveCooling > FlowAndTemperatureControl
GroutParameters createGroutParameters(BaseLib::ConfigTree const &config)
static std::tuple< BoreholeGeometry, RefrigerantProperties, GroutParameters, FlowAndTemperatureControl, PipeConfigurationCoaxial, bool > parseBHECoaxialConfig(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, std::vector< MeshLib::Node * > const &bhe_nodes)
template BHE_CXC createBHECoaxial< BHE_CXC >(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves, std::vector< MeshLib::Node * > const &bhe_nodes)