BioSTEAMDevelopmentGroup / Bioindustrial-Park

BioSTEAM's Premier Repository for Biorefinery Models and Results
MIT License
38 stars 17 forks source link

Request for distillation tower #78

Closed zasddsgg closed 1 year ago

zasddsgg commented 1 year ago

Hello, I build a distillation tower according to the following code, but in the exported results, the heat utility includes both low pressure steam and medium pressure steam (in utility label of exported excel). But in fact, doesn't the reboiler of the distillation tower only need one heat utility? When I changed the pressure of the tower to 1atm, there was only one utility in the result, which seems normal. Do you know why this happened and how to solve it? Thanks for your help. Wish you a good day.

The code is as followings:

from biosteam import Stream, settings from biosteam.units import BinaryDistillation import biosteam as bst bst.nbtutorial() settings.set_thermo(['Water', 'Ethanol'])

feed = Stream('feed', Water=1.08e+03, Ethanol=586) bp = feed.bubble_point_at_P() feed.T = bp.T D1 = BinaryDistillation('D1', ins=feed, outs=('distillate', 'bottoms_product'), P=10000, LHK=('Ethanol', 'Water'), y_top=0.79, x_bot=0.001, k=1.25, is_divided=True) D_sys = bst.main_flowsheet.create_system('D_sys') D_sys.simulate() D_sys.diagram('thorough', format='png') D_sys.save_report('D.xlsx')

yoelcortes commented 1 year ago

@zasddsgg, thanks for your question/issue. BioSTEAM assumes that any pressure under 101325 Pa requires a vacuum system and in this case it used a steam-jet ejector (powered by medium pressure steam). Would you like to request the option to force no vacuum system?

zasddsgg commented 1 year ago

Thank you for your answer.

a) Yes, if I don't want to add a vacuum system with pressure under 1 atm, how should I do it? b) In addition, for reduced pressure distillation (P<1atm), the vacuum system is behind the condenser, which seems to use the vacuum pump as the power system, shouldn't it consume electricity? But what BioSTEAM gives is steam, and the amount of steam consumed seems to be a little high, which is more than the steam saved by the reboiler by vacuum distillation? And after changing the process conditions, the power consumed by the vacuum system seems to change to low pressure steam, so isn't the vacuum system always powered by medium-pressure steam? How is the medium pressure steam consumption of vacuum system calculated? c) When I called BinaryDistillation, the bottom temperature of the distillation tower appeared to be the bubble point of the heavy component mixture. With electrolytes in it, the bubble point of the heavy component mixture was increased by 100 degrees (compared with the heavy component mixture without electrolytes). This seems to be a somewhat unreasonable process (the increase appears to be much). Could I consult you how is the bubble point of the heavy component mixture calculated or which formula is used? d) Why specify boiler.U=1.85 for D302 and D303 in corn stover ethanol (https://github.com/BioSTEAMDevelopmentGroup/Bioindustrial-Park/blob/master/biorefineries/ethanol/systems.py)? Do I need to specify U in my new BinaryDistillation, or do I not need to set this parameter? e) I check the steam in BioSTEAM and corn stover ethanol through the following code. The temperature and pressure of low-pressure steam in corn stover ethanol are higher than that of high-pressure steam, is it wrong? In BioSTEAM, the temperature and pressure of low pressure steam are lower than that of high pressure steam, and the temperature pressure of high pressure steam in BioSTEAM is the same as that of high pressure steam in corn stover ethanol, but the temperature pressure of low pressure steam is different? In addition, after loading corn stover ethanol, could I consult you how to modify the temperature of the low-pressure steam in corn stover ethanol? Is it OK to change only the temperature of low-pressure steam and not change the pressure of low-pressure steam? The code is as follows:

import biosteam as bst lps = bst.settings.get_heating_agent('low_pressure_steam') lps.show()

import biosteam as bst hps = bst.settings.get_heating_agent('high_pressure_steam') hps.show()

import biosteam as bst bst.nbtutorial() from biorefineries import cellulosic cs = cellulosic.Biorefinery('corn stover ethanol') lps = bst.settings.get_heating_agent('low_pressure_steam') lps.show()

import biosteam as bst bst.nbtutorial() from biorefineries import cellulosic cs = cellulosic.Biorefinery('corn stover ethanol') hps = bst.settings.get_heating_agent('high_pressure_steam') hps.show()

f) In source code of molecular sieve (https://github.com/BioSTEAMDevelopmentGroup/biosteam/blob/master/biosteam/units/molecular_sieve.py), factor 1429.65 and -55.51 is used to estimate heat utility, why is the heat utility estimated instead of obtained through strict simulation? In addition, could I consult you how do you get the factor 1429.65 and -55.51? The source code is as follows: def _design(self): self.design_results['Flow rate'] = flow = self._outs[1].F_mass if self.approx_duty: T = self.outs[0].T self.add_heat_utility(1429.65 flow, T) self.add_heat_utility(-55.51 flow, T) g) Regarding molecular sieve in corn stover ethanol, I carefully examined the 124 pages of molecular sieve flow data in Humbird's (2011) report. On page 124, QH506 and QH509 correspond to H303 and H304 in the source code of BioSTEAM ethanol systems, so they do not belong to the heat duty of molecular sieve process. The net heat duty of QH507 is 0 because 514 stream in pdf are used to heat 517 stream. So the heat consumption in molecular sieve process only comes from QH503 in pdf. According to the data provided by pdf, the mass flow rate of the second outlet of the molecular sieve (514 stream) is 21808 kg/h, and the heat duty of H503 is 2.565Gcal/h, but because H503 is exothermy, it should be -2.565Gcal/h. So -2.5654.18610^6 kJ/h/21808 kg/h= -492.35 So it seems that the heat utility of molecular sieve should be calculated using the following code? def _design(self): self.design_results['Flow rate'] = flow = self._outs[1].F_mass if self.approx_duty: T = self. Outs[0].T self.add_heat_utility(-492.35 * flow, T)

no self.add_heat_utility(1429.65 * flow, T), because no steam requirement in the molecular sieve process

Thanks for your help. Wish you a good day.

yoelcortes commented 1 year ago

@zasddsgg,

a) I am not planning on adding this as an option. Whenever operating at pressures below atmospheric, you always need a vacuum system due to air in-leakage. b) Please be more clear with your question and post code with the exact return values to describe your question. You can pass a vacuum system preference (look at the distillation documentation) if you always which to use a liquid-ring pump. c) Please be more clear with your question and post code with the exact return values to describe your question. d) Completely fine. When this happens (the first heating agent has a higher temperature), the other heating agents are ignored. g) Please make a pull request with the change if you would like to update the model.

If you have follow up questions, please open a new issue. Please do not add multiple unrelated questions in a single issue.

Thanks!