def press_vs_rho(): components = pure(['ETHANE', 'N-HEPTANE']) prov = PengRobinson(components) n = np.array([0.5, 0.5]) press_range = np.arange(0.01, 10, 0.01) temp_range = [420, 500] for temp in temp_range: rho_vapor, rho_liquid = [], [] norm_hres_vapor, norm_hres_liquid = [], [] log_phi_vapor_C2, log_phi_liquid_C2 = [], [] log_phi_vapor_C7, log_phi_liquid_C7 = [], [] for press in press_range: ph_vap = prov.phase(temp, press*1e6, n, 'vap') ph_liq = prov.phase(temp, press*1e6, n, 'liq') rho_vapor.append(ph_vap.dens_mole) rho_liquid.append(ph_liq.dens_mole) norm_hres_vapor.append(-ph_vap.res_enthalpy_mole/(GAS_CONSTANT*temp)) norm_hres_liquid.append(-ph_liq.res_enthalpy_mole/(GAS_CONSTANT*temp)) log_phi_vapor_C2.append(ph_vap.log_phi[0]) log_phi_vapor_C7.append(ph_vap.log_phi[1]) log_phi_liquid_C2.append(ph_liq.log_phi[0]) log_phi_liquid_C7.append(ph_liq.log_phi[1]) plt.plot(rho_vapor, press_range) plt.plot(rho_liquid, press_range) plt.legend(['rho_vapor', 'rho_liquid'], loc='upper right') plt.title('Equimolar ethane-n_heptane mixture @ '+str(temp)+' K') plt.xlabel('Density (kg/m3)') plt.ylabel('Press (MPa)') plt.show() plt.close() plt.plot(press_range, norm_hres_vapor) plt.plot(press_range, norm_hres_liquid) plt.legend(['norm_hres_vapor', 'norm_hres_liquid'], loc='upper right') plt.title('Equimolar ethane-n_heptane mixture @ '+str(temp)+' K') plt.xlabel('Press (MPa)') plt.ylabel('-DH_res/RT') plt.show() plt.close() plt.plot(press_range, log_phi_vapor_C2) plt.plot(press_range, log_phi_vapor_C7) plt.plot(press_range, log_phi_liquid_C2) plt.plot(press_range, log_phi_liquid_C7) plt.legend(['log_phi_vapor_C2', 'log_phi_vapor_C7', 'log_phi_liquid_C2', 'log_phi_liquid_C7'], loc='upper right') plt.title('Equimolar ethane-n_heptane mixture @ ' + str(temp) + ' K') plt.xlabel('Press (MPa)') plt.ylabel('log_phi') plt.show() plt.close()
def test_3comp_vle(): all_press = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 0] all_x1 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 1] all_x2 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 2] all_x3 = 1 - (all_x1 + all_x2) all_y1 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 3] all_y2 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 4] all_y3 = 1 - (all_y1 + all_y2) all_gamma1 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 5] all_gamma2 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 6] all_gamma3 = MEOH_ETOH_H2O_DATA_AT_328_15_K[:, 7] temp = 328.15 c1, c2, c3 = pure(['methanol', 'ethanol', 'water']) # u = wilson.generate_ip([c1.casn, c2.casn, c3.casn]) ip_g, ip_alpha = nrtl.generate_ip([c1.casn, c2.casn, c3.casn]) vap_press = np.array( [c1.vap_press(temp), c2.vap_press(temp), c3.vap_press(temp)]) vol = np.array( [c1.liq_vol_mole(temp), c2.liq_vol_mole(temp), c3.liq_vol_mole(temp)]) results = [] refer = [] for i in range(len(all_x1)): comp = np.array([all_x1[i], all_x2[i], all_x3[i]]) # log_gamma = wilson_model_log_gamma(temp, vol, comp, u) log_gamma = nrtl_model_log_gamma(temp, vol, comp, ip_g, ip_alpha) gamma = np.exp(log_gamma) press_partial = comp * gamma * vap_press press_system = np.sum(press_partial) calc_y = press_partial / press_system results.append([ press_system * 1e-3, np.log(gamma[0]), np.log(gamma[1]), np.log(gamma[2]) ]) refer.append([ all_press[i], np.log(all_gamma1[i]), np.log(all_gamma2[i]), np.log(all_gamma3[i]) ]) # break results = np.array(results) refer = np.array(refer) plt.plot(refer[:, 0], results[:, 0], 'or') plt.plot(refer[:, 0], refer[:, 0], '-g') plt.show()
def test_2comp_vle(): c1, c2 = pure(['ethanol', 'water']) # u = wilson.generate_ip([c1.casn, c2.casn]) ip_g, ip_alpha = nrtl.generate_ip([c1.casn, c2.casn]) for temp in [323.15, 328.15, 333.15]: x_comp = [] y_comp = [] press_total = [] results = [] for start_x in np.linspace(0, 1, num=50): x_comp.append([start_x, 1 - start_x]) vap_press = np.array([c1.vap_press(temp), c2.vap_press(temp)]) vol = np.array([c1.liq_vol_mole(temp), c2.liq_vol_mole(temp)]) comp = np.array([start_x, 1 - start_x]) # log_gamma = wilson_model_log_gamma(temp, vol, comp, u) log_gamma = nrtl_model_log_gamma(temp, vol, comp, ip_g, ip_alpha) press_partial = comp * np.exp(log_gamma) * vap_press press_system = np.sum(press_partial) press_total.append(press_system) y_comp.append([ press_partial[0] / press_system, press_partial[1] / press_system ]) results.append( (start_x, 1 - start_x, press_partial[0] / press_system, press_partial[1] / press_system, press_system, vap_press[0], vap_press[1])) results = np.array(results) x1 = results[:, 0] x2 = results[:, 1] y1 = results[:, 2] y2 = results[:, 3] press = results[:, 4] plt.plot(x1, press / 1e3) plt.plot(y1, press / 1e3) plt.plot(ETOH_H2O_DATA_AT_333_15_K[:, 1], ETOH_H2O_DATA_AT_333_15_K[:, 0], 'or') plt.plot(ETOH_H2O_DATA_AT_333_15_K[:, 2], ETOH_H2O_DATA_AT_333_15_K[:, 0], 'og') plt.plot(ETOH_H2O_DATA_AT_328_15_K[:, 1], ETOH_H2O_DATA_AT_328_15_K[:, 0], 'or') plt.plot(ETOH_H2O_DATA_AT_328_15_K[:, 2], ETOH_H2O_DATA_AT_328_15_K[:, 0], 'og') plt.plot(ETOH_H2O_DATA_AT_323_15_K[:, 1], ETOH_H2O_DATA_AT_323_15_K[:, 0], 'or') plt.plot(ETOH_H2O_DATA_AT_323_15_K[:, 2], ETOH_H2O_DATA_AT_323_15_K[:, 0], 'og') plt.show()
def test_flash_prop_vap_frac(): components = pure(['ETHANE', 'N-BUTANE', 'N-HEPTANE']) prov = PengRobinson(components) temp, press = 400, 101325 * 10 feed_comp = np.array([0.2, 0.3, 0.5]) results = basic_flash_temp_press_2phase(prov, temp, press, feed_comp, prov.all_valid_components) print('press:', press, 'temp:', temp, 'V/F:', results.vap_frac_mole) results = flash_prop_vap_frac_2phase(prov, 'enthalpy_mole', results.enthalpy_mole, 0, results.vap_frac_mole, feed_comp) print('press:', results.press, 'temp:', results.temp, 'V/F:', results.vap_frac_mole)
def test_flash_press_vap_frac(): components = pure(['ETHANE', 'N-BUTANE', 'N-HEPTANE']) prov = PengRobinson(components) temp, press = 300, 101325 * 12 feed_comp = np.array([0.2, 0.3, 0.5]) for vf in np.arange(0, 1.01, 0.01): r = flash_press_vap_frac_2phase(prov, press, vf, feed_comp) print('temp:', r.temp, 'press:', r.press, 'vap_frac', r.vap_frac_mole) components = pure(['NITROGEN', 'CARBON DIOXIDE', 'HYDROGEN SULFIDE', 'METHANE', 'ETHANE', 'PROPANE', 'N-BUTANE', 'ISOBUTANE', 'N-PENTANE', 'ISOPENTANE', 'N-HEXANE', 'N-HEPTANE', 'N-OCTANE', 'N-NONANE', 'N-DECANE', 'N-UNDECANE']) prov = PengRobinson(components) temp, press = 322.04, 0.5*1e6 feed_comp = np.array([0.0131, 0.1816, 0.0124, 0.1096, 0.0876, 0.0838, 0.0563, 0.0221, 0.0413, 0.0289, 0.0645, 0.0953, 0.0675, 0.0610, 0.0304, 0.0444]) for vf in np.arange(0, 1.01, 0.01): r = flash_press_vap_frac_2phase(prov, press, vf, feed_comp) print('temp:', r.temp, 'press:', r.press, 'vap_frac', r.vap_frac_mole)
def AddCompound(self, compound_by_name, compound_obj=None): # print('AddCompound:', compound) if compound_obj is None: compound_obj = chemsep.pure(compound_by_name) else: pass if self._components is None: new_components = [compound_obj] else: new_components = self._components[:] new_components.append(compound_obj) # This is really inefficient, but it's simple self.setup_components(new_components)
def test_flash(): components = pure(['ETHANE', 'N-BUTANE', 'N-HEPTANE']) prov = PengRobinson(components) temp, press = 300, 101325 * 5 feed_comp = np.array([0.2, 0.3, 0.5]) # Repeat flash temp = 406.315 results = basic_flash_temp_press_2phase(prov, temp, press, feed_comp, prov.all_valid_components) print('temp:', temp, 'V/F:', results.phases, results.vap_frac_mole, results.vap.enthalpy_mole, results.enthalpy_mole) temp = 280.61 results = basic_flash_temp_press_2phase(prov, temp, press, feed_comp, prov.all_valid_components) print('temp:', temp, 'V/F:', results.phases, results.vap_frac_mole) return results
def test_flash_temp_vap_frac(): components = pure(['NITROGEN', 'CARBON DIOXIDE', 'HYDROGEN SULFIDE', 'METHANE', 'ETHANE', 'PROPANE', 'N-BUTANE', 'ISOBUTANE', 'N-PENTANE', 'ISOPENTANE', 'N-HEXANE', 'N-HEPTANE', 'N-OCTANE', 'N-NONANE', 'N-DECANE', 'N-UNDECANE']) prov = PengRobinson(components) temp, press = 316.5395439844929, 0.5*1e6 feed_comp = np.array([0.0131, 0.1816, 0.0124, 0.1096, 0.0876, 0.0838, 0.0563, 0.0221, 0.0413, 0.0289, 0.0645, 0.0953, 0.0675, 0.0610, 0.0304, 0.0444]) vf = 0.5 # This flash can be a little more buggy ... we will fix later r = flash_temp_vap_frac_2phase(prov, temp, vf, feed_comp) print('temp:', r.temp, 'press:', r.press, 'vap_frac', r.vap_frac_mole)
def test_cavett_feed(): components = pure(['NITROGEN', 'CARBON DIOXIDE', 'HYDROGEN SULFIDE', 'METHANE', 'ETHANE', 'PROPANE', 'N-BUTANE', 'ISOBUTANE', 'N-PENTANE', 'ISOPENTANE', 'N-HEXANE', 'N-HEPTANE', 'N-OCTANE', 'N-NONANE', 'N-DECANE', 'N-UNDECANE']) prov = PengRobinson(components) temp, press = 322.04, 0.8*1e6 feed_comp = np.array([0.0131, 0.1816, 0.0124, 0.1096, 0.0876, 0.0838, 0.0563, 0.0221, 0.0413, 0.0289, 0.0645, 0.0953, 0.0675, 0.0610, 0.0304, 0.0444]) result = None for temp in range(150, 500): results = basic_flash_temp_press_2phase(prov, temp, press, feed_comp, prov.all_valid_components) print('temp:', temp, 'V/F:', results.phases, results.vap_frac_mole) return results
def rhos_vs_temp(): components = pure(['ETHANE', 'N-HEPTANE']) prov = PengRobinson(components) comp = np.array([0.5, 0.5]) temp_list = np.arange(300, 500) rho_vapor, rho_liquid = [], [] press = 2.0*1e6 for temp in temp_list: ph_vap = prov.phase(temp, press, comp, 'vap') ph_liq = prov.phase(temp, press, comp, 'liq') rho_vapor.append(ph_vap.dens_mole) rho_liquid.append(ph_liq.dens_mole) plt.plot(temp_list, rho_vapor) plt.plot(temp_list, rho_liquid) plt.legend(['rho_vapor', 'rho_liquid'], loc='upper right') plt.title('Equimolar ethane-n_heptane mixture') plt.xlabel('Temp. (K)') plt.ylabel('Density (kg/m3)') plt.show() plt.close()
def test_flash_press_prop(): components = pure(['ETHANE', 'N-BUTANE', 'N-HEPTANE']) prov = PengRobinson(components) temp, press = 300, 101325 * 5 feed_comp = np.array([0.2, 0.3, 0.5]) # Repeat flash for temp in [50, 100, 150, 200, 300, 320, 330, 380, 400, 480, 500, 600, 800, 1000]: results = basic_flash_temp_press_2phase(prov, temp, press, feed_comp, prov.all_valid_components) print('temp:', temp, 'V/F:', results.vap_frac_mole) results = flash_press_prop_2phase(prov, press, 'entropy_mole', results.entropy_mole, 0, feed_comp, valid=None, previous=None) print('temp:', results.temp, 'V/F:', results.vap_frac_mole) print('---') # Repeat flash for temp in [50, 100, 150, 200, 300, 320, 330, 380, 400, 480, 500, 600, 800, 1000]: results = basic_flash_temp_press_2phase(prov, temp, press, feed_comp, prov.all_valid_components) print('temp:', temp, 'V/F:', results.vap_frac_mole) results = flash_press_prop_2phase(prov, press, 'enthalpy_mole', results.enthalpy_mole, 0, feed_comp, valid=None, previous=None) print('temp:', results.temp, 'V/F:', results.vap_frac_mole) print('---')