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