adsorption#
- class SingleComponentAdsorptionColumn(ID='', ins=None, outs=(), thermo=None, **kwargs)[source]#
Create an adsorption column which can operate by temperature or pressure swing, or by disposing the adsorbent. Heats of adsorption are neglected but may become an option with future development in BioSTEAM. Default parameters are heuristic values for adsorption of water and polar components using activated carbon. The design and cost algorithm of the adsorption column is based on [1], [2], and [3].
By default, three vessels are used: a lead, a guard, and a standby vessel. The lead is in equilibrium, guard holds the breakthrough curve and mass transfer zone, and the standby is in regeneration. Once the standby vessel is regenerated, it becomes the guard, the lead becomes the standby, and the guard becomes the lead. Therefore, the cycle time is the regeneration time.
For temperature or pressure swing adsorption, set the temperature or pressure of the regeneration fluid. If a regeneration fluid is used, the flow rate of regeneration fluid solved for such that it meets the required cycle time.
- Parameters:
ins (
Stream
]]) –[0] Feed
[1] Regeneration fluid
[2] Adsorbent (if no regeneration fluid is used).
outs (
Stream
]]) –[0] Effluent
[1] Purge
[2] Spent adsorbent (if no regeneration fluid is used)
k (float, optional) – Mass transfer coefficient [1/h]. If not given, mass tranfer model is ignored.
superficial_velocity (float, optional) – Superficial velocity of the feed. The diameter of the receiving vessel adjusts accordingly. Defaults to 7.2 [m / hr]. Typical velocities are 4 to 14.4 m / hr for liquids [1]. Common velocity range for gasses is 504-2160 m / hr [1].
cycle_time (float, optional) – Time at which the receiving vessel is switched. Defaults to 3 [hr]. Note that 1-2 hours required for thermal-swing-adsorption (TSA) for silica gels [2].
isotherm_args (tuple[float, ...], optional) – Arguments to pass to the isotherm model. If isotherm model is ‘Langmuir’, arguments must be: * KL: Equilibrium constant [L/mg] for Langmuir isotherm * q_max: Maximum equilibrium loading [mg/g] for Langmuir isotherm If isotherm model is ‘Freundlich’, arguments must be: * K: Equilibrium constant [L/mg] for Freundlich isotherm * n: exponential coefficient for Freundlich isotherm
isotherm_model (Callable|str, optional,) – Can be ‘Langmuir’, ‘Freundlich’, or a function. If a function is given, it should be in the form of f(C, *args) -> g absorbate / kg absorbent.
void_fraction (0.525) – Fraction of empty space in the adsorbent by vol.
rho_adsorbent (float, optional) – The density of the adsorbent. Defaults to 380 [kg/m3], which is common for activated carbon granules.
regeneration_fluid (dict[str, float]) – Arguments to initialize fluid used to regenerate the bed.
LUB (float, optional) – Length of unused bed. Defaults to 1.219 m if no mass transfer coefficient is given. This parameter is ignored if isotherms are provided.
P (float, optional) – Operating pressure of the column. Defaults to 101325.
C_final_scaled (float, optional) – Final outlet concentration at breakthrough relative to inlet. Defaults to 0.05.
regeneration_fluid – Regeneration fluid composition and thermal conditions.
k_regeneration (float, optional) – Mass transfer coefficient of the regeration solvent [1/h].
regeneration_isotherm_args (tuple[float, ...], optional) – Arguments to regeneration isotherm model.
regeneration_isotherm_model (Callable|str) – Isotherm model for regenerating the adsorbent.
N_slices (int, optional) – Number of slices to model mass transfer. Defaults to 80.
adsorbate (str) – Name of adsorbate.
vessel_material (float, optional) – Vessel material. Defaults to ‘Stainless steel 316’,
vessel_type (float, optional) – Vessel type. Defaults to ‘Vertical’.
adsorbent (str) – Name of adsorbent. Defaults to ‘ActivatedCarbon’.
N_columns (int) – Number of columns can be either 2 or 3. The 3-column configuration minimizes cost of adsorbent regeneration. The 2-column configuration minimizes capital cost.
particle_diameter (float) – Particle diameter assumed for pressure drop estimation [m]. Defaults to 0.004 m.
Examples
>>> import biosteam as bst >>> bst.settings.set_thermo([ ... 'Water', ... bst.Chemical('Adsorbate', search_db=False, default=True, phase='l'), ... bst.Chemical('ActivatedCarbon', search_db=False, default=True, phase='s') ... ]) >>> feed = bst.Stream(ID='feed', phase='l', T=298, P=1.01e+06, ... Water=1000, Adsorbate=0.001, units='kg/hr') >>> A1 = bst.AdsorptionColumn( ... 'A1', ins=feed, outs='effluent', ... cycle_time=1000, ... superficial_velocity=9.2, ... isotherm_model='Langmuir', ... isotherm_args=(1e3, 7.), # K [g / L], q_max [g / kg] ... k=0.3, # [1 / hr] ... void_fraction=0.525, ... C_final_scaled=0.05, ... adsorbate='Adsorbate', ... particle_diameter=0.004, ... ) >>> A1.simulate() >>> # A1.simulation_gif() # Create a gif of the fluid concentration profile over time.
>>> A1.results() Single component adsorption column Units A1 Electricity Power kW 0.241 Cost USD/hr 0.0188 Design Diameter ft 1.22 Length ft 11.9 Vessel type Vertical Weight lb 511 Wall thickness in 0.25 Vessel material Stainless steel 316 Purchase cost Vertical pressure vessel (x3) USD 6.06e+04 Platform and ladders (x3) USD 8.24e+03 Pump - Pump (x3) USD 1.31e+04 Pump - Motor (x3) USD 174 Total purchase cost USD 8.21e+04 Utility cost USD/hr 0.0188
>>> A1.show('wt') SingleComponentAdsorptionColumn: A1 ins... [0] feed phase: 'l', T: 298 K, P: 1.01e+06 Pa flow (kg/hr): Water 1e+03 Adsorbate 0.001 [1] - phase: 'l', T: 298.15 K, P: 101325 Pa flow: 0 [2] - phase: 'l', T: 298.15 K, P: 101325 Pa flow (kg/hr): ActivatedCarbon 0.151 outs... [0] effluent phase: 'l', T: 298 K, P: 101325 Pa flow (kg/hr): Water 1e+03 [1] - phase: 'l', T: 298.15 K, P: 101325 Pa flow: 0 [2] - phase: 'l', T: 298.15 K, P: 101325 Pa flow (kg/hr): ActivatedCarbon 0.151
References