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

Detailed Description

Definition at line 26 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)
std::array< double, number_of_flow_legsflowLegs () const
double updateFlowRateAndTemperature (double T_out, double current_time)
std::vector< double > calcThermalResistances (double const Nu_inner_pipe, double const Nu_annulus_pipe, ParameterLib::SpatialPosition const &pos) const
std::vector< double > thermalResistances (ParameterLib::SpatialPosition const &pos) const
std::array< double, number_of_unknownspipeHeatCapacities () const
std::array< double, number_of_unknownspipeHeatConductions () const
std::array< Eigen::Vector3d, number_of_unknownspipeAdvectionVectors (Eigen::Vector3d const &elem_direction) 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

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 int number_of_flow_legs = 2
static constexpr std::pair< int, int > inflow_outflow_bc_component_ids []

Protected Member Functions

virtual std::vector< double > getThermalResistances (double const &R_gs, double const &R_ff, double const &R_fg) const =0

Protected Attributes

PipeConfigurationCoaxial const _pipes
double cross_section_area_inner_pipe
double cross_section_area_annulus
double velocity_inner = 0.0
double velocity_annulus = 0.0
double cached_nu_inner = 0.0
double cached_nu_annulus = 0.0

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 17 of file BHECommonCoaxial.cpp.

26 _pipes(pipes)
27{
28 cross_section_area_inner_pipe = _pipes.inner_pipe.area();
30 _pipes.outer_pipe.area() - _pipes.inner_pipe.outsideArea();
31}
RefrigerantProperties const refrigerant
Definition BHECommon.h:51
BHECommon(BoreholeGeometry const &borehole_geometry_, RefrigerantProperties const &refrigerant_, GroutParameters const &grout_, FlowAndTemperatureControl const &flowAndTemperatureControl_, bool const use_python_bcs_)
Definition BHECommon.h:37
FlowAndTemperatureControl const flowAndTemperatureControl
Definition BHECommon.h:53

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 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,
ParameterLib::SpatialPosition const & pos ) const

Definition at line 87 of file BHECommonCoaxial.cpp.

90{
91 // thermal resistances due to advective flow of refrigerant in the pipes
92 auto const R_advective = calculateAdvectiveThermalResistance(
93 _pipes.inner_pipe, _pipes.outer_pipe, refrigerant, Nu_inner_pipe,
94 Nu_annulus_pipe);
95
96 // thermal resistance due to thermal conductivity of the pipe wall material
97 // t=0.0: borehole properties are physically time-invariant; genuinely
98 // time-varying parameter types are rejected in createPipe.
99 double const lambda_p_inner =
100 sampleStrictPositive(_pipes.inner_pipe.wall_thermal_conductivity, 0.0,
101 pos, "wall_thermal_conductivity (inner pipe)");
102 double const lambda_p_outer =
103 sampleStrictPositive(_pipes.outer_pipe.wall_thermal_conductivity, 0.0,
104 pos, "wall_thermal_conductivity (outer pipe)");
105 auto const R_conductive = calculatePipeWallThermalResistance(
106 _pipes.inner_pipe, lambda_p_inner, _pipes.outer_pipe, lambda_p_outer);
107
108 // thermal resistance due to the grout transition and grout-soil exchange.
109 double const D = sampleStrictPositive(borehole_geometry.diameter, 0.0, pos,
110 "borehole_diameter");
111 checkBoreholeVsPipeDiameter(D, _pipes.outer_pipe.outsideDiameter(), pos,
112 "coaxial grout resistance");
114 _pipes.outer_pipe, grout, D);
115
116 double const R_gs = R.grout_soil;
117
118 double const R_ff = R_advective.inner_pipe_coaxial + R_advective.a_annulus +
119 R_conductive.inner_pipe_coaxial;
120 double const R_fg =
121 R_advective.b_annulus + R_conductive.annulus + R.conductive_b;
122
123 return getThermalResistances(R_gs, R_ff, R_fg);
124}
virtual std::vector< double > getThermalResistances(double const &R_gs, double const &R_ff, double const &R_fg) const =0
AdvectiveThermalResistanceCoaxial calculateAdvectiveThermalResistance(Pipe const &inner_pipe, Pipe const &outer_pipe, RefrigerantProperties const &fluid, double const Nu_inner_pipe, double const Nu_annulus)
double sampleStrictPositive(ParameterLib::Parameter< double > const &param, double const t, ParameterLib::SpatialPosition const &pos, std::string_view const param_role)
PipeWallThermalResistanceCoaxial calculatePipeWallThermalResistance(Pipe const &inner_pipe, double const lambda_p_inner, Pipe const &outer_pipe, double const lambda_p_outer)
void checkBoreholeVsPipeDiameter(double const D, double const min_diameter, ParameterLib::SpatialPosition const &pos, std::string_view const context)
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(), ProcessLib::HeatTransportBHE::BHE::checkBoreholeVsPipeDiameter(), getThermalResistances(), ProcessLib::HeatTransportBHE::BHE::BHECommon::grout, ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant, and ProcessLib::HeatTransportBHE::BHE::sampleStrictPositive().

Referenced by thermalResistances().

◆ flowLegs()

std::array< double, number_of_flow_legs > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::flowLegs ( ) const
inline

Signed fluid velocity per flow leg. Positive = flow along +elem_direction; negative = against it. Leg ordering matches the BHE unknowns: { unknown 0 (inflow channel), unknown 1 (outflow channel) }; the physical-channel mapping (inner pipe vs annulus) is set per subclass via assignVelocities().

Definition at line 45 of file BHECommonCoaxial.h.

References velocity_annulus, and velocity_inner.

Referenced by pipeAdvectionVectors(), and pipeHeatConductions().

◆ 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 143 of file BHECommonCoaxial.cpp.

146{
147 return {{std::make_pair(bottom_node_id, in_component_id),
148 std::make_pair(bottom_node_id, out_component_id)}};
149}

◆ 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 133 of file BHECommonCoaxial.cpp.

137{
138 return {std::make_pair(top_node_id, in_component_id),
139 std::make_pair(top_node_id, in_component_id + 1)};
140}

◆ 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) const

Definition at line 74 of file BHECommonCoaxial.cpp.

76{
77 double const rho_r = refrigerant.density;
78 double const Cp_r = refrigerant.specific_heat_capacity;
79
80 auto const legs = flowLegs();
81 auto leg_adv = [&](double const v_signed) -> Eigen::Vector3d
82 { return rho_r * Cp_r * v_signed * elem_direction; };
83
84 return {leg_adv(legs[0]), leg_adv(legs[1]), {0, 0, 0}};
85}
std::array< double, number_of_flow_legs > flowLegs() const

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

◆ pipeHeatCapacities()

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

Definition at line 34 of file BHECommonCoaxial.cpp.

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

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 ( ) const

Definition at line 58 of file BHECommonCoaxial.cpp.

59{
60 double const lambda_r = refrigerant.thermal_conductivity;
61 double const rho_r = refrigerant.density;
62 double const Cp_r = refrigerant.specific_heat_capacity;
63 double const alpha_L = _pipes.longitudinal_dispersion_length;
64 double const porosity_g = grout.porosity_g;
65 double const lambda_g = grout.lambda_g;
66
67 auto const legs = flowLegs();
68 return {{(lambda_r + rho_r * Cp_r * alpha_L * std::abs(legs[0])),
69 (lambda_r + rho_r * Cp_r * alpha_L * std::abs(legs[1])),
70 (1.0 - porosity_g) * lambda_g}};
71}

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

◆ thermalResistances()

std::vector< double > ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::thermalResistances ( ParameterLib::SpatialPosition const & pos) const

Return the full vector of thermal resistances for the element at pos, computed once using the cached Nusselt numbers. Intended to be called once per element by the assembler so that the resistance computation is not repeated per unknown and per integration point.

Definition at line 126 of file BHECommonCoaxial.cpp.

128{
130}
std::vector< double > calcThermalResistances(double const Nu_inner_pipe, double const Nu_annulus_pipe, ParameterLib::SpatialPosition const &pos) const

References cached_nu_annulus, cached_nu_inner, and calcThermalResistances().

◆ updateFlowRateAndTemperature()

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

Definition at line 47 of file BHECommonCoaxial.cpp.

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

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

◆ updateHeatTransferCoefficients()

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

Definition at line 151 of file BHECommonCoaxial.cpp.

152{
153 auto const tm_flow_inner = calculateThermoMechanicalFlowPropertiesPipe(
154 _pipes.inner_pipe, borehole_geometry.length, refrigerant, flow_rate);
155
156 auto const tm_flow_annulus = calculateThermoMechanicalFlowPropertiesAnnulus(
157 _pipes.inner_pipe, _pipes.outer_pipe, borehole_geometry.length,
158 refrigerant, flow_rate);
159
160 cached_nu_inner = tm_flow_inner.nusselt_number;
161 cached_nu_annulus = tm_flow_annulus.nusselt_number;
162 assignVelocities(tm_flow_inner.velocity, tm_flow_annulus.velocity);
163}
virtual void assignVelocities(double inner_vel, double annulus_vel)=0
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, cached_nu_annulus, cached_nu_inner, ProcessLib::HeatTransportBHE::BHE::calculateThermoMechanicalFlowPropertiesAnnulus(), ProcessLib::HeatTransportBHE::BHE::calculateThermoMechanicalFlowPropertiesPipe(), and ProcessLib::HeatTransportBHE::BHE::BHECommon::refrigerant.

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

Member Data Documentation

◆ _pipes

◆ cached_nu_annulus

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::cached_nu_annulus = 0.0
protected

Definition at line 103 of file BHECommonCoaxial.h.

Referenced by thermalResistances(), and updateHeatTransferCoefficients().

◆ cached_nu_inner

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::cached_nu_inner = 0.0
protected

Definition at line 102 of file BHECommonCoaxial.h.

Referenced by thermalResistances(), and updateHeatTransferCoefficients().

◆ 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 66 of file BHECommonCoaxial.h.

66 {
67 {0, 1}};

◆ number_of_flow_legs

int ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::number_of_flow_legs = 2
staticconstexpr

Definition at line 38 of file BHECommonCoaxial.h.

◆ number_of_grout_zones

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

Definition at line 37 of file BHECommonCoaxial.h.

◆ number_of_unknowns

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

Definition at line 36 of file BHECommonCoaxial.h.

◆ velocity_annulus

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::velocity_annulus = 0.0
protected

◆ velocity_inner

double ProcessLib::HeatTransportBHE::BHE::BHECommonCoaxial::velocity_inner = 0.0
protected

Fluid velocities indexed by unknown: velocity_inner is the velocity carried on unknown 0 (the inflow channel), and velocity_annulus is the velocity carried on unknown 1 (the outflow channel). 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(). flowLegs() returns the signed per-leg velocities derived from these magnitudes.

Definition at line 100 of file BHECommonCoaxial.h.

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


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