def calculo(self, st): self.x = unidades.Dimensionless(st.x) self.region = st.region self.phase = self.getphase(phase=st.phase) self.name = st.name self.synonim = st.synonim self.CAS = st.CAS self.T = unidades.Temperature(st.T) self.P = unidades.Pressure(st.P, "MPa") self.Tr = unidades.Dimensionless(st.Tr) self.Pr = unidades.Dimensionless(st.Pr) self.v = unidades.SpecificVolume(st.v) self.rho = unidades.Density(st.rho) cp0 = {} cp0["v"] = st.v0 cp0["h"] = st.h0 * 1000 cp0["s"] = st.s0 * 1000 cp0["cp"] = st.cp0 * 1000 cp0["cv"] = st.cv0 * 1000 cp0["w"] = st.w0 self._cp0(cp0) self.Liquido = ThermoWater() self.Gas = ThermoWater() if self.x == 0: # only liquid phase self.fill(self, st.Liquid) self.fill(self.Liquido, st.Liquid) self.sigma = unidades.Tension(st.sigma) self.Hvap = unidades.Enthalpy(None) self.Svap = unidades.SpecificHeat(None) elif self.x == 1: # only vapor phase self.fill(self, st.Vapor) self.fill(self.Gas, st.Vapor) self.Hvap = unidades.Enthalpy(None) self.Svap = unidades.SpecificHeat(None) else: # two phases self.fill(self.Liquido, st.Liquid) self.sigma = unidades.Tension(st.sigma) self.fill(self.Gas, st.Vapor) self.h = unidades.Enthalpy(st.h) self.s = unidades.SpecificHeat(st.s) self.u = unidades.SpecificHeat(st.u) self.a = unidades.Enthalpy(st.a) self.g = unidades.Enthalpy(st.g) self.cv = unidades.SpecificHeat(None) self.cp = unidades.SpecificHeat(None) self.cp_cv = unidades.Dimensionless(None) self.w = unidades.Speed(None) self.Hvap = unidades.Enthalpy(st.Hvap, "kJkg") self.Svap = unidades.SpecificHeat(st.Svap, "kJkgK")
def _Surface(self, T): """Equation for the surface tension""" try: s = _Tension(T) except NotImplementedError: s = None return unidades.Tension(s)
def calculo(self): func = [freesteam.steam_pT, freesteam.steam_ph, freesteam.steam_ps, freesteam.steam_pv, freesteam.steam_Ts, freesteam.steam_Tx][self._thermo] fluido = func(self.var1, self.var2) self.M = unidades.Dimensionless(mEoS.H2O.M) self.Pc = unidades.Pressure(freesteam.PCRIT) self.Tc = unidades.Temperature(freesteam.TCRIT) self.rhoc = unidades.Density(freesteam.RHOCRIT*self.M) self.Tt = mEoS.H2O.Tt self.Tb = mEoS.H2O.Tb self.f_accent = unidades.Dimensionless(mEoS.H2O.f_acent) self.momentoDipolar = mEoS.H2O.momentoDipolar self.phase = self.getphase(fluido) self.x = unidades.Dimensionless(fluido.x) self.name = mEoS.H2O.name self.synonim = mEoS.H2O.synonym self.CAS = mEoS.H2O.CASNumber self.T = unidades.Temperature(fluido.T) self.P = unidades.Pressure(fluido.p) self.rho = unidades.Density(fluido.rho) self.v = unidades.SpecificVolume(1./self.rho) self.Liquido = Fluid() self.Gas = Fluid() if self.x < 1: # Liquid phase liquido = freesteam.steam_Tx(fluido.T, 0.) self.fill(self.Liquido, liquido) self.Liquido.epsilon = unidades.Tension(iapws._Tension(self.T)) if self.x > 0: vapor = freesteam.steam_Tx(fluido.T, 1.) self.fill(self.Gas, vapor) if self.x in (0, 1): self.fill(self, fluido) else: self.h = unidades.Enthalpy(self.x*self.Vapor.h+(1-self.x)*self.Liquido.h) self.s = unidades.SpecificHeat(self.x*self.Vapor.s+(1-self.x)*self.Liquido.s) self.u = unidades.SpecificHeat(self.x*self.Vapor.u+(1-self.x)*self.Liquido.u) self.a = unidades.Enthalpy(self.x*self.Vapor.a+(1-self.x)*self.Liquido.a) self.g = unidades.Enthalpy(self.x*self.Vapor.g+(1-self.x)*self.Liquido.g) self.cv = unidades.SpecificHeat(None) self.cp = unidades.SpecificHeat(None) self.cp_cv = unidades.Dimensionless(None) self.w = unidades.Speed(None)
def calculo(self): refprop.setup(self.kwargs["ref"], self.kwargs["fluido"]) m = refprop.wmol(self.kwargs["fraccionMolar"])["wmix"] self.M = unidades.Dimensionless(m) crit = refprop.critp(self.kwargs["fraccionMolar"]) 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) self.phase, self.x = self.getphase(flash) self.T = unidades.Temperature(flash["t"]) self.P = unidades.Pressure(flash["p"], "kPa") self.rho = unidades.Density(flash["D"] * self.M) self.v = unidades.SpecificVolume(1. / self.rho) name = refprop.name(flash["nc"]) info = refprop.info(flash["nc"]) if flash["nc"] == 1: self.name = name["hname"] self.synonim = name["hn80"] self.CAS = name["hcas"] 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.Liquido = Fluid() self.Vapor = Fluid() if self.x < 1.: # Hay fase liquida liquido_thermo = refprop.therm2(flash["t"], flash["Dliq"], flash["xliq"]) liquido_mol = refprop.wmol(flash["xliq"]) try: liquido_transport = refprop.trnprp(flash["t"], flash["Dliq"], flash["xliq"]) except refprop.RefpropError as e: print e liquido_transport = None liquido_dielec = refprop.dielec(flash["t"], flash["Dliq"], flash["xliq"]) liquido_thermo0 = refprop.therm0(flash["t"], flash["Dliq"], flash["xliq"]) self.fill(self.Liquido, flash, liquido_thermo, liquido_mol, liquido_transport, liquido_dielec, liquido_thermo0) if self.x > 0.: # Hay fase vapor vapor_thermo = refprop.therm2(flash["t"], flash["Dvap"], flash["xvap"]) vapor_mol = refprop.wmol(flash["xvap"]) try: vapor_transport = refprop.trnprp(flash["t"], flash["Dvap"], flash["xvap"]) except refprop.RefpropError as e: print e vapor_transport = None vapor_dielec = refprop.dielec(flash["t"], flash["Dvap"], flash["xvap"]) vapor_thermo0 = refprop.therm0(flash["t"], flash["Dvap"], flash["xvap"]) self.fill(self.Vapor, flash, vapor_thermo, vapor_mol, vapor_transport, vapor_dielec, vapor_thermo0) # crit = multiRP.mRP[u'process'](target=multiRP.critp, args=(self.kwargs["fraccionMolar"], setup, multiRP.mRP)) # mol = multiRP.mRP[u'process'](target=multiRP.wmol, args=(self.kwargs["fraccionMolar"], setup, multiRP.mRP)) # processlist = [crit, mol] # multiRP.run_mRP(processlist) # self.Pc=unidades.Pressure(multiRP.mRP[u'result'][processlist[0].name]["pcrit"], "kPa") # self.Tc=unidades.Temperature(multiRP.mRP[u'result'][processlist[0].name]["tcrit"]) # self.rhoc=unidades.Density(multiRP.mRP[u'result'][processlist[0].name]["Dcrit"]*self.M) # args=self.args() # flash = multiRP.mRP[u'process'](target=multiRP.flsh, args=args, kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # name = multiRP.mRP[u'process'](target=multiRP.name, args=(1, setup, multiRP.mRP)) # info = multiRP.mRP[u'process'](target=multiRP.info, args=(1, setup, multiRP.mRP)) # processlist = [flash, name, info] # multiRP.run_mRP(processlist) # flash=multiRP.mRP[u'result'][processlist[0].name] # self.phase, self.x=self.getphase(flash) # self.nc=flash["nc"] # self.fraccion=self.kwargs["fraccionMolar"] # if flash["nc"] ==1: # self.name=multiRP.mRP[u'result'][processlist[1].name]["hname"] # self.synonim=multiRP.mRP[u'result'][processlist[1].name]["hn80"] # self.CAS=multiRP.mRP[u'result'][processlist[1].name]["hcas"] # # self.Tt=unidades.Temperature(multiRP.mRP[u'result'][processlist[2].name]["ttrp"]) # self.Tb=unidades.Temperature(multiRP.mRP[u'result'][processlist[2].name]["tnbpt"]) # self.f_accent=unidades.Dimensionless(multiRP.mRP[u'result'][processlist[2].name]["acf"]) # self.momentoDipolar=unidades.DipoleMoment(multiRP.mRP[u'result'][processlist[2].name]["dip"], "Debye") # self.Rgas=unidades.SpecificHeat(multiRP.mRP[u'result'][processlist[2].name]["Rgas"]/self.M) # else: # self.Rgas=unidades.SpecificHeat(refprop.rmix2(self.kwargs["fraccionMolar"])["Rgas"]/self.M) # self.T=unidades.Temperature(flash["t"]) # self.P=unidades.Pressure(flash["p"], "kPa") # self.rho=unidades.Density(flash["D"]*self.M) # self.v=unidades.SpecificVolume(1./self.rho) # self.Liquido=Fluid() # self.Vapor=Fluid() # if self.x<1.: #Hay fase liquida # liquido_thermo = multiRP.mRP[u'process'](target=multiRP.therm2, args=(flash["t"], flash["Dliq"], flash["xliq"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # liquido_mol = multiRP.mRP[u'process'](target=multiRP.wmol, args=(flash["xliq"], setup, multiRP.mRP)) # liquido_transport = multiRP.mRP[u'process'](target=multiRP.trnprp, args=(flash["t"], flash["Dliq"], flash["xliq"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # liquido_dielec = multiRP.mRP[u'process'](target=multiRP.dielec, args=(flash["t"], flash["Dliq"], flash["xliq"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # liquido_thermo0 = multiRP.mRP[u'process'](target=multiRP.therm0, args=(flash["t"], flash["Dliq"], flash["xliq"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # processlist = [liquido_thermo, liquido_mol, liquido_transport, liquido_dielec, liquido_thermo0] # try: # multiRP.run_mRP(processlist) # transport=multiRP.mRP[u'result'][processlist[2].name] # except refprop.RefpropError as e: # print e # transport=None # self.fill(self.Liquido, flash, multiRP.mRP[u'result'][processlist[0].name], multiRP.mRP[u'result'][processlist[1].name], # transport, multiRP.mRP[u'result'][processlist[3].name], multiRP.mRP[u'result'][processlist[4].name]) # if self.x>0.: #Hay fase vapor # vapor_thermo = multiRP.mRP[u'process'](target=multiRP.therm2, args=(flash["t"], flash["Dvap"], flash["xvap"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # vapor_mol = multiRP.mRP[u'process'](target=multiRP.wmol, args=(flash["xvap"], setup, multiRP.mRP)) # vapor_transport = multiRP.mRP[u'process'](target=multiRP.trnprp, args=(flash["t"], flash["Dvap"], flash["xvap"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # vapor_dielec = multiRP.mRP[u'process'](target=multiRP.dielec, args=(flash["t"], flash["Dvap"], flash["xvap"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # vapor_thermo0 = multiRP.mRP[u'process'](target=multiRP.therm0, args=(flash["t"], flash["Dvap"], flash["xvap"]), kwargs={u'prop': setup, u'mRP': multiRP.mRP}) # processlist = [vapor_thermo, vapor_mol, vapor_transport, vapor_dielec, vapor_thermo0] # try: # multiRP.run_mRP(processlist) # transport=multiRP.mRP[u'result'][processlist[2].name] # except refprop.RefpropError as e: # print e # transport=None # # self.fill(self.Vapor, flash, multiRP.mRP[u'result'][processlist[0].name], multiRP.mRP[u'result'][processlist[1].name], # transport, multiRP.mRP[u'result'][processlist[3].name], multiRP.mRP[u'result'][processlist[4].name]) self.h = unidades.Enthalpy(self.x * self.Vapor.h + (1 - self.x) * self.Liquido.h) self.s = unidades.SpecificHeat(self.x * self.Vapor.s + (1 - self.x) * self.Liquido.s) self.cp = unidades.SpecificHeat(self.x * self.Vapor.cp + (1 - self.x) * self.Liquido.cp) self.cp0 = unidades.SpecificHeat(self.x * self.Vapor.cp0 + (1 - self.x) * self.Liquido.cp0) self.cv = unidades.SpecificHeat(self.x * self.Vapor.cv + (1 - self.x) * self.Liquido.cv) self.cp_cv = unidades.Dimensionless(self.cp / self.cv) self.cp0_cv = unidades.Dimensionless(self.cp0 / self.cv) if self.T <= self.Tc: surten = refprop.surten(flash["t"], flash["Dliq"], flash["Dvap"], flash["xliq"], flash["xvap"]) self.surten = unidades.Tension(surten["sigma"]) else: self.surten = unidades.Tension(None)
def calculo(self): fluido = self._name() args = self.args() estado = CP.AbstractState("HEOS", fluido) if self._multicomponent: estado.set_mole_fractions(self.kwargs["fraccionMolar"]) estado.update(self._par, *args) self.M = unidades.Dimensionless(estado.molar_mass()*1000) if self._multicomponent: # Disabled CoolProp critical properties for multicomponent, # see issue #1087 # Calculate critical properties with mezcla method # Coolprop for mixtures can fail and it's slow Cmps = [Componente(int(i)) for i in self.kwargs["ids"]] # Calculate critic temperature, API procedure 4B1.1 pag 304 V = sum([xi*cmp.Vc for xi, cmp in zip(self.kwargs["fraccionMolar"], Cmps)]) k = [xi*cmp.Vc/V for xi, cmp in zip(self.kwargs["fraccionMolar"], Cmps)] Tcm = sum([ki*cmp.Tc for ki, cmp in zip(k, Cmps)]) self.Tc = unidades.Temperature(Tcm) # Calculate pseudocritic temperature tpc = sum([x*cmp.Tc for x, cmp in zip(self.kwargs["fraccionMolar"], Cmps)]) # Calculate pseudocritic pressure ppc = sum([x*cmp.Pc for x, cmp in zip(self.kwargs["fraccionMolar"], Cmps)]) # Calculate critic pressure, API procedure 4B2.1 pag 307 sumaw = 0 for xi, cmp in zip(self.kwargs["fraccionMolar"], Cmps): sumaw += xi*cmp.f_acent pc = ppc+ppc*(5.808+4.93*sumaw)*(self.Tc-tpc)/tpc self.Pc = unidades.Pressure(pc) # Calculate critic volume, API procedure 4B3.1 pag 314 sumaxvc23 = sum([xi*cmp.Vc**(2./3) for xi, cmp in zip(self.kwargs["fraccionMolar"], Cmps)]) k = [xi*cmp.Vc**(2./3)/sumaxvc23 for xi, cmp in zip(self.kwargs["fraccionMolar"], Cmps)] # TODO: Calculate C value from component type. # For now it suppose all are hidrycarbon (C=0) C = 0 V = [[-1.4684*abs((cmpi.Vc-cmpj.Vc)/(cmpi.Vc+cmpj.Vc))+C for cmpj in Cmps] for cmpi in Cmps] v = [[V[i][j]*(cmpi.Vc+cmpj.Vc)/2. for j, cmpj in enumerate( Cmps)] for i, cmpi in enumerate(Cmps)] suma1 = sum([ki*cmp.Vc for ki, cmp in zip(k, Cmps)]) suma2 = sum([ki*kj*v[i][j] for j, kj in enumerate(k) for i, ki in enumerate(k)]) self.rhoc = unidades.Density((suma1+suma2)*self.M) else: self.Tc = unidades.Temperature(estado.T_critical()) self.Pc = unidades.Pressure(estado.p_critical()) self.rhoc = unidades.Density(estado.rhomass_critical()) self.R = unidades.SpecificHeat(estado.gas_constant()/self.M) self.Tt = unidades.Temperature(estado.Ttriple()) estado2 = CP.AbstractState("HEOS", fluido) if self._multicomponent: estado2.set_mole_fractions(self.kwargs["fraccionMolar"]) estado2.update(CP.PQ_INPUTS, 101325, 1) self.Tb = unidades.Temperature(estado2.T()) self.f_accent = unidades.Dimensionless(estado.acentric_factor()) # Dipole moment only available for REFPROP backend # self.momentoDipolar(estado.keyed_output(CP.idipole_moment)) self.phase, x = self.getphase(estado) self.x = unidades.Dimensionless(x) if self._multicomponent: string = fluido.replace("&", " (%0.2f), ") string += " (%0.2f)" self.name = string % tuple(self.kwargs["fraccionMolar"]) self.CAS = "" self.synonim = "" self.formula = "" else: self.name = fluido self.CAS = estado.fluid_param_string("CAS") self.synonim = estado.fluid_param_string("aliases") self.formula = estado.fluid_param_string("formula") self.P = unidades.Pressure(estado.p()) self.T = unidades.Temperature(estado.T()) self.Tr = unidades.Dimensionless(self.T/self.Tc) self.Pr = unidades.Dimensionless(self.P/self.Pc) self.rho = unidades.Density(estado.rhomass()) self.v = unidades.SpecificVolume(1./self.rho) cp0 = self._prop0(estado) self._cp0(cp0) self.Liquido = ThermoAdvanced() self.Gas = ThermoAdvanced() if self.x == 0: # liquid phase self.fill(self.Liquido, estado) self.fill(self, estado) self.fillNone(self.Gas) elif self.x == 1: # vapor phase self.fill(self.Gas, estado) self.fill(self, estado) self.fillNone(self.Liquido) else: # Two phase liquido = CP.AbstractState("HEOS", fluido) if self._multicomponent: xi = estado.mole_fractions_liquid() liquido.set_mole_fractions(xi) liquido.specify_phase(CP.iphase_liquid) liquido.update(CP.QT_INPUTS, 0, self.T) self.fill(self.Liquido, liquido) vapor = CP.AbstractState("HEOS", fluido) if self._multicomponent: yi = estado.mole_fractions_vapor() vapor.set_mole_fractions(yi) vapor.specify_phase(CP.iphase_gas) vapor.update(CP.QT_INPUTS, 1, self.T) self.fill(self.Gas, vapor) self.fill(self, estado) # Calculate special properties useful only for one phase if self._multicomponent: self.sigma = unidades.Tension(None) elif x < 1 and self.Tt <= self.T <= self.Tc: self.sigma = unidades.Tension(estado.surface_tension()) else: self.sigma = unidades.Tension(None) self.virialB = unidades.SpecificVolume(estado.Bvirial()) self.virialC = unidades.SpecificVolume_square(estado.Cvirial()) self.invT = unidades.InvTemperature(-1/self.T) 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) else: self.Hvap = unidades.Enthalpy(None) self.Svap = unidades.SpecificHeat(None)
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"))
def calculo(self): method = [ freesteam.steam_pT, freesteam.steam_ph, freesteam.steam_ps, freesteam.steam_pv, freesteam.steam_Ts, freesteam.steam_Tx ] func = method[self._thermo] fluido = func(self.var1, self.var2) self.x = unidades.Dimensionless(fluido.x) self.name = mEoS.H2O.name self.region = fluido.region self.synonim = mEoS.H2O.synonym self.CAS = mEoS.H2O.CASNumber self.T = unidades.Temperature(fluido.T) self.P = unidades.Pressure(fluido.p) self.phase = self.getphase(Tc=self.Tc, Pc=self.Pc, T=self.T, P=self.P, x=self.x, region=self.region) self.Tr = unidades.Dimensionless(self.T / self.Tc) self.Pr = unidades.Dimensionless(self.P / self.Pc) self.rho = unidades.Density(fluido.rho) self.v = unidades.SpecificVolume(1. / self.rho) cp0 = prop0(self.T, self.P.MPa) cp0["h"] *= 1000 cp0["s"] *= 1000 cp0["cp"] *= 1000 cp0["cv"] *= 1000 self._cp0(cp0) self.Liquido = ThermoWater() self.Gas = ThermoWater() if self.x == 0: # only liquid phase self.fill(self, fluido) self.fill(self.Liquido, fluido) self.sigma = unidades.Tension(freesteam.surftens_T(self.T)) self.Hvap = unidades.Enthalpy(None) self.Svap = unidades.SpecificHeat(None) elif self.x == 1: # only vapor phase self.fill(self, fluido) self.fill(self.Gas, fluido) self.Hvap = unidades.Enthalpy(None) self.Svap = unidades.SpecificHeat(None) else: # two phases liquido = freesteam.steam_Tx(fluido.T, 0.) self.fill(self.Liquido, liquido) self.sigma = unidades.Tension(freesteam.surftens_T(self.T)) vapor = freesteam.steam_Tx(fluido.T, 1.) self.fill(self.Gas, vapor) self.h = unidades.Enthalpy(self.x * self.Gas.h + (1 - self.x) * self.Liquido.h) self.s = unidades.SpecificHeat(self.x * self.Gas.s + (1 - self.x) * self.Liquido.s) self.u = unidades.SpecificHeat(self.x * self.Gas.u + (1 - self.x) * self.Liquido.u) self.a = unidades.Enthalpy(self.x * self.Gas.a + (1 - self.x) * self.Liquido.a) self.g = unidades.Enthalpy(self.x * self.Gas.g + (1 - self.x) * self.Liquido.g) self.cv = unidades.SpecificHeat(None) self.cp = unidades.SpecificHeat(None) self.cp_cv = unidades.Dimensionless(None) self.w = unidades.Speed(None) self.Hvap = unidades.Enthalpy(vapor["h"] - liquido["h"], "kJkg") self.Svap = unidades.SpecificHeat(vapor["s"] - liquido["s"], "kJkgK")
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)