OGS
BHE_1P.h
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#pragma once
5
6#include <Eigen/Core>
7#include <optional>
8#include <vector>
9
10#include "BHECommon.h"
11#include "BaseLib/Error.h"
14
15namespace ParameterLib
16{
17class SpatialPosition;
18}
19
20namespace ProcessLib
21{
22namespace HeatTransportBHE
23{
24namespace BHE
25{
39class BHE_1P final : public BHECommon
40{
41public:
42 BHE_1P(BoreholeGeometry const& borehole,
46 PipeConfiguration1PType const& pipes,
47 bool const use_python_bcs);
48
49 static constexpr int number_of_unknowns = 2;
50 static constexpr int number_of_grout_zones = 1;
51 static constexpr int number_of_flow_legs = 1;
52
56 std::array<double, number_of_flow_legs> flowLegs() const
57 {
58 return {+flow_velocity_};
59 }
60
61 std::array<double, number_of_unknowns> pipeHeatCapacities() const;
62
63 std::array<double, number_of_unknowns> pipeHeatConductions() const;
64
65 std::array<Eigen::Vector3d, number_of_unknowns> pipeAdvectionVectors(
66 Eigen::Vector3d const& elem_direction) const;
67
72 std::vector<double> thermalResistances(
73 ParameterLib::SpatialPosition const& pos) const;
74
75 template <int NPoints,
76 typename SingleUnknownMatrixType,
77 typename RMatrixType,
78 typename RPiSMatrixType,
79 typename RSMatrixType>
80 static void assembleRMatrices(
81 int const idx_bhe_unknowns,
82 Eigen::MatrixBase<SingleUnknownMatrixType> const& matBHE_loc_R,
83 Eigen::MatrixBase<RMatrixType>& R_matrix,
84 Eigen::MatrixBase<RPiSMatrixType>& R_pi_s_matrix,
85 Eigen::MatrixBase<RSMatrixType>& R_s_matrix)
86 {
87 switch (idx_bhe_unknowns)
88 {
89 case 0: // PHI_fg
90 R_matrix.block(0, NPoints, NPoints, NPoints) +=
91 -1.0 * matBHE_loc_R;
92 R_matrix.block(NPoints, 0, NPoints, NPoints) +=
93 -1.0 * matBHE_loc_R;
94
95 R_matrix.block(0, 0, NPoints, NPoints) +=
96 matBHE_loc_R; // K_i/o
97 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
98 matBHE_loc_R; // K_fg
99 return;
100 case 1: // PHI_gs
101 R_s_matrix += matBHE_loc_R;
102
103 R_pi_s_matrix.block(NPoints, 0, NPoints, NPoints) +=
104 -1.0 * matBHE_loc_R;
105
106 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
107 matBHE_loc_R; // K_fg
108 return;
109 default:
110 OGS_FATAL(
111 "BHE_1P::assembleRMatrices: unknown index {:d} "
112 "out of range.",
113 idx_bhe_unknowns);
114 }
115 }
116
118 double updateFlowRateAndTemperature(double T_out, double current_time);
119
120 static constexpr std::pair<int, int> inflow_outflow_bc_component_ids[] = {
121 {0, 1}};
122
123 static std::array<std::pair<std::size_t /*node_id*/, int /*component*/>, 2>
124 getBHEInflowDirichletBCNodesAndComponents(std::size_t const top_node_id,
125 std::size_t const bottom_node_id,
126 int const in_component_id);
127
128 static std::optional<
129 std::array<std::pair<std::size_t /*node_id*/, int /*component*/>, 2>>
131 std::size_t const /*bottom_node_id*/,
132 int const /*in_component_id*/,
133 int const /*out_component_id*/);
134
135public:
136 std::array<double, number_of_unknowns> crossSectionAreas(
137 ParameterLib::SpatialPosition const& pos) const;
138
139 void updateHeatTransferCoefficients(double const flow_rate);
140
141protected:
143
144private:
149 double flow_velocity_ = 0.0;
150
151 double cached_nu_ = 0.0;
152
153 std::vector<double> calcThermalResistances(
154 double const Nu, ParameterLib::SpatialPosition const& pos) const;
155};
156} // namespace BHE
157} // namespace HeatTransportBHE
158} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:10
RefrigerantProperties const refrigerant
Definition BHECommon.h:51
BHECommon(BoreholeGeometry const &borehole_geometry_, RefrigerantProperties const &refrigerant_, GroutParameters const &grout_, FlowAndTemperatureControl const &flowAndTemperatureControl_, bool const use_python_bcs_)
Definition BHECommon.h:37
FlowAndTemperatureControl const flowAndTemperatureControl
Definition BHECommon.h:53
void updateHeatTransferCoefficients(double const flow_rate)
Definition BHE_1P.cpp:92
static constexpr int number_of_flow_legs
Definition BHE_1P.h:51
std::array< double, number_of_unknowns > pipeHeatConductions() const
Definition BHE_1P.cpp:57
static std::optional< std::array< std::pair< std::size_t, int >, 2 > > getBHEBottomDirichletBCNodesAndComponents(std::size_t const, int const, int const)
Definition BHE_1P.cpp:163
PipeConfiguration1PType const _pipe
Definition BHE_1P.h:142
static constexpr std::pair< int, int > inflow_outflow_bc_component_ids[]
Definition BHE_1P.h:120
std::array< double, number_of_unknowns > crossSectionAreas(ParameterLib::SpatialPosition const &pos) const
Definition BHE_1P.cpp:171
static constexpr int number_of_unknowns
Definition BHE_1P.h:49
static constexpr int number_of_grout_zones
Definition BHE_1P.h:50
std::array< double, number_of_unknowns > pipeHeatCapacities() const
Definition BHE_1P.cpp:42
BHE_1P(BoreholeGeometry const &borehole, RefrigerantProperties const &refrigerant, GroutParameters const &grout, FlowAndTemperatureControl const &flowAndTemperatureControl, PipeConfiguration1PType const &pipes, bool const use_python_bcs)
Definition BHE_1P.cpp:21
static void assembleRMatrices(int const idx_bhe_unknowns, Eigen::MatrixBase< SingleUnknownMatrixType > const &matBHE_loc_R, Eigen::MatrixBase< RMatrixType > &R_matrix, Eigen::MatrixBase< RPiSMatrixType > &R_pi_s_matrix, Eigen::MatrixBase< RSMatrixType > &R_s_matrix)
Definition BHE_1P.h:80
double updateFlowRateAndTemperature(double T_out, double current_time)
Return the inflow temperature for the boundary condition.
Definition BHE_1P.cpp:182
std::array< Eigen::Vector3d, number_of_unknowns > pipeAdvectionVectors(Eigen::Vector3d const &elem_direction) const
Definition BHE_1P.cpp:78
std::vector< double > calcThermalResistances(double const Nu, ParameterLib::SpatialPosition const &pos) const
Definition BHE_1P.cpp:107
std::vector< double > thermalResistances(ParameterLib::SpatialPosition const &pos) const
Definition BHE_1P.cpp:101
static std::array< std::pair< std::size_t, int >, 2 > getBHEInflowDirichletBCNodesAndComponents(std::size_t const top_node_id, std::size_t const bottom_node_id, int const in_component_id)
Definition BHE_1P.cpp:153
std::array< double, number_of_flow_legs > flowLegs() const
Definition BHE_1P.h:56
std::variant< InflowTemperature, Power, BuildingPower, BuildingPowerHotWaterActiveCooling, BuildingPowerHotWaterPassiveCooling, BuildingPowerHotWater, BuildingPowerActiveCooling, BuildingPowerPassiveCooling, ActiveCooling > FlowAndTemperatureControl