aerated_bioreactor#

class AeratedBioreactor(ID='', ins=None, outs=(), thermo=None, **kwargs)[source]#

Create an aerated bioreactor which satisfies the oxygen mass tranfer requirement of the mass balance. The reactor is designed as a pressure vessel with a given aspect ratio and residence time. A pump-heat exchanger recirculation loop can be used to satisfy the duty, if any. By default, a turbine agitator is also included if the power usage, kW_per_m3, is positive. A vacuum system is also automatically added if the operating pressure is at a vacuum.

Parameters:
  • theta_O2 – Fraction of oxygen saturation in the broth. Defaults to 0.5.

  • Q_O2_consumption – Forced duty per O2 consummed [kJ/kmol].

  • optimize_power – If true, the agitator power is solved to minimize the total power requirement of both the compressor and agitator such that the required oxygen transfer rate is met.

  • design – Bioreactor design configuration. Valid options include ‘Stirred tank’ and ‘Bubble column’. Defaults to the former.

  • method – Method to calculate the overall mass transfer coefficient, kLa. Can be a name or a function. Valid method names are listed in biosteam.aeration.kLa_methods. For stirred tanks, defaults to the ‘Riet’. For bubble columns, defaults to ‘Dewes’.

  • kLa_kwargs – Additional arguments to pass to the kLa method.

  • cooler_pressure_drop – Pressure drop at the cooler [Pa]. Defaults to 20684.28 Pa, a heuristic value for a gas.

  • compressor_isentropic_efficiency – Isentropic efficiency of the compressor. Defaults to 0.85.

  • tau – Residence time [hr].

  • T – Operating temperature [K].

  • P – Operating pressure [Pa].

  • V_wf – Fraction of working volume over total volume. Defaults to 0.8.

  • length_to_diameter – Length to diameter ratio of bioreactor.

  • V_max – Maximum volume of a reactor [m3]. Defaults to 355.

  • kW_per_m3 – Power usage of agitator. Defaults to 0.2955 [kW / m3] from [1].

  • vessel_material – Vessel material. Defaults to ‘Stainless steel 316’.

  • vessel_type – Vessel type. Valid options are ‘Horizontal’ or ‘Vertical’. Defaults to ‘Vertical’

  • batch – Whether to use batch operation mode. If False, operation mode is continuous. Defaults to continuous.

  • tau_0 – Cleaning and unloading time (if batch mode). Defaults to 3 hr.

  • N – Number of reactors.

  • heat_exchanger_configuration – What kind of heat exchanger to default to (if any). Valid options include ‘jacketed’, ‘recirculation loop’, and ‘internal coil’. Defaults to ‘recirculation loop’.

  • dT_hx_loop – Maximum change in temperature for the heat exchanger loop. Defaults to 5 K.

  • jacket_annular_diameter – Annular diameter of heat exchanger jacket to vessel [m]. Defaults to 0.1 m.

  • loading_time – Loading time of batch reactor. If not given, it will assume each vessel is constantly being filled.

Notes

The heat exchanger configuration can be one of the following:

  • ‘recirculation loop’:

    The recirculation loop takes into account the required flow rate needed to reach the maximum temperature change of the heat exchanger, dT_hx_loop. Increasing dT_hx_loop decreases the required recirculation flow rate and therefore decreases pump costs.

    When parallel reactors are required, one recirculation loop (each with a pump and heat exchanger) is assumed. Although it is possible to use the same recirculation loop for all reactors, this conservative assumption allows for each reactor to be operated independently from each other.

  • ‘jacketed’:

    The jacket does not account for the heat transfer area requirement. It simply assumes that a full jacket can provide the necessary heat transfer area to meet the duty requirement. A heuristic annular diameter is assumed through jacket_annular_diameter (which can be adjusted by the user). The temperature at the wall is assumed to be the operating temperature. The weight of the jacket is added to the weight of the vessel and the cost is compounded together as a jacketed vessel.

  • ‘internal coil’:

    The internal coil is costed as an ordinary helical tube heat exchanger with the added assumption that the temperature at the wall is the operating temperature. This method is still not implemented in BioSTEAM yet.

Examples

>>> import biosteam as bst
>>> from biorefineries.sugarcane import chemicals
>>> bst.settings.set_thermo(chemicals)
>>> feed = bst.Stream('feed',
...                   Water=1.20e+05,
...                   Glucose=2.5e+04,
...                   units='kg/hr',
...                   T=32+273.15)
>>> # Model oxygen uptake as combustion
>>> rxn = bst.Rxn(
...     'Glucose + O2 -> H2O + CO2', reactant='Glucose', X=0.5,
...     correct_atomic_balance=True
... )
>>> R1 = bst.AeratedBioreactor(
...     ins=[feed, bst.Stream('air', phase='g')],
...     outs=('vent', 'product'), tau=12, V_max=500,
...     reactions=rxn,
... )
>>> R1.simulate()
>>> R1.show()
AeratedBioreactor: R2
ins...
[0] feed
    phase: 'l', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): Water    6.66e+03
                    Glucose  139
[1] air
    phase: 'g', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): O2  1.02e+03
                    N2  3.84e+03
outs...
[0] vent
    phase: 'g', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): Water  240
                    CO2    416
                    O2     605
                    N2     3.84e+03
[1] product
    phase: 'l', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): Water    6.84e+03
                    Glucose  69.4
class GasFedBioreactor(ID='', ins=None, outs=(), thermo=None, **kwargs)[source]#

Create an gas-fed bioreactor which satisfies the substrate mass tranfer requirement of the mass balance. The gas-fed bioreactor may include multiple gas feeds. The user-specified titer will be satisfied by varying the flow rates of the variable_gas_feeds so long as the backward_reactions are specified. Otherwise, the titer will be estimated assuming constant gas flow rates.

The reactor is designed as a pressure vessel with a given aspect ratio and residence time. A pump-heat exchanger recirculation loop can be used to satisfy the duty, if any. By default, a turbine agitator is also included if the power usage, kW_per_m3, is positive. A vacuum system is also automatically added if the operating pressure is at a vacuum.

Parameters:
  • gas_substrates – Substrates within the gas phase.

  • titer – Dictionary of substrate/titer pairs [g / L].

  • backward_reactions – Backwards reactions to get the substrate mass transfer requirement.

  • variable_gas_feeds – Feeds that can be varied to meet mass transfer requirement.

  • theta – Fraction of gas substrate saturation in the broth. Defaults to 0.5.

  • Q_consumption – Forced duty per gas substrate consummed [kJ/kmol].

  • optimize_power – If true, the agitator power is solved to minimize the total power requirement of both the compressor and agitator such that the required oxygen transfer rate is met.

  • design – Bioreactor design configuration. Valid options include ‘Stirred tank’ and ‘Bubble column’. Defaults to the former.

  • method – Method to calculate the overall mass transfer coefficient, kLa. Can be a name or a function. Valid method names are listed in biosteam.aeration.kLa_methods. For stirred tanks, defaults to the ‘Riet’. For bubble columns, defaults to ‘Dewes’.

  • kLa_kwargs – Additional arguments to pass to the kLa method.

  • cooler_pressure_drop – Pressure drop at the cooler [Pa]. Defaults to 20684.28 Pa, a heuristic value for a gas.

  • compressor_isentropic_efficiency – Isentropic efficiency of the compressor. Defaults to 0.85.

  • tau – Residence time [hr].

  • T – Operating temperature [K].

  • P – Operating pressure [Pa].

  • V_wf – Fraction of working volume over total volume. Defaults to 0.8.

  • length_to_diameter – Length to diameter ratio of bioreactor.

  • V_max – Maximum volume of a reactor [m3]. Defaults to 355.

  • kW_per_m3 – Power usage of agitator. Defaults to 0.985 [kW / m3] converted from 5 hp/1000 gal as in [1], for liquid–liquid reaction or extraction.

  • vessel_material – Vessel material. Defaults to ‘Stainless steel 316’.

  • vessel_type – Vessel type. Valid options are ‘Horizontal’ or ‘Vertical’. Defaults to ‘Vertical’

  • batch – Whether to use batch operation mode. If False, operation mode is continuous. Defaults to continuous.

  • tau_0 – Cleaning and unloading time (if batch mode). Defaults to 3 hr.

  • N – Number of reactors.

  • heat_exchanger_configuration – What kind of heat exchanger to default to (if any). Valid options include ‘jacketed’, ‘recirculation loop’, and ‘internal coil’. Defaults to ‘recirculation loop’.

  • dT_hx_loop – Maximum change in temperature for the heat exchanger loop. Defaults to 5 K.

  • jacket_annular_diameter – Annular diameter of heat exchanger jacket to vessel [m]. Defaults to 0.1 m.

  • loading_time – Loading time of batch reactor. If not given, it will assume each vessel is constantly being filled.

Notes

The heat exchanger configuration can be one of the following:

  • ‘recirculation loop’:

    The recirculation loop takes into account the required flow rate needed to reach the maximum temperature change of the heat exchanger, dT_hx_loop. Increasing dT_hx_loop decreases the required recirculation flow rate and therefore decreases pump costs.

    When parallel reactors are required, one recirculation loop (each with a pump and heat exchanger) is assumed. Although it is possible to use the same recirculation loop for all reactors, this conservative assumption allows for each reactor to be operated independently from each other.

  • ‘jacketed’:

    The jacket does not account for the heat transfer area requirement. It simply assumes that a full jacket can provide the necessary heat transfer area to meet the duty requirement. A heuristic annular diameter is assumed through jacket_annular_diameter (which can be adjusted by the user). The temperature at the wall is assumed to be the operating temperature. The weight of the jacket is added to the weight of the vessel and the cost is compounded together as a jacketed vessel.

  • ‘internal coil’:

    The internal coil is costed as an ordinary helical tube heat exchanger with the added assumption that the temperature at the wall is the operating temperature. This method is still not implemented in BioSTEAM yet.

Examples

>>> import biosteam as bst
>>> bst.settings.set_thermo(['H2', 'CO2', 'N2', 'O2', 'H2O', 'AceticAcid'])
>>> media = bst.Stream(ID='media', H2O=10000, units='kg/hr')
>>> H2 = bst.Stream(ID='H2', H2=100, units='kg/hr', phase='g')
>>> fluegas = bst.Stream(ID='fluegas', N2=70, CO2=25, H2O=3, O2=2, units='kg/hr', phase='g')
>>> # Model acetic acid production from H2 and CO2
>>> rxn = bst.Rxn('H2 + CO2 -> AceticAcid + H2O', reactant='H2', correct_atomic_balance=True)
>>> brxn = rxn.backwards(reactant='AceticAcid')
>>> R1 = bst.GasFedBioreactor(
...     'R1', ins=[media, H2, fluegas], outs=('vent', 'product'),
...     tau=68, V_max=500,
...     reactions=rxn, backward_reactions=brxn,
...     gas_substrates=('H2', 'CO2'),
...     titer=dict(AceticAcid=5),
...     optimize_power=False,
...     kW_per_m3=0.,
...     T=305.15
... )
>>> R1.simulate()
>>> R1.show()
GasFedBioreactor: R1
ins...
[0] media
    phase: 'l', T: 298.15 K, P: 101325 Pa
    flow: 88.8 kmol/hr H2O
[1] H2
    phase: 'g', T: 298.15 K, P: 101325 Pa
    flow: 49.6 kmol/hr H2
[2] fluegas
    phase: 'g', T: 298.15 K, P: 101325 Pa
    flow (kmol/hr): CO2  0.568
                    N2   2.5
                    O2   0.0625
                    H2O  0.167
outs...
[0] vent
    phase: 'g', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): H2          49
                    CO2         0.29
                    N2          2.5
                    O2          0.0625
                    H2O         2.55
                    AceticAcid  0.0082
[1] product
    phase: 'l', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): H2          0.00107
                    CO2         0.000242
                    N2          4.13e-05
                    O2          2.11e-06
                    H2O         86.7
                    AceticAcid  0.131

References