OGS
BHE_CXA.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
8#include "BHECommonCoaxial.h"
9#include "BaseLib/Error.h"
10
11namespace ProcessLib
12{
13namespace HeatTransportBHE
14{
15namespace BHE
16{
30class BHE_CXA final : public BHECommonCoaxial
31{
32public:
33 BHE_CXA(BoreholeGeometry const& borehole,
37 PipeConfigurationCoaxial const& pipes,
38 bool const use_python_bcs)
39 : BHECommonCoaxial{borehole, refrigerant,
41 pipes, use_python_bcs}
42 {
43 // Initialize thermal resistances.
44 auto values = visit(
45 [&](auto const& control)
46 {
47 return control(refrigerant.reference_temperature,
48 0. /* initial time */);
49 },
51 updateHeatTransferCoefficients(values.flow_rate);
52 }
53
61
62 template <int NPoints, typename SingleUnknownMatrixType,
63 typename RMatrixType, typename RPiSMatrixType,
64 typename RSMatrixType>
65 static void assembleRMatrices(
66 int const idx_bhe_unknowns,
67 Eigen::MatrixBase<SingleUnknownMatrixType> const& matBHE_loc_R,
68 Eigen::MatrixBase<RMatrixType>& R_matrix,
69 Eigen::MatrixBase<RPiSMatrixType>& R_pi_s_matrix,
70 Eigen::MatrixBase<RSMatrixType>& R_s_matrix)
71 {
72 switch (idx_bhe_unknowns)
73 {
74 case 0: // PHI_fig
75 R_matrix.block(0, 2 * NPoints, NPoints, NPoints) +=
76 -1.0 * matBHE_loc_R;
77 R_matrix.block(2 * NPoints, 0, NPoints, NPoints) +=
78 -1.0 * matBHE_loc_R;
79
80 R_matrix.block(0, 0, NPoints, NPoints) +=
81 1.0 * matBHE_loc_R; // K_i
82 R_matrix.block(2 * NPoints,
83 2 * NPoints,
84 NPoints,
85 NPoints) += 1.0 * matBHE_loc_R; // K_ig
86 return;
87 case 1: // PHI_ff
88 R_matrix.block(0, NPoints, NPoints, NPoints) +=
89 -1.0 * matBHE_loc_R;
90 R_matrix.block(NPoints, 0, NPoints, NPoints) +=
91 -1.0 * matBHE_loc_R;
92
93 R_matrix.block(0, 0, NPoints,
94 NPoints) += 1.0 * matBHE_loc_R; // K_i1
95 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
96 1.0 * matBHE_loc_R; // K_o
97 return;
98 case 2: // PHI_gs
99 R_s_matrix += matBHE_loc_R;
100
101 R_pi_s_matrix.block(2 * NPoints, 0, NPoints, NPoints) +=
102 -1.0 * matBHE_loc_R;
103
104 R_matrix.block(2 * NPoints, 2 * NPoints, NPoints,
105 NPoints) += matBHE_loc_R; // K_ig
106 return;
107 default:
108 OGS_FATAL(
109 "BHE_CXA::assembleRMatrices: unknown index {:d} "
110 "out of range.",
111 idx_bhe_unknowns);
112 }
113 }
114
115 std::array<double, number_of_unknowns> crossSectionAreas(
116 int const section_index = 0) const
117 {
120 borehole_geometry.sections.areaAtSection(section_index),
121 _pipes.outer_pipe.outsideArea(), section_index)};
122 }
123
124private:
125 void assignVelocities(double inner_vel, double annulus_vel) override
126 {
127 // CXA: unknown 0 = annulus (inflow), unknown 1 = inner pipe (outflow)
128 _flow_velocities = {annulus_vel, inner_vel};
129 }
130
131 std::vector<double> getThermalResistances(double const& R_gs,
132 double const& R_ff,
133 double const& R_fg) const override
134 {
135 return {R_fg, R_ff, R_gs};
136 }
137};
138} // namespace BHE
139} // namespace HeatTransportBHE
140} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
BHECommonCoaxial(BoreholeGeometry const &borehole, RefrigerantProperties const &refrigerant, GroutParameters const &grout, FlowAndTemperatureControl const &flowAndTemperatureControl, PipeConfigurationCoaxial const &pipes, bool const use_python_bcs)
RefrigerantProperties const refrigerant
Definition BHECommon.h:72
FlowAndTemperatureControl const flowAndTemperatureControl
Definition BHECommon.h:74
BHE_CXA withGeometry(BoreholeGeometry const &g) const
Definition BHE_CXA.h:56
std::array< double, number_of_unknowns > crossSectionAreas(int const section_index=0) const
Definition BHE_CXA.h:115
std::vector< double > getThermalResistances(double const &R_gs, double const &R_ff, double const &R_fg) const override
Definition BHE_CXA.h:131
BHE_CXA(BoreholeGeometry const &borehole, RefrigerantProperties const &refrigerant, GroutParameters const &grout, FlowAndTemperatureControl const &flowAndTemperatureControl, PipeConfigurationCoaxial const &pipes, bool const use_python_bcs)
Definition BHE_CXA.h:33
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_CXA.h:65
void assignVelocities(double inner_vel, double annulus_vel) override
Definition BHE_CXA.h:125
double checkedGroutArea(double const borehole_area_fraction, double const pipe_outside_area, int const section_index)
Definition BHECommon.h:40
std::variant< InflowTemperature, Power, BuildingPower, BuildingPowerHotWaterActiveCooling, BuildingPowerHotWaterPassiveCooling, BuildingPowerHotWater, BuildingPowerActiveCooling, BuildingPowerPassiveCooling, ActiveCooling > FlowAndTemperatureControl