OCR: oil-circulation ratio [-]: it is a mass fraction of oil per total mass mixture z_mass: global mass fraction z: global molar fraction ''' p = 0.3e5 # <=============================== change here T = (30. + 273.15) # <=============================== change here LC, base = 0.40, 'mass' # <=============================== change here zin = np.array([LC, (1. - LC)]) z, z_mass = Tools_Convert.frac_input(MM, zin, base) ''' ======================================= CREATING OBJECTS - [to a better identification, all objects' names are followed by "_obj"] ======================================= ''' rr_obj = RachfordRice() eos_obj = PengRobinsonEos(pC, Tc, AcF, omega_a, omega_b, kij) michelsen_obj = Michelsen() flash_obj = Flash(max_iter=50, tolerance=1.0e-13, print_statistics=False) prop_obj = Properties(pC, Tc, AcF, omega_a, omega_b, kij) def getting_the_results_from_FlashAlgorithm_main(p, T, pC, Tc, AcF, z): initial_K_values = calculate_K_values_wilson(p, T, pC, Tc, AcF) is_stable, K_michelsen = michelsen_obj(eos_obj, p, T, z, initial_K_values, max_iter=100, tolerance=1.0e-12)
R = 8314 # [J/(kmol*K)] SQRT_2 = np.sqrt(2) #TO LOGGING MSG(import logging and logging.basicConfig and logging.disable) logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s - %(message)s') #logging.disable(logging.CRITICAL) #FOR BUBBLE T (pressure, _, global_molar_fraction, critical_pressure, critical_temperature, acentric_factor, molar_mass, omega_a, omega_b, binary_interaction, specific_heat) = props #NECESSARY OBJECTS michelsen_obj = Michelsen() eos_obj = PengRobinsonEos(critical_pressure, critical_temperature, acentric_factor, omega_a, omega_b, binary_interaction) def function_inner_loop(temperature, pressure, global_molar_fraction, max_iter = 100, tolerance = 1.0e-12, stability=False): P = pressure T = temperature xi = z = global_molar_fraction f_L, Z_L = eos_obj.calculate_fugacities_with_minimum_gibbs_energy(P, T, xi, 'liquid') PHI_L = f_L / (xi * P) initial_K_values = calculate_K_values_wilson(P, T, eos_obj.Pc, eos_obj.Tc, eos_obj.ω) is_stable, K_michelsen = michelsen_obj(eos_obj, P, T, z, initial_K_values, max_iter, tolerance) if stability: if not is_stable: msg = str('===> two-phases can be in equilibrium') else: msg = str('===> one phase in this @') print(str(msg))
# logging.basicConfig(filename='Cleber_File.txt', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s') #logging.disable(logging.CRITICAL) ''' ================================================================================================================= PROPS IS A LIST OF PROPERTIES; BLANK SPACE CORRESPOND TO THE PROPERTY WE ARE INTERESTED. CHECK BubbleP__singlePoint.py OR BubbleP__curvePoints.py to see how the empty spaces are filled ================================================================================================================= ''' (pC, Tc, AcF, MM, omega_a, omega_b, kij, Cp) = props ''' ================================================================================================================= NECESSARY OBJECTS ================================================================================================================= ''' eos_obj = PengRobinsonEos(pC, Tc, AcF, omega_a, omega_b, kij) michelsen_obj = Michelsen() ''' ================================================================================================================= CODE FOR SEEK THE BUBBLE PRESSURE ================================================================================================================= ''' class Bubble_class: def __init__(self, pC, Tc, AcF, kij): self.pC, self.Tc, self.AcF, self.kij = pC, Tc, AcF, kij def pressure_guess(self, T, z): '''To a specific temperature, this function provides a estimation (initial guess pressure) to find... ... the mixture bubble pressure. This result is used to create a range of pressure.