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"
10#include "BaseLib/Error.h"
12
13namespace ProcessLib
14{
15namespace HeatTransportBHE
16{
17namespace BHE
18{
19class BHE_CXA final : public BHECommonCoaxial
20{
21public:
22 BHE_CXA(BoreholeGeometry const& borehole,
26 PipeConfigurationCoaxial const& pipes,
27 bool const use_python_bcs)
28 : BHECommonCoaxial{borehole, refrigerant,
30 pipes, use_python_bcs}
31 {
32 // Initialize thermal resistances.
33 auto values = visit(
34 [&](auto const& control)
35 {
36 return control(refrigerant.reference_temperature,
37 0. /* initial time */);
38 },
40 updateHeatTransferCoefficients(values.flow_rate);
41 }
42
43 template <int NPoints, typename SingleUnknownMatrixType,
44 typename RMatrixType, typename RPiSMatrixType,
45 typename RSMatrixType>
46 static void assembleRMatrices(
47 int const idx_bhe_unknowns,
48 Eigen::MatrixBase<SingleUnknownMatrixType> const& matBHE_loc_R,
49 Eigen::MatrixBase<RMatrixType>& R_matrix,
50 Eigen::MatrixBase<RPiSMatrixType>& R_pi_s_matrix,
51 Eigen::MatrixBase<RSMatrixType>& R_s_matrix)
52 {
53 switch (idx_bhe_unknowns)
54 {
55 case 0: // PHI_fig
56 R_matrix.block(0, 2 * NPoints, NPoints, NPoints) +=
57 -1.0 * matBHE_loc_R;
58 R_matrix.block(2 * NPoints, 0, NPoints, NPoints) +=
59 -1.0 * matBHE_loc_R;
60
61 R_matrix.block(0, 0, NPoints, NPoints) +=
62 1.0 * matBHE_loc_R; // K_i
63 R_matrix.block(2 * NPoints,
64 2 * NPoints,
65 NPoints,
66 NPoints) += 1.0 * matBHE_loc_R; // K_ig
67 return;
68 case 1: // PHI_ff
69 R_matrix.block(0, NPoints, NPoints, NPoints) +=
70 -1.0 * matBHE_loc_R;
71 R_matrix.block(NPoints, 0, NPoints, NPoints) +=
72 -1.0 * matBHE_loc_R;
73
74 R_matrix.block(0, 0, NPoints,
75 NPoints) += 1.0 * matBHE_loc_R; // K_i1
76 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
77 1.0 * matBHE_loc_R; // K_o
78 return;
79 case 2: // PHI_gs
80 R_s_matrix += matBHE_loc_R;
81
82 R_pi_s_matrix.block(2 * NPoints, 0, NPoints, NPoints) +=
83 -1.0 * matBHE_loc_R;
84
85 R_matrix.block(2 * NPoints, 2 * NPoints, NPoints,
86 NPoints) += matBHE_loc_R; // K_ig
87 return;
88 default:
90 "BHE_CXA::assembleRMatrices: unknown index {:d} "
91 "out of range.",
92 idx_bhe_unknowns);
93 }
94 }
95
96 std::array<double, number_of_unknowns> crossSectionAreas(
97 ParameterLib::SpatialPosition const& pos) const
98 {
99 double const D = sampleStrictPositive(borehole_geometry.diameter, 0.0,
100 pos, "borehole_diameter");
101 double const borehole_area = Pipe::circleArea(D);
103 checkedGroutArea(borehole_area, _pipes.outer_pipe.outsideArea(),
104 pos)};
105 }
106
107private:
108 void assignVelocities(double inner_vel, double annulus_vel) override
109 {
110 // CXA: unknown 0 = annulus (inflow), unknown 1 = inner pipe (outflow).
111 // velocity_inner stores the velocity for unknown 0, so it must
112 // receive the annulus velocity here.
113 velocity_inner = annulus_vel;
114 velocity_annulus = inner_vel;
115 }
116
117 std::vector<double> getThermalResistances(double const& R_gs,
118 double const& R_ff,
119 double const& R_fg) const override
120 {
121 return {R_fg, R_ff, R_gs};
122 }
123};
124} // namespace BHE
125} // namespace HeatTransportBHE
126} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:10
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:51
FlowAndTemperatureControl const flowAndTemperatureControl
Definition BHECommon.h:53
std::array< double, number_of_unknowns > crossSectionAreas(ParameterLib::SpatialPosition const &pos) const
Definition BHE_CXA.h:96
std::vector< double > getThermalResistances(double const &R_gs, double const &R_ff, double const &R_fg) const override
Definition BHE_CXA.h:117
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:22
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:46
void assignVelocities(double inner_vel, double annulus_vel) override
Definition BHE_CXA.h:108
double sampleStrictPositive(ParameterLib::Parameter< double > const &param, double const t, ParameterLib::SpatialPosition const &pos, std::string_view const param_role)
double checkedGroutArea(double const borehole_area_fraction, double const pipe_outside_area, ParameterLib::SpatialPosition const &pos)
std::variant< InflowTemperature, Power, BuildingPower, BuildingPowerHotWaterActiveCooling, BuildingPowerHotWaterPassiveCooling, BuildingPowerHotWater, BuildingPowerActiveCooling, BuildingPowerPassiveCooling, ActiveCooling > FlowAndTemperatureControl
static double circleArea(double const d)
Definition Pipe.h:46