28 _pipes.outer_pipe.area() -
_pipes.inner_pipe.outsideArea();
31std::array<double, BHECommonCoaxial::number_of_unknowns>
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;
40 return {{ rho_r * specific_heat_capacity,
41 rho_r * specific_heat_capacity,
42 (1.0 - porosity_g) * rho_g * heat_cap_g}};
46 double const current_time)
49 visit([&](
auto const& control) {
return control(T_out, current_time); },
52 return values.temperature;
54std::array<double, BHECommonCoaxial::number_of_unknowns>
58 double const lambda_r =
refrigerant.thermal_conductivity;
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;
71 (lambda_r + rho_r * Cp_r * alpha_L * std::abs(v[0])),
73 (lambda_r + rho_r * Cp_r * alpha_L * std::abs(v[1])),
75 (1.0 - porosity_g) * lambda_g}};
78std::array<Eigen::Vector3d, BHECommonCoaxial::number_of_unknowns>
84 double const Cp_r =
refrigerant.specific_heat_capacity;
88 rho_r * Cp_r * std::abs(v[0]) * elem_direction,
90 -rho_r * Cp_r * std::abs(v[1]) * elem_direction,
96 double const Nu_inner_pipe,
double const Nu_annulus_pipe,
97 int const section_index)
const
114 double const R_gs = R.grout_soil;
117 double const R_ff = R_advective.inner_pipe_coaxial + R_advective.a_annulus +
118 R_conductive.inner_pipe_coaxial;
120 R_advective.b_annulus + R_conductive.annulus + R.conductive_b;
125std::array<std::pair<std::size_t ,
int >, 2>
127 std::size_t
const top_node_id,
129 int const in_component_id)
131 return {std::make_pair(top_node_id, in_component_id),
132 std::make_pair(top_node_id, in_component_id + 1)};
136 std::array<std::pair<std::size_t ,
int >, 2>>
138 std::size_t
const bottom_node_id,
int const in_component_id,
139 int const out_component_id)
141 return {{std::make_pair(bottom_node_id, in_component_id),
142 std::make_pair(bottom_node_id, out_component_id)}};
160 tm_flow_annulus.nusselt_number, i);
std::vector< double > calcThermalResistances(double const Nu_inner_pipe, double const Nu_annulus_pipe, int const section_index=0) const
double updateFlowRateAndTemperature(double T_out, double current_time)
BHECommonCoaxial(BoreholeGeometry const &borehole, RefrigerantProperties const &refrigerant, GroutParameters const &grout, FlowAndTemperatureControl const &flowAndTemperatureControl, PipeConfigurationCoaxial const &pipes, bool const use_python_bcs)
void updateHeatTransferCoefficients(double const flow_rate)
std::array< double, number_of_unknowns > pipeHeatCapacities() const
std::array< Eigen::Vector3d, number_of_unknowns > pipeAdvectionVectors(Eigen::Vector3d const &, int const section_index=0) const
virtual void assignVelocities(double inner_vel, double annulus_vel)=0
std::array< double, number_of_unknowns > pipeHeatConductions(int const section_index=0) const
double cross_section_area_annulus
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)
double cross_section_area_inner_pipe
std::array< double, 2 > velocities() const
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)
virtual std::vector< double > getThermalResistances(double const &R_gs, double const &R_ff, double const &R_fg) const =0
PipeConfigurationCoaxial const _pipes
bool const use_python_bcs
RefrigerantProperties const refrigerant
void recomputeSectionalResistances(Fn &&calcForSection)
Recompute _sectional_thermal_resistances for all sections.
GroutParameters const grout
BHECommon(BoreholeGeometry const &borehole_geometry_, RefrigerantProperties const &refrigerant_, GroutParameters const &grout_, FlowAndTemperatureControl const &flowAndTemperatureControl_, bool const use_python_bcs_)
FlowAndTemperatureControl const flowAndTemperatureControl
BoreholeGeometry const borehole_geometry
PipeWallThermalResistanceCoaxial calculatePipeWallThermalResistance(Pipe const &inner_pipe, Pipe const &outer_pipe)
ThermoMechanicalFlowProperties calculateThermoMechanicalFlowPropertiesAnnulus(Pipe const &inner_pipe, Pipe const &outer_pipe, double const length, RefrigerantProperties const &fluid, double const flow_rate)
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)
std::variant< InflowTemperature, Power, BuildingPower, BuildingPowerHotWaterActiveCooling, BuildingPowerHotWaterPassiveCooling, BuildingPowerHotWater, BuildingPowerActiveCooling, BuildingPowerPassiveCooling, ActiveCooling > FlowAndTemperatureControl
ThermoMechanicalFlowProperties calculateThermoMechanicalFlowPropertiesPipe(Pipe const &pipe, double const length, RefrigerantProperties const &fluid, double const flow_rate)