Source code for biorefineries.biodiesel.units.glycerolysis_reactor
# -*- coding: utf-8 -*-
"""
"""
from thermosteam.reaction import Reaction, ParallelReaction
import thermosteam as tmo
import biosteam as bst
Rxn = tmo.reaction.Reaction
ParallelRxn = tmo.reaction.ParallelReaction
__all__ = (
'GlycerolysisReactor',
)
[docs]
class GlycerolysisReactor(bst.CSTR):
_ins_size_is_fixed = False
_N_ins = 2
_N_outs = 2
T_default = 273.15 + 230
P_default = 101325
tau_default = 2
def _setup(self):
super()._setup()
# End result is near 100% conversion of FFAs with selectivity
# of 42% MAG, 47% DAG, 11% TAG:
# [1] Erik Anderson. Superior Process Technologies.
# Glycerolysis for Lowering Free Fatty Acid Levels
# [2] Kapil Mamtani, KavehShahbaz Mohammed M.Farid.
# Glycerolysis of free fatty acids: A review.
# https://doi.org/10.1016/j.rser.2020.110501
self.glycerolysis_baseline = ParallelReaction([
Reaction('FFA + Glycerol -> MAG + H2O', reactant='FFA', X=1.00),
Reaction('DAG + Glycerol -> 2MAG', reactant='DAG', X=1.00),
Reaction('TAG + 2Glycerol -> 3MAG', reactant='TAG', X=1.00),
])
self.glycerolysis = ParallelReaction([
Reaction('2MAG -> DAG + Glycerol', reactant='MAG', X=0.49),
Reaction('3MAG -> TAG + 2Glycerol', reactant='MAG', X=0.13),
])
# Alternative preliminary modeling for legacy purposes:
# self.glycerolysis = ParallelReaction([
# Reaction('FFA + Glycerol -> MAG + H2O', reactant='FFA', X=0.80),
# Reaction('2FFA + Glycerol -> DAG + 2H2O', reactant='FFA', X=0.15),
# Reaction('3FFA + Glycerol -> TAG + 3H2O', reactant='FFA', X=0.05),
# ])
def _run(self):
feed, *other, N2 = self.ins
vent, effluent = self.outs
vent.P = effluent.P = self.P
vent.T = effluent.T = self.T
vent.phase = 'g'
effluent.mix_from(self.ins, energy_balance=False)
self.glycerolysis_baseline.force_reaction(effluent)
self.glycerolysis(effluent)
effluent.mol.remove_negatives() # The correct glycerol flow rate is taken care of in a unit specification
vent.copy_flow(effluent, ('N2', 'Water'), remove=True)