Пример #1
0
    def coste(self):
        HP = abs(self.power.hp)

        if self.salida[0].P.psi >= 14.696:
            C = 0.31 * HP**0.81 * 1000
        else:
            C = 0.69 * HP**0.81 * 1000

        self.C_adq = Currency(C * self.kwargs["Current_index"] /
                              self.kwargs["Base_index"])
        self.C_inst = Currency(self.C_adq * self.kwargs["f_install"])
Пример #2
0
 def readStatefromJSON(self, state):
     """Load instance parameter from saved file"""
     self.Pout = Pressure(state["Pout"])
     self.Tout = Temperature(state["Tout"])
     self.rendimientoCalculado = Dimensionless(state["rendimientoCalculado"])  # noqa
     self.power = Power(state["power"])
     self.razonCalculada = Dimensionless(state["razonCalculada"])
     self.razon = Dimensionless(state["razon"])
     self.deltaT = DeltaT(state["deltaT"])
     self.deltaP = DeltaP(state["deltaP"])
     self.cp_cv = Dimensionless(state["cp_cv"])
     self.Pin = Pressure(state["Pin"])
     self.Tin = Temperature(state["Tin"])
     self.cp_cv = Dimensionless(state["cp_cv"])
     self.statusCoste = state["statusCoste"]
     if self.statusCoste:
         self.C_adq = Currency(state["C_adq"])
         self.C_inst = Currency(state["C_inst"])
     self.salida = [None]
Пример #3
0
    def readStatefromJSON(self, state):
        """Load instance parameter from saved file"""
        self.deltaP = DeltaP(state["deltaP"])
        self.rendimientoCalculado = Dimensionless(
            state["rendimientoCalculado"])  # noqa
        self.headCalculada = Length(state["headCalculada"])
        self.power = Power(state["power"])
        self.P_freno = Power(state["P_freno"])
        self.Pin = Pressure(state["Pin"])
        self.PoutCalculada = Pressure(state["PoutCalculada"])
        self.volflow = VolFlow(state["volflow"])
        self.cp_cv = Dimensionless(state["cp_cv"])
        self.statusCoste = state["statusCoste"]

        if self.statusCoste:
            self.C_bomba = Currency(state["C_bomba"])
            self.C_motor = Currency(state["C_motor"])
            self.C_adq = Currency(state["C_adq"])
            self.C_inst = Currency(state["C_inst"])

        if self.kwargs["usarCurva"]:
            pass
        self.salida = [None]
Пример #4
0
    def coste(self, *args, **kwargs):
        """
        material:
            0   -   Carbon steel
            1   -   Stainless steel 316
            2   -   Stainless steel 304
            3   -   Stainless steel 347
            4   -   Nickel
            5   -   Monel
            6   -   Inconel
            7   -   Zirconium
            8    -  Titanium
            9    -   Brick and rubber or brick and polyester-lined steel
            10  -   Rubber or lead-lined steel
            11  -   Polyester, fiberglass-reinforced
            12  -   Aluminum
            13  -   Copper
            14  -   Concrete
        """
        self._indicesCoste(*args)

        self.material = kwargs["material"]

        V = self.Volumen.galUS

        Fm = [
            1., 2.7, 2.4, 3.0, 3.5, 3.3, 3.8, 11.0, 11.0, 2.75, 1.9, 0.32, 2.7,
            2.3, 0.55
        ][self.material]

        if V <= 21000:
            C = Fm * exp(2.631 + 1.3673 * log(V) - 0.06309 * log(V)**2)
        else:
            C = Fm * exp(11.662 + 0.6104 * log(V) - 0.04536 * log(V)**2)

        self.C_adq = Currency(C * self.Current_index / self.Base_index)
        self.C_inst = Currency(self.C_adq * self.f_install)
Пример #5
0
    def coste(self):
        HP = self.power.hp
        LnHP = log(self.power.hp)
        Q = self.kwargs["entrada"].Q.galUSmin
        CI = self.kwargs["Current_index"]
        BI = self.kwargs["Base_index"]

        # Coste Bomba
        if self.kwargs["tipo_bomba"] == 0:  # Centrifugal pumps
            QH = log(Q * self.power.hp**0.5)
            Fm = [
                1., 1.35, 1.15, 2., 2., 3.5, 3.3, 4.95, 4.6, 9.7, 2.95, 1.15,
                1.90
            ]
            B1 = [0., 5.1029, 0.0632, 2.0290, 13.7321, 9.8849]
            B2 = [0., -1.2217, 0.2744, -0.2371, -2.8304, -1.6164]
            B3 = [0., 0.0771, -0.0253, 0.0102, 0.1542, 0.0834]

            fm = Fm[self.kwargs["material"]]
            b1 = B1[self.kwargs["tipo_centrifuga"]]
            b2 = B2[self.kwargs["tipo_centrifuga"]]
            b3 = B3[self.kwargs["tipo_centrifuga"]]

            Ft = exp(b1 + b2 * QH + b3 * QH**2)
            Cb = fm * Ft * 1.55 * exp(8.833 - 0.6019 * QH + 0.0519 * QH**2)

        elif self.kwargs["tipo_bomba"] == 1:  # Reciprocating pumps
            if self.kwargs["material"] == 0:  # Case iron
                Cb = 40. * Q**0.81
            elif self.kwargs["material"] == 3:  # 316 Staineless steel
                Cb = 410. * Q**0.52
            elif self.kwargs["material"] == 12:  # Bronze
                Cb = 410. * 1.4 * Q**0.52
            elif self.kwargs["material"] == 5:  # Nickel
                Cb = 410. * 1.86 * Q**0.52
            elif self.kwargs["material"] == 6:  # Monel
                Cb = 410. * 2.20 * Q**0.52
            else:  # Material not available. Assume case iron
                Cb = 40. * Q**0.81

        elif self.kwargs["tipo_bomba"] == 2:  # Gear pumps
            Cb = 1000 * exp(-0.0881 + 0.1986 * log(Q) + 0.0291 * log(Q)**2)
        elif self.kwargs["tipo_bomba"] == 3:  # Vertical mixed flow
            Cb = 0.036 * Q**0.82 * 1000
        elif self.kwargs["tipo_bomba"] == 4:  # Vertical axial flow
            Cb = 0.02 * Q**0.78 * 1000

        C_bomba = Cb * CI / BI

        # Coste motor
        if self.kwargs["motor"] == 0:  # Open, drip-proof
            if self.kwargs["rpm"] == 0 and HP <= 7.5:
                a1, a2, a3 = 4.8314, 0.0966, 0.10960
            elif self.kwargs["rpm"] == 0 and 7.5 < HP <= 250.:
                a1, a2, a3 = 4.1514, 0.5347, 0.05252
            elif self.kwargs["rpm"] == 0 and HP > 250.:
                a1, a2, a3 = 4.2432, 1.03251, -0.03595
            elif self.kwargs["rpm"] == 1 and HP <= 7.5:
                a1, a2, a3 = 4.7075, -0.01511, 0.22888
            elif self.kwargs["rpm"] == 1 and 7.5 < HP <= 250:
                a1, a2, a3 = 4.5212, 0.47242, 0.04820
            elif self.kwargs["rpm"] == 1 and HP > 250.:
                a1, a2, a3 = 7.4044, -0.06464, 0.05448
            elif self.kwargs["rpm"] == 2 and HP <= 7.5:
                a1, a2, a3 = 4.9298, 0.30118, 0.12630
            elif self.kwargs["rpm"] == 2 and 7.5 < HP <= 250:
                a1, a2, a3 = 5.0999, 0.35861, 0.06052
            elif self.kwargs["rpm"] == 2 and HP > 250.:
                a1, a2, a3 = 4.6163, 0.88531, -0.02188
        elif self.kwargs["motor"] == 1:  # Totally enclosed, fan-cooled
            if self.kwargs["rpm"] == 0 and HP <= 7.5:
                a1, a2, a3 = 5.1058, 0.03316, 0.15374
            elif self.kwargs["rpm"] == 0 and 7.5 < HP <= 250.:
                a1, a2, a3 = 3.8544, 0.83311, 0.02399
            elif self.kwargs["rpm"] == 0 and HP > 250.:
                a1, a2, a3 = 5.3182, 1.08470, -0.05695
            elif self.kwargs["rpm"] == 1 and HP <= 7.5:
                a1, a2, a3 = 4.9687, -0.00930, 0.22616
            elif self.kwargs["rpm"] == 1 and HP > 7.5:
                a1, a2, a3 = 4.5347, 0.57065, 0.04609
            elif self.kwargs["rpm"] == 2 and HP <= 7.5:
                a1, a2, a3 = 5.1532, 0.28931, 0.14357
            elif self.kwargs["rpm"] == 2 and HP > 7.5:
                a1, a2, a3 = 5.3858, 0.31004, 0.07406
        elif self.kwargs["motor"] == 2:  # Explosion-proof
            if self.kwargs["rpm"] == 0 and HP <= 7.5:
                a1, a2, a3 = 5.3934, -0.00333, 0.15475
            elif self.kwargs["rpm"] == 0 and HP > 7.5:
                a1, a2, a3 = 4.4442, 0.60820, 0.05202
            elif self.kwargs["rpm"] == 1 and HP <= 7.5:
                a1, a2, a3 = 5.2851, 0.00048, 0.19949
            elif self.kwargs["rpm"] == 1 and HP > 7.5:
                a1, a2, a3 = 4.8178, 0.51086, 0.05293
            elif self.kwargs["rpm"] == 2 and HP <= 7.5:
                a1, a2, a3 = 5.4166, 0.31216, 0.10573
            elif self.kwargs["rpm"] == 2 and HP > 7.5:
                a1, a2, a3 = 5.5655, 0.31284, 0.07212

        CI = self.kwargs["Current_index"]
        BI = self.kwargs["Base_index"]
        C_motor = 1.2 * exp(a1 + a2 * LnHP + a3 * LnHP**2) * CI / BI

        self.C_bomba = Currency(C_bomba)
        self.C_motor = Currency(C_motor)
        self.C_adq = Currency(C_bomba + C_motor)
        self.C_inst = Currency(self.C_adq * self.kwargs["f_install"])
Пример #6
0
    def coste(self):
        HP = self.power.hp/self.etapas
        CI = self.kwargs["Current_index"]
        BI = self.kwargs["Base_index"]

        if self.kwargs["compresor"] == 0:
            # Centrifugal compressor
            C = 6.49*HP**0.62*1000
        elif self.kwargs["compresor"] == 1:
            # Reciprocating compressor
            C = 5.96*HP**0.61*1000
        elif self.kwargs["compresor"] == 2:
            # Screw compressor
            C = 1.49*HP**0.71*1000

        C_comp = self.etapas*C*CI/BI

        if self.kwargs["motor"] == 0:  # Open, drip-proof
            if self.kwargs["rpm"] == 0 and HP <= 7.5:
                a1, a2, a3 = 4.8314, 0.0966, 0.10960
            elif self.kwargs["rpm"] == 0 and HP <= 250. and HP > 7.5:
                a1, a2, a3 = 4.1514, 0.5347, 0.05252
            elif self.kwargs["rpm"] == 0 and HP > 250.:
                a1, a2, a3 = 4.2432, 1.03251, -0.03595
            elif self.kwargs["rpm"] == 1 and HP <= 7.5:
                a1, a2, a3 = 4.7075, -0.01511, 0.22888
            elif self.kwargs["rpm"] == 1 and HP <= 250. and HP > 7.5:
                a1, a2, a3 = 4.5212, 0.47242, 0.04820
            elif self.kwargs["rpm"] == 1 and HP > 250.:
                a1, a2, a3 = 7.4044, -0.06464, 0.05448
            elif self.kwargs["rpm"] == 2 and HP <= 7.5:
                a1, a2, a3 = 4.9298, 0.30118, 0.12630
            elif self.kwargs["rpm"] == 2 and HP <= 250. and HP > 7.5:
                a1, a2, a3 = 5.0999, 0.35861, 0.06052
            elif self.kwargs["rpm"] == 2 and HP > 250.:
                a1, a2, a3 = 4.6163, 0.88531, -0.02188
        elif self.kwargs["motor"] == 1:  # Totally enclosed, fan-cooled
            if self.kwargs["rpm"] == 0 and HP <= 7.5:
                a1, a2, a3 = 5.1058, 0.03316, 0.15374
            elif self.kwargs["rpm"] == 0 and HP <= 250. and HP > 7.5:
                a1, a2, a3 = 3.8544, 0.83311, 0.02399
            elif self.kwargs["rpm"] == 0 and HP > 250.:
                a1, a2, a3 = 5.3182, 1.08470, -0.05695
            elif self.kwargs["rpm"] == 1 and HP <= 7.5:
                a1, a2, a3 = 4.9687, -0.00930, 0.22616
            elif self.kwargs["rpm"] == 1 and HP > 7.5:
                a1, a2, a3 = 4.5347, 0.57065, 0.04609
            elif self.kwargs["rpm"] == 2 and HP <= 7.5:
                a1, a2, a3 = 5.1532, 0.28931, 0.14357
            elif self.kwargs["rpm"] == 2 and HP > 7.5:
                a1, a2, a3 = 5.3858, 0.31004, 0.07406
        elif self.kwargs["motor"] == 2:  # Explosion-proof
            if self.kwargs["rpm"] == 0 and HP <= 7.5:
                a1, a2, a3 = 5.3934, -0.00333, 0.15475
            elif self.kwargs["rpm"] == 0 and HP > 7.5:
                a1, a2, a3 = 4.4442, 0.60820, 0.05202
            elif self.kwargs["rpm"] == 1 and HP <= 7.5:
                a1, a2, a3 = 5.2851, 0.00048, 0.19949
            elif self.kwargs["rpm"] == 1 and HP > 7.5:
                a1, a2, a3 = 4.8178, 0.51086, 0.05293
            elif self.kwargs["rpm"] == 2 and HP <= 7.5:
                a1, a2, a3 = 5.4166, 0.31216, 0.10573
            elif self.kwargs["rpm"] == 2 and HP > 7.5:
                a1, a2, a3 = 5.5655, 0.31284, 0.07212

        LnHP = log(HP)
        C_motor = self.etapas*1.2 * exp(a1 + a2 * LnHP + a3 * LnHP**2)

        if self.kwargs["compresor"] == 2:
            C_trans = 0
        elif self.kwargs["transmision"] == 0:
            C_trans = 1.2*exp(3.689+0.8917*log(HP))
        elif self.kwargs["transmision"] == 1:
            C_trans = 1.2*exp(5.329+0.5048*log(HP))
        elif self.kwargs["transmision"] == 2:
            C_trans = 12000/(1.562+7.877/HP)
        C_trans = self.etapas*C_trans*CI/BI

        C_adq = C_comp+C_motor+C_trans
        C_inst = C_adq * self.kwargs["f_install"]

        self.C_comp = Currency(C_comp)
        self.C_motor = Currency(C_motor)
        self.C_trans = Currency(C_trans)
        self.C_adq = Currency(C_adq)
        self.C_inst = Currency(C_inst)
Пример #7
0
    def __init__(self, equipment=None, parent=None):
        """
        equipment: Initial equipment instance to model
        """
        super(UI_equipment, self).__init__(ColumnFUG,
                                           entrada=False,
                                           parent=parent)

        # Calculate tab
        lyt = QtGui.QGridLayout(self.tabCalculo)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Feed tray")), 2, 0)
        self.feed = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_FEED:
            self.feed.addItem(txt)
        self.feed.currentIndexChanged.connect(
            partial(self.changeParams, "feed"))
        lyt.addWidget(self.feed, 2, 1)

        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Condenser")), 3, 0)
        self.condenser = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_CONDENSER:
            self.condenser.addItem(txt)
        self.condenser.currentIndexChanged.connect(
            partial(self.changeParams, "condenser"))
        lyt.addWidget(self.condenser, 3, 1)
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 4, 0, 1, 5)

        group = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt",
                                         "Key Components specification"))
        lyt.addWidget(group, 5, 0, 1, 5)
        layout = QtGui.QGridLayout(group)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Light")), 1,
            1)
        self.LK = QtGui.QComboBox()
        layout.addWidget(self.LK, 1, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Split in destilate")), 1, 4)
        self.LKsplit = Entrada_con_unidades(float, spinbox=True, max=1.)
        self.LKsplit.valueChanged.connect(partial(self.changeParams,
                                                  "LKsplit"))
        layout.addWidget(self.LKsplit, 1, 5)

        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Heavy")), 2,
            1)
        self.HK = QtGui.QComboBox()
        layout.addWidget(self.HK, 2, 2)
        layout.addItem(
            QtGui.QSpacerItem(40, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 2, 3)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Spit in residue")),
            2, 4)
        self.HKsplit = Entrada_con_unidades(float, spinbox=True, max=1.)
        self.HKsplit.valueChanged.connect(partial(self.changeParams,
                                                  "HKsplit"))
        layout.addWidget(self.HKsplit, 2, 5)

        indices, nombres, M = getComponents()
        for i, nombre in enumerate(nombres):
            self.LK.addItem("%i - %s" % (i + 1, nombre))
            self.HK.addItem("%i - %s" % (i + 1, nombre))
        self.LK.setCurrentIndex(-1)
        self.HK.setCurrentIndex(-1)
        self.LK.currentIndexChanged.connect(partial(self.changeParams, "LK"))
        self.HK.currentIndexChanged.connect(partial(self.changeParams, "HK"))
        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 6, 0, 1, 5)

        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Reflux ratio")), 7,
            0)
        self.R = Entrada_con_unidades(float)
        self.R.valueChanged.connect(partial(self.changeParams, "R"))
        lyt.addWidget(self.R, 7, 1)
        lyt.addWidget(QtGui.QLabel("R/Rmin"), 8, 0)
        self.R_Rmin = Entrada_con_unidades(float)
        self.R_Rmin.valueChanged.connect(partial(self.changeParams, "R_Rmin"))
        lyt.addWidget(self.R_Rmin, 8, 1)

        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Design Pressure")),
            7, 3)
        self.Pd = Entrada_con_unidades(Pressure)
        self.Pd.valueChanged.connect(partial(self.changeParams, "Pd"))
        lyt.addWidget(self.Pd, 7, 4)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Pressure loss")), 8,
            3)
        self.DeltaP = Entrada_con_unidades(Pressure)
        self.DeltaP.valueChanged.connect(partial(self.changeParams, "DeltaP"))
        lyt.addWidget(self.DeltaP, 8, 4)
        lyt.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 9, 0, 1, 5)
        self.buttonMcCabe = QtGui.QPushButton(
            QtGui.QApplication.translate("pychemqt", "McCabe-Thiele"))
        self.buttonMcCabe.clicked.connect(self.mcCabe)
        lyt.addWidget(self.buttonMcCabe, 10, 0)

        groupBox_Calculo = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Results"))
        lyt.addWidget(groupBox_Calculo, 11, 0, 1, 5)
        layout = QtGui.QGridLayout(groupBox_Calculo)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Condenser Duty")), 0,
            1)
        self.DutyCondenser = Entrada_con_unidades(Power, retornar=False)
        self.DutyCondenser.setReadOnly(True)
        layout.addWidget(self.DutyCondenser, 0, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Reboiler Duty")), 1,
            1)
        self.DutyReboiler = Entrada_con_unidades(Power, retornar=False)
        self.DutyReboiler.setReadOnly(True)
        layout.addWidget(self.DutyReboiler, 1, 2)
        layout.addWidget(QtGui.QLabel("Rmin"), 2, 1)
        self.Rmin = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.Rmin, 2, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Reflux ratio")), 3,
            1)
        self.RCalculada = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.RCalculada, 3, 2)

        layout.addWidget(QtGui.QLabel("Nmin"), 0, 4)
        self.Nmin = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.Nmin, 0, 5)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Stages")),
            1, 4)
        self.NTray = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.NTray, 1, 5)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Feed stage")), 2, 4)
        self.N_feed = Entrada_con_unidades(float, readOnly=True)
        layout.addWidget(self.N_feed, 2, 5)

        # Cost tab
        lyt = QtGui.QGridLayout(self.tabCostos)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Process")),
            1, 1)
        self.proceso = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_PROCESS:
            self.proceso.addItem(txt)
        self.proceso.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "proceso"))
        lyt.addWidget(self.proceso, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Column tipe")), 2, 1)
        self.tipo = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_COLUMN:
            self.tipo.addItem(txt)
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        lyt.addWidget(self.tipo, 2, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Material")),
            3, 1)
        self.material = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.material.addItem(txt)
        self.material.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material_columna"))
        lyt.addWidget(self.material, 3, 2)

        lyt.addItem(
            QtGui.QSpacerItem(30, 30, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 1, 3, 5, 1)

        self.groupBox_Pisos = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Tray column"))
        lyt.addWidget(self.groupBox_Pisos, 1, 4, 4, 2)
        layout = QtGui.QGridLayout(self.groupBox_Pisos)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tray type")), 1, 1)
        self.tipoPisos = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_TRAY:
            self.tipoPisos.addItem(txt)
        self.tipoPisos.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "tipo_pisos"))
        layout.addWidget(self.tipoPisos, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Material")),
            2, 1)
        self.materialPisos = QtGui.QComboBox()
        for txt in self.Equipment.TEXT_MATERIAL:
            self.materialPisos.addItem(txt)
        self.materialPisos.currentIndexChanged.connect(
            partial(self.changeParamsCoste, "material_pisos"))
        layout.addWidget(self.materialPisos, 2, 2)
        layout.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 3, 1, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Diameter")),
            4, 1)
        self.diametroPisos = Entrada_con_unidades(Length)
        layout.addWidget(self.diametroPisos, 4, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Stages")),
            5, 1)
        self.NumeroPisos = Entrada_con_unidades(int,
                                                spinbox=True,
                                                min=1,
                                                step=1,
                                                width=50)
        layout.addWidget(self.NumeroPisos, 5, 2)
        layout.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 6, 1, 1, 2)

        self.groupBox_relleno = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Packed column"))
        lyt.addWidget(self.groupBox_relleno, 1, 4, 4, 2)
        layout = QtGui.QGridLayout(self.groupBox_relleno)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Volume")),
            1, 1)
        self.VolumenRelleno = Entrada_con_unidades(Volume, "VolLiq")
        layout.addWidget(self.VolumenRelleno, 1, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Unit Cost")), 2, 1)
        texto = "%s / %s" % (Currency(None).text(),
                             Volume(None).text("VolLiq"))
        self.C_unit_relleno = Entrada_con_unidades(Currency,
                                                   retornar=False,
                                                   textounidad=texto)
        layout.addWidget(self.C_unit_relleno, 2, 2)
        layout.addItem(
            QtGui.QSpacerItem(10, 10, QtGui.QSizePolicy.Fixed,
                              QtGui.QSizePolicy.Fixed), 3, 1, 1, 2)

        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Diameter")),
            5, 1)
        self.Dc = Entrada_con_unidades(Length)
        lyt.addWidget(self.Dc, 5, 2, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Height")),
            6, 1)
        self.Hc = Entrada_con_unidades(Length)
        lyt.addWidget(self.Hc, 6, 2, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Thickness (top)")),
            6, 4)
        self.EspesorSuperior = Entrada_con_unidades(Length, "Thickness")
        lyt.addWidget(self.EspesorSuperior, 6, 5, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Thickness (bottom)")), 7, 4)
        self.EspesorInferior = Entrada_con_unidades(Length, "Thickness")
        lyt.addWidget(self.EspesorInferior, 7, 5, 1, 2)
        lyt.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt", "Density")),
            7, 1)
        self.EspesorInferior = Entrada_con_unidades(Density, "DenLiq")
        lyt.addWidget(self.EspesorInferior, 7, 2, 1, 2)

        self.Costos = CostData(self.Equipment)
        self.Costos.valueChanged.connect(self.changeParamsCoste)
        lyt.addWidget(self.Costos, 10, 1, 2, 5)

        lyt.addItem(
            QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding,
                              QtGui.QSizePolicy.Expanding), 12, 1, 1, 6)

        self.groupBox_Costos = QtGui.QGroupBox(
            QtGui.QApplication.translate("pychemqt", "Stimated costs"))
        lyt.addWidget(self.groupBox_Costos, 13, 1, 1, 5)
        layout = QtGui.QGridLayout(self.groupBox_Costos)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Tray cost")), 0, 1)
        self.C_pisos = Entrada_con_unidades(Currency, retornar=False)
        self.C_pisos.setReadOnly(True)
        layout.addWidget(self.C_pisos, 0, 2)
        layout.addWidget(
            QtGui.QLabel(QtGui.QApplication.translate("pychemqt",
                                                      "Shell cost")), 1, 1)
        self.C_carcasa = Entrada_con_unidades(Currency, retornar=False)
        self.C_carcasa.setReadOnly(True)
        layout.addWidget(self.C_carcasa, 1, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt",
                                             "Platform and ladder")), 2, 1)
        self.C_accesorios = Entrada_con_unidades(Currency, retornar=False)
        self.C_accesorios.setReadOnly(True)
        layout.addWidget(self.C_accesorios, 2, 2)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Column cost")), 0, 4)
        self.C_columna = Entrada_con_unidades(Currency, retornar=False)
        self.C_columna.setReadOnly(True)
        layout.addWidget(self.C_columna, 0, 5)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Purchase costs")), 1,
            4)
        self.C_adq = Entrada_con_unidades(Currency, retornar=False)
        self.C_adq.setReadOnly(True)
        layout.addWidget(self.C_adq, 1, 5)
        layout.addWidget(
            QtGui.QLabel(
                QtGui.QApplication.translate("pychemqt", "Installed costs")),
            2, 4)
        self.C_inst = Entrada_con_unidades(Currency, retornar=False)
        self.C_inst.setReadOnly(True)
        layout.addWidget(self.C_inst, 2, 5)

        # Output tab
        self.addSalida(QtGui.QApplication.translate("pychemqt", "Destilate"))
        self.addSalida(QtGui.QApplication.translate("pychemqt", "Residue"))

        self.mostrarSubclasificacion(0)
        if equipment:
            self.setEquipment(equipment)