Skip to content

Commit

Permalink
add feed vapor fraction as an input
Browse files Browse the repository at this point in the history
  • Loading branch information
yoelcortes committed Sep 25, 2024
1 parent fc2219d commit d0eb269
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions biosteam/units/fluidized_catalytic_cracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ class FluidizedCatalyticCracking(bst.Unit):
def _init(
self,
reaction,
bulk_reactant=None,
vessel_material=None,
feed_pressure=None,
feed_vapor_fraction=None,
catalyst_to_feed_ratio=None,
spent_catalyst_to_feed_ratio=None,
product_loss=None,
Expand All @@ -69,10 +71,13 @@ def _init(
vessel_material = 'Stainless steel 316'
if feed_pressure is None:
feed_pressure = 2 * 101325 # Can operate at a low pressure, but must accomodate pressure drop
if feed_vapor_fraction is None:
feed_vapor_fraction = 0
if catalyst_to_feed_ratio is None:
catalyst_to_feed_ratio = 5 # by weight
if spent_catalyst_to_feed_ratio is None:
# TODO: Find value
# Mitias recommends (rule of thumb)
spent_catalyst_to_feed_ratio = 1e-6 # by weight; Value is abitrary for now
if product_loss is None:
product_loss = 0.5e-2
Expand Down Expand Up @@ -103,6 +108,7 @@ def _init(
if regenerator_pressure is None:
regenerator_pressure = 282685 # 40 psig
self.reaction = reaction
self.bulk_reactant = bulk_reactant
self.vessel_material = vessel_material
self.feed_pressure = feed_pressure
self.catalyst_to_feed_ratio = catalyst_to_feed_ratio
Expand All @@ -121,6 +127,7 @@ def _init(
self.regenerator_catalyst_residence_time = regenerator_catalyst_residence_time
self.regenerator_length_to_diameter = regenerator_length_to_diameter
self.regenerator_pressure = regenerator_pressure
self.feed_vapor_fraction = feed_vapor_fraction

@property
def feed(self): return self.ins[0]
Expand Down Expand Up @@ -148,7 +155,7 @@ def _setup(self):
'pump', bst.Pump, ins=self.feed, P=self.feed_pressure,
)
self.auxiliary(
'feed_preheater', bst.HXutility, ins=pump-0, V=0, rigorous=True,
'feed_preheater', bst.HXutility, ins=pump-0, V=self.feed_vapor_fraction, rigorous=True,
)
self.auxiliary(
'air_compressor', bst.IsentropicCompressor, ins=self.air, P=self.regenerator_pressure,
Expand All @@ -173,10 +180,16 @@ def _run(self):
product.P = self.feed_pressure - self._estimate_reactor_pressure_drop()
flue_gas.P = discarded_catalyst.P = self.regenerator_pressure - self._estimate_regenerator_pressure_drop()
product.mol = feed.mol + steam.mol
if self.bulk_reactant:
if self.reaction.X != 1:
raise RuntimeError('reaction extent must be 100% with bulk reactants')
model_reactant, reactants = self.bulk_reactant
F_reactant_mass = product.imass[reactants].sum()
product.imol[reactants] = 0
product.imass[model_reactant] = F_reactant_mass
product.phase = 'g'
flue_gas.phase = 'g'
self.reaction(product)

# Product loss will dictate temperature of recirculated catalyst
product.split_to(flue_gas, product, self.product_loss, energy_balance=False)
product_loss = flue_gas.mol.copy()
Expand Down

0 comments on commit d0eb269

Please sign in to comment.