Bubbling Fluidized Bed Reactor#

The IDAES Bubbling Fluidized Bed Reactor (BFBR) model represents a unit operation where two material streams, a solid phase and a gas phase, pass through a linear vessel while undergoing chemical reaction(s). The BFBR model is represented as a 1-D axially discretized model with two phases (gas and solid), and two regions (bubble and emulsion). The model captures the gas-solid interaction between both phases and regions through reaction, mass and heat transfer.

The model code is located in the main unit model module and may be imported as:

>>> from idaes.models_extra.gas_solid_contactors.unit_models.bubbling_fluidized_bed import BubblingFluidizedBed

Assumptions:

  • Cloud-wake region effects are negligible and are not modelled.

  • Gas emulsion is at minimum fluidization conditions.

  • Gas feeds into emulsion region before the excess enters into the bubble region.

  • Gas and solids are well mixed in the radial direction but vary axially.

Requirements:

  • Property package contains temperature and pressure variables.

  • Property package contains minimum fluidization velocity and voidage parameters.

The BFBR model equations are derived from:

    1. Lee, D.C. Miller. A one-dimensional (1-D) three-region model for a bubbling fluidized-bed adsorber, Ind. Eng. Chem. Res. 52 (2013) 469–484.

Degrees of Freedom#

BFBRs generally have at least 3 (or more) degrees of freedom, consisting of design and operating variables. The design variables of reactor length, diameter and number of orifices in the distributor are typically the minimum variables to be fixed.

Model Structure#

The core BFBR unit model consists of two inlet ports (named gas_inlet and solid_inlet), two outlet ports (named gas_outlet and solid_outlet), and three ControlVolume1DBlock Blocks (named bubble_region, gas_emulsion_region and solid_emulsion_region).

Construction Arguments#

The IDAES BFBR model has construction arguments specific to the whole unit and to the individual regions.

Arguments that are applicable to the BFBR unit as a whole are:

  • finite_elements - sets the number of finite elements to use when discretizing the spatial domains (default = 10).

  • length_domain_set - sets the list of point to use to initialize a new ContinuousSet (default = [0.0, 1.0]).

  • transformation_method - sets the discretization method to use by the Pyomo TransformationFactory to transform the spatial domain (default = dae.finite_difference):

    • dae.finite_difference - finite difference method.

    • dae.collocation - orthogonal collocation method.

  • transformation_scheme - sets the scheme to use when transforming a domain. Selected schemes should be compatible with the transformation_method chosen (default = None):

    • None - defaults to “BACKWARD” for finite difference transformation method and to “LAGRANGE-RADAU” for collocation transformation method

    • BACKWARD - use a finite difference transformation method.

    • FORWARD - use a finite difference transformation method.

    • LAGRANGE-RADAU - use a collocation transformation method.

  • collocation_points - sets the number of collocation points to use when discretizing the spatial domains (default = 3, collocation methods only).

  • flow_type - indicates the flow arrangement within the unit to be modeled. Options are:

    • ‘co-current’ - (default) gas and solid streams both flow in the same direction (from x=0 to x=1)

    • ‘counter-current’ - gas and solid streams flow in opposite directions (gas from x=0 to x=1 and solid from x=1 to x=0).

  • material_balance_type - indicates what type of energy balance should be constructed (default = MaterialBalanceType.componentTotal).

    • MaterialBalanceType.componentTotal - use total component balances.

    • MaterialBalanceType.total - use total material balance.

  • energy_balance_type - indicates what type of energy balance should be constructed (default = EnergyBalanceType.enthalpyTotal).

    • EnergyBalanceType.none - excludes energy balances.

    • EnergyBalanceType.enthalpyTotal - single enthalpy balance for material.

  • momentum_balance_type - indicates what type of momentum balance should be constructed (default = MomentumBalanceType.pressureTotal).

    • MomentumBalanceType.none - exclude momentum balances.

    • MomentumBalanceType.pressureTotal - single pressure balance for material.

  • has_pressure_change - indicates whether terms for pressure change should be constructed (default = True).

    • True - include pressure change terms.

    • False - exclude pressure change terms.

Arguments that are applicable to the gas phase:

  • property_package - property package to use when constructing bubble region Property Blocks (default = ‘use_parent_value’). This is provided as a Physical Parameter Block by the Flowsheet when creating the model. If a value is not provided, the ControlVolume Block will try to use the default property package if one is defined.

  • property_package_args - set of arguments to be passed to the bubble region Property Blocks when they are created (default = ‘use_parent_value’).

  • reaction_package - reaction package to use when constructing bubble region Reaction Blocks (default = None). This is provided as a Reaction Parameter Block by the Flowsheet when creating the model. If a value is not provided, the ControlVolume Block will try to use the default property package if one is defined.

  • reaction_package_args - set of arguments to be passed to the bubble region Reaction Blocks when they are created (default = None).

  • has_equilibrium_reactions - sets flag to indicate if terms of equilibrium controlled reactions should be constructed (default = False).

Arguments that are applicable to the solid phase:

  • property_package - property package to use when constructing bubble region Property Blocks (default = ‘use_parent_value’). This is provided as a Physical Parameter Block by the Flowsheet when creating the model. If a value is not provided, the ControlVolume Block will try to use the default property package if one is defined.

  • property_package_args - set of arguments to be passed to the bubble region Property Blocks when they are created (default = ‘use_parent_value’).

  • reaction_package - reaction package to use when constructing bubble region Reaction Blocks (default = None). This is provided as a Reaction Parameter Block by the Flowsheet when creating the model. If a value is not provided, the ControlVolume Block will try to use the default property package if one is defined.

  • reaction_package_args - set of arguments to be passed to the bubble region Reaction Blocks when they are created (default = None).

  • has_equilibrium_reactions - sets flag to indicate if terms of equilibrium controlled reactions should be constructed (default = False).

Additionally, BFBR units have the following construction arguments which are passed to all the ControlVolume1DBlock Blocks and are always specified to their default values.

Argument

Default Value

dynamic

useDefault

has_holdup

useDefault

Constraints#

Geometric Constraints

Area of orifice:

\[A_{or} = \frac{1}{n_{or}}\]

Bed cross-sectional area:

\[A_{bed} = \pi \frac{D_{bed}^{2}}{4}\]

Area of bubble region:

\[A_{b,t,x} = \delta_{t,x} A_{bed}\]

Area of gas emulsion region:

\[A_{ge,t,x} = \delta_{e,t,x} \varepsilon_{e,t,x} A_{bed}\]

Area of solid emulsion region:

\[A_{se,t,x} = \delta_{e,t,x} {\left(1 - \varepsilon_{e,t,x} \right)} A_{bed}\]

Length of bubble region:

\[L_{b} = L_{bed}\]

Length of gas emulsion region:

\[L_{ge} = L_{bed}\]

Length of solid emulsion region:

\[L_{se} = L_{bed}\]

Hydrodynamic Constraints

Emulsion region volume fraction:

\[\delta_{e,t,x} = 1 -\delta_{t,x}\]

Average cross-sectional voidage:

\[\varepsilon_{t,x} = 1 - \left(1 - \varepsilon_{e,t,x} \right) \left(1 - \delta_{t,x} \right)\]

Emulsion region voidage:

\[\varepsilon_{e,t,x} = \varepsilon_{mf,se}\]

Bubble growth coefficient:

\[\gamma_{t,x} = \frac{0.0256}{v_{mf,se}} {\left(\frac{D_{bed}}{g} \right)}^{0.5}\]

Maximum bubble diameter:

\[d_{bm,t,x}^{5}g = 2.59^{5} {\left([v_{g,t,x} - v_{ge,t,x}] A_{bed} \right)}^{2}\]

Bubble diameter (gas inlet, x = 0):

\[d_{b,t,x} = 1.38g^{-0.2} {\left([v_{g,t,x} - v_{ge,t,x}]A_{or} \right)}^{0.4}\]

Bubble diameter (x > 0):

\[\frac{dd_{b,t,x}}{ dx } = \frac{0.3}{D_{bed}} L_{bed} {\left(d_{bm,t,x} - d_{b,t,x} - \gamma_{t,x}{\left(D_{bed} d_{b,t,x}\right)}^{0.5}\right)}\]

Bubble rise velocity:

\[v_{br,t,x}^{2} = 0.711^{2} g d_{b,t,x}\]

Bubble velocity:

\[v_{b,t,x} = v_{g,t,x} - v_{mf,se} + v_{br,t,x}\]

Average gas density:

\[C_{g,t,x} = \frac{F_{mol,b,t,x} C_{b,total,t,x} + F_{mol,ge,t,x} C_{ge,total,t,x}} {F_{mol,b,t,x} + F_{mol,ge,t,x}}\]

Superficial gas velocity:

\[v_{g,t,x} = \frac{F_{mol,b,t,x} + F_{mol,ge,t,x}} {A_{bed} C_{g,t,x}}\]

Bubble volume fraction:

\[\delta_{t,x} v_{b,t,x} = v_{ge,t,x}\delta_{e,t,x} - v_{g,t,x}\]

Gas emulsion pressure drop:

if ‘has_pressure_change’ is ‘True’:

\[\Delta P_{ge,t,x} = - g {\left(1 - \varepsilon_{e,t,x} \right)} \rho_{mass,se,t,x}\]

elif ‘has_pressure_change’ is ‘False’:

\[P_{ge,t,x} = P_{g,t,inlet}\]

Mass Transfer Constraints

Bubble to emulsion gas mass transfer coefficient:

\[K_{be,t,x,j} d_{b,t,x}^{1.25} = 5.94 v_{mf,se} d_{b,t,x}^{0.25} + 5.85 D_{vap,ge,t,x,j}^{0.5} g^{0.25}\]

Bulk gas mass transfer:

if \(C_{ge,total,t,x}\) > \(C_{b,total,t,x}\):

\[K_{gbulkc,t,x,j} = 6 K_{d} \delta_{t,x} A_{bed} {\left(C_{ge,total,t,x} - C_{b,total,t,x} \right)} d_{b,t,x} y_{ge,t,x,j}\]

else:

\[K_{gbulkc,t,x,j} = 6 K_{d} \delta_{t,x} A_{bed} {\left(C_{ge,total,t,x} - C_{b,total,t,x} \right)} d_{b,t,x} y_{b,t,x,j}\]

Heat Transfer Constraints

Bubble to emulsion gas heat transfer coefficient:

\[H_{be,t,x,j} d_{b,t,x}^{1.25} = 4.5 v_{mf,se} c_{p\_vap,b,t,x} C_{b,total,t,x} d_{b,t,x}^{0.25} + 5.85 {\left(k_{vap,b,t,x} C_{b,total,t,x} c_{p\_vap,b,t,x} \right)}^{0.5} g^{0.25}\]

Convective heat transfer coefficient:

\[h_{tc,t,x} d_{p,se} = 0.03 k_{vap,e,t,x} {\left(v_{ge,t,x} d_{p,se} \frac{C_{ge,total,t,x}}{\mu_{vap,ge,t,x}} \right)}^{1.3}\]

Emulsion region gas-solids convective heat transfer:

\[h_{t\_gs,t,x} d_{p,se} = 6 \delta_{e,t,x} {\left(1 - \varepsilon_{e,t,x} \right)} h_{tc,t,x} {\left(T_{ge,t,x} - T_{se,t,x} \right)}\]

Bulk gas heat transfer:

if \(C_{ge,total,t,x}\) > \(C_{b,total,t,x}\):

\[H_{gbulk,t,x} = K_{d} \delta_{t,x} A_{bed} {\left(C_{ge,total,t,x} - C_{b,total,t,x} \right)} d_{b,t,x} H_{ge,t,x}\]

else:

\[H_{gbulk,t,x} = K_{d} \delta_{t,x} A_{bed} {\left(C_{ge,total,t,x} - C_{b,total,t,x} \right)} d_{b,t,x} H_{b,t,x}\]

Mass and heat transfer terms in control volumes

Bubble mass transfer ‘(p=vap)’:

\[M_{tr,b,t,x,p,j} = K_{gbulkc,t,x,j} - A_{b,t,x} K_{be,t,x,j} {\left(C_{b,total,t,x} - C_{ge,total,t,x} \right)}\]

Gas emulsion mass transfer ‘(p=vap)’:

\[M_{tr,ge,t,x,p,j} = - K_{gbulkc,t,x,j} + A_{b,t,x} K_{be,t,x,j} {\left(C_{b,total,t,x} - C_{ge,total,t,x} \right)} + r_{hetero,ge,t,x,j}\]

if ‘energy_balance_type’ is not ‘EnergyBalanceType.none’:

Bubble heat transfer:

\[H_{tr, b, t,x} = H_{gbulk,t,x} - A_{b,t,x} H_{be,t,x,j} {\left(T_{b,t,x} - T_{ge,t,x} \right)}\]

Gas emulsion heat transfer:

\[H_{tr, ge, t,x} = - H_{gbulk,t,x} + A_{b,t,x} H_{be,t,x,j} {\left(T_{b,t,x} - T_{ge,t,x} \right)} - h_{t\_gs,t,x} A_{bed}\]

Solid emulsion heat transfer:

\[H_{tr, se, t,x} = h_{t\_gs,t,x} A_{bed}\]

Reaction constraints

if ‘homogeneous reaction package’ is not ‘None’:

Bubble rate reaction extent:

\[r_{ext,b,t,x,r} = A_{b,t,x} r_{b,t,x,r}\]

Gas emulsion rate reaction extent:

\[r_{ext,ge,t,x,r} = A_{ge,t,x} r_{ge,t,x,r}\]

if ‘heterogeneous reaction package’ is not ‘None’:

Solid emulsion rate reaction extent:

\[r_{ext,se,t,x,r} = A_{se,t,x} r_{se,t,x,r}\]

Gas emulsion heterogeneous rate reaction extent:

\[r_{hetero,ge,t,x,j} = A_{se,t,x} \sum_{r}^{reactions} {s_{se,j,r} r_{se,t,x,r}}\]

Flowrate constraints

Bubble gas flowrate:

\[F_{mol,b,t,x} = A_{bed} \delta_{t,x} v_{b,t,x} C_{b,total,t,x}\]

Emulsion gas flowrate:

\[F_{mol,ge,t,x} = A_{bed} v_{ge,t,x} C_{ge,total,t,x}\]

Inlet boundary conditions

if ‘has_pressure_change’ is ‘True’:

Gas emulsion pressure at inlet:

\[P_{ge,t,0} = P_{g,t,inlet} - \Delta P_{or}\]

Total gas balance at inlet:

\[F_{mol,b,t,0} + F_{mol,ge,t,0} = F_{mol,g,t,inlet}\]

Solid particle porosity at inlet:

\[\phi_{se,t,0} = \phi_{t,inlet}\]

Gas emulsion velocity at inlet:

\[v_{ge,t,0} = v_{mf,se}\]

Bubble mole fraction at inlet:

\[y_{b,t,0,j} = y_{g,t,inlet,j}\]

Gas emulsion mole fraction at inlet:

\[y_{ge,t,0,j} = y_{g,t,inlet,j}\]

Solid emulsion mass flow at inlet:

if ‘flow_type’ is ‘co_current’ x = 0 else if ‘flow_type’ is ‘counter_current’ x = 1:

\[F_{mass,se,t,x} = F_{mass,s,t,inlet}\]

Solid emulsion mass fraction at inlet:

if ‘flow_type’ is ‘co_current’ x = 0 else if ‘flow_type’ is ‘counter_current’ x = 1:

\[x_{se,t,x} = x_{s,t,inlet}\]

if ‘energy_balance_type’ is not ‘EnergyBalanceType.none’:

Gas inlet energy balance:

\[H_{b,t,0} + H_{ge,t,0} = H_{g,t,inlet}\]

Gas emulsion temperature at inlet:

\[T_{ge,t,0} = T_{g,t,inlet}\]

elif ‘energy_balance_type’ is ‘EnergyBalanceType.none’:

Isothermal bubble region:

\[T_{b,t,x} = T_{g,t,inlet}\]

Isothermal gas emulsion region:

\[T_{ge,t,x} = T_{g,t,inlet}\]

Isothermal solid emulsion region:

\[T_{se,t,x} = T_{s,t,inlet}\]

if ‘flow_type’ is ‘co_current’ x = 0 else if ‘flow_type’ is ‘counter_current’ x = 1:

Solid inlet energy balance:

\[H_{se,t,x} = H_{s,t,inlet}\]

Outlet boundary conditions

Gas emulsion pressure at outlet:

\[P_{g,t,outlet} = P_{ge,t,1}\]

Total gas balance at outlet:

\[F_{mol,g,t,outlet} = F_{mol,b,t,1} + F_{mol,ge,t,1}\]

Solid outlet material balance:

if ‘flow_type’ is ‘co_current’ x = 1 else if ‘flow_type’ is ‘counter_current’ x = 0:

\[F_{mass,s,t,outlet} = F_{mass,se,t,x}\]

Solid particle porosity at outlet:

\[\phi_{t,outlet} = \phi_{se,t,1}\]

if ‘energy_balance_type’ is not ‘EnergyBalanceType.none’:

Gas outlet energy balance:

\[H_{g,t,outlet} = H_{b,t,1} + H_{ge,t,1}\]

Solid outlet energy balance:

if ‘flow_type’ is ‘co_current’ x = 1 else if ‘flow_type’ is ‘counter_current’ x = 0:

\[H_{s,t,outlet} = H_{se,t,x}\]

elif ‘energy_balance_type’ is ‘EnergyBalanceType.none’:

Gas outlet energy balance:

\[T_{g,t,outlet} = T_{ge,t,1}\]

Solid outlet energy balance:

if ‘flow_type’ is ‘co_current’ x = 1 else if ‘flow_type’ is ‘counter_current’ x = 0:

\[T_{s,t,outlet} = T_{se,t,x}\]

Variables#

List of variables in the BFBR model:

Variable

Name

Notes

\(L_{bed}\)

bed_height

Bed height

\(D_{bed}\)

bed_diameter

Reactor diameter

\(A_{bed}\)

bed_area

Reactor cross-sectional area

\(A_{or}\)

area_orifice

Distributor plate area per orifice

\(n_{or}\)

number_orifice

Number of distributor plate orifices per area

\(\delta_{t,x}\)

delta

Volume fraction occupied by bubble region

\(\delta_{e,t,x}\)

delta_e

Volume fraction occupied by emulsion region

\(\varepsilon_{t,x}\)

voidage_average

Cross-sectional average voidage

\(\varepsilon_{e,t,x}\)

voidage_emulsion

Emulsion region voidage fraction

\(\phi_{se,t,x}\)

solid_emulsion_region.particle_porosity

Particle porosity of solid

\(\gamma_{t,x}\)

bubble_growth_coeff

Bubble growth coefficient

\(d_{bm,t,x}\)

bubble_diameter_max

Maximum theoretical bubble diameter

\(d_{b,t,x}\)

bubble_diameter

Average bubble diameter

\(v_{g,t,x}\)

velocity_superficial_gas

Gas superficial velocity

\(v_{ge,t,x}\)

velocity_emulsion_gas

Emulsion region superficial gas velocity

\(v_{br,t,x}\)

velocity_bubble_rise

Bubble rise velocity

\(v_{b,t,x}\)

velocity_bubble

Average bubble diameter

\(K_{be,t,x,j}\)

Kbe

Bubble to emulsion gas mass transfer coefficient

\(K_{gbulkc,t,x,j}\)

Kgbulk_c

Gas phase component bulk transfer rate

\(H_{be,t,x,j}\)

Hbe

Bubble to emulsion gas heat transfer coefficient

\(c_{p\_vap,b,t,x}\)

cp_mol

Mixture mole heat capacity

\(h_{tc,t,x}\)

htc_conv

Gas to solid convective heat transfer coefficient

\(\mu_{vap,ge,t,x}\)

visc_d

Mixture dynamic viscosity

\(h_{t\_gs,t,x}\)

ht_conv

Gas to solid convective enthalpy transfer

\(H_{gbulk,t,x}\)

Hgbulk

Bulk gas heat transfer between bubble and emulsion

\(r_{hetero,ge,t,x,j}\)

gas_emulsion_hetero_rxn

Gas emulsion heterogeneous rate reaction generation

\(L_{b}\)

bubble_region.length

\(L_{ge}\)

gas_emulsion_region.length

\(L_{se}\)

solid_emulsion_region.length

\(A_{b,t,x}\)

bubble_region.area

\(A_{ge,t,x}\)

gas_emulsion_region.area

\(A_{se,t,x}\)

solid_emulsion_region.area

\(\Delta P_{ge,t,x}\)

gas_emulsion_region.deltaP

pressure drop across gas emulsion region

\(\rho_{mass,se,t,x}\)

solid_emulsion_region.properties.dens_mass_particle

solid particle mass density

\(D_{vap,ge,t,x,j}\)

gas_emulsion_region.properties.diffusion_comp

gas component diffusion in gas emulsion region

\(C_{b,total,t,x}\)

bubble_region.properties.dens_mol_vap

gas mole density in the bubble region

\(C_{g,t,x}\)

average_gas_density

average gas density

\(C_{ge,total,t,x}\)

gas_emulsion_region.properties.dens_mol_vap

gas mole density in the emulsion region

\(M_{tr,b,t,x,p,j}\)

bubble_region.mass_transfer_term

\(M_{tr,ge,t,x,p,j}\)

gas_emulsion_region.mass_transfer_term

\(M_{tr,se,t,x,p,j}\)

solid_emulsion_region.mass_transfer_term

\(r_{ext,b,t,x,r}\)

bubble_region.rate_reaction_extent

\(r_{ext,ge,t,x,r}\)

gas_emulsion_region.rate_reaction_extent

\(r_{ext,se,t,x,r}\)

solid_emulsion_region.rate_reaction_extent

\(r_{b,t,x,r}\)

bubble_region.reactions.reaction_rate

\(r_{ge,t,x,r}\)

gas_emulsion_region.reactions.reaction_rate

\(r_{se,t,x,r}\)

solid_emulsion_region.reactions.reaction_rate

\(k_{vap,b,t,x}\)

bubble_region.properties.therm_cond

bubble region thermal conductivity

\(k_{vap,e,t,x}\)

gas_emulsion_region.properties.therm_cond

gas emulsion region thermal conductivity

\(T_{b,t,x}\)

bubble_region.properties.temperature

\(T_{ge,t,x}\)

gas_emulsion_region.properties.temperature

\(T_{se,t,x}\)

solid_emulsion_region.properties.temperature

\(H_{tr, b, t,x}\)

bubble_region.heat

bubble region heat transfer term

\(H_{tr, ge, t,x}\)

gas_emulsion_region.heat

gas emulsion region heat transfer term

\(H_{tr, se, t,x}\)

solid_emulsion_region.heat

solid emulsion region heat transfer term

\(F_{mol,b,t,x}\)

bubble_region.properties.flow_mol

\(F_{mol,ge,t,x}\)

gas_emulsion_region.properties.flow_mol

\(y_{b,t,x,j}\)

bubble_region.properties.mole_frac

\(y_{ge,t,x,j}\)

gas_emulsion_region.properties.mole_frac

\(x_{se,t,x,j}\)

solid_emulsion_region.properties.mass_frac

\(P_{ge,t,x}\)

gas_emulsion_region.properties.pressure

\(F_{mol,g,t,inlet}\)

gas_inlet.flow_mol

\(y_{g,t,inlet,j}\)

gas_inlet.mole_frac

\(P_{g,t,inlet}\)

gas_inlet.pressure

\(T_{g,t,inlet}\)

gas_inlet.temperature

\(H_{g,t,inlet}\)

gas_inlet.enthalpy

\(F_{mass,s,t,inlet}\)

solid_inlet.flow_mass

\(\phi_{t,inlet}\)

solid_inlet.particle_porosity

\(x_{s,t,inlet}\)

solid_inlet.mass_frac

\(T_{s,t,inlet}\)

solid_inlet.temperature

\(H_{s,t,inlet}\)

solid_inlet.enthalpy

\(F_{mass,se,t,x}\)

solid_emulsion_region.properties.flow_mass

\(H_{b,t,x}\)

bubble_region.properties.enthalpy

\(H_{ge,t,x}\)

gas_emulsion_region.properties.enthalpy

\(H_{se,t,x}\)

solid_emulsion_region.properties.enthalpy

\(F_{mol,g,t,outlet}\)

gas_outlet.flow_mol

\(y_{g,t,outlet,j}\)

gas_outlet.mole_frac

\(P_{g,t,outlet}\)

gas_outlet.pressure

\(T_{g,t,outlet}\)

gas_outlet.temperature

\(H_{g,t,outlet}\)

gas_outlet.enthalpy

\(F_{mass,s,t,outlet}\)

solid_outlet.flow_mass

\(\phi_{t,outlet}\)

solid_outlet.particle_porosity

\(x_{s,t,outlet}\)

solid_outlet.mass_frac

\(T_{s,t,outlet}\)

solid_outlet.temperature

\(H_{s,t,outlet}\)

solid_outlet.mass_enthalpy

\(v_{mf,se}\)

solid_emulsion_region.properties.velocity_mf

velocity at minimum fluidization

\(\varepsilon_{mf,se}\)

solid_emulsion_region.properties.voidage_mf

voidage at minimum fluidization

\(K_{d}\)

Kd

bulk gas permeation coefficient

\(d_{p,se}\)

solid_emulsion_region.properties._params.particle_dia

\(\Delta P_{or}\)

deltaP_orifice

Pressure drop across orifice

Parameters#

List of parameters in the BFBR model:

Parameter

Name

Notes

\(s_{se,j,r}\)

rate_reaction_stoichiometry

Reference to solid_emulsion_region.reactions.rate_reaction_stoichiometry

Subscripts#

List of subscripts in the BFBR model:

Subscript

Name

\(b\)

bubble region

\(e\)

emulsion region

\(g\)

gas phase

\(ge\)

gas_emulsion

\(j\)

component

\(p\)

phase

\(s\)

solid phase

\(se\)

solid_emulsion

\(r\)

reaction

\(t\)

time

\(x\)

length

Initialization#

The initialization method for this model will save the current state of the model before commencing initialization and reloads it afterwards. The state of the model will be the same after initialization, only the initial guesses for unfixed variables will be changed.

The model allows for the passing of a dictionary of values of the state variables of the gas and solid phases that can be used as initial guesses for the state variables throughout the time and spatial domains of the model. This is optional but recommended. A typical guess could be values of the gas and solid inlet port variables at time t=0.

The model initialization proceeds through a sequential hierarchical method where the model equations are deactivated at the start of the initialization routine, and the complexity of the model is built up through activation and solution of various sub-model blocks and equations at each initialization step. At each step the model variables are updated to better guesses obtained from the model solution at that step.

The initialization routine proceeds as follows:

  • Step 1. Initialize the thermo-physical and transport properties model blocks

  • Step 2. Initialize geometric constraints

  • Step 3. Initialize the hydrodynamic properties

  • Step 4a. Initialize pressure drop and mass balances without reactions

  • Step 4b. Initialize mass balances with reactions

  • Step 5. Initialize energy balances

BFBR Class#

class idaes.models_extra.gas_solid_contactors.unit_models.bubbling_fluidized_bed.BubblingFluidizedBed(*args, **kwds)#
Parameters:
  • rule (function) – A rule function or None. Default rule calls build().

  • concrete (bool) – If True, make this a toplevel model. Default - False.

  • ctype (class) –

    Pyomo ctype of the block. Default - pyomo.environ.Block

    Config args

    dynamic

    Indicates whether this model will be dynamic or not, default = useDefault. Valid values: { useDefault - get flag from parent (default = False), True - set as a dynamic model, False - set as a steady-state model.}

    has_holdup

    Indicates whether holdup terms should be constructed or not. Must be True if dynamic = True, default - False. Valid values: { useDefault - get flag from parent (default = False), True - construct holdup terms, False - do not construct holdup terms}

    finite_elements

    Number of finite elements to use when discretizing length domain (default=20)

    length_domain_set

    length_domain_set - (optional) list of point to use to initialize a new ContinuousSet if length_domain is not provided (default = [0.0, 1.0]).

    transformation_method

    Method to use to transform domain. Must be a method recognised by the Pyomo TransformationFactory, default - “dae.finite_difference”. Valid values: { “dae.finite_difference” - Use a finite difference transformation scheme, “dae.collocation” - use a collocation transformation scheme}

    transformation_scheme

    Scheme to use when transforming domain. See Pyomo documentation for supported schemes, default - None. Valid values: { None - defaults to “BACKWARD” for finite difference transformation method, and to “LAGRANGE- RADAU” for collocation transformation method, “BACKWARD” - Use a finite difference transformation method, “FORWARD”” - use a finite difference transformation method, “LAGRANGE-RADAU”” - use a collocation transformation method}

    collocation_points

    Number of collocation points to use per finite element when discretizing length domain (default=3)

    flow_type

    Flow configuration of Bubbling Fluidized Bed default - “co_current”. Valid values: { “co_current” - gas flows from 0 to 1, solid flows from 0 to 1, “counter_current” - gas flows from 0 to 1, solid flows from 1 to 0.}

    material_balance_type

    Indicates what type of mass balance should be constructed, default - MaterialBalanceType.componentTotal. Valid values: { MaterialBalanceType.none - exclude material balances, MaterialBalanceType.componentPhase - use phase component balances, MaterialBalanceType.componentTotal - use total component balances, MaterialBalanceType.elementTotal - use total element balances, MaterialBalanceType.total - use total material balance.}

    energy_balance_type

    Indicates what type of energy balance should be constructed, default - EnergyBalanceType.enthalpyTotal. Valid values: { EnergyBalanceType.none - exclude energy balances, EnergyBalanceType.enthalpyTotal - single enthalpy balance for material, EnergyBalanceType.enthalpyPhase - enthalpy balances for each phase, EnergyBalanceType.energyTotal - single energy balance for material, EnergyBalanceType.energyPhase - energy balances for each phase.}

    momentum_balance_type

    Indicates what type of momentum balance should be constructed, default - MomentumBalanceType.none. Valid values: { MomentumBalanceType.none - exclude momentum balances, MomentumBalanceType.pressureTotal - single pressure balance for material, MomentumBalanceType.pressurePhase - pressure balances for each phase, MomentumBalanceType.momentumTotal - single momentum balance for material, MomentumBalanceType.momentumPhase - momentum balances for each phase.}

    has_pressure_change

    Indicates whether terms for pressure change should be constructed, default - False. Valid values: { True - include pressure change terms, False - exclude pressure change terms.}

    gas_phase_config

    gas phase config arguments

    gas_phase_config
    dynamic

    Indicates whether this model will be dynamic or not, default = useDefault. Valid values: { useDefault - get flag from parent (default = False), True - set as a dynamic model, False - set as a steady-state model.}

    has_holdup

    Indicates whether holdup terms should be constructed or not. Must be True if dynamic = True, default - False. Valid values: { useDefault - get flag from parent (default = False), True - construct holdup terms, False - do not construct holdup terms}

    has_equilibrium_reactions

    Indicates whether terms for equilibrium controlled reactions should be constructed, default - True. Valid values: { True - include equilibrium reaction terms, False - exclude equilibrium reaction terms.}

    property_package

    Property parameter object used to define property calculations (default = ‘use_parent_value’) - ‘use_parent_value’ - get package from parent (default = None) - a ParameterBlock object

    property_package_args

    A dict of arguments to be passed to the PropertyBlockData and used when constructing these (default = ‘use_parent_value’) - ‘use_parent_value’ - get package from parent (default = None) - a dict (see property package for documentation)

    reaction_package

    Reaction parameter object used to define reaction calculations, default - None. Valid values: { None - no reaction package, ReactionParameterBlock - a ReactionParameterBlock object.}

    reaction_package_args

    A ConfigBlock with arguments to be passed to a reaction block(s) and used when constructing these, default - None. Valid values: { see reaction package for documentation.}

    solid_phase_config

    solid phase config arguments

    solid_phase_config
    dynamic

    Indicates whether this model will be dynamic or not, default = useDefault. Valid values: { useDefault - get flag from parent (default = False), True - set as a dynamic model, False - set as a steady-state model.}

    has_holdup

    Indicates whether holdup terms should be constructed or not. Must be True if dynamic = True, default - False. Valid values: { useDefault - get flag from parent (default = False), True - construct holdup terms, False - do not construct holdup terms}

    has_equilibrium_reactions

    Indicates whether terms for equilibrium controlled reactions should be constructed, default - True. Valid values: { True - include equilibrium reaction terms, False - exclude equilibrium reaction terms.}

    property_package

    Property parameter object used to define property calculations (default = ‘use_parent_value’) - ‘use_parent_value’ - get package from parent (default = None) - a ParameterBlock object

    property_package_args

    A dict of arguments to be passed to the PropertyBlockData and used when constructing these (default = ‘use_parent_value’) - ‘use_parent_value’ - get package from parent (default = None) - a dict (see property package for documentation)

    reaction_package

    Reaction parameter object used to define reaction calculations, default - None. Valid values: { None - no reaction package, ReactionParameterBlock - a ReactionParameterBlock object.}

    reaction_package_args

    A ConfigBlock with arguments to be passed to a reaction block(s) and used when constructing these, default - None. Valid values: { see reaction package for documentation.}

  • initialize (dict) – ProcessBlockData config for individual elements. Keys are BlockData indexes and values are dictionaries with config arguments as keys.

  • idx_map (function) – Function to take the index of a BlockData element and return the index in the initialize dict from which to read arguments. This can be provided to override the default behavior of matching the BlockData index exactly to the index in initialize.

Returns:

(BubblingFluidizedBed) New instance

BFBRData Class#

class idaes.models_extra.gas_solid_contactors.unit_models.bubbling_fluidized_bed.BubblingFluidizedBedData(component)[source]#

Standard Bubbling Fluidized Bed Unit Model Class

build()[source]#

Begin building model :param None:

Returns:

None

initialize_build(gas_phase_state_args=None, solid_phase_state_args=None, outlvl=0, solver=None, optarg=None)[source]#

Initialization routine for Bubbling Fluidized Bed unit

Keyword Arguments:
  • gas_phase_state_args – a dict of arguments to be passed to the property package(s) to provide an initial state for initialization (see documentation of the specific property package) (default = None).

  • solid_phase_state_args – a dict of arguments to be passed to the property package(s) to provide an initial state for initialization (see documentation of the specific property package) (default = None).

  • outlvl – sets output level of initialization routine

  • optarg – solver options dictionary object (default=None, use default solver options)

  • solver – str indicating which solver to use during initialization (default = None, use default solver)

Returns:

None

results_plot()[source]#

Plot method for common bubbling fluidized bed variables

Variables plotted:

Tge : temperature of gas in the emulsion region Tgb : temperature of gas in the bubble region Tse : temperature of solid in the emulsion region Ge : flowrate of gas in the emulsion region Gb : flowrate of gas in the bubble region cet : total concentration of gas in the emulsion region cbt : total concentration of gas in the bubble region y_b : mole fraction of gas components in the bubble region x_e : mass fraction of solid components in the emulsion region