Source code for pychemengg.heattransfer.fins

# -*- coding: utf-8 -*-

# This file is part of pyChemEngg python package.
 
# PyChemEngg: A python-based framework to promote problem solving and critical
# thinking in chemical engineering.

# Copyright (c) 2021 Harvinder Singh Gill <profhsgill@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.

"""Calculates fin efficiency 
"""

import math
import scipy.special

__all__ = ["Fin"]


[docs]class Fin(object): r""" To compute fin efficiency of different fin types. Parameters ---------- length : `int or float` Length of fin. width : `int or float` Width of fin. thickness : `int or float` Thickness of fin. diameter : `int or float` Diameter of fin. inner_radius : `int or float` Inner radius of annular fin. outer_radius : `int or float` Outer radius of annular fin. heattransfercoefficient : `int or float` Heat transfer coefficient between fin and surroundings. thermalconductivity : `int or float` Thermal conductivity of fin material. Attributes ---------- See "Parameters". All parameters are attributes. Additional attributes are listed below. efficiency : `int or float` Fin efficiency. surfacearea : `int or float` Surface area of given fin geometry. Examples -------- First import the module **fins**. >>> from heattransfer import fins as fins >>> fin1 = fins.Fin(keyword1=..., keyword2=..., ...) # This will create an instance of class 'Fin' and assign it to the variable 'fin1'. # Methods of the class 'Fin' can then be called like so :- # fin1.cylindrical() # or # fin1.rectangular() """
[docs] def __init__ (self, length=None, width=None, thickness=None, diameter=None, inner_radius=None, outer_radius=None, heattransfercoefficient=None, thermalconductivity=None): self.length = length # fin length self.width = width # fin width self.thickness = thickness # fin thickness self.diameter = diameter # fin diameter self.inner_radius = inner_radius # for annular fin: fin inner radius self.outer_radius = outer_radius # for annular fin: fin outer radius self.heattransfercoefficient = heattransfercoefficient # heat transfer coefficient self.thermalconductivity = thermalconductivity # thermal conductivity of fin
[docs] def cylindrical(self): r""" Computes fin efficiency for a cylindrical fin. Parameters ---------- `None_required` : 'None' Attributes that are already defined are used in calculation. Returns ------- tuple containing efficiency and surfacearea : (efficiency : `int or float`, surfacearea : `int or float`) Notes ----- The following formula is used: .. math:: \eta = \frac {\tanh (mL)} {mL} \\[15pt] \\[15pt] A_{surface area} = Perimeter \hspace{2pt} L *where:* L = fin length m = :math:`\sqrt {\frac {h \hspace{2pt} Perimeter} {k \hspace{2pt} A_{cross-section}}}` h = heat transfer coefficient Perimeter = fin perimeter :math:`A_{cross-section}` = cross section area of fin :math:`A_{surface area}` = surface area of fin Examples -------- First import the module **fins**. >>> from pychemengg.heattransfer import fins as fins >>> fin1 = fins.Fin(length=0.06, diameter=5e-3, heattransfercoefficient=35, thermalconductivity=8.3) >>> fin1.cylindrical() (0.2864128219415127, 0.000942477796076938) References ---------- [1] G. F. Nellis and S. A. Klein, "Introduction to Engineering Heat Transfer", 1st Edition. Cambridge University Press, 2021. [2] Y. A. Cengel and A. J. Ghajar, "Heat And Mass Transfer Fundamentals and Applications", 6th Edition. New York, McGraw Hill Education, 2020. [3] T.L. Bergman, A. S. Lavine, F. P. Incropera, D. P. Dewitt, "Fundamentals of Heat and Mass Transfer", 7th Edition, John Wiley, 2011. """ # def cylindrical(self, length=1, diameter=1, heattransfercoefficient=1, thermalconductivity=1): try: self.perimeter = math.pi*self.diameter self.crosssectionarea = math.pi/4*self.diameter**2 # Area of cross section self.surfacearea = self.perimeter * self.length # surface area of fin self.mL = math.sqrt(self.heattransfercoefficient * self.perimeter / self.thermalconductivity / self.crosssectionarea) * self.length self.efficiency = math.tanh(self.mL)/self.mL return self.efficiency, self.surfacearea except TypeError: print("Check your 'Fin()' object. You maynot have defined all required parameters.") print("\ncylindrical fin requires: length=someValue, diameter=someValue,, heattransfercoefficient=someValue, thermalconductivity=someValue")
[docs] def rectangular(self): r""" Computes fin efficiency for a rectangular fin. Parameters ---------- `None_required` : 'None' Attributes that are already defined are used in calculation. Returns ------- tuple containing efficiency and surfacearea : (efficiency : `int or float`, surfacearea : `int or float`) Examples -------- First import the module **fins**. >>> from pychemengg.heattransfer import fins as fins >>> fin1 = fins.Fin (length=0.064, width=1, thickness=0.008, heattransfercoefficient=25, thermalconductivity=210) >>> fin1.rectangular() (0.9609578814207821, 0.129024) References ---------- [1] G. F. Nellis and S. A. Klein, "Introduction to Engineering Heat Transfer", 1st Edition. Cambridge University Press, 2021. [2] Y. A. Cengel and A. J. Ghajar, "Heat And Mass Transfer Fundamentals and Applications", 6th Edition. New York, McGraw Hill Education, 2020. [3] T.L. Bergman, A. S. Lavine, F. P. Incropera, D. P. Dewitt, "Fundamentals of Heat and Mass Transfer", 7th Edition, John Wiley, 2011. """ # def rectangular(self, length=1, width=1, thickness=1, heattransfercoefficient=1, thermalconductivity=1): try: self.perimeter = 2 * (self.width + self.thickness); # perimeter self.crosssectionarea = self.width * self.thickness; # Area of cross section self.surfacearea = self.perimeter * self.length; # surface area of fin self.mL = math.sqrt(self.heattransfercoefficient * self.perimeter / self.thermalconductivity / self.crosssectionarea) * self.length; self.efficiency = math.tanh(self.mL)/self.mL; return self.efficiency, self.surfacearea except TypeError: print("Check your 'Fin()' object. You maynot have defined all required parameters.") print("\nrectangular fin requires: length=someValue, width=SomeValue, thickness=someValue, heattransfercoefficient=someValue, thermalconductivity=someValue")
[docs] def straighttriangular(self): r""" Computes fin efficiency for a straighttriangular fin. Parameters ---------- `None_required` : 'None' Attributes that are already defined are used in calculation. Returns ------- tuple containing efficiency and surfacearea : (efficiency : `int or float`, surfacearea : `int or float`) Examples -------- First import the module **fins**. >>> from pychemengg.heattransfer import fins as fins >>> fin1 = fins.Fin(length=0.055, width=0.11, thickness=0.004, heattransfercoefficient=25, thermalconductivity=236) >>> fin1.straighttriangular() (0.9275971984358753, 0.012107997357118972) References ---------- [1] G. F. Nellis and S. A. Klein, "Introduction to Engineering Heat Transfer", 1st Edition. Cambridge University Press, 2021. [2] Y. A. Cengel and A. J. Ghajar, "Heat And Mass Transfer Fundamentals and Applications", 6th Edition. New York, McGraw Hill Education, 2020. [3] T.L. Bergman, A. S. Lavine, F. P. Incropera, D. P. Dewitt, "Fundamentals of Heat and Mass Transfer", 7th Edition, John Wiley, 2011. """ # def straighttriangular(self, length=1, width=1, thickness=1, heattransfercoefficient=1, thermalconductivity=1): try: self.surfacearea = 2 * self.width * math.sqrt(self.length**2 + (self.thickness/2)**2) #surface area of fin self.mL = math.sqrt(2 * self.heattransfercoefficient / self.thermalconductivity / self.thickness) * self.length self.efficiency = scipy.special.iv(1,2*self.mL) / (self.mL*scipy.special.iv(0,2*self.mL)) return self.efficiency, self.surfacearea except TypeError: print("Check your 'Fin()' object. You maynot have defined all required parameters.") print("\nstraighttriangular fin requires: length=someValue, width=SomeValue, thickness=someValue, heattransfercoefficient=someValue, thermalconductivity=someValue")
[docs] def straightparabolic(self): r""" Computes fin efficiency for a straightparabolic fin. Parameters ---------- `None_required` : 'None' Attributes that are already defined are used in calculation. Returns ------- tuple containing efficiency and surfacearea : (efficiency : `int or float`, surfacearea : `int or float`) Examples -------- First import the module **fins**. >>> from pychemengg.heattransfer import fins as fins >>> fin1 = fins.Fin(length=0.03, width=0.2, thickness=0.001, heattransfercoefficient=10, thermalconductivity=125) >>> fin1.straightparabolic() (0.8867652295764488, 0.012002221851998751) References ---------- [1] G. F. Nellis and S. A. Klein, "Introduction to Engineering Heat Transfer", 1st Edition. Cambridge University Press, 2021. [2] Y. A. Cengel and A. J. Ghajar, "Heat And Mass Transfer Fundamentals and Applications", 6th Edition. New York, McGraw Hill Education, 2020. [3] T.L. Bergman, A. S. Lavine, F. P. Incropera, D. P. Dewitt, "Fundamentals of Heat and Mass Transfer", 7th Edition, John Wiley, 2011. """ # def straightparabolic(self, length=1, width=1, thickness=1, heattransfercoefficient=1, thermalconductivity=1): try: self.C1 = math.sqrt(1 + (self.thickness/self.length)**2) self.surfacearea = self.width * (self.C1 *self.length + self.length**2 / self.thickness * math.log(self.thickness/self.length + self.C1)) #surface area of fin self.mL = math.sqrt(2 * self.heattransfercoefficient / self.thermalconductivity / self.thickness) * self.length self.efficiency = 2 / (math.sqrt(4*self.mL**2 + 1) + 1) return self.efficiency, self.surfacearea except: print("Check your 'Fin()' object. You maynot have defined all required parameters.") print("\nstraightparabolic fin requires: length=someValue, width=SomeValue, thickness=someValue, heattransfercoefficient=someValue, thermalconductivity=someValue")
[docs] def pintriangular(self): r""" Computes fin efficiency for a pintriangular fin. Parameters ---------- `None_required` : 'None' Attributes that are already defined are used in calculation. Returns ------- tuple containing efficiency and surfacearea : (efficiency : `int or float`, surfacearea : `int or float`) Examples -------- First import the module **fins**. >>> from pychemengg.heattransfer import fins as fins >>> fin1 = fins.Fin(length=0.015, diameter=0.0015, heattransfercoefficient=50, thermalconductivity=70) fin1.pintriangular() >>> fin1.pintriangular() (0.9354407776522699, 3.538706842238283e-05) References ---------- [1] G. F. Nellis and S. A. Klein, "Introduction to Engineering Heat Transfer", 1st Edition. Cambridge University Press, 2021. [2] Y. A. Cengel and A. J. Ghajar, "Heat And Mass Transfer Fundamentals and Applications", 6th Edition. New York, McGraw Hill Education, 2020. [3] T.L. Bergman, A. S. Lavine, F. P. Incropera, D. P. Dewitt, "Fundamentals of Heat and Mass Transfer", 7th Edition, John Wiley, 2011. """ # def pintriangular(self, length=1, diameter=1, heattransfercoefficient=1, thermalconductivity=1): try: besseli = scipy.special.iv # renaming scipy function for clarity self.surfacearea = math.pi * self.diameter / 2 * math.sqrt(self.length**2 + (self.diameter/2)**2) #surface area of fin self.mL = math.sqrt(4*self.heattransfercoefficient/self.thermalconductivity/self.diameter) * self.length self.efficiency = 2 * besseli(2, 2*self.mL) / (self.mL*besseli(1,2*self.mL)); return self.efficiency, self.surfacearea except: print("Check your 'Fin()' object. You maynot have defined all required parameters.") print("\npintriangular fin requires: length=someValue, diameter=SomeValue, heattransfercoefficient=someValue, thermalconductivity=someValue")
[docs] def rectangularannular(self): r""" Computes fin efficiency for a rectangularannular fin. Parameters ---------- `None_required` : 'None' Attributes that are already defined are used in calculation. Returns ------- tuple containing efficiency and surfacearea : (efficiency : `int or float`, surfacearea : `int or float`) Examples -------- First import the module **fins**. >>> from pychemengg.heattransfer import fins as fins >>> fin1 = fins.Fin(inner_radius=0.025, outer_radius=0.045, thickness=0.001, heattransfercoefficient=50, thermalconductivity=210) >>> fin1.rectangularannular() (0.922097299521443, 0.00879645943005142) References ---------- [1] G. F. Nellis and S. A. Klein, "Introduction to Engineering Heat Transfer", 1st Edition. Cambridge University Press, 2021. [2] Y. A. Cengel and A. J. Ghajar, "Heat And Mass Transfer Fundamentals and Applications", 6th Edition. New York, McGraw Hill Education, 2020. [3] T.L. Bergman, A. S. Lavine, F. P. Incropera, D. P. Dewitt, "Fundamentals of Heat and Mass Transfer", 7th Edition, John Wiley, 2011. """ # def rectangularannular(self, inner_radius=1, outer_radius=1, thickness=1, heattransfercoefficient=1, thermalconductivity=1): try: self.surfacearea = 2 * math.pi * (self.outer_radius**2 - self.inner_radius**2) #surface area of fin mro = math.sqrt(2 * self.heattransfercoefficient / self.thermalconductivity / self.thickness) * self.outer_radius mri = math.sqrt(2 * self.heattransfercoefficient / self.thermalconductivity / self.thickness) * self.inner_radius part1 = 2 * mri/(mro**2 - mri**2) besselk = scipy.special.kv # renaming scipy function for clarity besseli = scipy.special.iv # renaming scipy function for clarity part2 = besselk(1,mri)*besseli(1,mro) - besseli(1,mri)*besselk(1,mro) part3 = besseli(0,mri)*besselk(1,mro) + besselk(0,mri)*besseli(1,mro) self.efficiency = part1 * part2/part3 return self.efficiency, self.surfacearea except: print("Check your 'Fin()' object. You maynot have defined all required parameters.") print("\nrectangularannular fin requires: inner_radius=someValue, outer_radius=someValue, thickness=someValue, heattransfercoefficient=someValue, thermalconductivity=someValue")