Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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()
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
    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)
Exemple #7
0
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
Exemple #8
0
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)
Exemple #9
0
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
Exemple #10
0
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()
Exemple #11
0
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('---')