def calculo(self): self.entrada = self.kwargs["entrada"] metodo = self.kwargs["metodo"] self.Pout = Pressure(self.kwargs["Pout"]) razon = self.kwargs["razon"] self.rendimientoCalculado = Dimensionless(self.kwargs["rendimiento"]) if self.kwargs["etapas"]: self.etapas = self.kwargs["etapas"] else: self.etapas = 1. self.power = Power(self.kwargs["trabajo"]) def f(Pout, rendimiento): W_ideal = self.__Wideal(Pout) power = W_ideal * self.entrada.caudalmasico.gs / rendimiento return power if metodo in [0, 3] or (metodo == 5 and self.Pout): if self.etapas == 1: razon = self.Pout.atm / self.entrada.P.atm else: razon = (self.Pout.atm / self.entrada.P.atm)**(1. / self.etapas) elif metodo in [1, 4] or (metodo == 5 and razon): if self.etapas == 1: self.Pout = Pressure(self.entrada.P * razon) else: self.Pout = Pressure(razon**self.etapas * self.entrada.P) if metodo in [0, 1]: Wideal = self.__Wideal(self.Pout.atm) power = Wideal * self.entrada.caudalmasico.gs / self.rendimientoCalculado self.power = Power(power * self.etapas) elif metodo == 2: funcion = lambda P: f(P, self.rendimientoCalculado) - self.power self.Pout = Pressure(fsolve(funcion, self.entrada.P + 1)) if self.etapas == 1: razon = self.Pout / self.entrada.P else: razon = (self.Pout / self.entrada.P)**(1. / self.etapas) elif metodo in [3, 4]: funcion = lambda rendimiento: f(self.Pout.atm, rendimiento ) - self.power self.rendimientoCalculado = Dimensionless(fsolve(funcion, 0.5)) elif metodo == 5: Wideal = self.__Wideal(self.Pout.atm) caudalmasico = MassFlow( self.power * self.rendimientoCalculado / Wideal, "gs") self.Tout = self.__Tout(Wideal) self.entrada = self.entrada.clone(caudalMasico=caudalmasico) Wideal = self.__Wideal(self.Pout.atm) self.Tout = Temperature(self.__Tout(Wideal)) self.salida = [self.entrada.clone(T=self.Tout, P=self.Pout)] self.razonCalculada = Dimensionless(self.Pout / self.entrada.P) self.deltaT = DeltaT(self.salida[0].T - self.entrada.T) self.deltaP = DeltaP(self.salida[0].P - self.entrada.P) self.cp_cv = self.entrada.Gas.cp_cv self.Pin = self.entrada.P self.Tin = self.entrada.T
def calculo(self): Gas = self.kwargs["entradaGas"] Liquido = self.kwargs["entradaLiquido"] sigma = Liquido.sigma rhoL = Liquido.Liquido.rho muL = Liquido.Liquido.mu self.Dt = Length(self.kwargs["diametro"]) self.Lt = Length(self.kwargs["Lt"]) if self.kwargs["k"]: self.k = Dimensionless(self.kwargs["k"]) else: self.k = Dimensionless(1000.) if self.kwargs["f"]: self.f = Dimensionless(self.kwargs["f"]) else: self.f = Dimensionless(0.5) self.At = Area(pi/4*self.Dt**2) self.Vg = Speed(Gas.Q/self.At) self.R = Liquido.Q/Gas.Q self.dd = Length(58600/self.Vg*(sigma/rhoL)**0.5+597*( muL/sigma**0.5/rhoL**0.5)**0.45*(1000*self.R)**1.5) self.rendimiento_parcial = self._Efficiency() self.rendimiento = self._GlobalEfficiency(self.rendimiento_parcial) if self.statusDeltaP: self.deltaP = self._deltaP() else: self.deltaP = DeltaP(0) self.CalcularSalidas(Gas) self.Pin = min(Gas.P, Liquido.P)
def calculo(self): self.entrada = self.kwargs["entrada"] self.rendimientoCalculado = Dimensionless(self.kwargs["rendimiento"]) if self.kwargs["Pout"]: DeltaP = Pressure(self.kwargs["Pout"] - self.entrada.P) elif self.kwargs["deltaP"]: DeltaP = Pressure(self.kwargs["deltaP"]) elif self.kwargs["Carga"]: DeltaP = Pressure(self.kwargs["Carga"] * self.entrada.Liquido.rho * g) else: DeltaP = Pressure(0) if self.kwargs["usarCurva"]: if self.kwargs["diametro"] != self.kwargs["curvaCaracteristica"][ 0] or self.kwargs["velocidad"] != self.kwargs[ "curvaCaracteristica"][1]: self.curvaActual = self.calcularCurvaActual() else: self.curvaActual = self.kwargs["curvaCaracteristica"] self.Ajustar_Curvas_Caracteristicas() if not self.kwargs["usarCurva"]: head = Length(DeltaP / g / self.entrada.Liquido.rho) power = Power(head * g * self.entrada.Liquido.rho * self.entrada.Q / self.rendimientoCalculado) P_freno = Power(power * self.rendimientoCalculado) elif not self.kwargs["incognita"]: head = Length(polyval(self.CurvaHQ, self.entrada.Q)) self.DeltaP = Pressure(head * g * self.entrada.Liquido.rho) power = Power(self.entrada.Q * DeltaP) P_freno = Power(polyval(self.CurvaPotQ, self.entrada.Q)) self.rendimientoCalculado = Dimensionless(power / P_freno) else: head = Length(self.DeltaP / g / self.entrada.Liquido.rho) caudalvolumetrico = roots( [self.CurvaHQ[0], self.CurvaHQ[1], self.CurvaHQ[2] - head])[0] power = Power(caudalvolumetrico * self.DeltaP) self.entrada = Corriente( self.entrada.T, self.entrada.P.atm, caudalvolumetrico * self.entrada.Liquido.rho * 3600, self.entrada.mezcla, self.entrada.solido) P_freno = Power(polyval(self.CurvaPotQ, caudalvolumetrico)) self.rendimientoCalculado = Dimensionless(power / P_freno) self.headCalculada = head self.power = power self.P_freno = P_freno self.salida = [self.entrada.clone(P=self.entrada.P + DeltaP)] self.Pin = self.entrada.P self.PoutCalculada = self.salida[0].P self.Q = self.entrada.Q.galUSmin self.volflow = self.entrada.Q
def calculo(self): entrada = self.kwargs["entrada"] self.rendimientoCalculado = Dimensionless(self.kwargs["rendimiento"]) if self.kwargs["Pout"]: DeltaP = Pressure(self.kwargs["Pout"] - entrada.P) elif self.kwargs["deltaP"]: DeltaP = Pressure(self.kwargs["deltaP"]) elif self.kwargs["Carga"]: DeltaP = Pressure(self.kwargs["Carga"] * entrada.Liquido.rho * g) else: DeltaP = Pressure(0) if self.kwargs["usarCurva"]: b1 = self.kwargs["diametro"] != self.kwargs["curvaCaracteristica"][ 0] # noqa b2 = self.kwargs["velocidad"] != self.kwargs[ "curvaCaracteristica"][1] # noqa if b1 or b2: self.curvaActual = self.calcularCurvaActual() else: self.curvaActual = self.kwargs["curvaCaracteristica"] self.Ajustar_Curvas_Caracteristicas() if not self.kwargs["usarCurva"]: head = Length(DeltaP / g / entrada.Liquido.rho) power = Power(head * g * entrada.Liquido.rho * entrada.Q / self.rendimientoCalculado) P_freno = Power(power * self.rendimientoCalculado) elif not self.kwargs["incognita"]: head = Length(polyval(self.CurvaHQ, entrada.Q)) DeltaP = Pressure(head * g * entrada.Liquido.rho) power = Power(entrada.Q * DeltaP) P_freno = Power(polyval(self.CurvaPotQ, entrada.Q)) self.rendimientoCalculado = Dimensionless(power / P_freno) else: head = Length(self.DeltaP / g / entrada.Liquido.rho) poli = [self.CurvaHQ[0], self.CurvaHQ[1], self.CurvaHQ[2] - head] Q = roots(poli)[0] power = Power(Q * self.DeltaP) entrada = entrada.clone(split=Q / entrada.Q) P_freno = Power(polyval(self.CurvaPotQ, Q)) self.rendimientoCalculado = Dimensionless(power / P_freno) self.deltaP = DeltaP self.headCalculada = head self.power = power self.P_freno = P_freno self.salida = [entrada.clone(P=entrada.P + DeltaP)] self.Pin = entrada.P self.PoutCalculada = self.salida[0].P self.volflow = entrada.Q self.cp_cv = entrada.Liquido.cp_cv
def calculo(self): self.entradaGas = self.kwargs["entradaGas"] self.entradaLiquido = self.kwargs["entradaLiquido"] self.Dt = Length(self.kwargs["diametro"]) self.Lt = Length(self.kwargs["Lt"]) if self.kwargs["k"]: self.k = Dimensionless(self.kwargs["k"]) else: self.k = Dimensionless(1000.) if self.kwargs["f"]: self.f = Dimensionless(self.kwargs["f"]) else: self.f = Dimensionless(0.5) self.At = Area(pi / 4 * self.Dt**2) self.Vg = Speed(self.entradaGas.Q / self.At) self.R = self.entradaLiquido.Q / self.entradaGas.Q self.dd = Length(58600 * (self.entradaLiquido.Liquido.sigma / self.entradaLiquido.Liquido.rho)**0.5 / self.Vg**2 + 597 * (self.entradaLiquido.Liquido.mu / self.entradaLiquido.Liquido.epsilon**0.5 / self.entradaLiquido.Liquido.rho**0.5)**0.45 * (1000 * self.R)**1.5) self.efficiency_i = self._Efficiency() self.efficiencyCalc = self._GlobalEfficiency(self.efficiency_i) if self.statusDeltaP: self.deltaP = self._deltaP() else: self.deltaP = DeltaP(0) Solido_NoCapturado, Solido_Capturado = self.entradaGas.solido.Separar( self.efficiency_i) self.Pin = min(self.entradaGas.P, self.entradaLiquido.P) self.Pout = Pressure(self.Pin - self.deltaP) self.Min = self.entradaGas.solido.caudal self.Dmin = self.entradaGas.solido.diametro_medio self.Mr = Solido_NoCapturado.caudal self.Dmr = Solido_NoCapturado.diametro_medio self.Ms = Solido_Capturado.caudal self.Dms = Solido_Capturado.diametro_medio self.salida = [] self.salida.append( self.entradaGas.clone(solido=Solido_NoCapturado, P=self.Pin - self.deltaP)) self.salida.append( self.entradaLiquido.clone(solido=Solido_Capturado, P=self.Pin - self.deltaP))
def calculo(self): self.entrada = self.kwargs["entrada"] self.Pout = Pressure(self.kwargs["Pout"]) self.razon = Dimensionless(self.kwargs["razon"]) self.rendimientoCalculado = Dimensionless(self.kwargs["rendimiento"]) self.power = Power(-abs(self.kwargs["trabajo"])) def f(Pout, rendimiento): W_ideal = self.__Wideal(Pout) power = W_ideal * self.entrada.caudalmasico.gs * rendimiento return power self.cp_cv = self.entrada.Gas.cp_cv if self.kwargs["metodo"] in [0, 3] or (self.kwargs["metodo"] == 5 and self.Pout): self.razon = Dimensionless(self.Pout / self.entrada.P) elif self.kwargs["metodo"] in [1, 4] or (self.kwargs["metodo"] == 5 and self.razon): self.Pout = Pressure(self.entrada.P * self.razon) if self.kwargs["metodo"] in [0, 1]: Wideal = self.__Wideal(self.Pout) self.power = Power(Wideal * self.entrada.caudalmasico.gs * self.rendimientoCalculado) elif self.kwargs["metodo"] == 2: funcion = lambda P: f(P, self.rendimientoCalculado) - self.power self.Pout = Pressure(fsolve(funcion, self.entrada.P.atm + 1), "atm") self.razon = Dimensionless(self.Pout / self.entrada.P) elif self.kwargs["metodo"] in [3, 4]: funcion = lambda rendimiento: f(self.Pout.atm, rendimiento ) - self.power self.rendimientoCalculado = fsolve(funcion, 0.5) elif self.kwargs["metodo"] == 5: Wideal = self.__Wideal(self.Pout) caudalmasico = MassFlow( self.power / self.rendimientoCalculado / Wideal, "gs") self.Tout = self.__Tout(Wideal) self.entrada = self.entrada.clone(caudalMasico=caudalmasico) Wideal = self.__Wideal(self.Pout) self.Tout = Temperature(self.__Tout(Wideal)) self.razonCalculada = Dimensionless(self.Pout / self.entrada.P) self.salida = [self.entrada.clone(T=self.Tout, P=self.Pout)] self.deltaT = DeltaT(self.salida[0].T - self.entrada.T) self.deltaP = DeltaP(self.salida[0].P - self.entrada.P) self.Pin = self.entrada.P self.Tin = self.entrada.T
def f_papaevangelou(Re, eD): """ Calculates friction factor `f` with Papaevangelou correlation (2009) .. math:: f = \frac{0.2479 - 0.0000947(7-\log Re)^4}{\left[\log\left (\frac{\epsilon}{3.615D} + \frac{7.366}{Re^{0.9142}}\right)\right]^2} Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 1e4 <= Re <= 1e7 1e-5 <= eD <= 1e-3 References ---------- .. [23] Papaevangelou, G., Evangelides, C., Tzimopoulos, C., A new explicit relation for friction coefficient in the Darcy-Weisbach equation. Proceedings of the Tenth Conference on Protection and Restoration of the Environment 166,1-7pp, PRE10 July 6-09 2010 Corfu, Greece. """ f = (0.2479-9.47e-5*(7-log10(Re))**4)/log10(eD/3.615+7.366/Re**0.9142)**2 return Dimensionless(f)
def f_goudar(Re, eD): """ Calculates friction factor `f` with Goudar-Sonnad correlation (2008) Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [19] Goudar, C.T. Sonnad J.R. Comparison of the iterative approximations of the Colebrook-White equation. Hydrocarb Process 87 (2008), 79-83 """ a = 2/log(10) b = eD/3.7 d = log(10)*Re/5.2 s = b*d+log(d) q = s**(s/(s+1)) g = b*d+log(d/q) z = log(q/g) Dla = g/(g+1)*z Dcfa = Dla*(1+z/2/((g+1)**2+z/3*(2*g-1))) f = (a*(log(d/q)+Dcfa))**-2 return Dimensionless(f)
def f_buzzelli(Re, eD): """ Calculates friction factor `f` with Buzzelli correlation (2008) .. math:: \frac{1}{\sqrt{f}} = A - \left[\frac{A +2\log(\frac{B}{Re})} {1 + \frac{2.18}{B}}\right] A = \frac{0.774\ln(Re)-1.41}{1+1.32\sqrt{\frac{\epsilon}{D}}} B = \frac{\epsilon}{3.7D}Re+2.51\times B_1 Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [20] Buzzelli, D. Calculating friction in one step. Machine Design, 80, (2008) 54–55. """ # Eq 2 A = (0.744*log(Re)-1.41)/(1+1.32*eD**0.5) B = eD/3.7*Re+2.51*A f = 1/(A-((A+2*log10(B/Re))/(1+2.18/B)))**2 return Dimensionless(f)
def f_manadilli(Re, eD): """ Calculates friction factor `f` with Manadilli correlation (1997) .. math:: \frac{1}{\sqrt{f}} = -2\log\left[\frac{\epsilon}{3.7D} + \frac{95}{Re^{0.983}} - \frac{96.82}{Re}\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 5.245e3 <= Re <= 1e8 eD <= 0.05 References ---------- .. [17] Manadilli, G. Replace implicit equations with signomial functions. Chem Eng 104 (1997), 129-132. """ f = 1/(-2*log10(eD/3.7+95./Re**0.983-96.82/Re))**2 return Dimensionless(f)
def f_goudar2006(Re, eD): """ Calculates friction factor `f` with Goudar-Sonnad correlation (2006) .. math:: \frac{1}{\sqrt{f}} = 0.8686\ln\left(\frac{0.4587Re}{S^{S/(S+1)}}\right) S = 0.1240\times\frac{\epsilon}{D}\times Re + \ln(0.4587Re) Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 4e3 <= Re <= 1e8 1e-6 <= eD <= 0.05 References ---------- .. [19] Goudar, C.T. Sonnad J.R. Comparison of the iterative approximations of the Colebrook-White equation. Hydrocarb Process 87 (2008), 79-83 """ C = 0.124*Re*eD+log(0.4587*Re) f = 1/(0.8686*log(0.4587*Re/(C-0.31)**(C/(C+1))))**2 return Dimensionless(f)
def f_moody(Re, eD): """ Calculates friction factor `f` with Moody correlation (1947) .. math:: f = 5.5 10^{-3}\left[1+\left(2 10^4\frac{\epsilon}{D} + \frac{10^6}{Re}\right)^{1/3}\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity: 4e3 <= Re <= 1e8 0<= eD < 0.01. References ---------- .. [4] Moody, L. F. (1947). An approximate formula for pipe friction factors. Trans. ASME, 69(12), 1005–1006. """ f = 5.5e-3*(1+(2e4*eD+1e6/Re)**(1./3)) return Dimensionless(f)
def f_shacham(Re, eD): """ Calculates friction factor `f` with Shacham correlation (1980) .. math:: \frac{1}{\sqrt{f}} = -2\log\left[\frac{\epsilon}{3.7D} - \frac{5.02}{Re} \log\left(\frac{\epsilon}{3.7D} + \frac{14.5}{Re}\right)\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 4e3 <= Re <= 4e8 References ---------- .. [16] Shacham M. An explicit equation for friction factor in pipe. Ind Eng Chem Fund 19 (1980), 228 - 229. """ f = 1/(-2*log10(eD/3.7-5.02/Re*log10(eD/3.7+14.5/Re)))**2 return Dimensionless(f)
def _GlobalEfficiency(self, rendimientos): Gas = self.kwargs["entradaGas"] rendimiento_global = 0 for i, fraccion in enumerate(Gas.solido.fracciones): rendimiento_global += rendimientos[i]*fraccion return Dimensionless(rendimiento_global)
def Nu(alfa, L, k): r"""Calculates Nusselt number or `Nu`. .. math:: Nu = \frac{\alpha L}{k} Parameters ---------- k : float Thermal conductivity, [W/m/K] L : float Characteristic length, [m] alpha : float Heat transfer coefficient, [W/m²/K] Returns ------- Nu : float Nusselt number, [-] Notes ----- Nusselt number is a dimensionless heat transfer coeffcient. Be careful with the characteristic lenght definition, it deppend of system configuration (internal diameter in a flow channel). Examples -------- >>> print("%0.1f" % Nu(102.3, 0.03927, 0.03181)) 126.3 """ return Dimensionless(alfa * L / k)
def f_swamee(Re, eD): """ Calculates friction factor `f` with Swamee-Jain correlation (1976) .. math:: \frac{1}{\sqrt{f_f}} = -2\log\left[\left(\frac{6.97}{Re}\right)^{0.9} + (\frac{\epsilon}{3.7D})\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 5e3 <= Re <= 1e8 1e-6 <= eD <= 5e-2 References ---------- .. [10] Swamee, P.K.; Jain, A.K. (1976). Explicit equations for pipe-flow problems. Journal of the Hydraulics Division (ASCE) 102 (5): 657–664. """ f = 1/(-2*log10(eD/3.7+(6.97/Re)**0.9))**2 return Dimensionless(f)
def f_chen1979(Re, eD): """ Calculates friction factor `f` with Chen correlation (1979) .. math:: $\frac{1}{\sqrt{f}}=-2\log\left(\frac{\nicefrac{\epsilon}{D}}{3.7065}-\frac{5.0452}{Re}\log\left(\frac{\left(\nicefrac{\epsilon}{D}\right)^{1.1098}}{2.8257}+\left(\frac{7.149}{Re}\right)^{0.8981}\right)\right)$ Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 4e3 <= Re <= 4e8 1e-7 <= eD <= 0.05 References ---------- .. [2] Chen, H-J, An Explicit Equation for Friction Factor in Pipe, Ind. Eng. Chem. Fundam., Vol. 18, No. 3, 1979, p. 297.. """ # Eq 7 A = eD**1.1098/2.8257+5.8506/Re**0.8981 f = 1/(-2*log10(eD/3.7065-5.0452/Re*log10(A)))**2 return Dimensionless(f)
def f_round(Re, eD): """ Calculates friction factor `f` with Round correlation (1980) .. math:: \frac{1}{\sqrt{f}} = 1.8\log\left[\frac{Re}{0.135Re \frac{\epsilon}{D}+6.5}\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 4e3 <= Re <= 4e8 eD <= 0.05 References ---------- .. [9] Round, G. F. (1980), An explicit approximation for the friction factor-reynolds number relation for rough and smooth pipes. Can. J. Chem. Eng., 58: 122–123. """ # Eq 8 f = 1/(1.8*log10(Re/(0.135*Re*eD+6.5)))**2 return Dimensionless(f)
def f_serghides(Re, eD): """ Calculates friction factor `f` with Serguides correlation (1984) .. math:: f=\left[A-\frac{(B-A)^2}{C-2B+A}\right]^{-2} A=-2\log_{10}\left[\frac{\epsilon/D}{3.7}+\frac{12}{Re}\right] B=-2\log_{10}\left[\frac{\epsilon/D}{3.7}+\frac{2.51A}{Re}\right] C=-2\log_{10}\left[\frac{\epsilon/D}{3.7}+\frac{2.51B}{Re}\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [8] Serghides, T. K. (1984). Estimate friction factor accurately. Chem. Eng., 91(5), 63–64. """ A = -2*log10(eD/3.7+12/Re) B = -2*log10(eD/3.7+2.51*A/Re) C = -2*log10(eD/3.7+2.51*B/Re) f = (A-(B-A)**2/(C-2*B+A))**-2 return Dimensionless(f)
def f_haaland(Re, eD): """ Calculates friction factor `f` with Haaland correlation (1983) .. math:: f = \left(-1.8\log_{10}\left[\left(\frac{\epsilon/D}{3.7} \right)^{1.11} + \frac{6.9}{Re}\right]\right)^{-2} Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity 4e3 <= Re <= 1e8 1e-6 <= eD <= 0.05 References ---------- .. [7] Haaland, S. E. (1983). Simple and explicit formulas for the friction factor in turbulent flow. J. Fluids Eng., 105(1), 89–90. """ # Eq 8 f = 1/(-1.8*log10((eD/3.75)**1.11+6.9/Re))**2 return Dimensionless(f)
def f_avci(Re, eD): """ Calculates friction factor `f` with Avci-Karagoz correlation (2009) .. math:: f = \frac{6.4} {\left\{\ln(Re) - \ln\left[ 1 + 0.01Re\frac{\epsilon}{D}\left(1 + 10(\frac{\epsilon}{D})^{0.5} \right)\right]\right\}^{2.4}} Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [22] Avci, A.; Karagoz, I. A Novel Explicit Equation for Friction Factor in Smooth and Rough Pipes; J. Fluids Eng 131(6), 061203 (2009) """ # Eq 17 f = 6.4/(log(Re)-log(1+0.01*Re*eD*(1+10*eD**0.5)))**2.4 return Dimensionless(f)
def f_goudar(Re, eD): r"""Calculates friction factor `f` with Goudar-Sonnad correlation (2008) Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] """ a = 2 / log(10) b = eD / 3.7 d = log(10) * Re / 5.2 s = b * d + log(d) q = s**(s / (s + 1)) g = b * d + log(d / q) z = log(q / g) Dla = g / (g + 1) * z Dcfa = Dla * (1 + z / 2 / ((g + 1)**2 + z / 3 * (2 * g - 1))) f = (a * (log(d / q) + Dcfa))**-2 return Dimensionless(f)
def f_jain(Re, eD): """ Calculates friction factor `f` with Jain correlation (1976) .. math:: \frac{1}{\sqrt{f_f}} = 1.14 - 2\log\left[ \frac{\epsilon}{D} + \left(\frac{29.843}{Re}\right)^{0.9}\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity: 5e3 <= Re <= 1e7 4e-5 <= eD <= 0.05 References ---------- .. [11] Jain, Akalank K. Accurate Explicit Equation for Friction Factor. Journal of the Hydraulics Division 102, no. 5 (May 1976): 674-77. """ f = 1/(1.14-2*log10(eD+(29.843/Re)**0.9))**2 return Dimensionless(f)
def f_chen(Re, eD): """ Calculates friction factor `f` with Chen correlation (1991) .. math:: $\frac{1}{\sqrt{f}}=-4\log\left(\frac{\nicefrac{\epsilon}{D}}{3.7}-\frac{5.02}{Re}\log\left(\frac{\nicefrac{\epsilon}{D}}{3.7}+\left(\frac{6.7}{Re}\right)^{0.9}\right)\right)$ Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- The most satisfactory explicit friction factor correlation by [2]. References ---------- .. [3] Chen, H-J, An Exact Solution to the Colebrook Equation, Chem. Eng., Vol. 94, No. 2, 1987, p. 196.. """ A = eD/3.7+(6.7/Re)**0.9 f = 1/(-2*log10(eD/3.7-5.02/Re*log10(A)))**2 return Dimensionless(f)
def f_barr(Re, eD): """ Calculates friction factor `f` with Barr correlation (1981) .. math:: \frac{1}{\sqrt{f}} = -2\log\left\{\frac{\epsilon}{3.7D} + \frac{4.518\log(\frac{Re}{7})}{Re\left[1+\frac{Re^{0.52}}{29} \left(\frac{\epsilon}{D}\right)^{0.7}\right]}\right\} Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [12] Barr D.I.H. (1981). Solutions of the Colebrook-White functions for resistance to uniform turbulent flows. Proc Inst Civil Eng 71, 529-536. """ f = 1/(2*log10(eD/3.7+4.518*log10(Re/7)/Re/(1+Re**0.52/29*eD**0.7)))**2 return Dimensionless(f)
def f_altshul(Re, eD): """ Calculates friction factor `f` with Altshul correlation (1975) .. math:: f = 0.11\left( \frac{68}{Re} + \frac{\epsilon}{D}\right)^{0.25} Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [14] Tsal RJ (1989). Altshul-Tsal friction factor equation. Heating Piping Air Conditioning 8, 30-45. """ f = 0.11*(eD+68/Re)**0.25 return Dimensionless(f)
def Fo(k, L, t): r"""Calculates Fourier number `Fo`. .. math:: Fo = \frac{kt}{l^2} Parameters ---------- k : float Thermal diffusivity [m²/s] L : float Characteristic length [m] t : float Time of cooling or heating [s] Returns ------- Fo : float Fourier number, [-] Notes ----- Can be seen as a adimensional time. It is commonly used in transient conduction problems. Examples -------- >>> print("%0.1f" % Fo(7e-6, 0.01, 60)) 4.2 """ return Dimensionless(k * t / L**2)
def f_eck(Re, eD): """ Calculates friction factor `f` with Eck correlation (1973) .. math:: \frac{1}{\sqrt{f_d}} = -2\log\left[\frac{\epsilon}{3.715D} + \frac{15}{Re}\right] Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] References ---------- .. [15] Eck B. Technische Stromungslehre. Springer, New York, 1973. """ f = 1/(-2*log10(eD/3.71+15/Re))**2 return Dimensionless(f)
def Ra(Pr, Gr): r"""Calculates Rayleigh number or `Ra` using Prandtl number `Pr` and Grashof number `Gr` for a fluid with the given properties, temperature difference, and characteristic length used to calculate `Gr` and `Pr`. .. math:: Ra = PrGr Parameters ---------- Pr : float Prandtl number, [-] Gr : float Grashof number, [-] Returns ------- Ra : float Rayleigh number, [-] Notes ----- Used in free convection problems only. """ return Dimensionless(Pr * Gr)
def f_goudar2007(Re, eD): r"""Calculates friction factor `f` with Goudar-Sonnad correlation (2007) .. math:: \frac{1}{\sqrt{f}} = 0.8686\ln\left(\frac{0.4587Re}{S^{S/(S+1)}}\right) .. math:: S = 0.1240\times\frac{\epsilon}{D}\times Re + \ln(0.4587Re) Parameters ------------ Re : float Reynolds number, [-] eD : float Relative roughness of a pipe, [-] Returns ------- f : float Friction factor, [-] Notes ----- Range of validity: * 4e3 <= Re <= 1e8 * 1e-6 <= eD <= 0.05 """ C = 0.124 * Re * eD + log(0.4587 * Re) f = 1 / (0.8686 * log(0.4587 * Re / (C - 0.31)**(C / (C + 1))))**2 return Dimensionless(f)