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 ProcessLib
16{
17namespace HeatTransportBHE
18{
19namespace BHE
20{
34class BHE_1P final : public BHECommon
35{
36public:
37 BHE_1P(BoreholeGeometry const& borehole,
41 PipeConfiguration1PType const& pipes,
42 bool const use_python_bcs);
43
51
52 static constexpr int number_of_unknowns = 2;
53 static constexpr int number_of_grout_zones = 1;
54
55 std::array<double, number_of_unknowns> pipeHeatCapacities() const;
56
57 std::array<double, number_of_unknowns> pipeHeatConductions(
58 int const section_index = 0) const;
59
60 std::array<Eigen::Vector3d, number_of_unknowns> pipeAdvectionVectors(
61 Eigen::Vector3d const& elem_direction,
62 int const section_index = 0) const;
63
64 template <int NPoints,
65 typename SingleUnknownMatrixType,
66 typename RMatrixType,
67 typename RPiSMatrixType,
68 typename RSMatrixType>
69 static void assembleRMatrices(
70 int const idx_bhe_unknowns,
71 Eigen::MatrixBase<SingleUnknownMatrixType> const& matBHE_loc_R,
72 Eigen::MatrixBase<RMatrixType>& R_matrix,
73 Eigen::MatrixBase<RPiSMatrixType>& R_pi_s_matrix,
74 Eigen::MatrixBase<RSMatrixType>& R_s_matrix)
75 {
76 // Here we are looping over two resistance terms
77 // First PHI_fg is the resistance between pipe and grout
78 // Second PHI_gs is the resistance between grout and soil
79 switch (idx_bhe_unknowns)
80 {
81 case 0: // PHI_fg
82 R_matrix.block(0, NPoints, NPoints, NPoints) +=
83 -1.0 * matBHE_loc_R;
84 R_matrix.block(NPoints, 0, NPoints, NPoints) +=
85 -1.0 * matBHE_loc_R;
86
87 R_matrix.block(0, 0, NPoints, NPoints) +=
88 matBHE_loc_R; // K_i/o
89 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
90 matBHE_loc_R; // K_fg
91 return;
92 case 1: // PHI_gs
93 R_s_matrix += matBHE_loc_R;
94
95 R_pi_s_matrix.block(NPoints, 0, NPoints, NPoints) +=
96 -1.0 * matBHE_loc_R;
97
98 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
99 matBHE_loc_R; // K_fg
100 return;
101 default:
102 OGS_FATAL(
103 "BHE_1P::assembleRMatrices: unknown index {:d} "
104 "out of range.",
105 idx_bhe_unknowns);
106 }
107 }
108
110 double updateFlowRateAndTemperature(double T_out, double current_time);
111
112 static constexpr std::pair<int, int> inflow_outflow_bc_component_ids[] = {
113 {0, 1}};
114
115 static std::array<std::pair<std::size_t /*node_id*/, int /*component*/>, 2>
116 getBHEInflowDirichletBCNodesAndComponents(std::size_t const top_node_id,
117 std::size_t const bottom_node_id,
118 int const in_component_id);
119
120 static std::optional<
121 std::array<std::pair<std::size_t /*node_id*/, int /*component*/>, 2>>
123 std::size_t const /*bottom_node_id*/,
124 int const /*in_component_id*/,
125 int const /*out_component_id*/);
126
127public:
128 std::array<double, number_of_unknowns> crossSectionAreas(
129 int const section_index = 0) const;
130
131 void updateHeatTransferCoefficients(double const flow_rate);
132
133protected:
135
136private:
137 std::vector<double> calcThermalResistances(
138 double const Nu, int const section_index = 0) const;
139};
140} // namespace BHE
141} // namespace HeatTransportBHE
142} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
RefrigerantProperties const refrigerant
Definition BHECommon.h:72
BHECommon(BoreholeGeometry const &borehole_geometry_, RefrigerantProperties const &refrigerant_, GroutParameters const &grout_, FlowAndTemperatureControl const &flowAndTemperatureControl_, bool const use_python_bcs_)
Definition BHECommon.h:58
FlowAndTemperatureControl const flowAndTemperatureControl
Definition BHECommon.h:74
void updateHeatTransferCoefficients(double const flow_rate)
Definition BHE_1P.cpp:94
std::vector< double > calcThermalResistances(double const Nu, int const section_index=0) const
Definition BHE_1P.cpp:109
std::array< double, number_of_unknowns > crossSectionAreas(int const section_index=0) const
Definition BHE_1P.cpp:169
std::array< double, number_of_unknowns > pipeHeatConductions(int const section_index=0) const
Definition BHE_1P.cpp:55
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:161
PipeConfiguration1PType const _pipe
Definition BHE_1P.h:134
static constexpr std::pair< int, int > inflow_outflow_bc_component_ids[]
Definition BHE_1P.h:112
static constexpr int number_of_unknowns
Definition BHE_1P.h:52
static constexpr int number_of_grout_zones
Definition BHE_1P.h:53
std::array< double, number_of_unknowns > pipeHeatCapacities() const
Definition BHE_1P.cpp:40
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:19
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:69
double updateFlowRateAndTemperature(double T_out, double current_time)
Return the inflow temperature for the boundary condition.
Definition BHE_1P.cpp:178
BHE_1P withGeometry(BoreholeGeometry const &g) const
Definition BHE_1P.h:46
std::array< Eigen::Vector3d, number_of_unknowns > pipeAdvectionVectors(Eigen::Vector3d const &elem_direction, int const section_index=0) const
Definition BHE_1P.cpp:79
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:150
std::variant< InflowTemperature, Power, BuildingPower, BuildingPowerHotWaterActiveCooling, BuildingPowerHotWaterPassiveCooling, BuildingPowerHotWater, BuildingPowerActiveCooling, BuildingPowerPassiveCooling, ActiveCooling > FlowAndTemperatureControl