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"
10#include "BaseLib/Error.h"
12
13namespace ProcessLib
14{
15namespace HeatTransportBHE
16{
17namespace BHE
18{
32class BHE_CXC final : public BHECommonCoaxial
33{
34public:
35 BHE_CXC(BoreholeGeometry const& borehole,
39 PipeConfigurationCoaxial const& pipes,
40 bool const use_python_bcs)
41 : BHECommonCoaxial{borehole, refrigerant,
43 pipes, use_python_bcs}
44 {
45 // Initialize thermal resistances.
46 auto values = visit(
47 [&](auto const& control)
48 {
49 return control(refrigerant.reference_temperature,
50 0. /* initial time */);
51 },
53 updateHeatTransferCoefficients(values.flow_rate);
54 }
55
56 template <int NPoints, typename SingleUnknownMatrixType,
57 typename RMatrixType, typename RPiSMatrixType,
58 typename RSMatrixType>
59 static void assembleRMatrices(
60 int const idx_bhe_unknowns,
61 Eigen::MatrixBase<SingleUnknownMatrixType> const& matBHE_loc_R,
62 Eigen::MatrixBase<RMatrixType>& R_matrix,
63 Eigen::MatrixBase<RPiSMatrixType>& R_pi_s_matrix,
64 Eigen::MatrixBase<RSMatrixType>& R_s_matrix)
65 {
66 switch (idx_bhe_unknowns)
67 {
68 case 0: // 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_i
76 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
77 1.0 * matBHE_loc_R; // K_o
78 return;
79 case 1: // PHI_fog
80 R_matrix.block(NPoints, 2 * NPoints, NPoints, NPoints) +=
81 -1.0 * matBHE_loc_R;
82 R_matrix.block(2 * NPoints, NPoints, NPoints, NPoints) +=
83 -1.0 * matBHE_loc_R;
84
85 R_matrix.block(NPoints, NPoints, NPoints, NPoints) +=
86 1.0 * matBHE_loc_R; // K_o
87 R_matrix.block(2 * NPoints,
88 2 * NPoints,
89 NPoints,
90 NPoints) += 1.0 * matBHE_loc_R; // K_og
91 return;
92 case 2: // PHI_gs
93 R_s_matrix += matBHE_loc_R;
94
95 R_pi_s_matrix.block(2 * NPoints, 0, NPoints, NPoints) +=
96 -1.0 * matBHE_loc_R;
97
98 R_matrix.block(2 * NPoints, 2 * NPoints, NPoints,
99 NPoints) += matBHE_loc_R; // K_og
100 return;
101 default:
102 OGS_FATAL(
103 "BHE_CXC::assembleRMatrices: unknown index {:d} "
104 "out of range.",
105 idx_bhe_unknowns);
106 }
107 }
108
109 std::array<double, number_of_unknowns> crossSectionAreas(
110 ParameterLib::SpatialPosition const& pos) const
111 {
112 double const D = sampleStrictPositive(borehole_geometry.diameter, 0.0,
113 pos, "borehole_diameter");
114 double const borehole_area = Pipe::circleArea(D);
116 checkedGroutArea(borehole_area, _pipes.outer_pipe.outsideArea(),
117 pos)};
118 }
119
120private:
121 void assignVelocities(double inner_vel, double annulus_vel) override
122 {
123 // CXC: unknown 0 = inner pipe (inflow), unknown 1 = annulus (outflow)
124 velocity_inner = inner_vel;
125 velocity_annulus = annulus_vel;
126 }
127
128 std::vector<double> getThermalResistances(double const& R_gs,
129 double const& R_ff,
130 double const& R_fg) const override
131 {
132 return {R_ff, R_fg, R_gs};
133 }
134};
135} // namespace BHE
136} // namespace HeatTransportBHE
137} // 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::vector< double > getThermalResistances(double const &R_gs, double const &R_ff, double const &R_fg) const override
Definition BHE_CXC.h:128
void assignVelocities(double inner_vel, double annulus_vel) override
Definition BHE_CXC.h:121
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:59
std::array< double, number_of_unknowns > crossSectionAreas(ParameterLib::SpatialPosition const &pos) const
Definition BHE_CXC.h:109
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:35
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