示例#1
0
    def volumen(self):
        self.Di = unidades.Length(0)
        self.L = unidades.Length(0)
        self.reborde = 0
        self.espesor = 0
        self.espesor_cabeza = 0

        V_carcasa = pi / 4 * self.Di**2 * self.L

        if self.kwargs["cabeza"] == 0:
            V_cabeza = 4. / 3 * pi / 8 * self.Di**3
        elif self.kwargs["cabeza"] == 1:
            V_cabeza = 4. / 3 * pi / 8 / 2 * self.Di**3
        elif self.kwargs["cabeza"] == 2:
            V_cabeza = 0.215483 / 2 * self.Di**3
        else:
            V_cabeza = 0.

        self.V = unidades.Volume(V_carcasa + V_cabeza)
示例#2
0
    def __init__(self, entrada=None, parent=None):
        """entrada: Parametro opcional de clase corriente que indica la corriente de entrada en kla tubería"""
        super(UI_equipment, self).__init__(Tower, parent=parent)
        self.entrada = entrada

        #        #Pestaña entrada
        #        self.Entrada= UI_corriente.Ui_corriente(entrada)
        #        self.Entrada.Changed.connect(self.cambiar_entrada)
        #        self.tabWidget.addTab(self.Entrada, QtGui.QApplication.translate("equipment", "Entrada", None, QtGui.QApplication.UnicodeUTF8))

        #Pestaña calculo
        gridLayout_Calculo = QtWidgets.QGridLayout(self.tabCalculo)

        #Pestaña costos
        gridLayout_Costos = QtWidgets.QGridLayout(self.tabCostos)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Proceso:",
                                                 None)), 1, 1, 1, 1)
        self.proceso = QtWidgets.QComboBox()
        self.proceso.addItem(
            QtWidgets.QApplication.translate("equipment", "Destilación", None))
        self.proceso.addItem(
            QtWidgets.QApplication.translate("equipment", "Absorción", None))
        self.proceso.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.proceso, 1, 2, 1, 1)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Tipo de columna:", None)), 2,
            1, 1, 1)
        self.tipo = QtWidgets.QComboBox()
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "De pisos", None))
        self.tipo.addItem(
            QtWidgets.QApplication.translate("equipment", "De relleno", None))
        self.tipo.currentIndexChanged.connect(self.mostrarSubclasificacion)
        self.tipo.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.tipo, 2, 2, 1, 1)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Material:",
                                                 None)), 3, 1, 1, 1)
        self.material = QtWidgets.QComboBox()
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Acero al carbon",
                                             None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Acero inoxidable 304", None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Acero inoxidable 316", None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Carpenter 20CB-3",
                                             None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Niquel 200", None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Monel 400", None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Inconel 600", None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Incoloy 825", None))
        self.material.addItem(
            QtWidgets.QApplication.translate("equipment", "Titanio", None))
        self.material.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.material, 3, 2, 1, 1)

        gridLayout_Costos.addItem(
            QtWidgets.QSpacerItem(30, 30, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 1, 3, 5, 1)

        self.groupBox_Pisos = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("equipment", "Torre de pisos",
                                             None))
        gridLayout_Costos.addWidget(self.groupBox_Pisos, 1, 4, 4, 2)
        gridLayout_1 = QtWidgets.QGridLayout(self.groupBox_Pisos)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Tipo:", None)),
            1, 1, 1, 1)
        self.tipoPisos = QtWidgets.QComboBox()
        self.tipoPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "De válvula", None))
        self.tipoPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "De rejilla", None))
        self.tipoPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "De borboteo", None))
        self.tipoPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "De tamiz", None))
        self.tipoPisos.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_1.addWidget(self.tipoPisos, 1, 2, 1, 1)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Material:",
                                                 None)), 2, 1, 1, 1)
        self.materialPisos = QtWidgets.QComboBox()
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Acero al carbon",
                                             None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Acero inoxidable 304", None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment",
                                             "Acero inoxidable 316", None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Carpenter 20CB-3",
                                             None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Niquel 200", None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Monel 400", None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Inconel 600", None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Incoloy 825", None))
        self.materialPisos.addItem(
            QtWidgets.QApplication.translate("equipment", "Titanio", None))
        self.materialPisos.currentIndexChanged.connect(self.calcularCostos)
        gridLayout_1.addWidget(self.materialPisos, 2, 2, 1, 1)
        gridLayout_1.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 3, 1, 1, 2)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Diametro:",
                                                 None)), 4, 1, 1, 1)
        self.diametroPisos = Entrada_con_unidades(unidades.Length)
        gridLayout_1.addWidget(self.diametroPisos, 4, 2, 1, 1)
        gridLayout_1.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Número:",
                                                 None)), 5, 1, 1, 1)
        self.NumeroPisos = Entrada_con_unidades(int,
                                                spinbox=True,
                                                min=1,
                                                step=1,
                                                width=50)
        gridLayout_1.addWidget(self.NumeroPisos, 5, 2, 1, 1)
        gridLayout_1.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 6, 1, 1, 2)

        self.groupBox_relleno = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("equipment", "Torre de relleno",
                                             None))
        gridLayout_Costos.addWidget(self.groupBox_relleno, 1, 4, 4, 2)
        gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_relleno)
        gridLayout_2.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Volumen:",
                                                 None)), 1, 1, 1, 1)
        self.VolumenRelleno = Entrada_con_unidades(unidades.Volume, "VolLiq")
        gridLayout_2.addWidget(self.VolumenRelleno, 1, 2, 1, 1)
        gridLayout_2.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Coste unitario:", None)), 2,
            1, 1, 1)
        self.C_unit_relleno = Entrada_con_unidades(
            unidades.Currency,
            retornar=False,
            textounidad="%s / %s" % (unidades.Currency(None).text(),
                                     unidades.Volume(None).text("VolLiq")))
        gridLayout_2.addWidget(self.C_unit_relleno, 2, 2, 1, 1)
        gridLayout_2.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Fixed,
                                  QtWidgets.QSizePolicy.Fixed), 3, 1, 1, 2)

        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Diametro:",
                                                 None)), 5, 1, 1, 1)
        self.Dc = Entrada_con_unidades(unidades.Length)
        gridLayout_Costos.addWidget(self.Dc, 5, 2, 1, 2)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Altura:",
                                                 None)), 6, 1, 1, 1)
        self.Hc = Entrada_con_unidades(unidades.Length)
        gridLayout_Costos.addWidget(self.Hc, 6, 2, 1, 2)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Espesor (Tapa):", None)), 7,
            1, 1, 1)
        self.EspesorSuperior = Entrada_con_unidades(unidades.Length,
                                                    "Thickness")
        gridLayout_Costos.addWidget(self.EspesorSuperior, 7, 2, 1, 2)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Espesor (Fondo):", None)), 8,
            1, 1, 1)
        self.EspesorInferior = Entrada_con_unidades(unidades.Length,
                                                    "Thickness")
        gridLayout_Costos.addWidget(self.EspesorInferior, 8, 2, 1, 2)
        gridLayout_Costos.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Densidad:",
                                                 None)), 9, 1, 1, 1)
        self.EspesorInferior = Entrada_con_unidades(unidades.Density, "DenLiq")
        gridLayout_Costos.addWidget(self.EspesorInferior, 9, 2, 1, 2)

        self.Costos = costIndex.CostData(3, 3)
        self.Costos.valueChanged.connect(self.calcularCostos)
        gridLayout_Costos.addWidget(self.Costos, 10, 1, 2, 4)

        gridLayout_Costos.addItem(
            QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding), 12, 1, 1,
            6)

        self.groupBox_Costos = QtWidgets.QGroupBox(
            QtWidgets.QApplication.translate("equipment", "Costos calculados",
                                             None))
        gridLayout_Costos.addWidget(self.groupBox_Costos, 13, 1, 1, 5)
        gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_Costos)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Coste Pisos:",
                                                 None)), 0, 1, 1, 1)
        self.C_pisos = Entrada_con_unidades(unidades.Currency,
                                            retornar=False,
                                            readOnly=True)
        gridLayout_5.addWidget(self.C_pisos, 0, 2, 1, 1)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Coste Carcasa:",
                                                 None)), 1, 1, 1, 1)
        self.C_carcasa = Entrada_con_unidades(unidades.Currency,
                                              retornar=False,
                                              readOnly=True)
        gridLayout_5.addWidget(self.C_carcasa, 1, 2, 1, 1)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Coste Accesorios:", None)),
            2, 1, 1, 1)
        self.C_accesorios = Entrada_con_unidades(unidades.Currency,
                                                 retornar=False,
                                                 readOnly=True)
        gridLayout_5.addWidget(self.C_accesorios, 2, 2, 1, 1)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment", "Coste Columna:",
                                                 None)), 0, 4, 1, 1)
        self.C_columna = Entrada_con_unidades(unidades.Currency,
                                              retornar=False,
                                              readOnly=True)
        gridLayout_5.addWidget(self.C_columna, 0, 5, 1, 1)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Coste Adquisición:", None)),
            1, 4, 1, 1)
        self.C_adq = Entrada_con_unidades(unidades.Currency,
                                          retornar=False,
                                          readOnly=True)
        gridLayout_5.addWidget(self.C_adq, 1, 5, 1, 1)
        gridLayout_5.addWidget(
            QtWidgets.QLabel(
                QtWidgets.QApplication.translate("equipment",
                                                 "Coste Instalación:", None)),
            2, 4, 1, 1)
        self.C_inst = Entrada_con_unidades(unidades.Currency,
                                           retornar=False,
                                           readOnly=True)
        gridLayout_5.addWidget(self.C_inst, 2, 5, 1, 1)

        #        #Pestaña salida
        #        self.pSalida = QtGui.QTabWidget()
        #        self.tabWidget.addTab(self.pSalida,QtGui.QApplication.translate("equipment", "Salida", None, QtGui.QApplication.UnicodeUTF8))

        self.mostrarSubclasificacion(0)
示例#3
0
 def volumen(self):
     """Cálculo del volumen interno de la columna, útil ya que corresponde al volumen de relleno necesario en columnas de relleno"""
     return unidades.Volume(pi / 4 * self.kwargs["Di"]**2 *
                            self.kwargs["h"])
示例#4
0
    def calculo(self):
        # TODO: Add configuration section to Preferences
        # preos = Preferences.getboolean("refProp", "preos")
        # aga = Preferences.getboolean("refProp", "aga")
        # gerg = Preferences.getboolean("refProp", "gerg")
        preos = self.kwargs["preos"]
        aga = self.kwargs["aga"]
        gerg = self.kwargs["gerg"]

        x = self._x()
        fluido = self._name()

        kwmod = [self.kwargs[k] for k in ('htype', 'hmix', 'hcomp')]
        refprop.setmod(*kwmod)
        if gerg:
            refprop.gerg04(ixflag=1)
        refprop.setup("def", fluido)
        # refprop.setktv()
        if preos:
            refprop.preos(ixflag=2)
        elif aga:
            refprop.setaga()
        kwref = {k: self.kwargs[k] for k in (
            'hrf', 'ixflag', 'x0', 'h0', 's0', 't0', 'p0')}
        refprop.setref(**kwref)

        m = refprop.wmol(x)["wmix"]
        self.M = unidades.Dimensionless(m)
        crit = refprop.critp(x)
        self.Pc = unidades.Pressure(crit["pcrit"], "kPa")
        self.Tc = unidades.Temperature(crit["tcrit"])
        self.rhoc = unidades.Density(crit["Dcrit"]*self.M)

        args = self.args()
        flash = refprop.flsh(*args)

        # check if ['q'] in fld
        if 'q' in flash.keys():
            x = flash['q']
        elif 'h' in flash.keys():
            x = refprop.flsh('ph', flash['p'], flash['h'], flash['x'])['q']
        elif 's' in flash.keys():
            x = refprop.flsh('ps', flash['p'], flash['s'], flash['x'])['q']
        if 0 < x < 1:
            region = 4
        else:
            region = 1

        if x < 0:
            x = 0
        elif x > 1:
            x = 1
        self.x = unidades.Dimensionless(x)
        self.T = unidades.Temperature(flash["t"])
        self.P = unidades.Pressure(flash["p"], "kPa")
        self.Tr = unidades.Dimensionless(self.T/self.Tc)
        self.Pr = unidades.Dimensionless(self.P/self.Pc)
        self.rho = unidades.Density(flash["D"]*self.M)
        self.v = unidades.SpecificVolume(1./self.rho)
        self.phase = self.getphase(Tc=self.Tc, Pc=self.Pc, T=self.T, P=self.Pc,
                                   x=self.x, region=region)

        if flash["nc"] == 1:
            name = refprop.name(flash["nc"])
            self.name = name["hname"]
            self.synonim = name["hn80"]
            self.CAS = name["hcas"]

            info = refprop.info(flash["nc"])
            self.R = unidades.SpecificHeat(info["Rgas"]/self.M)
            self.Tt = unidades.Temperature(info["ttrp"])
            self.Tb = unidades.Temperature(info["tnbpt"])
            self.f_accent = unidades.Dimensionless(info["acf"])
            self.momentoDipolar = unidades.DipoleMoment(info["dip"], "Debye")
            self._doc = {}
            for htype in ['EOS', 'CP0', 'ETA', 'VSK', 'TCX', 'TKK', 'STN',
                          'DE ', 'MLT', 'SBL', 'PS ', 'DL ', 'DV ']:
                self._doc[htype] = refprop.getmod(flash["nc"], htype)["hcite"]
        else:
            self.name = ""
            self.synonim = ""
            self.CAS = ""

            rmix = refprop.rmix2(flash["x"])
            self.R = unidades.SpecificHeat(rmix["Rgas"]/self.M)
            self.Tt = unidades.Temperature(None)
            self.Tb = unidades.Temperature(None)
            self.f_accent = unidades.Dimensionless(None)
            self.momentoDipolar = unidades.DipoleMoment(None)
            self._doc = {}

        self._cp0(flash)

        self.Liquido = ThermoRefProp()
        self.Gas = ThermoRefProp()
        if self.x == 0:
            # liquid phase
            self.fill(self.Liquido, flash["t"], flash["Dliq"], flash["xliq"])
            self.fill(self, flash["t"], flash["Dliq"], flash["xliq"])
            self.fillNone(self.Gas)
        elif self.x == 1:
            # vapor phase
            self.fill(self.Gas, flash["t"], flash["Dvap"], flash["xvap"])
            self.fill(self, flash["t"], flash["Dvap"], flash["xvap"])
            self.fillNone(self.Liquido)
        else:
            # Two phase
            self.fill(self.Liquido, flash["t"], flash["Dliq"], flash["xliq"])
            self.fill(self.Gas, flash["t"], flash["Dvap"], flash["xvap"])

            self.u = unidades.Enthalpy(flash["e"]/self.M, "Jg")
            self.h = unidades.Enthalpy(flash["h"]/self.M, "Jg")
            self.s = unidades.SpecificHeat(flash["s"]/self.M, "JgK")
            self.a = unidades.Enthalpy(self.u-self.T*self.s)
            self.g = unidades.Enthalpy(self.h-self.T*self.s)

        if self.x < 1 and self.T <= self.Tc:
            surten = refprop.surten(flash["t"], flash["Dliq"], flash["Dvap"],
                                    flash["xliq"], flash["xvap"])
            self.sigma = unidades.Tension(surten["sigma"])
        else:
            self.sigma = unidades.Tension(None)

        if 0 < self.x < 1:
            self.Hvap = unidades.Enthalpy(self.Gas.h-self.Liquido.h)
            self.Svap = unidades.SpecificHeat(self.Gas.s-self.Liquido.s)
            self.K = []
            for x, y in zip(self.Liquido.fraccion, self.Gas.fraccion):
                self.K.append(unidades.Dimensionless(y/x))
        else:
            self.Hvap = unidades.Enthalpy(None)
            self.Svap = unidades.SpecificHeat(None)
            self.K = [unidades.Dimensionless(1)]*flash["nc"]

        # NOT supported on Windows
        excess = refprop.excess(flash["t"], flash["D"], flash["x"])
        self.vE = unidades.Volume(excess["vE"]/self.M)
        self.uE = unidades.Enthalpy(excess["eE"]/self.M, "Jg")
        self.hE = unidades.Enthalpy(excess["hE"]/self.M, "Jg")
        self.sE = unidades.SpecificHeat(excess["sE"]/self.M, "JgK")
        self.aE = unidades.Enthalpy(excess["aE"]/self.M, "Jg")
        self.gE = unidades.Enthalpy(excess["gE"]/self.M, "Jg")

        self.csat = []
        self.dpdt_sat = []
        self.cv2p = []
        for i in range(1, flash["nc"]+1):
            dat = refprop.dptsatk(i, flash["t"], kph=2)
            self.csat.append(unidades.SpecificHeat(dat["csat"]/self.M, "JgK"))
            self.dpdt_sat.append(
                unidades.PressureTemperature(dat["dpdt"], "kPaK"))
            cv2 = refprop.cv2pk(i, flash["t"], flash["D"])
            self.cv2p.append(unidades.SpecificHeat(cv2["cv2p"]/self.M, "JgK"))
示例#5
0
    def _calculo(self):
        self._initialization()

        x = self._x()
        m = refprop.wmol(x)["wmix"]
        self.M = unidades.Dimensionless(m)
        crit = refprop.critp(x)
        self.Pc = unidades.Pressure(crit["pcrit"], "kPa")
        self.Tc = unidades.Temperature(crit["tcrit"])
        self.rhoc = unidades.Density(crit["Dcrit"]*self.M)

        args = self.args()
        flash = refprop.flsh(*args)

        # check if ['q'] in fld
        if 'q' in flash.keys():
            x = flash['q']
        elif 'h' in flash.keys():
            x = refprop.flsh('ph', flash['p'], flash['h'], flash['x'])['q']
        elif 's' in flash.keys():
            x = refprop.flsh('ps', flash['p'], flash['s'], flash['x'])['q']
        if 0 < x < 1:
            region = 4
        else:
            region = 1

        if x < 0:
            x = 0
        elif x > 1:
            x = 1
        self.x = unidades.Dimensionless(x)
        self.T = unidades.Temperature(flash["t"])
        self.P = unidades.Pressure(flash["p"], "kPa")
        self.Tr = unidades.Dimensionless(self.T/self.Tc)
        self.Pr = unidades.Dimensionless(self.P/self.Pc)
        self.rho = unidades.Density(flash["D"]*self.M)
        self.v = unidades.SpecificVolume(1./self.rho)
        self.phase = self.getphase(Tc=self.Tc, Pc=self.Pc, T=self.T, P=self.Pc,
                                   x=self.x, region=region)

        if flash["nc"] == 1:
            name = refprop.name(flash["nc"])
            self.name = name["hname"]
            self.synonim = name["hn80"]
            self.CAS = name["hcas"]

            info = refprop.info(flash["nc"])
            self.R = unidades.SpecificHeat(info["Rgas"]/self.M)
            self.Tt = unidades.Temperature(info["ttrp"])
            self.Tb = unidades.Temperature(info["tnbpt"])
            self.f_accent = unidades.Dimensionless(info["acf"])
            self.momentoDipolar = unidades.DipoleMoment(info["dip"], "Debye")
            self._doc = {}
            for htype in ['EOS', 'CP0', 'ETA', 'VSK', 'TCX', 'TKK', 'STN',
                          'DE ', 'MLT', 'SBL', 'PS ', 'DL ', 'DV ']:
                self._doc[htype] = refprop.getmod(flash["nc"], htype)["hcite"]
        else:
            self.name = ""
            self.synonim = ""
            self.CAS = ""

            rmix = refprop.rmix2(flash["x"])
            self.R = unidades.SpecificHeat(rmix["Rgas"]/self.M)
            self.Tt = unidades.Temperature(None)
            self.Tb = unidades.Temperature(None)
            self.f_accent = unidades.Dimensionless(None)
            self.momentoDipolar = unidades.DipoleMoment(None)
            self._doc = {}

        self._cp0(flash)

        self.Liquido = ThermoRefProp()
        self.Gas = ThermoRefProp()
        if self.x == 0.:
            # liquid phase
            self.fill(self.Liquido, flash["t"], flash["D"], flash["x"])
            self.fill(self, flash["t"], flash["D"], flash["x"])
            self.fillNone(self.Gas)
        elif self.x == 1.:
            # vapor phase
            self.fill(self.Gas, flash["t"], flash["D"], flash["x"])
            self.fill(self, flash["t"], flash["D"], flash["x"])
            self.fillNone(self.Liquido)
        else:
            # Two phase
            self.fillNone(self)
            self.fill(self.Liquido, flash["t"], flash["Dliq"], flash["xliq"])
            self.fill(self.Gas, flash["t"], flash["Dvap"], flash["xvap"])

            self.v = unidades.SpecificVolume(x*self.Gas.v+(1-x)*self.Liquido.v)
            self.rho = unidades.Density(1./self.v)

            self.u = unidades.Enthalpy(flash["e"]/self.M, "Jg")
            self.h = unidades.Enthalpy(flash["h"]/self.M, "Jg")
            self.s = unidades.SpecificHeat(flash["s"]/self.M, "JgK")
            self.a = unidades.Enthalpy(self.u-self.T*self.s)
            self.g = unidades.Enthalpy(self.h-self.T*self.s)

            self.rhoM = unidades.MolarDensity(self.rho/self.M)
            self.hM = unidades.MolarEnthalpy(self.h*self.M)
            self.sM = unidades.MolarSpecificHeat(self.s*self.M)
            self.uM = unidades.MolarEnthalpy(self.u*self.M)
            self.aM = unidades.MolarEnthalpy(self.a*self.M)
            self.gM = unidades.MolarEnthalpy(self.g*self.M)

        if self.x < 1 and self.T <= self.Tc:
            surten = refprop.surten(flash["t"], flash["Dliq"], flash["Dvap"],
                                    flash["xliq"], flash["xvap"])
            self.sigma = unidades.Tension(surten["sigma"])
        else:
            self.sigma = unidades.Tension(None)

        if 0 < self.x < 1:
            self.Hvap = unidades.Enthalpy(self.Gas.h-self.Liquido.h)
            self.Svap = unidades.SpecificHeat(self.Gas.s-self.Liquido.s)
            self.K = []
            for x, y in zip(self.Liquido.fraccion, self.Gas.fraccion):
                self.K.append(unidades.Dimensionless(y/x))
        else:
            self.Hvap = unidades.Enthalpy(None)
            self.Svap = unidades.SpecificHeat(None)
            self.K = [unidades.Dimensionless(1)]*flash["nc"]
        self.invT = unidades.InvTemperature(-1/self.T)

        # NOT supported on Windows
        if sys.platform != "win32":
            excess = refprop.excess(flash["t"], flash["D"], flash["x"])
            self.vE = unidades.Volume(excess["vE"]/self.M)
            self.uE = unidades.Enthalpy(excess["eE"]/self.M, "Jg")
            self.hE = unidades.Enthalpy(excess["hE"]/self.M, "Jg")
            self.sE = unidades.SpecificHeat(excess["sE"]/self.M, "JgK")
            self.aE = unidades.Enthalpy(excess["aE"]/self.M, "Jg")
            self.gE = unidades.Enthalpy(excess["gE"]/self.M, "Jg")
        else:
            self.vE = unidades.Volume(0)
            self.uE = unidades.Enthalpy(0)
            self.hE = unidades.Enthalpy(0)
            self.sE = unidades.SpecificHeat(0)
            self.aE = unidades.Enthalpy(0)
            self.gE = unidades.Enthalpy(0)

        self.csat = []
        self.dpdt_sat = []
        self.cv2p = []
        if self.Tt <= flash["t"] <= self.Tc:
            for i in range(1, flash["nc"]+1):
                dat = refprop.dptsatk(i, flash["t"], kph=2)
                cs = unidades.SpecificHeat(dat["csat"]/self.M, "JgK")
                self.csat.append(cs)
                self.dpdt_sat.append(
                    unidades.PressureTemperature(dat["dpdt"], "kPaK"))
                cv2 = refprop.cv2pk(i, flash["t"], flash["D"])
                cv = unidades.SpecificHeat(cv2["cv2p"]/self.M, "JgK")
                self.cv2p.append(cv)