Fixed Bed 0D Reactor

The IDAES Fixed Bed 0D Reactor (FixedBed0D) model represents a unit operation where a gas stream passes through a solid phase bed. The FixedBed0D mathematical model is a 0-D time variant model with two phases (gas and solid). The model captures the gas-solid interaction between both phases through reaction, mass and heat transfer.

Assumptions:

  • There is assumed to be no axial or radial variation in solid composition.

  • Excess gas flowrate and ideal gas behavior are assumed.

  • The reactor is assumed to be isothermal, and the reaction is one-way (no equilibrium).

Requirements:

  • Property packages contain temperature and pressure variables.

Degrees of Freedom

FixedBed0D Reactors generally have at least 2 (or more) degrees of freedom, including the reactor bed diameter and height.

Model Structure

The FixedBed0D model assumes a single control volume, and writes a set of material and energy balances for the solid phase. The gas phase conditions are considered to be fixed at the inlet values.

Construction Arguments

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

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

  • dynamic - indicates whether the model will be dynamic or not, must be True (default = True).

  • has_holdup - indicates whether holdup terms are constructed or not, must be True (default = True).

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

    • 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

Arguments that are applicable to a specific region:

  • gas_property_package - property package to use when calculating properties for the gas phase (default = ‘None’). This is provided as a Physical Parameter Block by the Flowsheet when creating the model.

  • gas_property_package_args - set of arguments to be passed to the gas phase Property Blocks when they are created (default = ‘None’).

  • solid_property_package - property package to use when calculating properties for the solid phase (default = ‘None’). This is provided as a Physical Parameter Block by the Flowsheet when creating the model.

  • solid_property_package_args - set of arguments to be passed to the solid phase Property Blocks when they are created (default = ‘None’).

  • reaction_package - reaction package to use when calculating properties for solid phase reaction (default = None). This is provided as a Reaction Parameter Block by the Flowsheet when creating the model.

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

Constraints

In the following, the subscripts \(g\) and \(s\) refer to the gas and solid phases, respectively. FixedBed0D units write the following Constraints:

Reaction and Mass/Heat Transfer Constraints

Volume of the bed:

\[V_{bed} = \pi L_{bed} (0.5 D_{bed})^2\]

Volume of the solid:

\[V_{s,t} = V_{bed} (1 - \epsilon_{s})\]

Solid material holdup:

\[j_{mass,s,t,j} = V_{s} \rho_{mass,s,t} x_{mass,s,t,j}\]

Solid material accumulation:

\[{\dot{j}}_{mass,s,t,j} = V_{s} {MW}_{s,j} {\Sigma}_{r} {r_{s,t,r} \nu_{s,j,r}}\]

Total mass of solids:

\[M_{s,t} = V_{s} {\Sigma_{j} {\rho_{mass,s,t,j}}}\]

Sum of component mass fractions:

\[{\Sigma_{j}} {x_{mass,s,t,j}} = 1 \space \space \space \forall \space t\]

if self.config.energy_balance_type != EnergyBalanceType.none:

Solid energy holdup:

\[q_{energy,s,t} = V_{s} \rho_{mass,s,t} H_{mass,s,t}\]

Solid energy accumulation:

\[{\dot{q}}_{energy,s,t} = - V_{s} {\Sigma}_{r} {r_{s,t,r} H_{rxn,s,t,r}}\]

Isothermal solid phase:

\[T_{s,t} = T_{s,t=0}\]

List of Variables

Variable

Description

Reference to

\(D_{bed}\)

Reactor bed diameter

bed_diameter

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

Solid phase mass enthalpy

solids.enth_mass

\(H_{rxn,s,t,r}\)

Solid phase reaction enthalpy

solids.reactions.dh_rxn

\(j_{mass,s,t,j}\)

Material holdup, solid phase

solids.solids_material_holdup

\({\dot{j}}_{mass,s,t,j}\)

Material accumulation, solid phase

solids.solids_material_accumulation

\(L_{bed}\)

Reactor bed height

bed_height

\(M_{s,t}\)

Total mass of solids

solids.mass_solids

\(q_{energy,s,t}\)

Energy holdup, solid phase

solids.energy_material_holdup

\({\dot{q}}_{energy,s,t}\)

Energy accumulation, solid phase

solids.solids_energy_accumulation

\(r_{s,t,r}\)

Solid phase reaction rate of reaction r

solids.reactions.reaction_rate

\(T_{s,t}\)

Solid phase temperature

solids.temperature

\(x_{mass,s,t,j}\)

Mass fraction of component j, solid phase

solids.mass_frac_comp

\(V_{bed}\)

Total volume of the bed

volume_bed

\(V_{s,t}\)

Total volume of solids

solids.volume_solid

Greek letters

\(\rho_{mass,s,t}\)

Density of solid particles

solids.dens_mass_particle

List of Parameters

Parameter

Description

Reference to

\(\epsilon_{s}\)

Void fraction of the solid

solids._params.voidage

\({MW}_{s,j}\)

Molecular weight of solid component j

solids._params.mw_comp

\(\nu_{s,j,r}\)

Stoichiometric coefficients

solids.reaction_package.rate_reaction_stoichiometry

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. For the FixedBed0D model, the initialization method is a general purpose routine for simple unit models where a single control volume is initalized followed by attempting to solve the entire unit.

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 domain 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 model blocks.

  • Step 2: Initialize the reaction properties.

FixedBed0D Class

class idaes.gas_solid_contactors.unit_models.fixed_bed_0D.FixedBed0D(*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

  • default (dict) –

    Default ProcessBlockData config

    Keys
    dynamic

    Indicates whether this model will be dynamic or not, default = True. Fixed beds must be dynamic.

    has_holdup

    Indicates whether holdup terms should be constructed or not. default - True. Fixed bed reactors must be dynamic, thus this must be True.

    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.}

    gas_property_package

    Property parameter object used to define property calculations for the gas phase, default - None. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}

    gas_property_package_args

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

    solid_property_package

    Property parameter object used to define property calculations for the solid phase, default - None. Valid values: { useDefault - use default package from parent model or flowsheet, PhysicalParameterObject - a PhysicalParameterBlock object.}

    solid_property_package_args

    A ConfigBlock with arguments to be passed to a solid phase property block(s) and used when constructing these, default - None. Valid values: { 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 described under the “default” argument above.

  • 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 overide the default behavior of matching the BlockData index exactly to the index in initialize.

Returns

(FixedBed0D) New instance

FixedBed0DData Class

class idaes.gas_solid_contactors.unit_models.fixed_bed_0D.FixedBed0DData(component)[source]

0D Fixed Bed Reactor Model Class

build()[source]

General build method for UnitModelBlockData. This method calls a number of sub-methods which automate the construction of expected attributes of unit models.

Inheriting models should call super().build.

Parameters

None

Returns

None

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

Initialization routine for FB0D 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