OGS
ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial Class Referenceabstract

Detailed Description

Definition at line 20 of file BHECommonCoaxial.h.

#include <BHECommonCoaxial.h>

Inheritance diagram for ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial:
[legend]
Collaboration diagram for ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial:
[legend]

Public Member Functions

 BHECommonCoaxial (BoreholeGeometry const &borehole, RefrigerantProperties const &refrigerant, GroutParameters const &grout, FlowAndTemperatureControl const &flowAndTemperatureControl, PipeConfigurationCoaxial const &pipes, bool const use_python_bcs)
double updateFlowRateAndTemperature (double T_out, double current_time)
std::vector< double > calcThermalResistances (double const Nu_inner_pipe, double const Nu_annulus_pipe, int const section_index=0) const
std::array< double, number_of_unknownspipeHeatCapacities () const
std::array< double, number_of_unknownspipeHeatConductions (int const section_index=0) const
std::array< Eigen::Vector3d, number_of_unknownspipeAdvectionVectors (Eigen::Vector3d const &, int const section_index=0) const
void updateHeatTransferCoefficients (double const flow_rate)
Public Member Functions inherited from ProcessLib::HeatTransportBHE::BHE::BHECommon
 BHECommon (BoreholeGeometry const &borehole_geometry_, RefrigerantProperties const &refrigerant_, GroutParameters const &grout_, FlowAndTemperatureControl const &flowAndTemperatureControl_, bool const use_python_bcs_)
constexpr bool isPowerBC () const
int getNumberOfSections () const
 Get number of sections in the borehole geometry.
std::vector< double > const & getSectionBoundaries () const
 Get section boundaries (cumulative distance from wellhead).
double thermalResistanceAtSection (int const unknown_index, int const section_index) const
 Get thermal resistance for a specific section and unknown.

Static Public Member Functions

static std::array< std::pair< std::size_t, int >, 2 > getBHEInflowDirichletBCNodesAndComponents (std::size_t const top_node_id, std::size_t const, int const in_component_id)
static std::optional< std::array< std::pair< std::size_t, int >, 2 > > getBHEBottomDirichletBCNodesAndComponents (std::size_t const bottom_node_id, int const in_component_id, int const out_component_id)

Static Public Attributes

static constexpr int number_of_unknowns = 3
static constexpr int number_of_grout_zones = 1
static constexpr std::pair< int, int > inflow_outflow_bc_component_ids []

Protected Member Functions

std::array< double, 2 > velocities () const
virtual std::vector< double > getThermalResistances (double const &R_gs, double const &R_ff, double const &R_fg) const =0
Protected Member Functions inherited from ProcessLib::HeatTransportBHE::BHE::BHECommon
template<typename Fn>
void recomputeSectionalResistances (Fn &&calcForSection)
 Recompute _sectional_thermal_resistances for all sections.
double getClampedFlowVelocity (int const section_index) const
 Get velocity for a section, clamping to last section if index exceeds the number of velocity entries. Returns 0 when empty.
std::vector< double > const & getThermalResistancesAtSection (int const section_index) const
 Get the thermal resistance vector for a given section.

Protected Attributes

PipeConfigurationCoaxial const _pipes
double cross_section_area_inner_pipe
double cross_section_area_annulus
Protected Attributes inherited from ProcessLib::HeatTransportBHE::BHE::BHECommon
std::vector< double > _flow_velocities
std::vector< std::vector< double > > _sectional_thermal_resistances

Private Member Functions

virtual void assignVelocities (double inner_vel, double annulus_vel)=0

Additional Inherited Members

Public Attributes inherited from ProcessLib::HeatTransportBHE::BHE::BHECommon
BoreholeGeometry const borehole_geometry
RefrigerantProperties const refrigerant
GroutParameters const grout
FlowAndTemperatureControl const flowAndTemperatureControl
bool const use_python_bcs

Constructor & Destructor Documentation

◆ BHECommonCoaxial()

ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::BHECommonCoaxial ( BoreholeGeometry const & borehole,
RefrigerantProperties const & refrigerant,
GroutParameters const & grout,
FlowAndTemperatureControl const & flowAndTemperatureControl,
PipeConfigurationCoaxial const & pipes,
bool const use_python_bcs )

Definition at line 15 of file BHECommonCoaxial.cpp.

24 _pipes(pipes)
25{
26 cross_section_area_inner_pipe = _pipes.inner_pipe.area();
28 _pipes.outer_pipe.area() - _pipes.inner_pipe.outsideArea();
29}
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

References ProcessLib::HeatTransportBHE::BHE::BHECommon::BHECommon(), _pipes, cross_section_area_annulus, cross_section_area_inner_pipe, ProcessLib::HeatTransportBHE::BHE::BHECommon::flowAndTemperatureControl, ProcessLib::HeatTransportBHE::BHE::BHECommon::grout, ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant, and ProcessLib::HeatTransportBHE::BHE::BHECommon::use_python_bcs.

Referenced by ProcessLib::HeatTransportBHE::BHE::BHE_CXA::BHE_CXA(), and ProcessLib::HeatTransportBHE::BHE::BHE_CXC::BHE_CXC().

Member Function Documentation

◆ assignVelocities()

virtual void ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::assignVelocities ( double inner_vel,
double annulus_vel )
privatepure virtual

Assigns _flow_velocities from the physical channel velocities. Subclasses encode which channel maps to which unknown.

Implemented in ProcessLib::HeatTransportBHE::BHE::BHE_CXA, and ProcessLib::HeatTransportBHE::BHE::BHE_CXC.

Referenced by updateHeatTransferCoefficients().

◆ calcThermalResistances()

std::vector< double > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::calcThermalResistances ( double const Nu_inner_pipe,
double const Nu_annulus_pipe,
int const section_index = 0 ) const

Definition at line 95 of file BHECommonCoaxial.cpp.

98{
99 // thermal resistances due to advective flow of refrigerant in the pipes
100 auto const R_advective = calculateAdvectiveThermalResistance(
101 _pipes.inner_pipe, _pipes.outer_pipe, refrigerant, Nu_inner_pipe,
102 Nu_annulus_pipe);
103
104 // thermal resistance due to thermal conductivity of the pipe wall material
105 auto const R_conductive = calculatePipeWallThermalResistance(
106 _pipes.inner_pipe, _pipes.outer_pipe);
107
108 // thermal resistance due to the grout transition and grout-soil exchange.
110 _pipes.outer_pipe, grout,
111 borehole_geometry.sections.diameterAtSection(section_index));
112
113 // thermal resistance due to grout-soil exchange
114 double const R_gs = R.grout_soil;
115
116 // Eq. 56 and 57
117 double const R_ff = R_advective.inner_pipe_coaxial + R_advective.a_annulus +
118 R_conductive.inner_pipe_coaxial;
119 double const R_fg =
120 R_advective.b_annulus + R_conductive.annulus + R.conductive_b;
121
122 return getThermalResistances(R_gs, R_ff, R_fg);
123}
virtual std::vector< double > getThermalResistances(double const &R_gs, double const &R_ff, double const &R_fg) const =0
PipeWallThermalResistanceCoaxial calculatePipeWallThermalResistance(Pipe const &inner_pipe, Pipe const &outer_pipe)
AdvectiveThermalResistanceCoaxial calculateAdvectiveThermalResistance(Pipe const &inner_pipe, Pipe const &outer_pipe, RefrigerantProperties const &fluid, double const Nu_inner_pipe, double const Nu_annulus)
GroutAndGroutSoilExchangeThermalResistanceCoaxial calculateGroutAndGroutSoilExchangeThermalResistance(Pipe const &outer_pipe, GroutParameters const &grout_parameters, double const borehole_diameter)

References _pipes, ProcessLib::HeatTransportBHE::BHE::BHECommon::borehole_geometry, ProcessLib::HeatTransportBHE::BHE::calculateAdvectiveThermalResistance(), ProcessLib::HeatTransportBHE::BHE::calculateGroutAndGroutSoilExchangeThermalResistance(), ProcessLib::HeatTransportBHE::BHE::calculatePipeWallThermalResistance(), getThermalResistances(), ProcessLib::HeatTransportBHE::BHE::BHECommon::grout, and ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant.

Referenced by updateHeatTransferCoefficients().

◆ getBHEBottomDirichletBCNodesAndComponents()

std::optional< std::array< std::pair< std::size_t, int >, 2 > > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::getBHEBottomDirichletBCNodesAndComponents ( std::size_t const bottom_node_id,
int const in_component_id,
int const out_component_id )
static

Definition at line 137 of file BHECommonCoaxial.cpp.

140{
141 return {{std::make_pair(bottom_node_id, in_component_id),
142 std::make_pair(bottom_node_id, out_component_id)}};
143}

◆ getBHEInflowDirichletBCNodesAndComponents()

std::array< std::pair< std::size_t, int >, 2 > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::getBHEInflowDirichletBCNodesAndComponents ( std::size_t const top_node_id,
std::size_t const ,
int const in_component_id )
static

Definition at line 126 of file BHECommonCoaxial.cpp.

130{
131 return {std::make_pair(top_node_id, in_component_id),
132 std::make_pair(top_node_id, in_component_id + 1)};
133}

◆ getThermalResistances()

virtual std::vector< double > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::getThermalResistances ( double const & R_gs,
double const & R_ff,
double const & R_fg ) const
protectedpure virtual

◆ pipeAdvectionVectors()

std::array< Eigen::Vector3d, BHECommonCoaxial::number_of_unknowns > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::pipeAdvectionVectors ( Eigen::Vector3d const & elem_direction,
int const section_index = 0 ) const

Definition at line 79 of file BHECommonCoaxial.cpp.

81{
82 // Pipe dimensions are constant; velocity does not vary by section.
83 double const rho_r = refrigerant.density;
84 double const Cp_r = refrigerant.specific_heat_capacity;
85 auto const v = velocities();
86
87 return {// pipe i, Eq. 26 and Eq. 23
88 rho_r * Cp_r * std::abs(v[0]) * elem_direction,
89 // pipe o, Eq. 27 and Eq. 24
90 -rho_r * Cp_r * std::abs(v[1]) * elem_direction,
91 // grout g, Eq. 28 and Eq. 25
92 {0, 0, 0}};
93}

References ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant, and velocities().

◆ pipeHeatCapacities()

std::array< double, BHECommonCoaxial::number_of_unknowns > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::pipeHeatCapacities ( ) const

Definition at line 32 of file BHECommonCoaxial.cpp.

33{
34 double const rho_r = refrigerant.density;
35 double const specific_heat_capacity = refrigerant.specific_heat_capacity;
36 double const rho_g = grout.rho_g;
37 double const porosity_g = grout.porosity_g;
38 double const heat_cap_g = grout.heat_cap_g;
39
40 return {{/*i*/ rho_r * specific_heat_capacity,
41 /*o*/ rho_r * specific_heat_capacity,
42 /*g*/ (1.0 - porosity_g) * rho_g * heat_cap_g}};
43}

References ProcessLib::HeatTransportBHE::BHE::BHECommon::grout, and ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant.

◆ pipeHeatConductions()

std::array< double, BHECommonCoaxial::number_of_unknowns > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::pipeHeatConductions ( int const section_index = 0) const

Definition at line 55 of file BHECommonCoaxial.cpp.

56{
57 // Pipe dimensions are constant; velocity does not vary by section.
58 double const lambda_r = refrigerant.thermal_conductivity;
59 double const rho_r = refrigerant.density;
60 double const Cp_r = refrigerant.specific_heat_capacity;
61 double const alpha_L = _pipes.longitudinal_dispersion_length;
62 double const porosity_g = grout.porosity_g;
63 double const lambda_g = grout.lambda_g;
64
65 auto v = velocities();
66 // Here we calculate the laplace coefficients in the governing
67 // equations of BHE. These governing equations can be found in
68 // 1) Diersch (2013) FEFLOW book on page 952, M.120-122, or
69 // 2) Diersch (2011) Comp & Geosci 37:1122-1135, Eq. 26-28, 23-25
70 return {{// pipe i, Eq. 26 and Eq. 23
71 (lambda_r + rho_r * Cp_r * alpha_L * std::abs(v[0])),
72 // pipe o, Eq. 27 and Eq. 24
73 (lambda_r + rho_r * Cp_r * alpha_L * std::abs(v[1])),
74 // pipe g, Eq. 28 and Eq. 25
75 (1.0 - porosity_g) * lambda_g}};
76}

References _pipes, ProcessLib::HeatTransportBHE::BHE::BHECommon::grout, ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant, and velocities().

◆ updateFlowRateAndTemperature()

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::updateFlowRateAndTemperature ( double T_out,
double current_time )

Definition at line 45 of file BHECommonCoaxial.cpp.

47{
48 auto values =
49 visit([&](auto const& control) { return control(T_out, current_time); },
51 updateHeatTransferCoefficients(values.flow_rate);
52 return values.temperature;
53}

References ProcessLib::HeatTransportBHE::BHE::BHECommon::flowAndTemperatureControl, and updateHeatTransferCoefficients().

◆ updateHeatTransferCoefficients()

void ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::updateHeatTransferCoefficients ( double const flow_rate)

Definition at line 145 of file BHECommonCoaxial.cpp.

146{
147 auto const tm_flow_inner = calculateThermoMechanicalFlowPropertiesPipe(
148 _pipes.inner_pipe, borehole_geometry.length, refrigerant, flow_rate);
149
150 auto const tm_flow_annulus = calculateThermoMechanicalFlowPropertiesAnnulus(
151 _pipes.inner_pipe, _pipes.outer_pipe, borehole_geometry.length,
152 refrigerant, flow_rate);
153
154 assignVelocities(tm_flow_inner.velocity, tm_flow_annulus.velocity);
155
157 [&](int i)
158 {
159 return calcThermalResistances(tm_flow_inner.nusselt_number,
160 tm_flow_annulus.nusselt_number, i);
161 });
162}
std::vector< double > calcThermalResistances(double const Nu_inner_pipe, double const Nu_annulus_pipe, int const section_index=0) const
virtual void assignVelocities(double inner_vel, double annulus_vel)=0
void recomputeSectionalResistances(Fn &&calcForSection)
Recompute _sectional_thermal_resistances for all sections.
Definition BHECommon.h:117
ThermoMechanicalFlowProperties calculateThermoMechanicalFlowPropertiesAnnulus(Pipe const &inner_pipe, Pipe const &outer_pipe, double const length, RefrigerantProperties const &fluid, double const flow_rate)
ThermoMechanicalFlowProperties calculateThermoMechanicalFlowPropertiesPipe(Pipe const &pipe, double const length, RefrigerantProperties const &fluid, double const flow_rate)

References _pipes, assignVelocities(), ProcessLib::HeatTransportBHE::BHE::BHECommon::borehole_geometry, calcThermalResistances(), ProcessLib::HeatTransportBHE::BHE::calculateThermoMechanicalFlowPropertiesAnnulus(), ProcessLib::HeatTransportBHE::BHE::calculateThermoMechanicalFlowPropertiesPipe(), ProcessLib::HeatTransportBHE::BHE::BHECommon::recomputeSectionalResistances(), and ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant.

Referenced by ProcessLib::HeatTransportBHE::BHE::BHE_CXA::BHE_CXA(), ProcessLib::HeatTransportBHE::BHE::BHE_CXC::BHE_CXC(), and updateFlowRateAndTemperature().

◆ velocities()

std::array< double, 2 > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::velocities ( ) const
inlineprotected

Returns fluid velocities indexed by unknown: {v_for_unknown_0, v_for_unknown_1}. The mapping from physical channels (inner pipe / annulus) to unknowns differs between CXA and CXC and is set once per flow-rate update via assignVelocities().

Definition at line 75 of file BHECommonCoaxial.h.

76 {
77 return {_flow_velocities[0], _flow_velocities[1]};
78 }

References ProcessLib::HeatTransportBHE::BHE::BHECommon::_flow_velocities.

Referenced by pipeAdvectionVectors(), and pipeHeatConductions().

Member Data Documentation

◆ _pipes

◆ cross_section_area_annulus

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::cross_section_area_annulus
protected

◆ cross_section_area_inner_pipe

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::cross_section_area_inner_pipe
protected

◆ inflow_outflow_bc_component_ids

std::pair<int, int> ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::inflow_outflow_bc_component_ids[]
staticconstexpr
Initial value:
= {
{0, 1}}

Definition at line 42 of file BHECommonCoaxial.h.

42 {
43 {0, 1}};

◆ number_of_grout_zones

int ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::number_of_grout_zones = 1
staticconstexpr

Definition at line 31 of file BHECommonCoaxial.h.

◆ number_of_unknowns

int ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::number_of_unknowns = 3
staticconstexpr

Definition at line 30 of file BHECommonCoaxial.h.


The documentation for this class was generated from the following files: