Heat exchanger sizing and rating (ht.hx)¶

ht.hx.
effectiveness_from_NTU
(NTU, Cr, subtype='counterflow')[source]¶ Returns the effectiveness of a heat exchanger at a specified heat capacity rate, number of transfer units, and configuration. The following configurations are supported:
 Counterflow (ex. doublepipe)
 Parallel (ex. double pipe inefficient configuration)
 Shell and tube exchangers with even numbers of tube passes, one or more shells in series
 Crossflow, single pass, fluids unmixed
 Crossflow, single pass, Cmax mixed, Cmin unmixed
 Crossflow, single pass, Cmin mixed, Cmax unmixed
 Boiler or condenser
These situations are normally not those which occur in real heat exchangers, but are useful for academic purposes. More complicated expressions are available for other methods. These equations are confirmed in [1], [2], and [3].
For parallel flow heat exchangers:
\[\epsilon = \frac{1  \exp[NTU(1+C_r)]}{1+C_r}\]For counterflow heat exchangers:
\[ \begin{align}\begin{aligned}\epsilon = \frac{1  \exp[NTU(1C_r)]}{1C_r\exp[NTU(1C_r)]},\; C_r < 1\\\epsilon = \frac{NTU}{1+NTU},\; C_r = 1\end{aligned}\end{align} \]For TEMA E shellandtube heat exchangers with one shell pass, 2n tube passes:
\[\epsilon_1 = 2\left\{1 + C_r + \sqrt{1+C_r^2}\times\frac{1+\exp [(NTU)_1\sqrt{1+C_r^2}]}{1\exp[(NTU)_1\sqrt{1+C_r^2}]}\right\}^{1}\]For TEMA E shellandtube heat exchangers with more than one shell pass, 2n tube passes (this model assumes each exchanger has an equal share of the overall NTU or said more plainly, the same UA):
\[\epsilon = \left[\left(\frac{1\epsilon_1 C_r}{1\epsilon_1}\right)^2 1\right]\left[\left(\frac{1\epsilon_1 C_r}{1\epsilon_1}\right)^n  C_r\right]^{1}\]For crossflow (singlepass) heat exchangers with both fluids unmixed, there is an approximate and an exact formula. The approximate one is:
\[\epsilon = 1  \exp\left[\left(\frac{1}{C_r}\right) (NTU)^{0.22}\left\{\exp\left[C_r(NTU)^{0.78}\right]1\right\}\right]\]The exact solution for crossflow (fluids unmixed) uses SciPy’s quad to perform an integral (there is no analytical integral solution available). \(I_0(v)\) is the modified Bessel function of the first kind. This formula was developed in [4].
\[\epsilon = \frac{1}{C_r}  \frac{\exp(C_r \cdot NTU)}{2(C_r NTU)^2} \int_0^{2 NTU\sqrt{C_r}} \left(1 + NTU  \frac{v^2}{4C_r NTU}\right) \exp\left(\frac{v^2}{4C_r NTU}\right)v I_0(v) dv\]For crossflow (singlepass) heat exchangers with Cmax mixed, Cmin unmixed:
\[\epsilon = \left(\frac{1}{C_r}\right)(1  \exp\left\{C_r[1\exp(NTU)]\right\})\]For crossflow (singlepass) heat exchangers with Cmin mixed, Cmax unmixed:
\[\epsilon = 1  \exp(C_r^{1}\{1  \exp[C_r(NTU)]\})\]For cases where Cr = 0, as in an exchanger with latent heat exchange, flow arrangement does not matter:
\[\epsilon = 1  \exp(NTU)\]Parameters:  NTU : float
Thermal Number of Transfer Units []
 Cr : float
The heat capacity rate ratio, of the smaller fluid to the larger fluid, []
 subtype : str, optional
The subtype of exchanger; one of ‘counterflow’, ‘parallel’, ‘crossflow’ ‘crossflow approximate’, ‘crossflow, mixed Cmin’, ‘crossflow, mixed Cmax’, ‘boiler’, ‘condenser’, ‘S&T’, or ‘nS&T’ where n is the number of shell and tube exchangers in a row.
Returns:  effectiveness : float
The thermal effectiveness of the heat exchanger, []
Notes
Once the effectiveness of the exchanger has been calculated, the total heat transferred can be calculated according to the following formulas, depending on which stream temperatures are known:
If the inlet temperatures for both sides are known:
\[Q=\epsilon C_{min}(T_{h,i}T_{c,i})\]If the outlet temperatures for both sides are known:
\[Q = \frac{\epsilon C_{min}C_{hot}C_{cold}(T_{c,o}T_{h,o})} {\epsilon C_{min}(C_{hot} +C_{cold})  (C_{hot}C_{cold}) }\]If the hot inlet and cold outlet are known:
\[Q = \frac{\epsilon C_{min}C_c(T_{co}T_{hi})}{\epsilon C_{min}C_c}\]If the hot outlet stream and cold inlet stream are known:
\[Q = \frac{\epsilon C_{min}C_h(T_{ci}T_{ho})}{\epsilon C_{min}C_h}\]If the inlet and outlet conditions for a single side are known, the effectiveness wasn’t needed for it to be calculated. For completeness, the formulas are as follows:
\[Q = C_c(T_{c,o}  T_{c,i}) = C_h(T_{h,i}  T_{h,o})\]There is also a term called \(Q_{max}\), which is the heat which would have been transferred if the effectiveness was 1. It is calculated as follows:
\[Q_{max} = \frac{Q}{\text{effectiveness}}\]References
[1] (1, 2) Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. [2] (1, 2) Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [3] (1, 2, 3) Holman, Jack. Heat Transfer. 10th edition. Boston: McGrawHill Education, 2009. [4] (1, 2) Triboix, Alain. “Exact and Approximate Formulas for Cross Flow Heat Exchangers with Unmixed Fluids.” International Communications in Heat and Mass Transfer 36, no. 2 (February 1, 2009): 12124. doi:10.1016/j.icheatmasstransfer.2008.10.012. Examples
Worst case, parallel flow:
>>> effectiveness_from_NTU(NTU=5, Cr=0.7, subtype='parallel') 0.5881156068417585
Crossflow, somewhat higher effectiveness:
>>> effectiveness_from_NTU(NTU=5, Cr=0.7, subtype='crossflow') 0.8444821799748551
Counterflow, better than either crossflow or parallel flow:
>>> effectiveness_from_NTU(NTU=5, Cr=0.7, subtype='counterflow') 0.9206703686051108
One shell and tube heat exchanger gives worse performance than counterflow, but they are designed to be economical and compact which a counterflow exchanger would not be. As the number of shells approaches infinity, the counterflow result is obtained exactly.
>>> effectiveness_from_NTU(NTU=5, Cr=0.7, subtype='S&T') 0.6834977044311439 >>> effectiveness_from_NTU(NTU=5, Cr=0.7, subtype='50S&T') 0.9205058702789254
Overall case of rating an existing heat exchanger where a known flowrate of steam and oil are contacted in crossflow, with the steam side mixed (example 109 in [3]):
>>> U = 275 # W/m^2/K >>> A = 10.82 # m^2 >>> Cp_oil = 1900 # J/kg/K >>> Cp_steam = 1860 # J/kg/K >>> m_steam = 5.2 # kg/s >>> m_oil = 0.725 # kg/s >>> Thi = 130 # °C >>> Tci = 15 # °C >>> Cmin = calc_Cmin(mh=m_steam, mc=m_oil, Cph=Cp_steam, Cpc=Cp_oil) >>> Cmax = calc_Cmax(mh=m_steam, mc=m_oil, Cph=Cp_steam, Cpc=Cp_oil) >>> Cr = calc_Cr(mh=m_steam, mc=m_oil, Cph=Cp_steam, Cpc=Cp_oil) >>> NTU = NTU_from_UA(UA=U*A, Cmin=Cmin) >>> eff = effectiveness_from_NTU(NTU=NTU, Cr=Cr, subtype='crossflow, mixed Cmax') >>> Q = eff*Cmin*(Thi  Tci) >>> Tco = Tci + Q/(m_oil*Cp_oil) >>> Tho = Thi  Q/(m_steam*Cp_steam) >>> Cmin, Cmax, Cr (1377.5, 9672.0, 0.14242142266335814) >>> NTU, eff, Q (2.160072595281307, 0.8312180361425988, 131675.32715043944) >>> Tco, Tho (110.59007415639887, 116.38592564614977)
Alternatively, if only the outlet temperatures had been known:
>>> Tco = 110.59007415639887 >>> Tho = 116.38592564614977 >>> Cc, Ch = Cmin, Cmax # In this case but not always >>> Q = eff*Cmin*Cc*Ch*(Tco  Tho)/(eff*Cmin*(Cc+Ch)  Ch*Cc) >>> Thi = Tho + Q/Ch >>> Tci = Tco  Q/Cc >>> Q, Tci, Thi (131675.32715043964, 14.999999999999858, 130.00000000000003)

ht.hx.
NTU_from_effectiveness
(effectiveness, Cr, subtype='counterflow')[source]¶ Returns the Number of Transfer Units of a heat exchanger at a specified heat capacity rate, effectiveness, and configuration. The following configurations are supported:
 Counterflow (ex. doublepipe)
 Parallel (ex. double pipe inefficient configuration)
 Shell and tube exchangers with even numbers of tube passes, one or more shells in series (TEMA E (one pass shell) only)
 Crossflow, single pass, fluids unmixed
 Crossflow, single pass, Cmax mixed, Cmin unmixed
 Crossflow, single pass, Cmin mixed, Cmax unmixed
 Boiler or condenser
These situations are normally not those which occur in real heat exchangers, but are useful for academic purposes. More complicated expressions are available for other methods. These equations are confirmed in [1], [2], and [3].
For parallel flow heat exchangers:
\[NTU = \frac{\ln[1  \epsilon(1+C_r)]}{1+C_r}\]For counterflow heat exchangers:
\[ \begin{align}\begin{aligned}NTU = \frac{1}{C_r1}\ln\left(\frac{\epsilon1}{\epsilon C_r1}\right)\\NTU = \frac{\epsilon}{1\epsilon} \text{ if } C_r = 1\end{aligned}\end{align} \]For TEMA E shellandtube heat exchangers with one shell pass, 2n tube passes:
\[ \begin{align}\begin{aligned}(NTU)_1 = (1 + C_r^2)^{0.5}\ln\left(\frac{E1}{E+1}\right)\\E = \frac{2/\epsilon_1  (1 + C_r)}{(1 + C_r^2)^{0.5}}\end{aligned}\end{align} \]For TEMA E shellandtube heat exchangers with more than one shell pass, 2n tube passes (this model assumes each exchanger has an equal share of the overall NTU or said more plainly, the same UA):
\[ \begin{align}\begin{aligned}\epsilon_1 = \frac{F1}{FC_r}\\F = \left(\frac{\epsilon C_r1}{\epsilon1}\right)^{1/n}\\NTU = n(NTU)_1\end{aligned}\end{align} \]For crossflow (singlepass) heat exchangers with both fluids unmixed, there is no analytical solution. However, the function is monotonically increasing, and a closedform solver is implemented as ‘crossflow approximate’, guaranteed to solve for \(10^{7} < NTU < 10^5\). The exact solution for ‘crossflow’ uses the approximate solution’s initial guess as a starting point for Newton’s method. Some issues are noted at effectivenesses higher than 0.9 and very high NTUs, because the numerical integral term approaches 1 too quickly.
For crossflow (singlepass) heat exchangers with Cmax mixed, Cmin unmixed:
\[NTU = \ln\left[1 + \frac{1}{C_r}\ln(1  \epsilon C_r)\right]\]For crossflow (singlepass) heat exchangers with Cmin mixed, Cmax unmixed:
\[NTU = \frac{1}{C_r}\ln[C_r\ln(1\epsilon)+1]\]For cases where Cr = 0, as in an exchanger with latent heat exchange, flow arrangement does not matter:
\[NTU = \ln(1\epsilon)\]Parameters:  effectiveness : float
The thermal effectiveness of the heat exchanger, []
 Cr : float
The heat capacity rate ratio, of the smaller fluid to the larger fluid, []
 subtype : str, optional
The subtype of exchanger; one of ‘counterflow’, ‘parallel’, ‘crossflow’ ‘crossflow approximate’, ‘crossflow, mixed Cmin’, ‘crossflow, mixed Cmax’, ‘boiler’, ‘condenser’, ‘S&T’, or ‘nS&T’ where n is the number of shell and tube exchangers in a row.
Returns:  NTU : float
Thermal Number of Transfer Units []
Notes
Unlike
ht.hx.effectiveness_from_NTU
, not all inputs can calculate the NTU  many exchanger types have effectiveness limits below 1 which depend on Cr and the number of shells in the case of heat exchangers. If an impossible input is given, an error will be raised and the maximum possible effectiveness will be printed.>>> NTU_from_effectiveness(.99, Cr=.7, subtype='5S&T') Traceback (most recent call last): Exception: The specified effectiveness is not physically possible for this configuration; the maximum effectiveness possible is 0.974122977755.
References
[1] (1, 2) Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. [2] (1, 2) Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [3] (1, 2, 3) Holman, Jack. Heat Transfer. 10th edition. Boston: McGrawHill Education, 2009. Examples
Worst case, parallel flow:
>>> NTU_from_effectiveness(effectiveness=0.5881156068417585, Cr=0.7, subtype='parallel') 5.000000000000012
Crossflow, somewhat higher effectiveness:
>>> NTU_from_effectiveness(effectiveness=0.8444821799748551, Cr=0.7, subtype='crossflow') 5.000000000000859
Counterflow, better than either crossflow or parallel flow:
>>> NTU_from_effectiveness(effectiveness=0.9206703686051108, Cr=0.7, subtype='counterflow') 5.0
Shell and tube exchangers:
>>> NTU_from_effectiveness(effectiveness=0.6834977044311439, Cr=0.7, subtype='S&T') 5.000000000000071 >>> NTU_from_effectiveness(effectiveness=0.9205058702789254, Cr=0.7, subtype='50S&T') 4.999999999999996
Overall case of rating an existing heat exchanger where a known flowrate of steam and oil are contacted in crossflow, with the steam side mixed, known inlet and outlet temperatures, and unknown UA (based on example 108 in [3]):
>>> Cp_oil = 1900 # J/kg/K >>> Cp_steam = 1860 # J/kg/K >>> m_steam = 5.2 # kg/s >>> m_oil = 1.45 # kg/s >>> Thi = 130 # °C >>> Tci = 15 # °C >>> Tco = 85 # °C # Design specification >>> Q = Cp_oil*m_oil*(TciTco) >>> dTh = Q/(m_steam*Cp_steam) >>> Tho = Thi + dTh >>> Cmin = calc_Cmin(mh=m_steam, mc=m_oil, Cph=Cp_steam, Cpc=Cp_oil) >>> Cmax = calc_Cmax(mh=m_steam, mc=m_oil, Cph=Cp_steam, Cpc=Cp_oil) >>> Cr = calc_Cr(mh=m_steam, mc=m_oil, Cph=Cp_steam, Cpc=Cp_oil) >>> effectiveness = Q/Cmin/(ThiTci) >>> NTU = NTU_from_effectiveness(effectiveness, Cr, subtype='crossflow, mixed Cmax') >>> UA = UA_from_NTU(NTU, Cmin) >>> U = 200 # Assume this was calculated; would actually need to be obtained iteratively as U depends on the exchanger geometry >>> A = UA/U >>> Tho, Cmin, Cmax, Cr (110.06100082712986, 2755.0, 9672.0, 0.2848428453267163) >>> effectiveness, NTU, UA, A (0.6086956521739131, 1.1040839095588, 3041.751170834494, 15.208755854172471)

ht.hx.
calc_Cmin
(mh, mc, Cph, Cpc)[source]¶ Returns the heat capacity rate for the minimum stream having flows mh and mc, with averaged heat capacities Cph and Cpc.
\[ \begin{align}\begin{aligned}C_c = m_cC_{p,c}\\C_h = m_h C_{p,h}\\C_{min} = \min(C_c, C_h)\end{aligned}\end{align} \]Parameters:  mh : float
Mass flow rate of hot stream, [kg/s]
 mc : float
Mass flow rate of cold stream, [kg/s]
 Cph : float
Averaged heat capacity of hot stream, [J/kg/K]
 Cpc : float
Averaged heat capacity of cold stream, [J/kg/K]
Returns:  Cmin : float
The heat capacity rate of the smaller fluid, [W/K]
Notes
Used with the effectiveness method for heat exchanger design. Technically, it doesn’t matter if the hot and cold streams are in the right order for the input, but it is easiest to use this function when the order is specified.
References
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. Examples
>>> calc_Cmin(mh=22., mc=5.5, Cph=2200, Cpc=4400.) 24200.0

ht.hx.
calc_Cmax
(mh, mc, Cph, Cpc)[source]¶ Returns the heat capacity rate for the maximum stream having flows mh and mc, with averaged heat capacities Cph and Cpc.
\[ \begin{align}\begin{aligned}C_c = m_cC_{p,c}\\C_h = m_h C_{p,h}\\C_{max} = \max(C_c, C_h)\end{aligned}\end{align} \]Parameters:  mh : float
Mass flow rate of hot stream, [kg/s]
 mc : float
Mass flow rate of cold stream, [kg/s]
 Cph : float
Averaged heat capacity of hot stream, [J/kg/K]
 Cpc : float
Averaged heat capacity of cold stream, [J/kg/K]
Returns:  Cmax : float
The heat capacity rate of the larger fluid, [W/K]
Notes
Used with the effectiveness method for heat exchanger design. Technically, it doesn’t matter if the hot and cold streams are in the right order for the input, but it is easiest to use this function when the order is specified.
References
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. Examples
>>> calc_Cmax(mh=22., mc=5.5, Cph=2200, Cpc=4400.) 48400.0

ht.hx.
calc_Cr
(mh, mc, Cph, Cpc)[source]¶ Returns the heat capacity rate ratio for a heat exchanger having flows mh and mc, with averaged heat capacities Cph and Cpc.
\[C_r=C^*=\frac{C_{min}}{C_{max}}\]Parameters:  mh : float
Mass flow rate of hot stream, [kg/s]
 mc : float
Mass flow rate of cold stream, [kg/s]
 Cph : float
Averaged heat capacity of hot stream, [J/kg/K]
 Cpc : float
Averaged heat capacity of cold stream, [J/kg/K]
Returns:  Cr : float
The heat capacity rate ratio, of the smaller fluid to the larger fluid, [W/K]
Notes
Used with the effectiveness method for heat exchanger design. Technically, it doesn’t matter if the hot and cold streams are in the right order for the input, but it is easiest to use this function when the order is specified.
References
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. Examples
>>> calc_Cr(mh=22., mc=5.5, Cph=2200, Cpc=4400.) 0.5

ht.hx.
NTU_from_UA
(UA, Cmin)[source]¶ Returns the Number of Transfer Units for a heat exchanger having UA, and with Cmin heat capacity rate.
\[NTU = \frac{UA}{C_{min}}\]Parameters:  UA : float
Combined Areaheat transfer coefficient term, [W/K]
 Cmin : float
The heat capacity rate of the smaller fluid, [W/K]
Returns:  NTU : float
Thermal Number of Transfer Units []
Notes
Used with the effectiveness method for heat exchanger design.
References
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. Examples
>>> NTU_from_UA(4400., 22.) 200.0

ht.hx.
UA_from_NTU
(NTU, Cmin)[source]¶ Returns the combined areaheat transfer term for a heat exchanger having a specified NTU, and with Cmin heat capacity rate.
\[UA = NTU C_{min}\]Parameters:  NTU : float
Thermal Number of Transfer Units []
 Cmin : float
The heat capacity rate of the smaller fluid, [W/K]
Returns:  UA : float
Combined areaheat transfer coefficient term, [W/K]
Notes
Used with the effectiveness method for heat exchanger design.
References
[1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ: Wiley, 2011. Examples
>>> UA_from_NTU(200., 22.) 4400.0

ht.hx.
effectiveness_NTU_method
(mh, mc, Cph, Cpc, subtype='counterflow', Thi=None, Tho=None, Tci=None, Tco=None, UA=None)[source]¶ Wrapper for the various effectivenessNTU method function calls, which can solve a heat exchanger. The heat capacities and mass flows of each stream and the type of the heat exchanger are always required. As additional inputs, one combination of the following inputs is required:
 Three of the four inlet and outlet stream temperatures.
 Temperatures for the cold outlet and hot inlet and UA
 Temperatures for the cold outlet and hot outlet and UA
 Temperatures for the cold inlet and hot inlet and UA
 Temperatures for the cold inlet and hot outlet and UA
Parameters:  mh : float
Mass flow rate of hot stream, [kg/s]
 mc : float
Mass flow rate of cold stream, [kg/s]
 Cph : float
Averaged heat capacity of hot stream, [J/kg/K]
 Cpc : float
Averaged heat capacity of cold stream, [J/kg/K]
 subtype : str, optional
The subtype of exchanger; one of ‘counterflow’, ‘parallel’, ‘crossflow’ ‘crossflow, mixed Cmin’, ‘crossflow, mixed Cmax’, ‘boiler’, ‘condenser’, ‘S&T’, or ‘nS&T’ where n is the number of shell and tube exchangers in a row
 Thi : float, optional
Inlet temperature of hot fluid, [K]
 Tho : float, optional
Outlet temperature of hot fluid, [K]
 Tci : float, optional
Inlet temperature of cold fluid, [K]
 Tco : float, optional
Outlet temperature of cold fluid, [K]
 UA : float, optional
Combined Areaheat transfer coefficient term, [W/K]
Returns:  results : dict
 Q : Heat exchanged in the heat exchanger, [W]
 UA : Combined areaheat transfer coefficient term, [W/K]
 Cr : The heat capacity rate ratio, of the smaller fluid to the larger fluid, [W/K]
 Cmin : The heat capacity rate of the smaller fluid, [W/K]
 Cmax : The heat capacity rate of the larger fluid, [W/K]
 effectiveness : The thermal effectiveness of the heat exchanger, []
 NTU : Thermal Number of Transfer Units []
 Thi : Inlet temperature of hot fluid, [K]
 Tho : Outlet temperature of hot fluid, [K]
 Tci : Inlet temperature of cold fluid, [K]
 Tco : Outlet temperature of cold fluid, [K]
See also
Examples
Solve a heat exchanger to determine UA and effectiveness given the configuration, flows, subtype, the cold inlet/outlet temperatures, and the hot stream inlet temperature.
>>> pprint(effectiveness_NTU_method(mh=5.2, mc=1.45, Cph=1860., Cpc=1900, ... subtype='crossflow, mixed Cmax', Tci=15, Tco=85, Thi=130)) {'Cmax': 9672.0, 'Cmin': 2755.0, 'Cr': 0.2848428453267163, 'NTU': 1.1040839095588, 'Q': 192850.0, 'Tci': 15, 'Tco': 85, 'Thi': 130, 'Tho': 110.06100082712986, 'UA': 3041.751170834494, 'effectiveness': 0.6086956521739131}
Solve the same heat exchanger with the UA specified, and known inlet temperatures:
>>> pprint(effectiveness_NTU_method(mh=5.2, mc=1.45, Cph=1860., Cpc=1900, ... subtype='crossflow, mixed Cmax', Tci=15, Thi=130, UA=3041.75)) {'Cmax': 9672.0, 'Cmin': 2755.0, 'Cr': 0.2848428453267163, 'NTU': 1.1040834845735028, 'Q': 192849.96310220254, 'Tci': 15, 'Tco': 84.99998660697007, 'Thi': 130, 'Tho': 110.06100464203861, 'UA': 3041.75, 'effectiveness': 0.6086955357127832}

ht.hx.
F_LMTD_Fakheri
(Thi, Tho, Tci, Tco, shells=1)[source]¶ Calculates the logmean temperature difference correction factor Ft for a shellandtube heat exchanger with one or an even number of tube passes, and a given number of shell passes, with the expression given in [1] and also shown in [2].
\[ \begin{align}\begin{aligned}F_t=\frac{S\ln W}{\ln \frac{1+WS+SW}{1+W+SSW}}\\S = \frac{\sqrt{R^2+1}}{R1}\\W = \left(\frac{1PR}{1P}\right)^{1/N}\\R = \frac{T_{in}T_{out}}{t_{out}t_{in}}\\P = \frac{t_{out}t_{in}}{T_{in}t_{in}}\end{aligned}\end{align} \]If R = 1 and logarithms cannot be evaluated:
\[ \begin{align}\begin{aligned}W' = \frac{NNP}{NNP+P}\\F_t = \frac{\sqrt{2}\frac{1W'}{W'}}{\ln\frac{\frac{W'}{1W'}+\frac{1} {\sqrt{2}}}{\frac{W'}{1W'}\frac{1}{\sqrt{2}}}}\end{aligned}\end{align} \]Parameters:  Thi : float
Inlet temperature of hot fluid, [K]
 Tho : float
Outlet temperature of hot fluid, [K]
 Tci : float
Inlet temperature of cold fluid, [K]
 Tco : float
Outlet temperature of cold fluid, [K]
 shells : int, optional
Number of shellside passes, []
Returns:  Ft : float
Logmean temperature difference correction factor, []
Notes
This expression is symmetric  the same result is calculated if the cold side values are swapped with the hot side values. It also does not depend on the units of the temperature given.
References
[1] (1, 2) Fakheri, Ahmad. “A General Expression for the Determination of the Log Mean Temperature Correction Factor for Shell and Tube Heat Exchangers.” Journal of Heat Transfer 125, no. 3 (May 20, 2003): 52730. doi:10.1115/1.1571078. [2] (1, 2) Hall, Stephen. Rules of Thumb for Chemical Engineers, Fifth Edition. Oxford; Waltham, MA: ButterworthHeinemann, 2012. Examples
>>> F_LMTD_Fakheri(Tci=15, Tco=85, Thi=130, Tho=110, shells=1) 0.9438358829645933

ht.hx.
temperature_effectiveness_basic
(R1, NTU1, subtype='crossflow')[source]¶ Returns temperature effectiveness P1 of a heat exchanger with a specified heat capacity ratio, number of transfer units NTU1, and of type subtype. This function performs the calculations for the basic cases, not actual shellandtube exchangers. The supported cases are as follows:
 Counterflow (ex. doublepipe)
 Parallel (ex. double pipe inefficient configuration)
 Crossflow, single pass, fluids unmixed
 Crossflow, single pass, fluid 1 mixed, fluid 2 unmixed
 Crossflow, single pass, fluid 2 mixed, fluid 1 unmixed
 Crossflow, single pass, both fluids mixed
For parallel flow heat exchangers (this configuration is symmetric):
\[P_1 = \frac{1  \exp[NTU_1(1+R_1)]}{1 + R_1}\]For counterflow heat exchangers (this configuration is symmetric):
\[P_1 = \frac{1  \exp[NTU_1(1R_1)]}{1  R_1 \exp[NTU_1(1R_1)]}\]For crossflow (singlepass) heat exchangers with both fluids unmixed (this configuration is symmetric), there are two solutions available; a frequently cited approximation and an exact solution which uses a numerical integration developed in [4]. The approximate solution is:
\[P_1 \approx 1  \exp\left[\frac{NTU_1^{0.22}}{R_1} (\exp(R_1 NTU_1^{0.78})1)\right]\]The exact solution for crossflow (single pass, fluids unmixed) is:
\[\epsilon = \frac{1}{R_1}  \frac{\exp(R_1 \cdot NTU_1)}{2(R_1 NTU_1)^2} \int_0^{2 NTU_1\sqrt{R_1}} \left(1 + NTU_1  \frac{v^2}{4R_1 NTU_1} \right)\exp\left(\frac{v^2}{4R_1 NTU_1}\right)v I_0(v) dv\]For crossflow (singlepass) heat exchangers with fluid 1 mixed, fluid 2 unmixed:
\[ \begin{align}\begin{aligned}P_1 = 1  \exp\left(\frac{K}{R_1}\right)\\K = 1  \exp(R_1 NTU_1)\end{aligned}\end{align} \]For crossflow (singlepass) heat exchangers with fluid 2 mixed, fluid 1 unmixed:
\[ \begin{align}\begin{aligned}P_1 = \frac{1  \exp(K R_1)}{R_1}\\K = 1  \exp(NTU_1)\end{aligned}\end{align} \]For crossflow (singlepass) heat exchangers with both fluids mixed (this configuration is symmetric):
\[ \begin{align}\begin{aligned}P_1 = \left(\frac{1}{K_1} + \frac{R_1}{K_2}  \frac{1}{NTU_1}\right)^{1}\\K_1 = 1  \exp(NTU_1)\\K_2 = 1  \exp(R_1 NTU_1)\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 subtype : float
The type of heat exchanger; one of ‘counterflow’, ‘parallel’, ‘crossflow’, ‘crossflow approximate’, ‘crossflow, mixed 1’, ‘crossflow, mixed 2’, ‘crossflow, mixed 1&2’.
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
The crossflow case is an approximation only. There is an actual solution involving an infinite sum. This was implemented, but found to differ substantially so the approximation is used instead.
References
[1] Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [3] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. [4] (1, 2) Triboix, Alain. “Exact and Approximate Formulas for Cross Flow Heat Exchangers with Unmixed Fluids.” International Communications in Heat and Mass Transfer 36, no. 2 (February 1, 2009): 12124. doi:10.1016/j.icheatmasstransfer.2008.10.012. Examples
>>> temperature_effectiveness_basic(R1=.1, NTU1=4, subtype='counterflow') 0.9753412729761263

ht.hx.
temperature_effectiveness_TEMA_J
(R1, NTU1, Ntp)[source]¶ Returns temperature effectiveness P1 of a TEMA J type heat exchanger with a specified heat capacity ratio, number of transfer units NTU1, and of number of tube passes Ntp. The supported cases are as follows:
 One tube pass (shell fluid mixed)
 Two tube passes (shell fluid mixed, tube pass mixed between passes)
 Four tube passes (shell fluid mixed, tube pass mixed between passes)
For 11 TEMA J shell and tube exchangers, shell and tube fluids mixed:
\[P_1 = \frac{1}{R_1}\left[1 \frac{(2R_1)(2E + R_1 B)}{(2+R_1) (2E  R_1/B)}\right]\]For 12 TEMA J, shell and tube fluids mixed. There are two possible arrangements for the flow and the number of tube passes, but the equation is the same in both:
\[ \begin{align}\begin{aligned}P_1 = \left[1 + \frac{R_1}{2} + \lambda B  2\lambda C D\right]^{1}\\B = \frac{(A^\lambda +1)}{A^\lambda 1}\\C = \frac{A^{(1 + \lambda)/2}}{\lambda  1 + (1 + \lambda)A^\lambda}\\D = 1 + \frac{\lambda A^{(\lambda1)/2}}{A^\lambda 1}\\A = \exp(NTU_1)\\\lambda = (1 + R_1^2/4)^{0.5}\end{aligned}\end{align} \]For 14 TEMA J, shell and tube exchanger with both sides mixed:
\[ \begin{align}\begin{aligned}P_1 = \left[1 + \frac{R_1}{4}\left(\frac{1+3E}{1+E}\right) + \lambda B  2 \lambda C D\right]^{1}\\B = \frac{A^\lambda +1}{A^\lambda 1}\\C = \frac{A^{(1+\lambda)/2}}{\lambda  1 + (1 + \lambda)A^\lambda}\\D = 1 + \frac{\lambda A^{(\lambda1)/2}}{A^\lambda 1}\\A = \exp(NTU_1)\\E = \exp(R_1 NTU_1/2)\\\lambda = (1 + R_1^2/16)^{0.5}\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1, 2, or 4, []
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
For numbers of tube passes that are not 1, 2, or 4, an exception is raised. The convention for the formulas in [1] and [3] are with the shell side as side 1, and the tube side as side 2. [2] has formulas with the opposite convention.
References
[1] (1, 2) Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] (1, 2) Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [3] (1, 2) Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. Examples
>>> temperature_effectiveness_TEMA_J(R1=1/3., NTU1=1., Ntp=1) 0.5699085193651295

ht.hx.
temperature_effectiveness_TEMA_H
(R1, NTU1, Ntp, optimal=True)[source]¶ Returns temperature effectiveness P1 of a TEMA H type heat exchanger with a specified heat capacity ratio, number of transfer units NTU1, and of number of tube passes Ntp. For the two tube pass case, there are two possible orientations, one inefficient and one efficient controlled by the optimal option. The supported cases are as follows:
 One tube pass (tube fluid split into two streams individually mixed, shell fluid mixed)
 Two tube passes (shell fluid mixed, tube pass mixed between passes)
 Two tube passes (shell fluid mixed, tube pass mixed between passes, inlet tube side next to inlet shellside)
11 TEMA H, tube fluid split into two streams individually mixed, shell fluid mixed:
\[ \begin{align}\begin{aligned}P_1 = E[1 + (1  BR_1/2)(1  A R_1/2 + ABR_1)]  AB(1  BR_1/2)\\A = \frac{1}{1 + R_1/2}\{1  \exp[NTU_1(1 + R_1/2)/2]\}\\B = \frac{1D}{1R_1 D/2}\\D = \exp[NTU_1(1R_1/2)/2]\\E = (A + B  ABR_1/2)/2\end{aligned}\end{align} \]12 TEMA H, shell and tube fluids mixed in each pass at the cross section:
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{R_1}\left[1  \frac{(1D)^4}{B  4G/R_1}\right]\\B = (1+H)(1+E)^2\\G = (1D)^2(D^2 + E^2) + D^2(1 + E)^2\\H = [1  \exp(2\beta)]/(4/R_1 1)\\E = [1  \exp(\beta)]/(4/R_1  1)\\D = [1  \exp(\alpha)]/(4/R_1 + 1)\\\alpha = NTU_1(4 + R_1)/8\\\beta = NTU_1(4R_1)/8\end{aligned}\end{align} \]12 TEMA H, shell and tube fluids mixed in each pass at the cross section but with the inlet tube stream coming in next to the shell fluid inlet in an inefficient way (this is only shown in [2], and the stream 1/2 convention in it is different but converted here; P1 is still returned):
\[ \begin{align}\begin{aligned}P_2 = \left[1  \frac{B + 4GR_2}{(1D)^4}\right]\\B = (1 + H)(1 + E)^2\\G = (1D)^2(D^2 + E^2) + D^2(1 + E)^2\\D = \frac{1  \exp(\alpha)}{1  4R_2}\\E = \frac{\exp(\beta)  1}{4R_2 +1}\\H = \frac{\exp(2\beta)  1}{4R_2 +1}\\\alpha = \frac{NTU_2}{8}(4R_2 1)\\\beta = \frac{NTU_2}{8}(4R_2 +1)\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1, or 2, []
 optimal : bool, optional
Whether or not the arrangement is configured to give more of a countercurrent and efficient (True) case or an inefficient parallel case, []
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
For numbers of tube passes greater than 1 or 2, an exception is raised. The convention for the formulas in [1] and [3] are with the shell side as side 1, and the tube side as side 2. [2] has formulas with the opposite convention.
References
[1] (1, 2) Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] (1, 2, 3) Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [3] (1, 2) Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. Examples
>>> temperature_effectiveness_TEMA_H(R1=1/3., NTU1=1., Ntp=1) 0.5730728284905833

ht.hx.
temperature_effectiveness_TEMA_G
(R1, NTU1, Ntp, optimal=True)[source]¶ Returns temperature effectiveness P1 of a TEMA G type heat exchanger with a specified heat capacity ratio, number of transfer units NTU1, and of number of tube passes Ntp. For the two tube pass case, there are two possible orientations, one inefficient and one efficient controlled by the optimal option. The supported cases are as follows:
 One tube pass (tube fluid split into two streams individually mixed, shell fluid mixed)
 Two tube passes (shell and tube exchanger with shell and tube fluids mixed in each pass at the cross section), counterflow arrangement
 Two tube passes (shell and tube exchanger with shell and tube fluids mixed in each pass at the cross section), parallelflow arrangement
11 TEMA G, tube fluid split into two streams individually mixed, shell fluid mixed (this configuration is symmetric):
\[ \begin{align}\begin{aligned}P_1 = A + B  AB(1 + R_1) + R_1 AB^2\\A = \frac{1}{1 + R_1}\{1  \exp(NTU_1(1+R_1)/2)\}\\B = \frac{1  D}{1  R_1 D}\\D = \exp[NTU_1(1R_1)/2]\end{aligned}\end{align} \]12 TEMA G, shell and tube exchanger with shell and tube fluids mixed in each pass at the cross section:
\[ \begin{align}\begin{aligned}P_1 = (B  \alpha^2)/(A + 2 + R_1 B)\\A = 2 R_1(1\alpha)^2/(2 + R_1)\\B = [4  \beta(2+R_1)]/(2  R_1)\\\alpha = \exp[NTU_1(2+R_1)/4]\\\beta = \exp[NTU_1(2  R_1)/2]\end{aligned}\end{align} \]12 TEMA G, shell and tube exchanger in overall parallelflow arrangement with shell and tube fluids mixed in each pass at the cross section (this is only shown in [2], and the stream convention in it is different but converted here; P1 is still returned):
\[ \begin{align}\begin{aligned}P_2 = \frac{(B\alpha^2)}{R_2(A  \alpha^2/R_2 + 2)}\\A = \frac{(1\alpha)^2}{(R_20.5)}\\B = \frac{4R_2  \beta(2R_2  1)}{2R_2 + 1}\\\alpha = \exp\left(\frac{NTU_2(2R_21)}{4}\right)\\\beta = \exp\left(\frac{NTU_2(2R_2+1)}{2}\right)\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1 or 2, []
 optimal : bool, optional
Whether or not the arrangement is configured to give more of a countercurrent and efficient (True) case or an inefficient parallel case (only applies for two passes), []
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
For numbers of tube passes greater than 1 or 2, an exception is raised. The convention for the formulas in [1] and [3] are with the shell side as side 1, and the tube side as side 2. [2] has formulas with the opposite convention.
References
[1] (1, 2) Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] (1, 2, 3) Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [3] (1, 2) Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. Examples
>>> temperature_effectiveness_TEMA_G(R1=1/3., NTU1=1., Ntp=1) 0.5730149350867675

ht.hx.
temperature_effectiveness_TEMA_E
(R1, NTU1, Ntp=1, optimal=True)[source]¶ Returns temperature effectiveness P1 of a TEMA E type heat exchanger with a specified heat capacity ratio, number of transfer units NTU1, number of tube passes Ntp, and whether or not it is arranged in a more countercurrent (optimal configuration) way or a more parallel (optimal=False) case. The supported cases are as follows:
 11 TEMA E, shell fluid mixed
 12 TEMA E, shell fluid mixed (this configuration is symmetric)
 12 TEMA E, shell fluid split into two steams individually mixed
 13 TEMA E, shell and tube fluids mixed, one parallel pass and two counterflow passes (efficient)
 13 TEMA E, shell and tube fluids mixed, two parallel passes and one counteflow pass (inefficient)
 1N TEMA E, shall and tube fluids mixed, efficient counterflow orientation, N an even number
11 TEMA E, shell fluid mixed:
\[P_1 = \frac{1  \exp[NTU_1(1R_1)]}{1  R_1 \exp[NTU_1(1R_1)]}\]12 TEMA E, shell fluid mixed (this configuration is symmetric):
\[ \begin{align}\begin{aligned}P_1 = \frac{2}{1 + R_1 + E\coth(E\cdot NTU_1/2)}\\E = [1 + R_1^2]^{1/2}\end{aligned}\end{align} \]12 TEMA E, shell fluid split into two steams individually mixed:
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{R_1}\left[1  \frac{(2R_1)(2E+R_1B)}{(2+R_1)(2ER_1/B)} \right]\\E = \exp(NTU_1)\\B = \exp(NTU_1 R_1/2)\end{aligned}\end{align} \]13 TEMA E, shell and tube fluids mixed, one parallel pass and two counterflow passes (efficient):
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{R_1} \left[1  \frac{C}{AC + B^2}\right]\\A = X_1(R_1 + \lambda_1)(R_1  \lambda_2)/(2\lambda_1)  X_3 \delta  X_2(R_1 + \lambda_2)(R_1\lambda_1)/(2\lambda_2) + 1/(1R_1)\\B = X_1(R_1\lambda_2)  X_2(R_1\lambda_1) + X_3\delta\\C = X_2(3R_1 + \lambda_1)  X_1(3R_1 + \lambda_2) + X_3 \delta\\X_i = \exp(\lambda_i NTU_1/3)/(2\delta),\;\; i = 1,2,3\\\delta = \lambda_1  \lambda_2\\\lambda_1 = \frac{3}{2} + \left[\frac{9}{4} + R_1(R_11)\right]^{1/2}\\\lambda_2 = \frac{3}{2}  \left[\frac{9}{4} + R_1(R_11)\right]^{1/2}\\\lambda_3 = R_1\end{aligned}\end{align} \]13 TEMA E, shell and tube fluids mixed, two parallel passes and one counteflow pass (inefficient):
\[ \begin{align}\begin{aligned}P_2 = \left[1  \frac{C}{(AC + B^2)}\right]\\A = \chi_1(1 + R_2 \lambda_1)(1  R_2\lambda_2)/(2R_2^2\lambda_1)  E \chi_2(1 + R_2\lambda_2)(1  R_2\lambda_1)/(2R^2\lambda_2) + R/(R1)\\B = \chi_1(1  R_2\lambda_2)/R_2  \chi_2(1  R_2 \lambda_1)/R_2 + E\\C = \chi_1(3 + R_2\lambda_2)/R_2 + \chi_2(3 + R_2\lambda_1)/R_2 + E\\E = 0.5\exp(NTU_2/3)\\\lambda_1 = (3 + \delta)/2\\\lambda_2 = (3  \delta)/2\\\delta = \frac{[9R_2^2 + 4(1R_2))]^{0.5}}{R_2}\\\chi_1 = \frac{\exp(\lambda_1 R_2 NTU_2/3)}{2\delta}\\\chi_2 = \frac{\exp(\lambda_2 R_2 NTU_2/3)}{2\delta}\end{aligned}\end{align} \]1N TEMA E, shall and tube fluids mixed, efficient counterflow orientation, N an even number:
\[ \begin{align}\begin{aligned}P_2 = \frac{2}{A + B + C}\\A = 1 + R_2 + \coth(NTU_2/2)\\B = \frac{1}{N_1}\coth\left(\frac{NTU_2}{2N_1}\right)\\C = \frac{1}{N_1}\sqrt{1 + N_1^2 R_2^2} \coth\left(\frac{NTU_2}{2N_1}\sqrt{1 + N_1^2 R_2^2}\right)\\N_1 = \frac{N_{tp}}{2}\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1, 2, 3, 4, or an even number[]
 optimal : bool, optional
Whether or not the arrangement is configured to give more of a countercurrent and efficient (True) case or an inefficient parallel case, []
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
For odd numbers of tube passes greater than 3, an exception is raised. [2] actually has a formula for 5 tube passes, but it is an entire page long. The convention for the formulas in [1] and [3] are with the shell side as side 1, and the tube side as side 2. [2] has formulas with the opposite convention.
References
[1] (1, 2) Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] (1, 2, 3) Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [3] (1, 2) Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. Examples
>>> temperature_effectiveness_TEMA_E(R1=1/3., NTU1=1., Ntp=1) 0.5870500654031314

ht.hx.
temperature_effectiveness_plate
(R1, NTU1, Np1, Np2, counterflow=True, passes_counterflow=True, reverse=False)[source]¶ Returns the temperature effectiveness P1 of side 1 of a plate heat exchanger with a specified side 1 heat capacity ratio R1, side 1 number of transfer units NTU1, number of passes on sides 1 and 2 (respectively Np1 and Np2).
For all cases, the function also takes as arguments whether the exchanger is setup in an overall counter or parallel orientation counterflow, and whether or not individual stream passes are themselves counterflow or parallel.
The 20 supported cases are as follows. (the first number of sides listed refers to side 1, and the second number refers to side 2):
 1 pass/1 pass parallelflow
 1 pass/1 pass counterflow
 1 pass/2 pass
 1 pass/3 pass or 3 pass/1 pass (with the two end passes in parallel)
 1 pass/3 pass or 3 pass/1 pass (with the two end passes in counterflow)
 1 pass/4 pass
 2 pass/2 pass, overall parallelflow, individual passes in parallel
 2 pass/2 pass, overall parallelflow, individual passes counterflow
 2 pass/2 pass, overall counterflow, individual passes parallelflow
 2 pass/2 pass, overall counterflow, individual passes counterflow
 2 pass/3 pass or 3 pass/2 pass, overall parallelflow
 2 pass/3 pass or 3 pass/2 pass, overall counterflow
 2 pass/4 pass or 4 pass/2 pass, overall parallel flow
 2 pass/4 pass or 4 pass/2 pass, overall counterflow flow
For all plate heat exchangers, there are two common formulas used by most of the expressions.
\[ \begin{align}\begin{aligned}P_p(x, y) = \frac{1  \exp[x(1 + y)]}{1 + y}\\P_c(x, y) = \frac{1  \exp[x(1  y)]}{1  y\exp[x(1  y)]}\end{aligned}\end{align} \]The main formulas used are as follows. Note that for some cases such as 4 pass/2 pass, the formula is not shown because it is that of 2 pass/4 pass, but with R1, NTU1, and P1 conversions.
For 1 pass/1 pass paralleflow (streams symmetric):
\[P_1 = P_p(NTU_1, R_1)\]For 1 pass/1 pass counterflow (streams symmetric):
\[P_1 = P_c(NTU_1, R_1)\]For 1 pass/2 pass (any of the four possible configurations):
\[ \begin{align}\begin{aligned}P_1 = 0.5(A + B  0.5ABR_1)\\A = P_p(NTU_1, 0.5R_1)\\B = P_c(NTU_1, 0.5R_1)\end{aligned}\end{align} \]For 1 pass/3 pass (with the two end passes in parallel):
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{3}\left[B + A\left(1  \frac{R_1 B}{3}\right)\left(2  \frac{R_1 A}{3}\right)\right]\\A = P_p\left(NTU_1, \frac{R_1}{3}\right)\\B = P_c\left(NTU_1, \frac{R_1}{3}\right)\end{aligned}\end{align} \]For 1 pass/3 pass (with the two end passes in counterflow):
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{3}\left[A + B\left(1  \frac{R_1 A}{3}\right)\left(2  \frac{R_1 B}{3}\right)\right]\\A = P_p\left(NTU_1, \frac{R_1}{3}\right)\\B = P_c\left(NTU_1, \frac{R_1}{3}\right)\end{aligned}\end{align} \]For 1 pass/4 pass (any of the four possible configurations):
\[ \begin{align}\begin{aligned}P_1 = \frac{1Q}{R_1}\\Q = \left(1  \frac{AR_1}{4}\right)^2\left(1  \frac{BR_1}{4}\right)^2\\A = P_p\left(NTU_1, \frac{R_1}{4}\right)\\B = P_c\left(NTU_1, \frac{R_1}{4}\right)\end{aligned}\end{align} \]For 2 pass/2 pass, overall parallelflow, individual passes in parallel (stream symmetric):
\[P_1 = P_p(NTU_1, R_1)\]For 2 pass/2 pass, overall parallelflow, individual passes counterflow (stream symmetric):
\[ \begin{align}\begin{aligned}P_1 = B[2  B(1 + R_1)]\\B = P_c\left(\frac{NTU_1}{2}, R_1\right)\end{aligned}\end{align} \]For 2 pass/2 pass, overall counterflow, individual passes parallelflow (stream symmetric):
\[ \begin{align}\begin{aligned}P_1 = \frac{2A  A^2(1 + R_1)}{1  R_1 A^2}\\A = P_p\left(\frac{NTU_1}{2}, R_1\right)\end{aligned}\end{align} \]For 2 pass/2 pass, overall counterflow and individual passes counterflow (stream symmetric):
\[P_1 = P_c(NTU_1, R_1)\]For 2 pass/3 pass, overall parallelflow:
\[ \begin{align}\begin{aligned}P_1 = A + B  \left(\frac{2}{9} + \frac{D}{3}\right) (A^2 + B^2)  \left(\frac{5}{9} + \frac{4D}{3}\right)AB + \frac{D(1+D)AB(A+B)}{3}  \frac{D^2A^2B^2}{9}\\A = P_p\left(\frac{NTU_1}{2}, D\right)\\B = P_c\left(\frac{NTU_1}{2}, D\right)\\D = \frac{2R_1}{3}\end{aligned}\end{align} \]For 2 pass/3 pass, overall counterflow:
\[ \begin{align}\begin{aligned}P_1 = \frac{A + 0.5B + 0.5C + D}{R_1}\\A = \frac{2R_1 EF^2  2EF + F  F^2} {2R_1 E^2 F^2  E^2  F^2  2EF + E + F}\\B = \frac{A(E1)}{F}\\C = \frac{1  A}{E}\\D = R_1 E^2 C  R_1 E + R_1  \frac{C}{2}\\E = \frac{3}{2R_1 G}\\F = \frac{3}{2R_1 H}\\G = P_c\left(\frac{NTU_1}{2}, \frac{2R_1}{3}\right)\\H = P_p\left(\frac{NTU_1}{2}, \frac{2R_1}{3}\right)\end{aligned}\end{align} \]For 2 pass/4 pass, overall parallel flow:
\[ \begin{align}\begin{aligned}P_1 = 2D  (1 + R_1)D^2\\D = \frac{A + B  0.5ABR_1}{2}\\A = P_p\left(\frac{NTU_1}{2}, \frac{R_1}{2}\right)\\B = P_c\left(\frac{NTU_1}{2}, \frac{R_1}{2}\right)\end{aligned}\end{align} \]For 2 pass/4 pass, overall counterflow flow:
\[ \begin{align}\begin{aligned}P_1 = \frac{2D  (1+R_1)D^2}{1  D^2 R_1}\\D = \frac{A + B  0.5ABR_1}{2}\\A = P_p\left(\frac{NTU_1}{2}, \frac{R_1}{2}\right)\\B = P_c\left(\frac{NTU_1}{2}, \frac{R_1}{2}\right)\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 Np1 : int
Number of passes on side 1 []
 Np2 : int
Number of passes on side 2 []
 counterflow : bool
Whether or not the overall flow through the heat exchanger is in counterflow or parallel flow, []
 passes_counterflow : bool
In addition to the overall flow direction, in some cases individual passes may be in counter or parallel flow; this controlls that []
 reverse : bool
Used internally only to allow cases like the 14 formula to work for the 41 flow case, without having to duplicate the code []
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
For diagrams of these heat exchangers, see [3]. In all cases, each pass is assumed to be made up of an infinite number of plates. The fluid velocities must be uniform across the plate channels, and the flow must be uniformly distributed between the channels. The heat transfer coefficient is also assumed constant.
The defaults of counterflow=True and passes_counterflow=True will always result in the most efficient heat exchanger option, normally what is desired.
If a number of passes which is not supported is provided, an exception is raised.
References
[1] Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. [3] (1, 2) Kandlikar, S. G., and R. K. Shah. “Asymptotic EffectivenessNTU Formulas for Multipass Plate Heat Exchangers.” Journal of Heat Transfer 111, no. 2 (May 1, 1989): 31421. doi:10.1115/1.3250679. [4] Kandlikar, S. G., and R. K. Shah. “Multipass Plate Heat Exchangers EffectivenessNTU Results and Guidelines for Selecting Pass Arrangements.” Journal of Heat Transfer 111, no. 2 (May 1, 1989): 300313. doi:10.1115/1.3250678. Examples
Three passes on side 1; one pass on side 2; two end passes in counterflow orientation.
>>> temperature_effectiveness_plate(R1=1/3., NTU1=1., Np1=3, Np2=1) 0.5743514352720835
If the same heat exchanger (in terms of NTU1 and R1) were operating with sides 1 and 2 switched, a slightly less efficient design results.
>>> temperature_effectiveness_plate(R1=1/3., NTU1=1., Np1=1, Np2=3) 0.5718726757657066

ht.hx.
temperature_effectiveness_air_cooler
(R1, NTU1, rows, passes)[source]¶ Returns temperature effectiveness P1 of an air cooler with a specified heat capacity ratio, number of transfer units NTU1, number of rows rows, and number of passes passes. The supported cases are as follows:
 N rows 1 pass
 N row N pass (up to N = 5)
 4 rows 2 passes
For N rows 1 passes ([2], shown in [1] and [3]):
\[P = \frac{1}{R} \left\{1  \left[\frac{N\exp(NKR)} {1 + \sum_{i=1}^{N1}\sum_{j=0}^i {{i}\choose{j}}K^j \exp((ij)NTU/N) \sum_{k=0}^j \frac{(NKR)^k}{k!}}\right]^{1}\right\}\]For 2 rows 2 passes (cited as from [4] in [1]):
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{R}\left(1 \frac{1}{\xi}\right)\\\xi = \frac{K}{2} + \left(1  \frac{K}{2}\right)\exp(2KR)\\K = 1  \exp\left(\frac{NTU}{2}\right)\end{aligned}\end{align} \]For 3 rows / 3 passes (cited as from [4] in [1]):
\[ \begin{align}\begin{aligned}\xi = K\left[1  \frac{K}{4}  RK\left(1  \frac{K}{2}\right)\right] \exp(KR) + \exp(3KR)\left(1  \frac{K}{2}\right)^2\\K = 1  \exp\left(\frac{NTU}{3}\right)\end{aligned}\end{align} \]For 4 rows / 4 passes (cited as from [4] in [1]):
\[ \begin{align}\begin{aligned}\xi = \frac{K}{2}\left(1  \frac{K}{2} + \frac{K^2}{4}\right) + K\left(1  \frac{K}{2}\right) \left[1  \frac{R}{8}K\left(1  \frac{K}{2}\right)\exp(2KR)\right] + \exp(4KR)\left(1  \frac{K}{2}\right)^3\\K = 1  \exp\left(\frac{NTU}{4}\right)\end{aligned}\end{align} \]For 5 rows / 5 passes (cited as from [4] in [1]):
\[\xi = \left\{K \left(1  \frac{3}{4}K + \frac{K^2}{2} \frac{K^3}{8} \right)  RK^2\left[1 K + \frac{3}{4}K^2  \frac{1}{4}K^3  \frac{R}{2}K^2\left(1  \frac{K}{2}\right)^2\right]\right\}\exp(KR) + \left[K\left(1  \frac{3}{4}K + \frac{1}{16}K^3\right)  3RK^2\left(1  \frac{K}{2}\right)^3\right]\exp(3KR)+ \left(1  \frac{K}{2}\right)^4 \exp(5KR)\]For 4 rows / 2 passes (cited as from [4] in [1]):
\[ \begin{align}\begin{aligned}P_1 = \frac{1}{R}\left(1 \frac{1}{\xi}\right)\\\xi = \left\{\frac{R}{2}K^3[4  K + 2RK^2] + \exp(4KR) + K\left[1  \frac{K}{2} + \frac{K^2}{8}\right] \left[1  \exp(4KR)\right] \right\}\frac{1}{(1+RK^2)^2}\\K = 1  \exp\left(\frac{NTU}{4}\right)\end{aligned}\end{align} \]Parameters:  R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (process fluid side) []
 NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (process fluid side) []
 rows : int
Number of rows of tubes in the air cooler []
 passes : int
Number of passes the process fluid undergoes []
Returns:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 (process fluid side) []
References
[1] (1, 2, 3, 4, 5, 6, 7) Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [2] (1, 2) Schedwill, H., “Thermische Auslegung von Kreuzstromwarmeaustauschern, FortschrBer.” VDI Reihe 6 19, VDI, Germany, 1968. [3] (1, 2) Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook. Washington: Hemisphere Pub. Corp., 1983. [4] (1, 2, 3, 4, 5, 6) Nicole, F. J. L.. “Mean temperature difference for heat exchanger design.” Council for Scientific and Industrial Research, Special Report Chem. 223, Pretoria, South Africa (1972).

ht.hx.
P_NTU_method
(m1, m2, Cp1, Cp2, UA=None, T1i=None, T1o=None, T2i=None, T2o=None, subtype='crossflow', Ntp=1, optimal=True)[source]¶ Wrapper for the various PNTU method function calls, which can solve a heat exchanger. The heat capacities and mass flows of each stream and the type of the heat exchanger are always required. As additional inputs, one combination of the following inputs is required:
 Three of the four inlet and outlet stream temperatures.
 Temperatures for the side 1 outlet and side 2 inlet and UA
 Temperatures for the side 1 outlet side 2 outlet and UA
 Temperatures for the side 1 inlet and side 2 inlet and UA
 Temperatures for the side 1 inlet and side 2 outlet and UA
Computes the total heat exchanged as well as both temperatures of both streams.
Parameters:  m1 : float
Mass flow rate of stream 1 (shell side = 1, tube side = 2), [kg/s]
 m2 : float
Mass flow rate of stream 2 (shell side = 1, tube side = 2), [kg/s]
 Cp1 : float
Averaged heat capacity of stream 1 (shell side), [J/kg/K]
 Cp2 : float
Averaged heat capacity of stream 2 (tube side), [J/kg/K]
 UA : float, optional
Combined Areaheat transfer coefficient term, [W/K]
 T1i : float, optional
Inlet temperature of stream 1 (shell side), [K]
 T1o : float, optional
Outlet temperature of stream 1 (shell side), [K]
 T2i : float, optional
Inlet temperature of stream 2 (tube side), [K]
 T2o : float, optional
Outlet temperature of stream 2 (tubeside), [K]
 subtype : str, optional
The subtype of exchanger; one of ‘E’, ‘G’, ‘H’, ‘J’, ‘counterflow’, ‘parallel’, ‘crossflow’, ‘crossflow, mixed 1’, ‘crossflow, mixed 2’, or ‘crossflow, mixed 1&2’. For plate exchangers ‘Np1/Np2’ where Np1 is the number of side 1 passes and Np2 is the number of side 2 passes
 Ntp : int, optional
For real heat exchangers (types ‘E’, ‘G’, ‘H’, and ‘J’), the number of tube passes needss to be specified as well. Not all types support any number of tube passes.
 optimal : bool, optional
For real heat exchangers (types ‘E’, ‘G’, ‘H’, and ‘J’), there is often a more countercurrent (optimal) way to arrange the tube passes and a more parallel (optimal=False) way to arrange them. This controls that.
Returns:  results : dict
 Q : Heat exchanged in the heat exchanger, [W]
 UA : Combined areaheat transfer coefficient term, [W/K]
 T1i : Inlet temperature of stream 1, [K]
 T1o : Outlet temperature of stream 1, [K]
 T2i : Inlet temperature of stream 2, [K]
 T2o : Outlet temperature of stream 2, [K]
 P1 : Thermal effectiveness with respect to stream 1, []
 P2 : Thermal effectiveness with respect to stream 2, []
 R1 : Heat capacity ratio with respect to stream 1, []
 R2 : Heat capacity ratio with respect to stream 2, []
 C1 : The heat capacity rate of fluid 1, [W/K]
 C2 : The heat capacity rate of fluid 2, [W/K]
 NTU1 : Thermal Number of Transfer Units with respect to stream 1 []
 NTU2 : Thermal Number of Transfer Units with respect to stream 2 []
See also
temperature_effectiveness_basic
,temperature_effectiveness_plate
,temperature_effectiveness_TEMA_E
,temperature_effectiveness_TEMA_G
,temperature_effectiveness_TEMA_H
,temperature_effectiveness_TEMA_J
,NTU_from_P_basic
,NTU_from_P_plate
,NTU_from_P_E
,NTU_from_P_G
,NTU_from_P_H
,NTU_from_P_J
Notes
The main equations used in this method are as follows. For the individual expressions used to calculate P1, see the See Also section.
\[ \begin{align}\begin{aligned}Q = P_1 C_1 \Delta T_{max} = P_2 C_2 \Delta T_{max}\\\Delta T_{max} = T_{h,i}  T_{c,i} = T_{2,i}  T_{1,i}\\R_1 = \frac{C_1}{C_2} = \frac{T_{2,i}  T_{2,o}}{T_{1,o}  T_{1, i}}\\R_2 = \frac{C_2}{C_1} = \frac{T_{1,o}  T_{1, i}}{T_{2,i}  T_{2,o}}\\R_1 = \frac{1}{R_2}\\NTU_1 = \frac{UA}{C_1}\\NTU_2 = \frac{UA}{C_2}\\NTU_1 = NTU_2 R_2\\NTU_2 = NTU_1 R_1\\P_1 = \frac{T_{1,o}  T_{1,i}}{T_{2,i}  T_{1,i}}\\P_2 = \frac{T_{2,i}  T_{2,o}}{T_{2,i}  T_{1,i}}\\P_1 = P_2 R_2\\P_2 = P_1 R_1\\C_1 = m_1 Cp_1\\C_2 = m_2 Cp_2\end{aligned}\end{align} \]Once P1 has been calculated, there are six different cases for calculating the other stream temperatures depending on the two temperatures provided. They were derived with SymPy.
Two known inlet temperatures:
\[ \begin{align}\begin{aligned}T_{1,o} =  P_{1} T_{1,i} + P_{1} T_{2,i} + T_{1,i}\\T_{2,o} = P_{1} R_{1} T_{1,i}  P_{1} R_{1} T_{2,i} + T_{2,i}\end{aligned}\end{align} \]Two known outlet temperatures:
\[ \begin{align}\begin{aligned}T_{1,i} = \frac{P_{1} R_{1} T_{1,o} + P_{1} T_{2,o}  T_{1,o}}{P_{1} R_{1} + P_{1}  1}\\T_{2,i} = \frac{P_{1} R_{1} T_{1,o} + P_{1} T_{2,o}  T_{2,o}}{P_{1} R_{1} + P_{1}  1}\end{aligned}\end{align} \]Inlet 1 known, outlet 2 known:
\[ \begin{align}\begin{aligned}T_{1,o} = \frac{1}{P_{1} R_{1}  1} \left(P_{1} R_{1} T_{1,i} + P_{1} T_{1,i}  P_{1} T_{2,o}  T_{1,i}\right)\\T_{2,i} = \frac{P_{1} R_{1} T_{1,i}  T_{2,o}}{P_{1} R_{1}  1}\end{aligned}\end{align} \]Outlet 1 known, inlet 2 known:
\[ \begin{align}\begin{aligned}T_{1,i} = \frac{P_{1} T_{2,i}  T_{1,o}}{P_{1}  1}\\T_{2,o} = \frac{1}{P_{1}  1} \left(R_{1} \left(P_{1} T_{2,i}  T_{1,o}\right)  \left(P_{1}  1\right) \left(R_{1} T_{1,o}  T_{2,i}\right)\right)\end{aligned}\end{align} \]Input and output of 2 known:
\[ \begin{align}\begin{aligned}T_{1,i} = \frac{1}{P_{1} R_{1}} \left(P_{1} R_{1} T_{2,i}  T_{2,i} + T_{2,o}\right)\\T_{1,o} = \frac{1}{P_{1} R_{1}} \left(P_{1} R_{1} T_{2,i} + \left(P_{1}  1\right) \left(T_{2,i}  T_{2,o}\right)\right)\end{aligned}\end{align} \]Input and output of 1 known:
\[ \begin{align}\begin{aligned}T_{2,i} = \frac{1}{P_{1}} \left(P_{1} T_{1,i}  T_{1,i} + T_{1,o}\right)\\T_{2,o} = \frac{1}{P_{1}} \left(P_{1} R_{1} \left(T_{1,i}  T_{1,o}\right) + P_{1} T_{1,i}  T_{1,i} + T_{1,o}\right)\end{aligned}\end{align} \]References
[1] Shah, Ramesh K., and Dusan P. Sekulic. Fundamentals of Heat Exchanger Design. 1st edition. Hoboken, NJ: Wiley, 2002. [2] Thulukkanam, Kuppan. Heat Exchanger Design Handbook, Second Edition. CRC Press, 2013. [3] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat Transfer, 3E. New York: McGrawHill, 1998. Examples
Solve a heat exchanger with the UA specified, and known inlet temperatures:
>>> pprint(P_NTU_method(m1=5.2, m2=1.45, Cp1=1860., Cp2=1900, ... subtype='E', Ntp=4, T2i=15, T1i=130, UA=3041.75)) {'C1': 9672.0, 'C2': 2755.0, 'NTU1': 0.3144902812241522, 'NTU2': 1.1040834845735028, 'P1': 0.1730811614360235, 'P2': 0.6076373841775751, 'Q': 192514.71424206023, 'R1': 3.5107078039927404, 'R2': 0.2848428453267163, 'T1i': 130, 'T1o': 110.09566643485729, 'T2i': 15, 'T2o': 84.87829918042112, 'UA': 3041.75}
Solve the same heat exchanger as if T1i, T2i, and T2o were known but UA was not:
>>> pprint(P_NTU_method(m1=5.2, m2=1.45, Cp1=1860., Cp2=1900, subtype='E', ... Ntp=4, T1i=130, T2i=15, T2o=84.87829918042112)) {'C1': 9672.0, 'C2': 2755.0, 'NTU1': 0.31449028122515194, 'NTU2': 1.1040834845770124, 'P1': 0.17308116143602348, 'P2': 0.607637384177575, 'Q': 192514.7142420602, 'R1': 3.5107078039927404, 'R2': 0.2848428453267163, 'T1i': 130, 'T1o': 110.09566643485729, 'T2i': 15, 'T2o': 84.87829918042112, 'UA': 3041.7500000096693}
Solve a 2 pass/2 pass plate heat exchanger with overall parallel flow and its individual passes operating in parallel and known outlet temperatures. Note the overall parallel part is trigered with optimal=False, and the individual pass parallel is triggered by appending ‘p’ to the subtype. The subpass counterflow can be specified by appending ‘c’ instead to the subtype, but this is never necessary as it is the default.
>>> pprint(P_NTU_method(m1=5.2, m2=1.45, Cp1=1860., Cp2=1900., UA=300, ... T1o=126.7, T2o=26.7, subtype='2/2p', optimal=False)) {'C1': 9672.0, 'C2': 2755.0, 'NTU1': 0.031017369727047148, 'NTU2': 0.1088929219600726, 'P1': 0.028945295974795074, 'P2': 0.10161847646759273, 'Q': 32200.050307849266, 'R1': 3.5107078039927404, 'R2': 0.2848428453267163, 'T1i': 130.02920288542694, 'T1o': 126.7, 'T2i': 15.012141449056527, 'T2o': 26.7, 'UA': 300}

ht.hx.
NTU_from_P_basic
(P1, R1, subtype='crossflow')[source]¶ Returns the number of transfer units of a basic heat exchanger type with a specified (for side 1) thermal effectiveness P1, and heat capacity ratio R1. The supported cases are as follows:
 Counterflow (ex. doublepipe) [analytical]
 Parallel (ex. double pipe inefficient configuration) [analytical]
 Crossflow, single pass, fluids unmixed [numerical]
 Crossflow, single pass, fluid 1 mixed, fluid 2 unmixed [analytical]
 Crossflow, single pass, fluid 2 mixed, fluid 1 unmixed [analytical]
 Crossflow, single pass, both fluids mixed [numerical]
The analytical solutions, for those cases they are available, are as follows:
Counterflow:
\[NTU_1 =  \frac{1}{R_{1}  1} \log{\left (\frac{P_{1} R_{1}  1}{P_{1}  1} \right )}\]Parallel:
\[NTU_1 = \frac{1}{R_{1} + 1} \log{\left ( \frac{1}{P_{1} \left(R_{1} + 1\right)  1} \right )}\]Crossflow, single pass, fluid 1 mixed, fluid 2 unmixed:
\[NTU_1 =  \frac{1}{R_{1}} \log{\left (R_{1} \log{\left ( \left(P_{1}  1\right) e^{\frac{1}{R_{1}}} \right )} \right )}\]Crossflow, single pass, fluid 2 mixed, fluid 1 unmixed
\[NTU_1 =  \log{\left (\frac{1}{R_{1}} \log{\left ( \left(P_{1} R_{1}  1\right) e^{R_{1}} \right )} \right )}\]Parameters:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 subtype : float
The type of heat exchanger; one of ‘counterflow’, ‘parallel’, ‘crossflow’, ‘crossflow approximate’, ‘crossflow, mixed 1’, ‘crossflow, mixed 2’, ‘crossflow, mixed 1&2’.
Returns:  NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
Although this function allows the thermal effectiveness desired to be specified, it does not mean such a high value can be obtained. An exception is raised when this occurs, although not always a helpful one.
>>> NTU_from_P_basic(P1=.99, R1=.1, subtype='parallel') Traceback (most recent call last): ValueError: math domain error
For the ‘crossflow approximate’ solution the function is monotonic, and a bounded solver is used within the range of NTU1 from 1E11 to 1E5.
For the full correct ‘crossflow’ solution, the initial guess for newton’s method is obtained by the ‘crossflow approximate’ solution; the function may not converge because of inaccuracy performing the numerical integral involved.
For the ‘crossflow, mixed 1&2’ solution, a bounded solver is first use, but the upper bound on P1 and the upper NTU1 limit is calculated from a pade approximation performed with mpmath.
Examples
>>> NTU_from_P_basic(P1=.975, R1=.1, subtype='counterflow') 3.984769850376482

ht.hx.
NTU_from_P_J
(P1, R1, Ntp)[source]¶ Returns the number of transfer units of a TEMA J type heat exchanger with a specified (for side 1) thermal effectiveness P1, heat capacity ratio R1, and the number of tube passes Ntp. The supported cases are as follows:
 One tube pass (shell fluid mixed)
 Two tube passes (shell fluid mixed, tube pass mixed between passes)
 Four tube passes (shell fluid mixed, tube pass mixed between passes)
Parameters:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1, 2, or 4, []
Returns:  NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
Notes
For numbers of tube passes that are not 1, 2, or 4, an exception is raised.
For the 1 tube pass case, a bounded solver is used to solve the equation numerically, with NTU1 ranging from 1E11 to 1E3. NTU1 grows extremely quickly near its upper limit (NTU1 diverges to infinity at this maximum, but because the solver is bounded it will only increase up to 1000 before an exception is raised).
>>> NTU_from_P_J(P1=.995024, R1=.01, Ntp=1) 13.940758760696617 >>> NTU_from_P_J(P1=.99502487562188, R1=.01, Ntp=1) 536.4817955951684 >>> NTU_from_P_J(P1=.99502487562189, R1=.01, Ntp=1) Traceback (most recent call last): ValueError: No solution possible gives such a high P1; maximum P1=0.995025 at NTU1=1000.000000
For the 2 pass and 4 pass solution, a bounded solver is first use, but the upper bound on P1 and the upper NTU1 limit is calculated from a pade approximation performed with mpmath. These normally do not allow NTU1 to rise above 100.
Examples
>>> NTU_from_P_J(P1=.57, R1=1/3., Ntp=1) 1.0003070138879648

ht.hx.
NTU_from_P_G
(P1, R1, Ntp, optimal=True)[source]¶ Returns the number of transfer units of a TEMA G type heat exchanger with a specified (for side 1) thermal effectiveness P1, heat capacity ratio R1, the number of tube passes Ntp, and for the twopass case whether or not the inlets are arranged optimally. The supported cases are as follows:
 One tube pass (tube fluid split into two streams individually mixed, shell fluid mixed)
 Two tube passes (shell and tube exchanger with shell and tube fluids mixed in each pass at the cross section), counterflow arrangement
 Two tube passes (shell and tube exchanger with shell and tube fluids mixed in each pass at the cross section), parallelflow arrangement
Parameters:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1 or 2 []
 optimal : bool, optional
Whether or not the arrangement is configured to give more of a countercurrent and efficient (True) case or an inefficient parallel case (only applies for two passes), []
Returns:  NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
Notes
For numbers of tube passes greater than 1 or 2, an exception is raised.
Although this function allows the thermal effectiveness desired to be specified, it does not mean such a high value can be obtained. An exception is raised which shows the maximum possible effectiveness obtainable at the specified R1 and configuration.
>>> NTU_from_P_G(P1=1, R1=1/3., Ntp=2) Traceback (most recent call last): ValueError: No solution possible gives such a high P1; maximum P1=0.954545 at NTU1=10000.000000
Of the three configurations, 1 pass and the optimal 2 pass have monotonic functions which allow for a bounded solver to work smoothly. In both cases a solution is searched for between NTU1 values of 1E11 and 1E4.
For the 2 pass unoptimal solution, a bounded solver is first use, but the upper bound on P1 and the upper NTU1 limit is calculated from a pade approximation performed with mpmath.
Examples
>>> NTU_from_P_G(P1=.573, R1=1/3., Ntp=1) 0.9999513707769526

ht.hx.
NTU_from_P_E
(P1, R1, Ntp, optimal=True)[source]¶ Returns the number of transfer units of a TEMA E type heat exchanger with a specified (for side 1) thermal effectiveness P1, heat capacity ratio R1, the number of tube passes Ntp, and for the twopass case whether or not the inlets are arranged optimally. The supported cases are as follows:
 11 TEMA E, shell fluid mixed
 12 TEMA E, shell fluid mixed (this configuration is symmetric)
 12 TEMA E, shell fluid split into two steams individually mixed
 13 TEMA E, shell and tube fluids mixed, one parallel pass and two counterflow passes (efficient)
 13 TEMA E, shell and tube fluids mixed, two parallel passes and one counteflow pass (inefficient)
 1N TEMA E, shall and tube fluids mixed, efficient counterflow orientation, N an even number
Two of these cases have analytical solutions; the rest use numerical solvers of varying quality.
The analytical solution to 11 TEMA E, shell fluid mixed (the same as pure counterflow):
\[NTU_1 =  \frac{1}{R_{1}  1} \log{\left (\frac{P_{1} R_{1}  1}{P_{1}  1} \right )}\]12 TEMA E, shell fluid mixed:
\[NTU_1 = \frac{2}{\sqrt{R_{1}^{2} + 1}} \log{\left (\sqrt{\frac{P_{1} R_{1}  P_{1} \sqrt{R_{1}^{2} + 1} + P_{1}  2}{P_{1} R_{1} + P_{1} \sqrt{R_{1}^{2} + 1} + P_{1}  2}} \right )}\]Parameters:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1, 2, 3, 4, or an even number []
 optimal : bool, optional
Whether or not the arrangement is configured to give more of a countercurrent and efficient (True) case or an inefficient parallel case, []
Returns:  NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
Notes
For odd numbers of tube passes greater than 3, an exception is raised.
For the 2 pass, unoptimal case, a bounded solver is used with NTU1 between 1E11 and 100; the solution to any feasible P1 was found to lie in there. For the 4 or a higher even number of pass case, the upper limit on NTU1 is 1000; this solver works pretty well, but as NTU1 reaches its limit the change in P1 is so small a smaller but also correct solution is often returned.
For both the optimal and unoptimal 3 tube pass case, a solution is only returned if NTU1 is between 1E11 and 10. These functions are extremely mathematically frustrating, and as NTU1 rises above 10 catastrophic cancellation quickly results in this expression finding a ZeroDivisionError. The use of arbitrary prevision helps little  quickly 1000 digits are needed, and then 1000000 digits, and so one. Using SymPy’s rational number support works better but is extremely slow for these complicated solutions. Nevertheless, so long as a solution is between 1E11 and 10, the solver is quite robust.
Examples
>>> NTU_from_P_E(P1=.58, R1=1/3., Ntp=2) 1.0381979240816719

ht.hx.
NTU_from_P_H
(P1, R1, Ntp, optimal=True)[source]¶ Returns the number of transfer units of a TEMA H type heat exchanger with a specified (for side 1) thermal effectiveness P1, heat capacity ratio R1, the number of tube passes Ntp, and for the twopass case whether or not the inlets are arranged optimally. The supported cases are as follows:
 One tube pass (tube fluid split into two streams individually mixed, shell fluid mixed)
 Two tube passes (shell fluid mixed, tube pass mixed between passes)
 Two tube passes (shell fluid mixed, tube pass mixed between passes, inlet tube side next to inlet shellside)
Parameters:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
 Ntp : int
Number of tube passes, 1, or 2, []
 optimal : bool, optional
Whether or not the arrangement is configured to give more of a countercurrent and efficient (True) case or an inefficient parallel case, []
Returns:  NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 (shell side = 1, tube side = 2) []
Notes
For numbers of tube passes greater than 1 or 2, an exception is raised.
Only numerical solutions are available for this function. For the case of 1 tube pass or the optimal 2 tube pass, the function is monotonic and a bounded solver is used with NTU1 between 1E11 and 100; it will find the solution anywhere in that range.
For the nonoptimal 2 pass case, the function is not monotonic and a pade approximation was used to obtain a curve of NTU1s which give the maximum P1s which is used as the upper bound in the bounded solver. The lower bound is still 1E11. These solvers are all robust.
Examples
>>> NTU_from_P_H(P1=0.573, R1=1/3., Ntp=1) 0.9997628696881165

ht.hx.
NTU_from_P_plate
(P1, R1, Np1, Np2, counterflow=True, passes_counterflow=True, reverse=False)[source]¶ Returns the number of transfer units of a plate heat exchanger with a specified side 1 heat capacity ratio R1, side 1 number of transfer units NTU1, number of passes on sides 1 and 2 (respectively Np1 and Np2).
For all cases, the function also takes as arguments whether the exchanger is setup in an overall counter or parallel orientation counterflow, and whether or not individual stream passes are themselves counterflow or parallel.
The 20 supported cases are as follows. (the first number of sides listed refers to side 1, and the second number refers to side 2):
 1 pass/1 pass parallelflow
 1 pass/1 pass counterflow
 1 pass/2 pass
 1 pass/3 pass or 3 pass/1 pass (with the two end passes in parallel)
 1 pass/3 pass or 3 pass/1 pass (with the two end passes in counterflow)
 1 pass/4 pass
 2 pass/2 pass, overall parallelflow, individual passes in parallel
 2 pass/2 pass, overall parallelflow, individual passes counterflow
 2 pass/2 pass, overall counterflow, individual passes parallelflow
 2 pass/2 pass, overall counterflow, individual passes counterflow
 2 pass/3 pass or 3 pass/2 pass, overall parallelflow
 2 pass/3 pass or 3 pass/2 pass, overall counterflow
 2 pass/4 pass or 4 pass/2 pass, overall parallel flow
 2 pass/4 pass or 4 pass/2 pass, overall counterflow flow
For all except the simplest cases numerical solutions are used.
1 pass/1 pass counterflow (also 2/2 fully counterflow):
\[NTU_1 =  \frac{1}{R_{1}  1} \log{\left (\frac{P_{1} R_{1}  1}{P_{1}  1} \right )}\]1 pass/1 pass parallel flow (also 2/2 fully parallelflow):
\[NTU_1 = \frac{1}{R_{1} + 1} \log{\left ( \frac{1}{P_{1} \left(R_{1} + 1\right)  1} \right )}\]Parameters:  P1 : float
Thermal effectiveness of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 R1 : float
Heat capacity ratio of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
 Np1 : int
Number of passes on side 1 []
 Np2 : int
Number of passes on side 2 []
 counterflow : bool
Whether or not the overall flow through the heat exchanger is in counterflow or parallel flow, []
 passes_counterflow : bool
In addition to the overall flow direction, in some cases individual passes may be in counter or parallel flow; this controlls that []
 reverse : bool
Used internally only to allow cases like the 14 formula to work for the 41 flow case, without having to duplicate the code []
Returns:  NTU1 : float
Thermal number of transfer units of the heat exchanger in the PNTU method, calculated with respect to stream 1 []
Notes
The defaults of counterflow=True and passes_counterflow=True will always result in the most efficient heat exchanger option, normally what is desired.
If a number of passes which is not supported is provided, an exception is raised.
For more details, see
temperature_effectiveness_plate
.Examples
Three passes on side 1; one pass on side 2; two end passes in counterflow orientation.
>>> NTU_from_P_plate(P1=0.5743, R1=1/3., Np1=3, Np2=1) 0.9998336056060733

ht.hx.
check_tubing_TEMA
(NPS=None, BWG=None)[source]¶ >>> check_tubing_TEMA(2, 22) False >>> check_tubing_TEMA(0.375, 22) True

ht.hx.
DBundle_min
(Do)[source]¶ Very roughly, determines a good choice of shell diameter for a given tube outer diameter, according to figure 1, section 3.3.5 in [1].
Parameters:  Do : float
Tube outer diameter, [m]
Returns:  DShell : float
Shell inner diameter, optional, [m]
Notes
This function should be used if a tube diameter is specified but not a shell size. DShell will have to be adjusted later, once the area requirement is known. This function is essentially a lookup table.
References
[1] (1, 2) Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook. Washington: Hemisphere Pub. Corp., 1983. Examples
>>> DBundle_min(0.0254) 1.0

ht.hx.
shell_clearance
(DBundle=None, DShell=None)[source]¶ Looks up the recommended clearance between a shell and tube bundle in a TEMA HX [1]. Either the bundle diameter or the shell diameter are needed provided.
Parameters:  DBundle : float, optional
Outer diameter of tube bundle, [m]
 DShell : float, optional
Shell inner diameter, [m]
Returns:  c : float
Shelltube bundle clearance, [m]
Notes
Lower limits are extended up to the next limit where intermediate limits are not provided.
References
[1] Standards of the Tubular Exchanger Manufacturers Association, Ninth edition, 2007, TEMA, New York. Examples
>>> shell_clearance(DBundle=1.245) 0.0064

ht.hx.
baffle_thickness
(Dshell, L_unsupported, service='C')[source]¶ Determines the thickness of baffles and support plates in TEMA HX [1]. Applies to latitudinal baffles along the diameter of the HX, but not longitudinal baffles parallel to the tubes.
Parameters:  Dshell : float
Shell inner diameter, [m]
 L_unsupported : float
Distance between tube supports, [m]
 service : str
Service type, C, R or B, []
Returns:  t : float
Baffle or support plate thickness, [m]
Notes
No checks are implemented to ensure the given shell size is TEMA compatible. The baffles do not need to be strongas the pressure is almost the same on both of their sides. L_unsupported is a design choice; the more baffles in a given length, the higher the pressure drop.
References
[1] (1, 2) Standards of the Tubular Exchanger Manufacturers Association, Ninth edition, 2007, TEMA, New York. Examples
>>> baffle_thickness(Dshell=.3, L_unsupported=50, service='R') 0.0095

ht.hx.
D_baffle_holes
(do=None, L_unsupported=None)[source]¶ Determines the diameter of holes in baffles for tubes according to TEMA [1]. Applies for all geometries.
Parameters:  do : float
Tube outer diameter, [m]
 L_unsupported : float
Distance between tube supports, [m]
Returns:  dB : float
Baffle hole diameter, [m]
References
[1] (1, 2) Standards of the Tubular Exchanger Manufacturers Association, Ninth edition, 2007, TEMA, New York. Examples
>>> D_baffle_holes(do=.0508, L_unsupported=0.75) 0.0516 >>> D_baffle_holes(do=0.01905, L_unsupported=0.3) 0.01985 >>> D_baffle_holes(do=0.01905, L_unsupported=1.5) 0.019450000000000002

ht.hx.
L_unsupported_max
(Do, material='CS')[source]¶ Determines the maximum length of a heat exchanger tube can go without a support, acording to TEMA [1]. The limits provided apply for the worstcase temperature allowed for the material to be used at.
Parameters:  Do : float
Outer tube diameter, [m]
 material : str
Material type, either ‘CS’ or ‘aluminium’, []
Returns:  L_unsupported : float
Maximum length of unsupported tube, [m]
Notes
The ‘CS’ results is also listed as representing high alloy steel, low alloy steel, nickelcopper, nickel, and nickelchromiumiron alloys. The ‘aluminium’ results are those of copper and copper alloys and also titanium alloys.
The maximum and minimum tube outer diameter tabulated are 3 inch and 1/4 inch respectively. The result is returned for the nearest tube diameter equal or smaller than the provided diameter, which helps ensures the returned tube length will not be optimistic. However, if the diameter is under 0.25 inches, the result will be optimistic!
References
[1] (1, 2) Standards of the Tubular Exchanger Manufacturers Association, Ninth edition, 2007, TEMA, New York, p 5.45. Examples
>>> L_unsupported_max(Do=.0254, material='CS') 1.88

ht.hx.
Ntubes
(DBundle, Do, pitch, Ntp=1, angle=30, Method=None, AvailableMethods=False)[source]¶ Calculates the number of tubes which can fit in a heat exchanger. The tube count is effected by the pitch, number of tube passes, and angle.
The result is an exact number of tubes and is calculated by a very accurate method using number theory by default. This method is available only up to 100,000 tubes.
Parameters:  DBundle : float
Outer diameter of tube bundle, [m]
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 Ntp : int, optional
Number of tube passes, []
 angle : float, optional
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  N : int
Total number of tubes that fit in the heat exchanger, []
 methods : list, only returned if AvailableMethods == True
List of methods which can be used to calculate the tube count
Other Parameters:  Method : string, optional
One of ‘Phadkeb’, ‘HEDH’, ‘VDI’ or ‘Perry’
 AvailableMethods : bool, optional
If True, function will consider which methods which can be used to calculate the tube count with the given inputs
Examples
>>> Ntubes(DBundle=1.2, Do=0.025, pitch=0.03125) 1285
The approximations are pretty good too:
>>> Ntubes(DBundle=1.2, Do=0.025, pitch=0.03125, Method='Perry') 1297 >>> Ntubes(DBundle=1.2, Do=0.025, pitch=0.03125, Method='VDI') 1340 >>> Ntubes(DBundle=1.2, Do=0.025, pitch=0.03125, Method='HEDH') 1272

ht.hx.
size_bundle_from_tubecount
(N, Do, pitch, Ntp=1, angle=30, Method=None, AvailableMethods=False)[source]¶ Calculates the outer diameter of a tube bundle containing a specified number of tubes. The tube count is effected by the pitch, number of tube passes, and angle.
The result is an exact number of tubes and is calculated by a very accurate method using number theory by default. This method is available only up to 100,000 tubes.
Parameters:  N : int
Total number of tubes that fit in the heat exchanger, []
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 Ntp : int, optional
Number of tube passes, []
 angle : float, optional
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  DBundle : float
Outer diameter of tube bundle, [m]
 methods : list, only returned if AvailableMethods == True
List of methods which can be used to calculate the tube count
Other Parameters:  Method : string, optional
One of ‘Phadkeb’, ‘HEDH’, ‘VDI’ or ‘Perry’
 AvailableMethods : bool, optional
If True, function will consider which methods which can be used to calculate the tube count with the given inputs
Notes
The ‘Perry’ method is solved with a numerical solver and is very unreliable.
Examples
>>> size_bundle_from_tubecount(N=1285, Do=0.025, pitch=0.03125) 1.1985676402390355

ht.hx.
Ntubes_Perrys
(DBundle, Do, Ntp, angle=30)[source]¶ A rough equation presented in Perry’s Handbook [1] for estimating the number of tubes in a tube bundle of differing geometries and tube sizes. Claimed accuracy of 24 tubes.
Parameters:  DBundle : float
Outer diameter of tube bundle, [m]
 Do : int
Tube outer diameter, [m]
 Ntp : float
Number of tube passes, []
 angle : float
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  Nt : int
Number of tubes, []
Notes
Perry’s equation 1174. Pitch equal to 1.25 times the tube outside diameter No other source for this equation is given. Experience suggests this is accurate to 40 tubes, but is often around 20 tubes off.
References
[1] (1, 2) Green, Don, and Robert Perry. Perry’s Chemical Engineers’ Handbook, Eighth Edition. New York: McGrawHill Education, 2007. Examples
>>> Ntubes_Perrys(DBundle=1.184, Do=.028, Ntp=2, angle=45) 803

ht.hx.
Ntubes_VDI
(DBundle=None, Ntp=None, Do=None, pitch=None, angle=30.0)[source]¶ A rough equation presented in the VDI Heat Atlas for estimating the number of tubes in a tube bundle of differing geometries and tube sizes. No accuracy estimation given.
Parameters:  DBundle : float
Outer diameter of tube bundle, [m]
 Ntp : float
Number of tube passes, []
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 angle : float
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  N : float
Number of tubes, []
Notes
No coefficients for this method with Ntp=6 are available in [1]. For consistency, estimated values were added to support 6 tube passes, f2 = 90.. This equation is a rearranged form of that presented in [1]. The calculated tube count is rounded down to an integer.
References
[1] (1, 2, 3) Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010. Examples
>>> Ntubes_VDI(DBundle=1.184, Ntp=2, Do=.028, pitch=.036, angle=30) 966

ht.hx.
Ntubes_Phadkeb
(DBundle, Do, pitch, Ntp, angle=30)[source]¶ Using tabulated values and correction factors for number of passes, the highly accurate method of [1] is used to obtain the tube count of a given tube bundle outer diameter for a given tube size and pitch.
Parameters:  DBundle : float
Outer diameter of tube bundle, [m]
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 Ntp : int
Number of tube passes, []
 angle : float, optional
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  Nt : int
Total number of tubes that fit in the heat exchanger, []
Notes
For singlepass cases, the result is exact, and no tubes need to be removed for any reason. For 4, 6, 8 pass arrangements, a number of tubes must be removed to accomodate pass partition plates. The following assumptions are involved with that:
 The pass partition plate is where a row of tubes would have been. Only one or two rows are assumed affected.
 The thickness of partition plate is < 70% of the tube outer diameter.
 The distance between the centerline of the partition plate and the centerline of the nearest row of tubes is equal to the pitch.
This function will fail when there are more than 100,000 tubes. [1] tabulated values up to approximately 3,000 tubes derived with number theory. The sequesnces of integers were identified in the OnLine Encyclopedia of Integer Sequences (OEIS), and formulas listed in it were used to generate more coefficient to allow up to 100,000 tubes. The integer sequences are A003136, A038590, A001481, and A057961. The generation of coefficients for A038590 is very slow, but the rest are reasonably fast.
The number of tubes that fit generally does not increase onebyone, but by several.
>>> Ntubes_Phadkeb(DBundle=1.007, Do=.028, pitch=.036, Ntp=2, angle=45.) 558 >>> Ntubes_Phadkeb(DBundle=1.008, Do=.028, pitch=.036, Ntp=2, angle=45.) 574
Because a pass partition needs to be installed in multiple tube pass shells, more tubes fit in an exchanger the fewer passes are used.
>>> Ntubes_Phadkeb(DBundle=1.008, Do=.028, pitch=.036, Ntp=1, angle=45.) 593
References
[1] (1, 2, 3) Phadke, P. S., Determining tube counts for shell and tube exchangers, Chem. Eng., September, 91, 6568 (1984). Examples
>>> Ntubes_Phadkeb(DBundle=1.200.008*2, Do=.028, pitch=.036, Ntp=2, angle=45.) 782

ht.hx.
DBundle_for_Ntubes_Phadkeb
(Ntubes, Do, pitch, Ntp, angle=30)[source]¶ Determine the bundle diameter required to fit a specified number of tubes in a heat exchanger. Uses the highly accurate method of [1], which takes into account pitch, number of tube passes, angle, and tube diameter. The method is analytically correct when used in the other direction (calculating number of tubes from bundle diameter); in reverse, it is solved by bisection.
Parameters:  Ntubes : int
Total number of tubes that fit in the heat exchanger, []
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 Ntp : int
Number of tube passes, []
 angle : float, optional
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  DBundle : float
Outer diameter of tube bundle, [m]
Notes
This function will fail when there are more than 100,000 tubes. There are a range of correct diameters for which there can be the given number of tubes; a number within that range is returned as found by bisection.
References
[1] (1, 2) Phadke, P. S., Determining tube counts for shell and tube exchangers, Chem. Eng., September, 91, 6568 (1984). Examples
>>> DBundle_for_Ntubes_Phadkeb(Ntubes=782, Do=.028, pitch=.036, Ntp=2, angle=45.) 1.1879392959379533

ht.hx.
Ntubes_HEDH
(DBundle=None, Do=None, pitch=None, angle=30)[source]¶ A rough equation presented in the HEDH for estimating the number of tubes in a tube bundle of differing geometries and tube sizes. No accuracy estimation given. Only 1 pass is supported.
\[N = \frac{0.78(D_{bundle}  D_o)^2}{C_1(\text{pitch})^2}\]C1 = 0.866 for 30° and 60° layouts, and 1 for 45 and 90° layouts.
Parameters:  DBundle : float
Outer diameter of tube bundle, [m]
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 angle : float
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  N : float
Number of tubes, []
Notes
Seems reasonably accurate.
References
[1] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook. Washington: Hemisphere Pub. Corp., 1983. Examples
>>> Ntubes_HEDH(DBundle=1.184, Do=.028, pitch=.036, angle=30) 928

ht.hx.
DBundle_for_Ntubes_HEDH
(N, Do, pitch, angle=30)[source]¶ A rough equation presented in the HEDH for estimating the tube bundle diameter necessary to fit a given number of tubes. No accuracy estimation given. Only 1 pass is supported.
\[D_{bundle} = (D_o + (\text{pitch})\sqrt{\frac{1}{0.78}}\cdot \sqrt{C_1\cdot N})\]C1 = 0.866 for 30° and 60° layouts, and 1 for 45 and 90° layouts.
Parameters:  N : float
Number of tubes, []
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 angle : float
The angle the tubes are positioned; 30, 45, 60 or 90, [degrees]
Returns:  DBundle : float
Outer diameter of tube bundle, [m]
Notes
Easily reversed from the main formulation.
References
[1] Schlunder, Ernst U, and International Center for Heat and Mass Transfer. Heat Exchanger Design Handbook. Washington: Hemisphere Pub. Corp., 1983. Examples
>>> DBundle_for_Ntubes_HEDH(N=928, Do=.028, pitch=.036, angle=30) 1.1839930795640605

ht.hx.
D_for_Ntubes_VDI
(N, Ntp, Do, pitch, angle=30)[source]¶ A rough equation presented in the VDI Heat Atlas for estimating the size of a tube bundle from a given number of tubes, number of tube passes, outer tube diameter, pitch, and arrangement. No accuracy estimation given.
\[OTL = \sqrt{f_1 z t^2 + f_2 t \sqrt{z}  d_o}\]Parameters:  N : float
Number of tubes, []
 Ntp : float
Number of tube passes, []
 Do : float
Tube outer diameter, [m]
 pitch : float
Pitch; distance between two orthogonal tube centers, [m]
 angle : float
The angle the tubes are positioned; 30, 45, 60 or 90
Returns:  DBundle : float
Outer diameter of tube bundle, [m]
Notes
f1 = 1.1 for triangular, 1.3 for square patterns f2 is as follows: 1 pass, 0; 2 passes, 22; 4 passes, 70; 8 passes, 105. 6 tube passes is not officially supported, only 1, 2, 4 and 8. However, an estimated constant has been added to support it. f2 = 90.
References
[1] Gesellschaft, V. D. I., ed. VDI Heat Atlas. 2nd edition. Berlin; New York:: Springer, 2010. Examples
>>> D_for_Ntubes_VDI(N=970, Ntp=2., Do=0.00735, pitch=0.015, angle=30.) 0.5003600119829544