Fermentation#

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

Create a Fermentation object which models large-scale batch fermentation for the production of 1st generation ethanol using yeast [1] [2] [3] [4]. A compound with CAS ‘Yeast’ must be present. Only sucrose and glucose are taken into account for conversion. Conversion is based on reaction time, tau. Cleaning and unloading time, tau_0, fraction of working volume, V_wf, and number of reactors, N_reactors, are attributes that can be changed. Cost of a reactor is based on the NREL batch fermentation tank cost assuming volumetric scaling with a 6/10th exponent [5].

Parameters:
  • ins (Stream], optional) – Inlet fluids to be mixed into the fermentor.

  • outs (Stream], optional) –

    • [0] Vent

    • [1] Effluent

  • tau (float) – Reaction time.

  • N (int, optional) – Number of batch reactors

  • V (float, optional) – Target volume of reactors [m^3].

  • T=305.15 (float) – Temperature of reactor [K].

  • P=101325 (float) – Operating pressure of reactor [Pa].

  • Nmin=2 (int) – Minimum number of fermentors.

  • Nmax=36 (int) – Maximum number of fermentors.

  • efficiency=0.9 (float, optional) – User enforced efficiency.

  • iskinetic=False (bool, optional) – If True, Fermenation.kinetic_model will be used.

Notes

Either N or V must be given.

Examples

Simulate a Fermentation object which models batch fermentation for the production of 1st generation ethanol using yeast.

>>> from biorefineries.cane import create_sugarcane_chemicals
>>> from biosteam.units import Fermentation
>>> from biosteam import Stream, settings
>>> settings.set_thermo(create_sugarcane_chemicals())
>>> feed = Stream('feed',
...               Water=1.20e+05,
...               Glucose=1.89e+03,
...               Sucrose=2.14e+04,
...               DryYeast=1.03e+04,
...               units='kg/hr',
...               T=32+273.15)
>>> F1 = Fermentation('F1',
...                   ins=feed, outs=('CO2', 'product'),
...                   tau=8, efficiency=0.90, N=8)
>>> F1.simulate()
>>> F1.show()
Fermentation: F1
ins...
[0] feed
    phase: 'l', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): Water    6.66e+03
                    Glucose  10.5
                    Sucrose  62.5
                    Yeast    456
outs...
[0] CO2
    phase: 'g', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): Water    9.95
                    Ethanol  3.71
                    CO2      244
[1] product
    phase: 'l', T: 305.15 K, P: 101325 Pa
    flow (kmol/hr): Water    6.59e+03
                    Ethanol  240
                    Glucose  4.07
                    Yeast    532
>>> F1.results()
Fermentation                                       Units        F1
Electricity         Power                             kW      66.6
                    Cost                          USD/hr       5.2
Chilled water       Duty                           kJ/hr -1.41e+07
                    Flow                         kmol/hr  9.42e+03
                    Cost                          USD/hr      70.3
Design              Reactor volume                    m3       247
                    Batch time                        hr      12.6
                    Loading time                      hr      1.57
                    Number of reactors                           8
                    Recirculation flow rate        m3/hr      17.7
                    Reactor duty                   kJ/hr -1.41e+07
                    Cleaning and unloading time       hr         3
                    Working volume fraction                    0.9
Purchase cost       Heat exchangers (x8)             USD  1.57e+05
                    Reactors (x8)                    USD  1.87e+06
                    Agitators (x8)                   USD  1.17e+05
                    Cleaning in place                USD  8.89e+04
                    Recirculation pumps (x8)         USD  1.26e+05
Total purchase cost                                  USD  2.36e+06
Utility cost                                      USD/hr      75.5
>>> F1.results()
Fermentation                                       Units        F1
Electricity         Power                             kW      66.6
                    Cost                          USD/hr       5.2
Chilled water       Duty                           kJ/hr -1.41e+07
                    Flow                         kmol/hr  9.42e+03
                    Cost                          USD/hr      70.3
Design              Reactor volume                    m3       247
                    Batch time                        hr      12.6
                    Loading time                      hr      1.57
                    Number of reactors                           8
                    Recirculation flow rate        m3/hr      17.7
                    Reactor duty                   kJ/hr -1.41e+07
                    Cleaning and unloading time       hr         3
                    Working volume fraction                    0.9
Purchase cost       Heat exchangers (x8)             USD  1.57e+05
                    Reactors (x8)                    USD  1.87e+06
                    Agitators (x8)                   USD  1.17e+05
                    Cleaning in place                USD  8.89e+04
                    Recirculation pumps (x8)         USD  1.26e+05
Total purchase cost                                  USD  2.36e+06
Utility cost                                      USD/hr      75.5

References

line: str = 'Fermentation'#

class-attribute Name denoting the type of Unit class. Defaults to the class name of the first child class

kinetic_constants = (0.31, 1.01, 1.88, 2.81, 82.8, 108.2, 113.4, 0.45, 0.18)#

tuple[float] Kinetic parameters for the kinetic model. Default constants are fitted for Oliveria’s model (mu_m1, mu_m2, Ks1, Ks2, Pm1, Pm2, Xm, Y_PS, a)

static kinetic_model(z, t, *kinetic_constants)[source]#

Return change of yeast, ethanol, and substrate concentration in kg/m3.

Parameters:
  • z (Iterable with (X, E, S) [-]:) –

    • X: Yeast concentration (kg/m3)

    • P: Ethanol concentration (kg/m3)

    • S: Substrate concentration (kg/m3)

  • t (float) – Time point

  • *kinetic_constants

    • mu_m1: Maximum specific growth rate (1/hr)

    • mu_m2: Maximum specific ethanol production rate (g-product/g-cell-hr)

    • Ks1: Sugar saturation constant for growth (g/L)

    • Ks2: Sugar saturation constant for product (g/L)

    • Pm1: Maximum product concentration at zero growth [mu_m1=0] (g/L)

    • Pm2: Maximum product concentration [mu_m2=0] (g/L)

    • Xm: Maximum cell concentration [mu_m1=0] (g/L)

    • Y_PS: Ethanol yield based on sugar consumed

    • a: Toxic power

heat_utilities: list[HeatUtility, ...]#

All heat utilities associated to unit. Cooling and heating requirements are stored here (including auxiliary requirements).

power_utility: PowerUtility#

Electric utility associated to unit (including auxiliary requirements).

F_BM: dict[str, float]#

All bare-module factors for each purchase cost. Defaults to values in the class attribute _F_BM_default.

F_D: dict[str, float]#

All design factors for each purchase cost item in baseline_purchase_costs.

F_P: dict[str, float]#

All pressure factors for each purchase cost item in baseline_purchase_costs.

F_M: dict[str, float]#

All material factors for each purchase cost item in baseline_purchase_costs.

design_results: dict[str, object]#

All design requirements excluding utility requirements and detailed auxiliary unit requirements.

baseline_purchase_costs: dict[str, float]#

All baseline purchase costs without accounting for design, pressure, and material factors.

purchase_costs: dict[str, float]#

Itemized purchase costs (including auxiliary units) accounting for design, pressure, and material factors (i.e., F_D, F_P, F_M). Items here are automatically updated at the end of unit simulation.

installed_costs: dict[str, float]#

All installed costs accounting for bare module, design, pressure, and material factors. Items here are automatically updated at the end of unit simulation.

equipment_lifetime: int | dict[str, int]#

Lifetime of equipment. Defaults to values in the class attribute _default_equipment_lifetime. Use an integer to specify the lifetime for all items in the unit purchase costs. Use a dictionary to specify the lifetime of each purchase cost item.

run_after_specifications: bool#

Whether to run mass and energy balance after calling specification functions

prioritize: bool#

Whether to prioritize unit operation specification within recycle loop (if any).

parallel: dict[str, int]#

Name-number pairs of baseline purchase costs and auxiliary unit operations in parallel. Use ‘self’ to refer to the main unit. Capital and heat and power utilities in parallel will become proportional to this value.

responses: set[GenericResponse]#

Unit design decisions that must be solved to satisfy specifications. While adding responses is optional, simulations benefit from responses by being able to predict better guesses.