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{
26 // if the BHE is using python boundary condition
27 auto const bhe_if_use_python_bc_conf =
29 config.getConfigParameter<bool>("use_bhe_pipe_network", false);
30 DBUG("If using python boundary condition : {:s}",
31 (bhe_if_use_python_bc_conf) ? "true" : "false");
32
33 auto const borehole_geometry =
35 createBoreholeGeometry(config.getConfigSubtree("borehole"), parameters);
36
38 auto const& pipes_config = config.getConfigSubtree("pipes");
39 Pipe const outer_pipe =
41 createPipe(pipes_config.getConfigSubtree("outer"), parameters);
42 Pipe const inner_pipe =
44 createPipe(pipes_config.getConfigSubtree("inner"), parameters);
45 const auto pipe_longitudinal_dispersion_length =
47 pipes_config.getConfigParameter<double>(
48 "longitudinal_dispersion_length");
49 PipeConfigurationCoaxial const pipes{inner_pipe, outer_pipe,
50 pipe_longitudinal_dispersion_length};
51
52 double const annulus_diameter =
53 coaxialPipesAnnulusDiameter(pipes.inner_pipe, pipes.outer_pipe);
54 if (annulus_diameter <= 0)
55 {
57 "Invalid coaxial pipe geometry: outer pipe inner diameter ({:g}) "
58 "must be greater than inner pipe outside diameter ({:g}).",
59 pipes.outer_pipe.diameter, pipes.inner_pipe.outsideDiameter());
60 }
61
63 auto const grout = createGroutParameters(config.getConfigSubtree("grout"));
64
65 auto const refrigerant =
67 createRefrigerantProperties(config.getConfigSubtree("refrigerant"));
68
69 auto const flowAndTemperatureControl = createFlowAndTemperatureControl(
71 config.getConfigSubtree("flow_and_temperature_control"),
72 parameters,
73 curves,
74 refrigerant);
75
76 return {borehole_geometry, refrigerant, grout,
77 flowAndTemperatureControl, pipes, bhe_if_use_python_bc_conf};
78}
79
80template <typename T_BHE>
82 BaseLib::ConfigTree const& config,
83 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
84 std::map<std::string,
85 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
86 curves)
87{
88 auto coaxial = parseBHECoaxialConfig(config, parameters, curves);
89 return {std::get<0>(coaxial), std::get<1>(coaxial), std::get<2>(coaxial),
90 std::get<3>(coaxial), std::get<4>(coaxial), std::get<5>(coaxial)};
91}
92
94 BaseLib::ConfigTree const& config,
95 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
96 std::map<std::string,
97 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
98 curves);
99
101 BaseLib::ConfigTree const& config,
102 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>& parameters,
103 std::map<std::string,
104 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
105 curves);
106} // namespace BHE
107} // namespace HeatTransportBHE
108} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:10
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)
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)
double coaxialPipesAnnulusDiameter(Pipe const &inner_pipe, Pipe const &outer_pipe)
Definition Pipe.h:52
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_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)
BoreholeGeometry createBoreholeGeometry(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters)
Pipe createPipe(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase > > &parameters)
Definition Pipe.cpp:17
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::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)