Source code for ht.conduction

'''Chemical Engineering Design Library (ChEDL). Utilities for process modeling.
Copyright (C) 2016, 2017, 2018, 2019 Caleb Bell <Caleb.Andrew.Bell@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
'''

from math import acosh, log, pi

from fluids.constants import Btu, degree_Fahrenheit, foot, hour, inch

__all__ = ['R_to_k', 'k_to_R', 'k_to_thermal_resistivity',
'thermal_resistivity_to_k', 'R_value_to_k', 'k_to_R_value', 'R_cylinder',
'S_isothermal_sphere_to_plane', 'S_isothermal_pipe_to_plane',
'S_isothermal_pipe_normal_to_plane',
'S_isothermal_pipe_to_isothermal_pipe', 'S_isothermal_pipe_to_two_planes',
'S_isothermal_pipe_eccentric_to_isothermal_pipe',
'cylindrical_heat_transfer']


[docs]def R_to_k(R, t, A=1.): r'''Returns the thermal conductivity of a substance given its thickness and thermal resistance. .. math:: k = \frac{t}{RA} Parameters ---------- R : float Thermal resistance of a substance, (K/W) if A is 1 m^2, otherwise must be [m^2*K/W] t : float Thickness of the substance used in the measurement of R, [m] A : float, optional Area; normally 1, [m^2] Returns ------- k : float Thermal conductivity of a substance [W/m/K] Examples -------- >>> R_to_k(R=0.05, t=0.025) 0.5 Notes ----- When solving problems of changing areas, this value may be calculated with an area other than 1 m^2. Values in tables reported as properties of materials are often divided by area already; the conversion holds if A is 1. References ---------- .. [1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return t/(A*R)
[docs]def k_to_R(k, t, A=1.): r'''Returns the thermal resistance of a substance given its thickness and thermal conductivity. .. math:: R = \frac{t}{kA} Parameters ---------- k : float Thermal conductivity of a substance [W/m/K] t : float Thickness of the substance for a given value of R, [m] A : float, optional Area; normally 1, [m^2] Returns ------- R : float Thermal resistance of a substance [K/W] Examples -------- >>> k_to_R(k=0.5, t=0.025) 0.05 Notes ----- When solving problems of changing areas, this value may be calculated with an area other than 1 m^2. Values in tables reported as properties of materials are often divided by area already; the conversion holds if A is 1. References ---------- .. [1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return t/(k*A)
[docs]def k_to_thermal_resistivity(k): r'''Returns the thermal resistivity of a substance given its thermal conductivity. .. math:: r = \frac{1}{k} Parameters ---------- k : float Thermal conductivity of a substance [W/m/K] Returns ------- r : float Thermal resistivity of a substance [m*K/W] Examples -------- >>> k_to_thermal_resistivity(0.25) 4.0 Notes ----- Do not confuse this with thermal resistance! Often not introduced in heat transfer textbooks to avoid further confusion. Used almost exclusively as a description of solids. Thermal resistivity has different units than R-value, but is of the same dimensionality. References ---------- .. [1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010. ''' return 1./k
[docs]def thermal_resistivity_to_k(r): r'''Returns the thermal resistivity of a substance given its thermal conductivity. .. math:: k = \frac{1}{r} Parameters ---------- r : float Thermal resistivity of a substance [m*K/W] Returns ------- k : float Thermal conductivity of a substance [W/m/K] Examples -------- >>> thermal_resistivity_to_k(4) 0.25 Notes ----- Do not confuse this with thermal resistance! Often not introduced in heat as a description of solids. Thermal resistivity has different units than R-value, but is of the same dimensionality. References ---------- .. [1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010. ''' return 1./r
[docs]def R_value_to_k(R_value, SI=True): r'''Returns the thermal conductivity of a substance given its R-value, which can be in either SI units of m^2 K/(W*inch) or the Imperial units of ft^2 deg F*h/(BTU*inch). Parameters ---------- R_value : float R-value of a substance [m^2 K/(W*inch) or ft^2 deg F*h/(BTU*inch)] SI : bool, optional Whether to use the SI conversion or not Returns ------- k : float Thermal conductivity of a substance [W/m/K] Notes ----- If given input is SI, it is divided by 0.0254 (multiplied by 39.37) and then inversed. Otherwise, it is multiplied by 6.93347 and then inversed. Examples -------- >>> R_value_to_k(0.12), R_value_to_k(0.71, SI=False) (0.2116666666666667, 0.20313787163983468) >>> R_value_to_k(1., SI=False)/R_value_to_k(1.) 5.678263341113488 References ---------- .. [1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010. ''' if SI: r = R_value/inch else: r = R_value*foot**2*degree_Fahrenheit*hour/Btu/inch return thermal_resistivity_to_k(r)
[docs]def k_to_R_value(k, SI=True): r'''Returns the R-value of a substance given its thermal conductivity, Will return R-value in SI units unless SI is false. SI units are m^2 K/(W*inch); Imperial units of R-value are ft^2 deg F*h/(BTU*inch). Parameters ---------- k : float Thermal conductivity of a substance [W/m/K] SI : bool, optional Whether to use the SI conversion or not Returns ------- R_value : float R-value of a substance [m^2 K/(W*inch) or ft^2 deg F*h/(BTU*inch)] Notes ----- Provides the reverse conversion of R_value_to_k. Examples -------- >>> k_to_R_value(R_value_to_k(0.12)), k_to_R_value(R_value_to_k(0.71, SI=False), SI=False) (0.11999999999999998, 0.7099999999999999) References ---------- .. [1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010. ''' r = k_to_thermal_resistivity(k) if SI: return r*inch else: return r/(foot**2*degree_Fahrenheit*hour/Btu/inch)
[docs]def R_cylinder(Di, Do, k, L): r'''Returns the thermal resistance `R` of a cylinder of constant thermal conductivity `k`, of inner and outer diameter `Di` and `Do`, and with a length `L`. .. math:: (hA)_{\text{cylinder}}=\frac{k}{\ln(D_o/D_i)} \cdot 2\pi L\\ R_{\text{cylinder}}=\frac{1}{(hA)_{\text{cylinder}}}= \frac{\ln(D_o/D_i)}{2\pi Lk} Parameters ---------- Di : float Inner diameter of the cylinder, [m] Do : float Outer diameter of the cylinder, [m] k : float Thermal conductivity of the cylinder, [W/m/K] L : float Length of the cylinder, [m] Returns ------- R : float Thermal resistance [K/W] Examples -------- >>> R_cylinder(0.9, 1., 20, 10) 8.38432343682705e-05 References ---------- .. [1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' hA = k*2*pi*L/log(Do/Di) return 1./hA
### Shape Factors
[docs]def S_isothermal_sphere_to_plane(D, Z): r'''Returns the Shape factor `S` of a sphere of constant temperature and of outer diameter `D` which is `Z` distance from an infinite plane. .. math:: S = \frac{2\pi D}{1 - \frac{D}{4Z}} Parameters ---------- D : float Diameter of the sphere, [m] Z : float Distance from the middle of the sphere to the infinite plane, [m] Returns ------- S : float Shape factor [m] Examples -------- >>> S_isothermal_sphere_to_plane(1, 100) 6.298932638776527 Notes ----- No restrictions on the use of this equation. .. math:: Q = Sk(T_1 - T_2) \\ R_{\text{shape}}=\frac{1}{Sk} References ---------- .. [1] Kreith, Frank, Raj Manglik, and Mark Bohn. Principles of Heat Transfer. Cengage, 2010. .. [2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return 2*pi*D/(1. - D/(4.*Z))
[docs]def S_isothermal_pipe_to_plane(D, Z, L=1): r'''Returns the Shape factor `S` of a pipe of constant outer temperature and of outer diameter `D` which is `Z` distance from an infinite plane. Length `L` must be provided, but can be set to 1 to obtain a dimensionless shape factor used in some sources. .. math:: S = \frac{2\pi L}{\cosh^{-1}(2z/D)} Parameters ---------- D : float Diameter of the pipe, [m] Z : float Distance from the middle of the pipe to the infinite plane, [m] L : float, optional Length of the pipe, [m] Returns ------- S : float Shape factor [m] Examples -------- >>> S_isothermal_pipe_to_plane(1, 100, 3) 3.146071454894645 Notes ----- L should be much larger than D. .. math:: Q = Sk(T_1 - T_2) \\ R_{\text{shape}}=\frac{1}{Sk} References ---------- .. [1] Kreith, Frank, Raj Manglik, and Mark Bohn. Principles of Heat Transfer. Cengage, 2010. .. [2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return 2.*pi*L/acosh(2.*Z/D)
[docs]def S_isothermal_pipe_normal_to_plane(D, L): r'''Returns the Shape factor `S` of a pipe of constant outer temperature and of outer diameter `D` which extends into an infinite medium below an an infinite plane. .. math:: S = \frac{2\pi L}{\ln(4L/D)} Parameters ---------- D : float Diameter of the pipe, [m] L : float Length of the pipe, [m] Returns ------- S : float Shape factor [m] Examples -------- >>> S_isothermal_pipe_normal_to_plane(1, 100) 104.86893910124888 Notes ----- L should be much larger than D. .. math:: Q = Sk(T_1 - T_2) \\ R_{\text{shape}}=\frac{1}{Sk} References ---------- .. [1] Kreith, Frank, Raj Manglik, and Mark Bohn. Principles of Heat Transfer. Cengage, 2010. .. [2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return 2.*pi*L/log(4.*L/D)
[docs]def S_isothermal_pipe_to_isothermal_pipe(D1, D2, W, L=1.): r'''Returns the Shape factor `S` of a pipe of constant outer temperature and of outer diameter `D1` which is `w` distance from another infinite pipe of outer diameter`D2`. Length `L` must be provided, but can be set to 1 to obtain a dimensionless shape factor used in some sources. .. math:: S = \frac{2\pi L}{\cosh^{-1}\left(\frac{4w^2-D_1^2-D_2^2}{2D_1D_2}\right)} Parameters ---------- D1 : float Diameter of one pipe, [m] D2 : float Diameter of the other pipe, [m] W : float Distance from the middle of one pipe to the middle of the other, [m] L : float, optional Length of the pipe, [m] Returns ------- S : float Shape factor [m] Examples -------- >>> S_isothermal_pipe_to_isothermal_pipe(.1, .2, 1, 1) 1.188711034982268 Notes ----- L should be much larger than both diameters. L should be larger than W. .. math:: Q = Sk(T_1 - T_2) \\ R_{\text{shape}}=\frac{1}{Sk} References ---------- .. [1] Kreith, Frank, Raj Manglik, and Mark Bohn. Principles of Heat Transfer. Cengage, 2010. .. [2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return 2.*pi*L/acosh((4*W**2 - D1**2 - D2**2)/(2.*D1*D2))
[docs]def S_isothermal_pipe_to_two_planes(D, Z, L=1.): r'''Returns the Shape factor `S` of a pipe of constant outer temperature and of outer diameter `D` which is `Z` distance from two infinite isothermal planes of equal temperatures, parallel to each other and enclosing the pipe. Length `L` must be provided, but can be set to 1 to obtain a dimensionless shape factor used in some sources. .. math:: S = \frac{2\pi L}{\ln\frac{8z}{\pi D}} Parameters ---------- D : float Diameter of the pipe, [m] Z : float Distance from the middle of the pipe to either of the planes, [m] L : float, optional Length of the pipe, [m] Returns ------- S : float Shape factor [m] Examples -------- >>> S_isothermal_pipe_to_two_planes(.1, 5, 1) 1.2963749299921428 Notes ----- L should be much larger than both diameters. L should be larger than W. .. math:: Q = Sk(T_1 - T_2) \\ R_{\text{shape}}=\frac{1}{Sk} References ---------- .. [1] Shape Factors for Heat Conduction Through Bodies with Isothermal or Convective Boundary Conditions, J. E. Sunderland, K. R. Johnson, ASHRAE Transactions, Vol. 70, 1964. .. [2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return 2.*pi*L/log(8.*Z/(pi*D))
[docs]def S_isothermal_pipe_eccentric_to_isothermal_pipe(D1, D2, Z, L=1.): r'''Returns the Shape factor `S` of a pipe of constant outer temperature and of outer diameter `D1` which is `Z` distance from the center of another pipe of outer diameter`D2`. Length `L` must be provided, but can be set to 1 to obtain a dimensionless shape factor used in some sources. .. math:: S = \frac{2\pi L}{\cosh^{-1} \left(\frac{D_2^2 + D_1^2 - 4Z^2}{2D_1D_2}\right)} Parameters ---------- D1 : float Diameter of inner pipe, [m] D2 : float Diameter of outer pipe, [m] Z : float Distance from the middle of inner pipe to the center of the other, [m] L : float, optional Length of the pipe, [m] Returns ------- S : float Shape factor [m] Examples -------- >>> S_isothermal_pipe_eccentric_to_isothermal_pipe(.1, .4, .05, 10) 47.709841915608976 Notes ----- L should be much larger than both diameters. D2 should be larger than D1. .. math:: Q = Sk(T_1 - T_2) \\ R_{\text{shape}}=\frac{1}{Sk} References ---------- .. [1] Kreith, Frank, Raj Manglik, and Mark Bohn. Principles of Heat Transfer. Cengage, 2010. .. [2] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. ''' return 2.*pi*L/acosh((D2**2 + D1**2 - 4.*Z**2)/(2.*D1*D2))
# Specific heat transfer problems of conduction
[docs]def cylindrical_heat_transfer(Ti, To, hi, ho, Di, ts, ks): r'''Calculation for the heat transfer through a cylindrical wall, as occurs in pipes and cylindrical vessels. This is the core method which calculates the temperatures of each layer - and allows an outer layer to iterate on temperature or duty to meet a fixed specification, or include things like temperature dependent thermal conductivities or radiation. Parameters ---------- Ti : float Temperature of the inside of the cylinder, [K] To : float External temperature outside the cylinder, away from the cylinder wall, [K] hi : float Inside heat transfer coefficient, [W/m^2/K] ho : float Outside heat transfer coefficient, [W/m^2/K] Di : float Inside diameter of cylinder, [m] ts : list[float] List of thicknesses of each layer of the cylinder, [m] ks : list[float] List of thermal conductivities of each layer of the cylinder, [w/m/K] Returns ------- results : dict * Q : Heat exchanged through the cylinder (per meter of length), [W/m] * Rs : Thermal resistances of each of the layers, [m*K/W] * Ts : Temperatures of the outside of each of the layers, [K] * UA : Heat transfer coefficient times area (on a per-meter of cylinder) basis, [W/K/m] * U_inner : Heat transfer coefficient with respect to the inside diameter, [W/K] * U_outer : Heat transfer coefficient with respect to the exterior diameter, [W/K] * q : Specific heat exchanged (per square meter) through the cylinder (per meter of length), [W/m^3] Examples -------- >>> from pprint import pprint >>> pprint(cylindrical_heat_transfer(Ti=453.15, To=301.15, hi=1e12, ho=22.697193, Di=0.0779272, ts=[0.0054864, .05], ks=[56.045, 0.0598535265])) {'Q': 73.12000884069367, 'Rs': [0.00022201030738405449, 1.189361782070256], 'Ts': [453.15, 453.1226455779877, 306.578530147744], 'UA': 0.48105268974140575, 'U_inner': 1.9649599487726137, 'U_outer': 0.8106078714663484, 'q': 123.21239646288495} ''' length = 1.0 # basis # Note - fouling is just another layer, should be converted to a thickness/thermal conductivity external_diameter = Di + 2.0*sum(ts) A_external = pi*external_diameter*length A_internal = pi*Di*length Rs = [] Do_running = Di R_layers = 0.0 for i in range(len(ts)): Do_running, Di_running = 2.0*ts[i]+Do_running, Do_running Ri = 0.5*external_diameter*log(Do_running/Di_running)/ks[i] R_layers += Ri Rs.append(Ri) D_ratio = external_diameter/Di inv_term = D_ratio/hi + R_layers + 1.0/ho U_external = 1.0/inv_term UA = A_external*U_external dT = Ti - To Q = UA*dT q = Q/A_external # Compute the temperature profile Ts = [Ti] for Ri in Rs: Ts.append(Ts[-1] - q*Ri) # Convert heat transfer coefficient area basis = U_i*A_i = U_o*A_o, divide ans = {'Q': Q, 'q': q, 'UA': UA, 'U_outer': U_external, 'U_inner': UA/A_internal, 'Ts': Ts, 'Rs': Rs} return ans