Source code for bhr.single_u_borehole

from math import log, pi

from bhr.u_tube import UTube
from bhr.utilities import coth


[docs] class SingleUBorehole(UTube): def __init__( self, borehole_diameter: float, pipe_outer_diameter: float, pipe_dimension_ratio: float, length: float, shank_space: float, pipe_conductivity: float, grout_conductivity: float, soil_conductivity: float, fluid_type: str, fluid_concentration: float = 0, ): super().__init__( pipe_outer_diameter, pipe_dimension_ratio, length, shank_space, pipe_conductivity, fluid_type, fluid_concentration, ) """ Implementation for computing borehole thermal resistance for grouted single u-tube borehole. Relies primarily on the following references: Javed, S. & Spitler, J.D. 2017. 'Accuracy of Borehole Thermal Resistance Calculation Methods for Grouted Single U-tube Ground Heat Exchangers.' Applied Energy.187:790-806. Javed, S. & Spitler, J.D. Calculation of Borehole Thermal Resistance. In 'Advances in Ground-Source Heat Pump Systems,' pp. 84. Rees, S.J. ed. Cambridge, MA. Elsevier Ltd. 2016. :param borehole_diameter: borehole diameter, in m. :param pipe_outer_diameter: outer diameter of the pipe, in m. :param pipe_dimension_ratio: non-dimensional ratio of pipe diameter to pipe thickness. :param length: length of borehole from top to bottom, in m. :param shank_space: radial distance from the borehole center to the pipe center, in m. :param pipe_conductivity: pipe thermal conductivity, in W/m-K. :param grout_conductivity: grout thermal conductivity, in W/m-K. :param soil_conductivity: soil thermal conductivity, in W/m-K. :param fluid_type: fluid type. "ETHYLALCOHOL", "ETHYLENEGLYCOL", "METHYLALCOHOL", "PROPYLENEGLYCOL", or "WATER" :param fluid_concentration: fractional concentration of antifreeze mixture, from 0-0.6. """ # static parameters self.borehole_diameter = borehole_diameter self.grout_conductivity = grout_conductivity self.soil_conductivity = soil_conductivity self.theta_1 = 2 * self.shank_space / self.borehole_diameter self.theta_2 = self.borehole_diameter / self.pipe_outer_diameter self.theta_3 = 1 / (2 * self.theta_1 * self.theta_2) self.sigma = (self.grout_conductivity - self.soil_conductivity) / ( self.grout_conductivity + self.soil_conductivity ) self.bh_length = length self.two_pi_kg = 2 * pi * self.grout_conductivity # non-static parameters self.pipe_resist = None
[docs] def update_beta(self, m_dot: float, temp: float) -> float: """ Updates Beta coefficient. Javed, S. & Spitler, J.D. Calculation of Borehole Thermal Resistance. In 'Advances in Ground-Source Heat Pump Systems,' pp. 84. Rees, S.J. ed. Cambridge, MA. Elsevier Ltd. 2016. Eq: 3-47 Javed, S. & Spitler, J.D. 2017. 'Accuracy of Borehole Thermal Resistance Calculation Methods for Grouted Single U-tube Ground Heat Exchangers.' Applied Energy.187:790-806. Eq: 14 :param m_dot: mass flow rate, kg/s :param temp: temperature, Celsius """ pipe_resist = self.calc_fluid_pipe_resist(m_dot, temp) self.pipe_resist = pipe_resist beta = self.two_pi_kg * pipe_resist return beta
[docs] def calc_direct_coupling_resistance(self, m_dot: float, temp: float) -> tuple: r_a = self.calc_total_internal_bh_resistance(m_dot, temp) r_b = self.calc_local_bh_resistance(m_dot, temp) r_12 = (4 * r_a * r_b) / (4 * r_b - r_a) # reset if negative if r_12 < 0: r_12 = 70 resist_bh_direct_coupling = r_12 return resist_bh_direct_coupling, r_b
[docs] def calc_local_bh_resistance(self, m_dot: float, temp: float) -> float: """ Calculates the average thermal resistance of the borehole using the first-order multipole method. Resistance between the fluid in the U-tube(s) to the borehole wall (m-K/W) Javed, S. & Spitler, J.D. 2017. 'Accuracy of Borehole Thermal Resistance Calculation Methods for Grouted Single U-tube Ground Heat Exchangers.' Applied Energy.187:790-806. Equation 13 :param m_dot: mass flow rate, kg/s :param temp: temperature, Celsius :return: average thermal resistance, K/(W/m) """ beta = self.update_beta(m_dot, temp) final_term_1 = log(self.theta_2 / (2 * self.theta_1 * (1 - self.theta_1**4) ** self.sigma)) term_2_num = self.theta_3**2 * (1 - (4 * self.sigma * self.theta_1**4) / (1 - self.theta_1**4)) ** 2 term_2_den_pt_1 = (1 + beta) / (1 - beta) term_2_den_pt_2 = self.theta_3**2 * (1 + (16 * self.sigma * self.theta_1**4) / (1 - self.theta_1**4) ** 2) term_2_den = term_2_den_pt_1 + term_2_den_pt_2 final_term_2 = term_2_num / term_2_den resist_bh_ave = (1 / (4 * pi * self.grout_conductivity)) * (beta + final_term_1 - final_term_2) return resist_bh_ave
[docs] def calc_total_internal_bh_resistance(self, m_dot: float, temp: float) -> float: """ Calculates the total internal thermal resistance of the borehole using the first-order multipole method. Javed, S. & Spitler, J.D. 2017. 'Accuracy of Borehole Thermal Resistance Calculation Methods for Grouted Single U-tube Ground Heat Exchangers.' Applied Energy.187:790-806. Equation 26 :param m_dot: mass flow rate, kg/s :param temp: temperature, Celsius :return: total internal thermal resistance, K/(W/m) """ beta = self.update_beta(m_dot, temp) term_1_num = (1 + self.theta_1**2) ** self.sigma term_1_den = self.theta_3 * (1 - self.theta_1**2) ** self.sigma final_term_1 = log(term_1_num / term_1_den) term_2_num = self.theta_3**2 * (1 - self.theta_1**4 + 4 * self.sigma * self.theta_1**2) ** 2 term_2_den_pt_1 = (1 + beta) / (1 - beta) * (1 - self.theta_1**4) ** 2 term_2_den_pt_2 = self.theta_3**2 * (1 - self.theta_1**4) ** 2 term_2_den_pt_3 = 8 * self.sigma * self.theta_1**2 * self.theta_3**2 * (1 + self.theta_1**4) term_2_den = term_2_den_pt_1 - term_2_den_pt_2 + term_2_den_pt_3 final_term_2 = term_2_num / term_2_den resist_bh_total_internal = 1 / (pi * self.grout_conductivity) * (beta + final_term_1 - final_term_2) return resist_bh_total_internal
[docs] def calc_grout_resistance(self, m_dot: float, temp: float) -> float: """ Calculates grout resistance. Use for validation. Javed, S. & Spitler, J.D. 2017. 'Accuracy of Borehole Thermal Resistance Calculation Methods for Grouted Single U-tube Ground Heat Exchangers.' Applied Energy.187:790-806. Eq: 3 :param m_dot: mass flow rate, kg/s :param temp: temperature, Celsius :return: grout resistance, K/(W-m) """ if self.pipe_resist is None: raise ValueError("Pipe resistance has not been calculated yet.") resist_bh_grout = self.calc_local_bh_resistance(m_dot, temp) - self.pipe_resist / 2.0 return resist_bh_grout
[docs] def calc_effective_bh_resistance_uhf(self, m_dot: float, temp: float) -> float: """ Calculates the effective thermal resistance of the borehole assuming a uniform heat flux. Javed, S. & Spitler, J.D. Calculation of Borehole Thermal Resistance. In 'Advances in Ground-Source Heat Pump Systems,' pp. 84. Rees, S.J. ed. Cambridge, MA. Elsevier Ltd. 2016. Eq: 3-67 :param m_dot: mass flow rate, kg/s :param temp: temperature, Celsius :return: effective thermal resistance, K/(W/m) """ r_a = self.calc_total_internal_bh_resistance(m_dot, temp) r_b = self.calc_local_bh_resistance(m_dot, temp) pt_1 = 1 / (3 * r_a) pt_2 = (self.bh_length / (self.fluid.cp(temp) * m_dot)) ** 2 resist_short_circuiting = pt_1 * pt_2 resist_bh_effective_uhf = r_b + resist_short_circuiting return resist_bh_effective_uhf
[docs] def calc_effective_bh_resistance_ubwt(self, m_dot: float, temp: float) -> float: """ Calculates the effective thermal resistance of the borehole assuming a uniform borehole wall temperature. Javed, S. & Spitler, J.D. Calculation of Borehole Thermal Resistance. In 'Advances in Ground-Source Heat Pump Systems,' pp. 84. Rees, S.J. ed. Cambridge, MA. Elsevier Ltd. 2016. :param m_dot: mass flow rate, kg/s :param temp: temperature, Celsius :return: effective thermal resistance, K/(W/m) """ r_a = self.calc_total_internal_bh_resistance(m_dot, temp) # R_a r_b = self.calc_local_bh_resistance(m_dot, temp) # R_b r_v = self.bh_length / (m_dot * self.fluid.cp(temp)) # (K/(w/m)) thermal resistance factor n = r_v / (r_b * r_a) ** 0.5 resist_bh_effective_ubt = r_b * n * coth(n) return resist_bh_effective_ubt