Esempio n. 1
0
    def regresionCurve(self):
        dlg = Plot(accept=True)
        x = self.curvaDestilacion.column(0)
        T = self.curvaDestilacion.column(1, Temperature)
        dlg.addData(x, T, color="black", ls="None", marker="s", mfc="red")
        parameters, r2 = curve_Predicted(x, T)
        xi = arange(0, 1, 0.01)
        Ti = [_Tb_Predicted(parameters, x_i) for x_i in xi]
        dlg.addData(xi, Ti, color="black", lw=0.5)

        # Add equation formula to plot
        txt = r"$\frac{T-T_{o}}{T_{o}}=\left[\frac{A}{B}\ln\left(\frac{1}{1-x}"
        txt += r"\right)\right]^{1/B}$"
        To = Temperature(parameters[0])
        txt2 = "\n\n\n$T_o=%s$" % To.str
        txt2 += "\n$A=%0.4f$" % parameters[1]
        txt2 += "\n$B=%0.4f$" % parameters[2]
        txt2 += "\n$r^2=%0.6f$" % r2
        dlg.plot.ax.text(0, T[-1], txt, size="14", va="top", ha="left")
        dlg.plot.ax.text(0, T[-1], txt2, size="10", va="top", ha="left")
        if dlg.exec_():
            self.curveParameters = parameters
            self.checkStatusCurve()
Esempio n. 2
0
    def McCabe(self, LK=0, HK=1):
        A = self.kwargs["entrada"].componente[LK].nombre
        B = self.kwargs["entrada"].componente[HK].nombre
        P = self.kwargs["entrada"].P
        Psat = dict()
        Psat[A] = self.kwargs["entrada"].componente[LK].Pv
        Psat[B] = self.kwargs["entrada"].componente[HK].Pv
        Tsat = dict()
        for i, s in enumerate(Psat.keys()):
            Tsat[s] = lambda P, s=s: fsolve(
                lambda T: Psat[s]
                (T) - P, self.kwargs["entrada"].componente[i].Tb)[0]

        T = linspace(Tsat[A](P), Tsat[B](P))

        x = lambda T: (P - Psat[B](T)) / (Psat[A](T) - Psat[B](T))
        y = lambda T: x(T) * Psat[A](T) / P

        xB = 1 - self.kwargs["HKsplit"]
        xF = self.kwargs["entrada"].fraccion[LK]
        xD = self.kwargs["LKsplit"]
        Tbub = fsolve(lambda T: x(T) - xF, T[25])
        yF = y(Tbub)

        if self.kwargs["R"]:
            R = self.kwargs["R"]
        else:
            Eslope = (xD - yF) / (xD - xF)
            Rmin = Eslope / (1 - Eslope)
            R = self.kwargs["R_Rmin"] * Rmin

        zF = xD - R * (xD - xF) / (R + 1)
        Sslope = (zF - xB) / (xF - xB)
        S = 1 / (Sslope - 1)
        xP = xD
        yP = xD

        dialog = Plot()
        dialog.plot.ax.grid(True)
        dialog.plot.ax.set_title(
            QApplication.translate("pychemqt", "x-y Diagram for") +
            "{:s}/{:s} P={:s}".format(A, B, P.str),
            size="x-large")
        dialog.plot.ax.set_xlabel(
            QApplication.translate("pychemqt", "Liquid Mole Fraction") +
            " {:s}".format(A),
            size="x-large")
        dialog.plot.ax.set_ylabel(
            QApplication.translate("pychemqt", "Vapor Mole Fraction") +
            " {:s}".format(B),
            size="x-large")
        dialog.plot.ax.set_xticks(linspace(0, 1.0, 21))
        dialog.plot.ax.set_yticks(linspace(0.05, 1.0, 20))
        dialog.addData([0, 1], [0, 1], 'b--')
        dialog.addData(list(map(x, T)), list(map(y, T)))
        dialog.addData([xB, xB], [0, xB], 'r--')
        dialog.addData(xB, xB, 'ro', ms=5)
        dialog.addText(xB + 0.005, 0.02, 'xB = {:0.3f}'.format(float(xB)))
        dialog.addData([xF, xF, xF], [0, xF, yF], 'r--')
        dialog.addData([xF, xF], [xF, yF], 'ro', ms=5)
        dialog.addText(xF + 0.005, 0.02, 'xF = {:0.3f}'.format(float(xF)))
        dialog.addData([xD, xD], [0, xD], 'r--')
        dialog.addData(xD, xD, 'ro', ms=5)
        dialog.addText(xD - 0.005,
                       0.02,
                       'xD = {:0.3f}'.format(float(xD)),
                       ha="right")

        dialog.addData([xD, xF], [xD, yF], 'r--')
        dialog.addData([xD, xF], [xD, zF], 'r-')
        dialog.addData([xB, xF], [xB, xB + (S + 1) * (xF - xB) / S], 'r-')

        nTray = 0
        while xP > xB:
            nTray += 1
            Tdew = fsolve(lambda T: y(T) - yP, T[25])
            xQ = xP
            xP = x(Tdew)
            dialog.addData([xQ, xP], [yP, yP], 'r')
            dialog.addData(xP, yP, 'ro', ms=5)
            dialog.addText(xP - 0.03, yP, nTray)

            yQ = yP
            yP = min([
                xD - (R / (R + 1)) * (xD - xP), xB + ((S + 1) / S) * (xP - xB)
            ])
            dialog.addData([xP, xP], [yQ, yP], 'r')

        nTray -= 1

        dialog.addText(0.1,
                       0.90,
                       'Rmin = {:0.2f}'.format(float(Rmin)),
                       size="large")
        dialog.addText(0.1, 0.85, 'R = {:0.2f}'.format(float(R)), size="large")
        dialog.addText(0.1, 0.80, 'S = {:0.2f}'.format(float(S)), size="large")
        dialog.addText(0.1,
                       0.75,
                       'nTrays = {:d}'.format(int(nTray)),
                       size="large")

        dialog.exec_()
Esempio n. 3
0
    def McCabe(self, LK=0, HK=1):
        A = self.kwargs["entrada"].componente[LK].nombre
        B = self.kwargs["entrada"].componente[HK].nombre
        P = self.kwargs["entrada"].P
        Psat = dict()
        Psat[A] = self.kwargs["entrada"].componente[LK].Pv
        Psat[B] = self.kwargs["entrada"].componente[HK].Pv
        Tsat = dict()
        for i, s in enumerate(Psat.keys()):
            Tsat[s] = lambda P, s=s: fsolve(lambda T: Psat[s](T)-P,self.kwargs["entrada"].componente[i].Tb)[0]

        T = linspace(Tsat[A](P),Tsat[B](P))

        x = lambda T: (P-Psat[B](T))/(Psat[A](T)-Psat[B](T))
        y = lambda T: x(T)*Psat[A](T)/P

        xB = 1-self.kwargs["HKsplit"]
        xF = self.kwargs["entrada"].fraccion[LK]
        xD = self.kwargs["LKsplit"]
        Tbub = fsolve(lambda T:x(T) - xF,T[25])
        yF = y(Tbub)

        if self.kwargs["R"]:
            R=self.kwargs["R"]
        else:
            Eslope = (xD-yF)/(xD-xF)
            Rmin = Eslope/(1-Eslope)
            R=self.kwargs["R_Rmin"]*Rmin

        zF = xD-R*(xD-xF)/(R+1)
        Sslope = (zF-xB)/(xF-xB)
        S = 1/(Sslope-1)
        xP = xD
        yP = xD

        dialog=Plot()
        dialog.plot.ax.grid(True)
        dialog.plot.ax.set_title(QApplication.translate("pychemqt", "x-y Diagram for") + "{:s}/{:s} P={:s}".format(A,B,P.str), size="x-large")
        dialog.plot.ax.set_xlabel(QApplication.translate("pychemqt", "Liquid Mole Fraction")+" {:s}".format(A), size="x-large")
        dialog.plot.ax.set_ylabel(QApplication.translate("pychemqt", "Vapor Mole Fraction")+" {:s}".format(B), size="x-large")
        dialog.plot.ax.set_xticks(linspace(0,1.0,21))
        dialog.plot.ax.set_yticks(linspace(0.05,1.0,20))
        dialog.addData([0,1],[0,1],'b--')
        dialog.addData(map(x,T),map(y,T))
        dialog.addData([xB,xB],[0,xB],'r--')
        dialog.addData(xB,xB,'ro',ms=5)
        dialog.addText(xB+0.005,0.02,'xB = {:0.3f}'.format(float(xB)))
        dialog.addData([xF,xF,xF],[0,xF,yF],'r--')
        dialog.addData([xF,xF],[xF,yF],'ro',ms=5)
        dialog.addText(xF+0.005,0.02,'xF = {:0.3f}'.format(float(xF)))
        dialog.addData([xD,xD],[0,xD],'r--')
        dialog.addData(xD,xD,'ro',ms=5)
        dialog.addText(xD-0.005,0.02,'xD = {:0.3f}'.format(float(xD)), ha="right")

        dialog.addData([xD,xF],[xD,yF],'r--')
        dialog.addData([xD,xF],[xD,zF],'r-')
        dialog.addData([xB,xF],[xB,xB + (S+1)*(xF-xB)/S],'r-')

        nTray = 0
        while xP > xB:
            nTray += 1
            Tdew = fsolve(lambda T:y(T) - yP, T[25])
            xQ = xP
            xP = x(Tdew)
            dialog.addData([xQ,xP],[yP,yP],'r')
            dialog.addData(xP,yP,'ro',ms=5)
            dialog.addText(xP-0.03,yP,nTray)

            yQ = yP
            yP = min([xD - (R/(R+1))*(xD-xP),xB + ((S+1)/S)*(xP-xB)])
            dialog.addData([xP,xP],[yQ,yP],'r')

        nTray -= 1

        dialog.addText(0.1,0.90,'Rmin = {:0.2f}'.format(float(Rmin)), size="large")
        dialog.addText(0.1,0.85,'R = {:0.2f}'.format(float(R)), size="large")
        dialog.addText(0.1,0.80,'S = {:0.2f}'.format(float(S)), size="large")
        dialog.addText(0.1,0.75,'nTrays = {:d}'.format(int(nTray)), size="large")


        dialog.exec_()