Stoichiometric reactor

The main assumptions of the implemented model are as follows:

  1. Single liquid phase only (solids are not explicitly modeled)

  2. Steady state only

  3. Has no volume

  4. Reaction phenomena is not modeled (e.g. exothermic, endothermic, reaction rate, etc.) User must provide amount of reagent to add, and amount of precipitant that would form

Introduction

This is a basic stoichiometric reactor designed to provide a simple mass balanced method for adding reactants and removing solids from a stream, for more comprehesive reactor models please use IDAES Stoichiometric IDAES Stoichiometric reactor model.

The stoichiometric reactor is a basic unit operation designed to aid in modeling addition of reagent to a feed stream and removal of ions from a stream through precipitation. A basic example for using this model is the lime/soda ash softening process. The reactor can be configured to include only dissolution of a reagent or precipitation of specific species, and both as shown in figure below.

../../_images/stoichiometric_reactor.png

Figure 1. Schematic representation of a processes considered in stoichiometric reactor

Degrees of Freedom

The degrees of freedom in a stoichiometric reactor unit model are as follows:

For inlet conditions:
  • temperature

  • pressure

  • component mass compositions

If reagents are supplied:
  • reagent mass flow rate or reagent dose

If precipitants are supplied
  • precipitant mass flow rate

  • mass fraction of solids in precipitant (solid) waste stream

Model Structure and Usage

The stoichiometric reactor uses control volumes to perform the dissolution reaction and precipitation reaction, while an IDAES separator is used to separate precipitated solids from the feed stream. The model should be used with MCAS property package Multi-Component Aqueous Solution (MCAS) Property Package. The user needs to specify how supplied reagent and precipitant dissolve or precipitate out of the feed stream using ions present in the feed.

Example dictionary for dissolving Soda ash and Lime into their ions

reagents = {
      "Na2CO3": {
            "mw": 105.99 * pyunits.g / pyunits.mol,
            "dissolution_stoichiometric": {"Na_+": 2, "HCO3_-": 1},
      },
      "CaO": {
            "mw": 56.0774 * pyunits.g / pyunits.mol,
            "dissolution_stoichiometric": {"Ca_2+": 1, "H2O": 1},
      },
   }

Example dictionary for defined precipitant that would form during reaction (Calcite - CaCO3, and Brucite - MgOH)

precipitants = {
   "Calcite": {
         "mw": 100.09 * pyunits.g / pyunits.mol,
         "precipitation_stoichiometric": {"Ca_2+": 1, "HCO3_-": 1},
   },
   "Brucite": {
         "mw": 58.3197 * pyunits.g / pyunits.mol,
         "precipitation_stoichiometric": {"Mg_2+": 1, "H2O": 1},
   },
}

The user can then provide the model with specified dictionary to produce a stoichiometric reactor that only perform dissolution, precipitation, or both.

# unit for only adding a reagent
m.fs.chemical_addition = StoichiometricReactor(property_package=m.fs.properties,  reagent=reagents)
# The user must the specify how much reagent to add
m.fs.chemical_addition.reagent_dose["Na2CO3"].fix(1e-3)
m.fs.chemical_addition.reagent_dose["CaO"].fix(1e-3)

# unit for only precipitating specified species out of the feed
m.fs.precipitation_reactor = StoichiometricReactor(property_package=m.fs.properties, precipitants=precipitants)
# The user must then specify how much precipitant to form
m.fs.precipitation_reactor.flow_mass_precipitate["Calcite"].fix(1e-3)
m.fs.precipitation_reactor.flow_mass_precipitate["Brucite"].fix(1e-4)
# The user must also specify solids fraction in waste stream
m.fs.unit.waste_mass_frac_precipitate.fix(0.2)

# unit for addition and precipitation (e.g. traditional Lime/Soda ash softening process)
m.fs.lime_soda_softening = StoichiometricReactor(property_package=m.fs.properties, reagent=reagents, precipitants=precipitants)
# The user must the specify how much reagent to add and precipitant to form
m.fs.lime_soda_softening.reagent_dose["Na2CO3"].fix(1e-3)
m.fs.lime_soda_softening.reagent_dose["CaO"].fix(1e-3)
m.fs.lime_soda_softening.flow_mass_precipitate["Calcite"].fix(1e-3)
m.fs.lime_soda_softening.flow_mass_precipitate["Brucite"].fix(1e-4)
# The user must also specify solids fraction in waste stream
m.fs.lime_soda_softening.waste_mass_frac_precipitate.fix(0.2)

Sets

Description

Symbol

Indices

time

\(t\)

[0]

phases

\(p\)

[‘Liq’]

components

\(j\)

[‘H2O’, solutes]

reagents

\(\text{reagents}\)

[reagent]

precipitants

\(\text{precipitants}\)

[precipitants]

Variables

Description

Variable Name

Index

Units

Reagent dose

reagent_dose

[reagent]

kg/\(\text{m}^3\)

Reagent density

density_reagent

[reagent]

kg/\(\text{m}^3\)

Reagent flow mass

flow_mass_reagent

[reagent]

kg/s

Reagent flow volume

flow_vol_reagent

[reagent]

\(\text{m}^3\)/s

Stoichiometric coefficients for dissolution

dissolution_stoich_comp

[reagent, \(j\)]

dimensionless

Flow mass of precipitant

flow_mass_precipitate

[precipitant]

kg/s

Mass concentration of precipitant

conc_mass_precipitate

[precipitant]

kg/\(\text{m}^3\)

Stoichiometric coefficients for precipitation

precipitation_stoich_comp

[precipitant, \(j\)]

dimensionless

Fraction of solids in waste stream

waste_mass_frac_precipitate

None

fraction

Class Documentation