diff --git a/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/borehole_heat_exchangers/borehole_heat_exchanger/pipes/inlet/t_diameter.md b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/borehole_heat_exchangers/borehole_heat_exchanger/pipes/inlet/t_diameter.md new file mode 100644 index 0000000000000000000000000000000000000000..8571befee150c3cbe92fc502b4785792c238dc41 --- /dev/null +++ b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/borehole_heat_exchangers/borehole_heat_exchanger/pipes/inlet/t_diameter.md @@ -0,0 +1 @@ +The diameter of the inlet pipe. diff --git a/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/borehole_heat_exchangers/borehole_heat_exchanger/pipes/inlet/t_radius.md b/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/borehole_heat_exchangers/borehole_heat_exchanger/pipes/inlet/t_radius.md deleted file mode 100644 index 6b81a97376fca2436c175007465ef50346e8c6af..0000000000000000000000000000000000000000 --- a/Documentation/ProjectFile/prj/processes/process/HEAT_TRANSPORT_BHE/borehole_heat_exchangers/borehole_heat_exchanger/pipes/inlet/t_radius.md +++ /dev/null @@ -1 +0,0 @@ -The radius of the inlet pipe. diff --git a/ProcessLib/HeatTransportBHE/BHE/BHE_1U.cpp b/ProcessLib/HeatTransportBHE/BHE/BHE_1U.cpp index 57bfd1c7a0f475d2a478921f4c40968a8d57733a..e25efcf53512bc33b16b907e568707cef5363fe6 100644 --- a/ProcessLib/HeatTransportBHE/BHE/BHE_1U.cpp +++ b/ProcessLib/HeatTransportBHE/BHE/BHE_1U.cpp @@ -12,6 +12,7 @@ #include <boost/math/constants/constants.hpp> #include "FlowAndTemperatureControl.h" #include "Physics.h" +#include "ThermoMechanicalFlowProperties.h" namespace ProcessLib { @@ -167,20 +168,12 @@ constexpr std::pair<int, int> BHE_1U::inflow_outflow_bc_component_ids[]; void BHE_1U::updateHeatTransferCoefficients(double const flow_rate) { - _flow_velocity = flow_rate / _pipes.inlet.area(); + auto const tm_flow_properties = calculateThermoMechanicalFlowPropertiesPipe( + _pipes.inlet, borehole_geometry.length, refrigerant, flow_rate); - double const Re = reynoldsNumber(std::abs(_flow_velocity), - _pipes.inlet.diameter, - refrigerant.dynamic_viscosity, - refrigerant.density); - double const Pr = prandtlNumber(refrigerant.dynamic_viscosity, - refrigerant.specific_heat_capacity, - refrigerant.thermal_conductivity); - - double const Nu = - nusseltNumber(Re, Pr, _pipes.inlet.diameter, borehole_geometry.length); - - _thermal_resistances = calcThermalResistances(Nu); + _flow_velocity = tm_flow_properties.velocity; + _thermal_resistances = + calcThermalResistances(tm_flow_properties.nusselt_number); } /// Nu is the Nusselt number. diff --git a/ProcessLib/HeatTransportBHE/BHE/BHE_1U.h b/ProcessLib/HeatTransportBHE/BHE/BHE_1U.h index 0063864dce70d4ae2547c45321ea5f5d21ad8c8f..482fbeae0587291d9bef7b63fe309573a118d35a 100644 --- a/ProcessLib/HeatTransportBHE/BHE/BHE_1U.h +++ b/ProcessLib/HeatTransportBHE/BHE/BHE_1U.h @@ -140,8 +140,8 @@ private: public: std::array<double, number_of_unknowns> const cross_section_areas = { - {_pipes.inlet.area(), _pipes.inlet.area(), - borehole_geometry.area() / 2 - _pipes.outlet.area(), + {_pipes.inlet.area(), _pipes.outlet.area(), + borehole_geometry.area() / 2 - _pipes.inlet.area(), borehole_geometry.area() / 2 - _pipes.outlet.area()}}; private: diff --git a/ProcessLib/HeatTransportBHE/BHE/Physics.h b/ProcessLib/HeatTransportBHE/BHE/Physics.h index 446543da84e625198a131991709079b91cb00d3a..8f5295e7fe94644ba734eba7b5e7b80cae4cb9a3 100644 --- a/ProcessLib/HeatTransportBHE/BHE/Physics.h +++ b/ProcessLib/HeatTransportBHE/BHE/Physics.h @@ -59,6 +59,43 @@ inline double nusseltNumber(double const reynolds_number, (std::pow(prandtl_number, 2.0 / 3.0) - 1.0)) * (1.0 + std::pow(pipe_diameter / pipe_length, 2.0 / 3.0)); } + +// Pipe aspect ratio is the pipe's diameter equivalent over pipe's length. +inline double nusseltNumberAnnulus(double const reynolds_number, + double const prandtl_number, + double const diameter_ratio, + double const pipe_aspect_ratio) +{ + if (reynolds_number < 2300.0) + { + return 3.66 + (4.0 - 0.102 / (diameter_ratio + 0.02)) * + std::pow(diameter_ratio, 0.04); + } + if (reynolds_number < 10000.0) + { + double const gamma = (reynolds_number - 2300) / (10000 - 2300); + + return (1.0 - gamma) * + (3.66 + (4.0 - 0.102 / (diameter_ratio + 0.02))) * + std::pow(diameter_ratio, 0.04) + + gamma * + ((0.0308 / 8.0 * 1.0e4 * prandtl_number) / + (1.0 + 12.7 * std::sqrt(0.0308 / 8.0) * + (std::pow(prandtl_number, 2.0 / 3.0) - 1.0)) * + (1.0 + std::pow(pipe_aspect_ratio, 2.0 / 3.0)) * + ((0.86 * std::pow(diameter_ratio, 0.84) + 1.0 - + 0.14 * std::pow(diameter_ratio, 0.6)) / + (1.0 + diameter_ratio))); + } + double const xi = std::pow(1.8 * std::log10(reynolds_number) - 1.5, -2.0); + return (xi / 8.0 * reynolds_number * prandtl_number) / + (1.0 + 12.7 * std::sqrt(xi / 8.0) * + (std::pow(prandtl_number, 2.0 / 3.0) - 1.0)) * + (1.0 + std::pow(pipe_aspect_ratio, 2.0 / 3.0)) * + ((0.86 * std::pow(diameter_ratio, 0.84) + 1.0 - + 0.14 * std::pow(diameter_ratio, 0.6)) / + (1.0 + diameter_ratio)); +} } // end of namespace BHE } // end of namespace HeatTransportBHE } // end of namespace ProcessLib diff --git a/ProcessLib/HeatTransportBHE/BHE/Pipe.cpp b/ProcessLib/HeatTransportBHE/BHE/Pipe.cpp index 11986ed325805fc17d74634492a5f9daf5bd0da5..15ff7e87645f5771535e81b4ed566091b83a412b 100644 --- a/ProcessLib/HeatTransportBHE/BHE/Pipe.cpp +++ b/ProcessLib/HeatTransportBHE/BHE/Pipe.cpp @@ -20,15 +20,15 @@ namespace BHE { Pipe createPipe(BaseLib::ConfigTree const& config) { - //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__borehole_heat_exchangers__borehole_heat_exchanger__pipes__inlet__radius} - const double radius = config.getConfigParameter<double>("radius"); + //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__borehole_heat_exchangers__borehole_heat_exchanger__pipes__inlet__diameter} + const double diameter = config.getConfigParameter<double>("diameter"); const double wall_thickness = //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__borehole_heat_exchangers__borehole_heat_exchanger__pipes__inlet__wall_thickness} config.getConfigParameter<double>("wall_thickness"); const double wall_thermal_conductivity = //! \ogs_file_param{prj__processes__process__HEAT_TRANSPORT_BHE__borehole_heat_exchangers__borehole_heat_exchanger__pipes__inlet__wall_thermal_conductivity} config.getConfigParameter<double>("wall_thermal_conductivity"); - return {radius, wall_thickness, wall_thermal_conductivity}; + return {diameter, wall_thickness, wall_thermal_conductivity}; } } // namespace BHE } // namespace HeatTransportBHE diff --git a/ProcessLib/HeatTransportBHE/BHE/Pipe.h b/ProcessLib/HeatTransportBHE/BHE/Pipe.h index 1eed3b501879818ac38405940ab68b375882c287..c35306fc18605a13301f10d8a29033242ecd296b 100644 --- a/ProcessLib/HeatTransportBHE/BHE/Pipe.h +++ b/ProcessLib/HeatTransportBHE/BHE/Pipe.h @@ -29,11 +29,20 @@ struct Pipe double const wall_thickness; double const wall_thermal_conductivity; + /// Area of the pipe's inside without the wall. double area() const { constexpr double pi = boost::math::constants::pi<double>(); return pi * diameter * diameter / 4; } + + /// Area of the pipe's outside including the wall thickness. + double outsideArea() const + { + constexpr double pi = boost::math::constants::pi<double>(); + double const d = diameter + 2 * wall_thickness; + return pi * d * d / 4; + } }; Pipe createPipe(BaseLib::ConfigTree const& config); diff --git a/ProcessLib/HeatTransportBHE/BHE/ThermoMechanicalFlowProperties.h b/ProcessLib/HeatTransportBHE/BHE/ThermoMechanicalFlowProperties.h index 1d2b2e0128e8a144a3cd0525955a1a764c82013b..043363a0fd53577be264a418a74cedaf5aff00b0 100644 --- a/ProcessLib/HeatTransportBHE/BHE/ThermoMechanicalFlowProperties.h +++ b/ProcessLib/HeatTransportBHE/BHE/ThermoMechanicalFlowProperties.h @@ -12,7 +12,7 @@ #pragma once #include "Physics.h" -#include "PipeParameters.h" +#include "Pipe.h" #include "RefrigerantProperties.h" namespace ProcessLib @@ -28,40 +28,46 @@ struct ThermoMechanicalFlowProperties }; inline ThermoMechanicalFlowProperties -calculateThermoMechanicalFlowPropertiesPipe(PipeParameters const& pipe, +calculateThermoMechanicalFlowPropertiesPipe(Pipe const& pipe, double const length, RefrigerantProperties const& fluid, double const flow_rate) { double const Pr = - prandtlNumber(fluid.mu_r, fluid.specific_heat_capacity, fluid.lambda_r); + prandtlNumber(fluid.dynamic_viscosity, fluid.specific_heat_capacity, + fluid.thermal_conductivity); - double const velocity = pipeFlowVelocity(flow_rate, pipe.r_inner); - double const Re = - reynoldsNumber(velocity, 2.0 * pipe.r_inner, fluid.mu_r, fluid.density); - double const nusselt_number = - nusseltNumber(Re, Pr, 2 * pipe.r_inner, length); + double const velocity = flow_rate / pipe.area(); + double const Re = reynoldsNumber(velocity, pipe.diameter, + fluid.dynamic_viscosity, fluid.density); + double const nusselt_number = nusseltNumber(Re, Pr, pipe.diameter, length); return {velocity, nusselt_number}; } inline ThermoMechanicalFlowProperties calculateThermoMechanicalFlowPropertiesAnnulus( - PipeParameters const& pipe, double const length, + Pipe const& inner_pipe, Pipe const& outer_pipe, double const length, RefrigerantProperties const& fluid, double const flow_rate) { double const Pr = - prandtlNumber(fluid.mu_r, fluid.specific_heat_capacity, fluid.lambda_r); + prandtlNumber(fluid.dynamic_viscosity, fluid.specific_heat_capacity, + fluid.thermal_conductivity); + + double const inner_pipe_outside_diameter = + inner_pipe.diameter + 2. * inner_pipe.wall_thickness; + // Velocity between the outer pipe and inner pipe. double const velocity = - annulusFlowVelocity(flow_rate, pipe.r_outer, pipe.r_inner + pipe.b_in); + flow_rate / (outer_pipe.area() - inner_pipe.outsideArea()); double const Re = reynoldsNumber( - velocity, 2.0 * (pipe.r_outer - (pipe.r_inner + pipe.b_in)), fluid.mu_r, - fluid.density); + velocity, outer_pipe.diameter - inner_pipe_outside_diameter, + fluid.dynamic_viscosity, fluid.density); - double const diameter_ratio = (pipe.r_inner + pipe.b_in) / pipe.r_outer; + double const diameter_ratio = + inner_pipe_outside_diameter / outer_pipe.diameter; double const pipe_aspect_ratio = - (2 * pipe.r_outer - 2 * (pipe.r_inner + pipe.b_in)) / length; + (outer_pipe.diameter - inner_pipe_outside_diameter) / length; double const nusselt_number = nusseltNumberAnnulus(Re, Pr, diameter_ratio, pipe_aspect_ratio); return {velocity, nusselt_number}; diff --git a/Tests/Data/Parabolic/T/3D_Beier_sandbox/beier_sandbox.prj b/Tests/Data/Parabolic/T/3D_Beier_sandbox/beier_sandbox.prj index 6c9750cfe94b23d331bb7a762a32ec244c9464b1..5899994915f62556fd96993df1ccf8d5c41c2055 100644 --- a/Tests/Data/Parabolic/T/3D_Beier_sandbox/beier_sandbox.prj +++ b/Tests/Data/Parabolic/T/3D_Beier_sandbox/beier_sandbox.prj @@ -45,12 +45,12 @@ </grout> <pipes> <inlet> - <radius> 0.013665</radius> + <diameter> 0.013665</diameter> <wall_thickness>0.003035</wall_thickness> <wall_thermal_conductivity>0.39</wall_thermal_conductivity> </inlet> <outlet> - <radius>0.013665</radius> + <diameter>0.013665</diameter> <wall_thickness>0.003035</wall_thickness> <wall_thermal_conductivity>0.39</wall_thermal_conductivity> </outlet> diff --git a/Tests/Data/Parabolic/T/3D_Beier_sandbox/fixed_power_constant_flow.prj b/Tests/Data/Parabolic/T/3D_Beier_sandbox/fixed_power_constant_flow.prj index cc45512ed0537089c4f9bafae0bd0916d69606d2..cf26ce7ea2a851807703df0eb0248e339f5a3fb7 100644 --- a/Tests/Data/Parabolic/T/3D_Beier_sandbox/fixed_power_constant_flow.prj +++ b/Tests/Data/Parabolic/T/3D_Beier_sandbox/fixed_power_constant_flow.prj @@ -45,12 +45,12 @@ </grout> <pipes> <inlet> - <radius> 0.013665</radius> + <diameter> 0.013665</diameter> <wall_thickness>0.003035</wall_thickness> <wall_thermal_conductivity>0.39</wall_thermal_conductivity> </inlet> <outlet> - <radius>0.013665</radius> + <diameter>0.013665</diameter> <wall_thickness>0.003035</wall_thickness> <wall_thermal_conductivity>0.39</wall_thermal_conductivity> </outlet>