Exemple #1
0
    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
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
    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))
Exemple #6
0
    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
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
    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)
Exemple #15
0
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)
Exemple #16
0
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)
Exemple #17
0
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)
Exemple #18
0
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)
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
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)
Exemple #23
0
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)
Exemple #24
0
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)
Exemple #25
0
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)
Exemple #26
0
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)
Exemple #27
0
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)
Exemple #28
0
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)
Exemple #29
0
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)
Exemple #30
0
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)