def test_finite_line_source_image_part(self, rel_tol=1.0e-6): """ Tests the value of the image part of the FLS solution. """ from pygfunction.boreholes import Borehole from pygfunction.heat_transfer import finite_line_source # Evaluate the double integral reference = dblquad( fls_double, self.D1, self.D1 + self.H1, lambda x: self.D2, lambda x: self.D2 + self.H2, args=(self.t, self.dis, self.alpha, False, True))[0] / self.H2 # Evaluate using heat_transfer.finite_line_source borehole1 = Borehole(self.H1, self.D1, 0.05, 0., 0.) borehole2 = Borehole(self.H2, self.D2, 0.05, self.dis, 0.) calculated = finite_line_source(self.t, self.alpha, borehole1, borehole2, reaSource=False, imgSource=True) self.assertAlmostEqual(calculated, reference, delta=np.abs(rel_tol * reference), msg='Incorrect value of the image part of the ' 'finite line source solution.')
def test_two_unequal_boreholes_four_segments(self, rel_tol=1.0e-6): """ Tests the value of the thermal response factor matrix for two boreholes of unequal lengths with and without similarities. """ from pygfunction.heat_transfer import thermal_response_factors from pygfunction.gfunction import _borehole_segments from pygfunction.boreholes import Borehole borehole1 = Borehole(self.H, self.D, self.r_b, 0., 0.) borehole2 = Borehole(self.H * 1.432, self.D, self.r_b, self.B, 0.) boreField = [borehole1, borehole2] boreSegments = _borehole_segments(boreField, nSegments=4) time = np.array([33554478]) * 3600. # Calculation of thermal response factor matrix using similarities h = thermal_response_factors(boreSegments, time, self.alpha, use_similarities=True) # Calculation of thermal response factor matrix without similarities h_none = thermal_response_factors(boreSegments, time, self.alpha, use_similarities=False) self.assertTrue(np.allclose(h, h_none, rtol=rel_tol, atol=1e-10), msg='Incorrect values of the thermal response factors ' 'two unequal boreholes (4 segments).')
def test_finite_line_source_no_part(self, rel_tol=1.0e-6): """ Tests the value of the FLS solution when considering no source. """ from pygfunction.boreholes import Borehole from pygfunction.heat_transfer import finite_line_source # Evaluate using heat_transfer.finite_line_source borehole1 = Borehole(self.H1, self.D1, 0.05, 0., 0.) borehole2 = Borehole(self.H2, self.D2, 0.05, self.dis, 0.) calculated = finite_line_source(self.t, self.alpha, borehole1, borehole2, reaSource=False, imgSource=False) self.assertEqual(calculated, 0., msg='Incorrect value of no part of the ' 'finite line source solution.')
def test_fluid_heat_transfer_rate_series(self): """ Tests the value of the fluid heat transfer rate for a borehole with multiple U-tubes in series. """ from pygfunction.pipes import MultipleUTube from pygfunction.boreholes import Borehole # Reference solution (Cimmino, 2016) nPipes = [2, 3, 4] # Number of U-tubes # Fluid mass flow rate [kg/s] m_flow = 0.3 T_b = 1.0 # Borehole wall temperature [degC] # Outlet fluid temperature [degC] Tf_out = np.array([1.6215, 1.2051, 1.1065]) # Inlet fluid temperature [degC] Tf_in = np.array([5.0, 5.0, 5.0]) # Total heat transfer rate [W] Qf_ref = m_flow*self.cp*(Tf_out - Tf_in) borehole = Borehole(self.H, 0., self.r_b, 0., 0.) # Calculate using pipes.MultipleUTube() Qf = np.zeros_like(Qf_ref) for i in range(len(nPipes)): pos = self._pipePositions(nPipes[i]) UTube = MultipleUTube(pos, 0., self.r_out, borehole, self.k_s, self.k_g, self.Rfp, nPipes[i], config='series', J=0) # Obtain fluid heat extraction rate Qf[i] = UTube.get_fluid_heat_extraction_rate(Tf_in[i], T_b, m_flow, self.cp) self.assertTrue(np.allclose(Qf, Qf_ref, rtol=1e-4, atol=1e-10), msg='Incorrect value of fluid heat extraction rate ' 'for U-tubes in series.')
def test_inlet_fluid_temperature_parallel(self): """ Tests the value of the inlet fluid temperature for a borehole with multiple U-tubes in parallel. """ from pygfunction.pipes import MultipleUTube from pygfunction.boreholes import Borehole # Reference solution (Cimmino, 2016) nPipes = [2, 3, 4] # Number of U-tubes # Fluid mass flow rate [kg/s] m_flow = np.array([0.2*n for n in nPipes]) T_b = 1.0 # Borehole wall temperature [degC] # Outlet fluid temperature [degC] Tf_out = np.array([2.0860, 2.2279, 2.4627]) # Inlet fluid temperature [degC] Tf_in_ref = np.array([5.0, 5.0, 5.0]) # Total heat transfer rate [W] Qf = m_flow*self.cp*(Tf_out - Tf_in_ref) borehole = Borehole(self.H, 0., self.r_b, 0., 0.) # Calculate using pipes.MultipleUTube() Tf_in = np.zeros_like(Tf_in_ref) for i in range(len(nPipes)): pos = self._pipePositions(nPipes[i]) UTube = MultipleUTube(pos, 0., self.r_out, borehole, self.k_s, self.k_g, self.Rfp, nPipes[i], J=0) # Obtain inlet fluid temperature Tf_in[i] = UTube.get_inlet_temperature(Qf[i], T_b, m_flow[i], self.cp) self.assertTrue(np.allclose(Tf_in, Tf_in_ref, rtol=1e-4, atol=1e-10), msg='Incorrect value of inlet fluid temperatures for ' 'U-tubes in parallel.')
def test_outlet_fluid_temperature_series(self): """ Tests the value of the outlet fluid temperature for a borehole with multiple U-tubes in series. """ from pygfunction.pipes import MultipleUTube from pygfunction.boreholes import Borehole # Reference solution (Cimmino, 2016) nPipes = [2, 3, 4] # Number of U-tubes # Fluid mass flow rate [kg/s] m_flow = 0.3 T_b = 1.0 # Borehole wall temperature [degC] Tf_in = 5.0 # Inlet fluid temperature [degC] borehole = Borehole(self.H, 0., self.r_b, 0., 0.) Tf_out_ref = np.array([1.6215, 1.2051, 1.1065]) # Calculate using pipes.MultipleUTube() Tf_out = np.zeros_like(Tf_out_ref) for i in range(len(nPipes)): pos = self._pipePositions(nPipes[i]) UTube = MultipleUTube(pos, 0., self.r_out, borehole, self.k_s, self.k_g, self.Rfp, nPipes[i], config='series', J=0) # Obtain outlet fluid temperature Tf_out[i] = UTube.get_outlet_temperature(Tf_in, T_b, m_flow, self.cp) self.assertTrue(np.allclose(Tf_out, Tf_out_ref, rtol=1e-4, atol=1e-10), msg='Incorrect value of outlet fluid temperatures for ' 'U-tubes in series.')
def test_fluid_heat_transfer_rate(self): """ Tests the value of the fluid heat transfer rate for a single U-tube borehole. """ from pygfunction.pipes import SingleUTube from pygfunction.boreholes import Borehole # Reference solution (Cimmino, 2016) # Fluid mass flow rate [kg/s] m_flow = np.array([0.2, 0.3]) T_b = 1.0 # Borehole wall temperature [degC] # Outlet fluid temperature [degC] Tf_out = np.array([2.2161, 2.8394]) # Inlet fluid temperature [degC] Tf_in = np.array([5.0, 5.0]) # Total heat transfer rate [W] Qf_ref = m_flow*self.cp*(Tf_out - Tf_in) borehole = Borehole(self.H, 0., self.r_b, 0., 0.) # Calculate using pipes.SingleUTube() Qf = np.zeros_like(Qf_ref) for i in range(len(m_flow)): pos = [(-self.D_s, 0.), (self.D_s, 0.)] UTube = SingleUTube(pos, 0., self.r_out, borehole, self.k_s, self.k_g, self.Rfp, J=0) # Obtain fluid heat transfer rate Qf[i] = UTube.get_fluid_heat_extraction_rate(Tf_in[i], T_b, m_flow[i], self.cp) self.assertTrue(np.allclose(Qf, Qf_ref, rtol=1e-4, atol=1e-10), msg='Incorrect value of fluid heat extraction rate.')
def test_outlet_fluid_temperature(self): """ Tests the value of the outlet fluid temperature for a single U-tube borehole. """ from pygfunction.pipes import SingleUTube from pygfunction.boreholes import Borehole # Reference solution (Cimmino, 2016) # Fluid mass flow rate [kg/s] m_flow = np.array([0.2, 0.3]) T_b = 1.0 # Borehole wall temperature [degC] Tf_in = 5.0 # Inlet fluid temperature [degC] borehole = Borehole(self.H, 0., self.r_b, 0., 0.) Tf_out_ref = np.array([2.2161, 2.8394]) # Calculate using pipes.SingleUTube() Tf_out = np.zeros_like(Tf_out_ref) for i in range(len(m_flow)): pos = [(-self.D_s, 0.), (self.D_s, 0.)] UTube = SingleUTube(pos, 0., self.r_out, borehole, self.k_s, self.k_g, self.Rfp, J=0) # Obtain outlet fluid temperature Tf_out[i] = UTube.get_outlet_temperature(Tf_in, T_b, m_flow[i], self.cp) self.assertTrue(np.allclose(Tf_out, Tf_out_ref, rtol=1e-4, atol=1e-10), msg='Incorrect value of outlet fluid temperatures.')
def test_fluid_heat_transfer_rate(self): """ Tests the value of the fluid heat transfer rates for a borehole with multiple independent U-tubes. """ from pygfunction.pipes import IndependentMultipleUTube from pygfunction.boreholes import Borehole borehole = Borehole(self.H, 0., self.r_b, 0., 0.) # Calculate using pipes.IndependentMultipleUTube() pos = self._pipePositions(self.nPipes) UTube = IndependentMultipleUTube(pos, 1e-30, self.r_out, borehole, self.k_s, self.k_g, self.Rfp, self.nPipes, J=0) # Obtain outlet fluid temperature Qf = UTube.get_fluid_heat_extraction_rate(self.Tf_in_ref, self.T_b, self.m_flow, self.cp) self.assertTrue(np.allclose(Qf, self.Qf_ref, rtol=1e-4, atol=1e-10), msg='Incorrect value of fluid heat extraction rates ' 'for independent U-tubes.')