Modified ADM1 Property Package

This package is an extension of the base Anaerobic Digestion Model no.1 (ADM1) and implements properties and reactions of an anaerobic digestion model for wastewater treatment using an anaerobic digester as provided in Batstone, D. J. et al. (2002) and Rosen and Jeppsson (2006).

Throughout this documentation, text in red has been removed in the Modified ADM1 model, text in lime has been added, and text in blue has been modified from its base ADM1 implementation.

The following modifications have been made to the base ADM1 model as provided in Flores-Alsina, X. et al. (2016):
  • tracks inorganic phosphorus (S_IP), polyhydroxyalkanoates (X_PHA), polyphosphates (X_PP), phosphorus accumulating organisms (X_PAO), potassium (S_K), and magnesium (S_Mg)

  • removes the composite material variable (X_C) and the associated disintegration reaction

  • adds 7 additional reactions

This modified ADM1 property/reaction package:
  • supports ‘H2O’, ‘S_su’, ‘S_aa’, ‘S_fa’, ‘S_va’, ‘S_bu’, ‘S_pro’, ‘S_ac’, ‘S_h2’, ‘S_ch4’, ‘S_IC’, ‘S_IN’, ‘S_IP’, ‘S_I’, ‘X_ch’, ‘X_pr’, ‘X_li’, ‘X_su’, ‘X_aa’, ‘X_fa’, ‘X_c4’, ‘X_pro’, ‘X_ac’, ‘X_h2’, ‘X_I’, ‘X_PHA’, ‘X_PP’, ‘X_PAO’, ‘S_K’, ‘S_Mg’, ‘S_cat’, ‘S_an’, and ‘S_co2’ as components

  • supports only liquid and vapor phase

  • only makes changes to the liquid phase modelling

Sets

Description

Symbol

Indices

Components

\(j\)

[‘H2O’, ‘S_su’, ‘S_aa’, ‘S_fa’, ‘S_va’, ‘S_bu’, ‘S_pro’, ‘S_ac’, ‘S_h2’, ‘S_ch4’, ‘S_IC’, ‘S_IN’, ‘S_IP’, ‘S_I’, ‘X_ch’, ‘X_pr’, ‘X_li’, ‘X_su’, ‘X_aa’, ‘X_fa’, ‘X_c4’, ‘X_pro’, ‘X_ac’, ‘X_h2’, ‘X_I’, ‘X_PHA’, ‘X_PP’, ‘X_PAO’, ‘S_K’, ‘S_Mg’, ‘S_cat’, ‘S_an’, ‘S_co2’]

Phases

\(p\)

[‘Liq’, ‘Vap’]

Components

Red text indicates the component has been removed in the Modified ADM1 model, and lime text indicates the component has been added.

Description

Symbol

Variable

Monosaccharides, S_su

\(S_{su}\)

S_su

Amino acids, S_aa

\(S_{aa}\)

S_aa

Long chain fatty acids, S_fa

\(S_{fa}\)

S_fa

Total valerate, S_va

\(S_{va}\)

S_va

Total butyrate, S_bu

\(S_{bu}\)

S_bu

Total propionate, S_pro

\(S_{pro}\)

S_pro

Total acetate, S_ac

\(S_{ac}\)

S_ac

Hydrogen gas, S_h2

\(S_{h2}\)

S_h2

Methane gas, S_ch4

\(S_{ch4}\)

S_ch4

Inorganic carbon, S_IC

\(S_{IC}\)

S_IC

Inorganic nitrogen, S_IN

\(S_{IN}\)

S_IN

Inorganic phosphorus, S_IP

\(S_{IP}\)

S_IP

Soluble inerts, S_I

\(S_I\)

S_I

Composites, X_c

\(X_c\)

X_c

Carbohydrates, X_ch

\(X_{ch}\)

X_ch

Proteins, X_pr

\(X_{pr}\)

X_pr

Lipids, X_li

\(X_{li}\)

X_li

Sugar degraders, X_su

\(X_{su}\)

X_su

Amino acid degraders, X_aa

\(X_{aa}\)

X_aa

Long chain fatty acid (LCFA) degraders, X_fa

\(X_{fa}\)

X_fa

Valerate and butyrate degraders, X_c4

\(X_{c4}\)

X_c4

Propionate degraders, X_pro

\(X_{pro}\)

X_pro

Acetate degraders, X_ac

\(X_{ac}\)

X_ac

Hydrogen degraders, X_h2

\(X_{h2}\)

X_h2

Particulate inerts, X_I

\(X_I\)

X_I

Polyhydroxyalkanoates, X_PHA

\(X_{PHA}\)

X_PHA

Polyphosphates, X_PP

\(X_{PP}\)

X_PP

Phosphorus accumulating organisms, X_PAO

\(X_{PAO}\)

X_PAO

Potassium, S_K

\(S_K\)

S_K

Magnesium, S_Mg

\(S_{Mg}\)

S_Mg

Total cation equivalents concentration, S_cat

\(S_{cat}\)

S_cat

Total anion equivalents concentration, S_an

\(S_{an}\)

S_an

Carbon dioxide, S_co2

\(S_{co2}\)

S_co2

NOTE: S_h2 and S_ch4 have vapor phase and liquid phase, S_co2 only has vapor phase, and the other components only have liquid phase. The amount of CO2 dissolved in the liquid phase is equivalent to S_IC - S_HCO3-.

State variables

Description

Symbol

Variable

Index

Units

Total volumetric flowrate

\(Q\)

flow_vol

None

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

Temperature

\(T\)

temperature

None

\(\text{K}\)

Pressure

\(P\)

pressure

None

\(\text{Pa}\)

Component mass concentrations

\(C_j\)

conc_mass_comp

[j]

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

Anions in molar concentrations

\(M_a\)

anions

None

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

Cations in molar concentrations

\(M_c\)

cations

None

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

Component carbon content

\(Ci\)

Ci_dict

[j]

\(\text{kmol/}\text{kg}\)

Component nitrogen content

\(Ni\)

Ni_dict

[j]

\(\text{kmol/}\text{kg}\)

Component phosphorus content

\(Pi\)

Pi_dict

[j]

\(\text{kmol/}\text{kg}\)

Component pressure

\(P_{j,sat}\)

pressure_sat

[j]

\(\text{Pa}\)

Reference temperature

\(T_{ref}\)

temperature_ref

None

\(\text{K}\)

Reference component mass concentrations

\(C_{j,ref}\)

conc_mass_comp_ref

[j]

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

Stoichiometric Parameters

Red text indicates the parameter has been removed in the Modified ADM1 model, and lime text indicates the parameter has been added.

Description

Symbol

Parameter

Value at 20 C

Units

Soluble inerts from composites, f_sI_xc

\(f_{sI,xc}\)

f_sI_xc

0.1

\(\text{dimensionless}\)

Particulate inerts from composites, f_xI_xc

\(f_{xI,xc}\)

f_xI_xc

0.2

\(\text{dimensionless}\)

Carbohydrates from composites, f_ch_xc

\(f_{ch,xc}\)

f_ch_xc

0.2

\(\text{dimensionless}\)

Proteins from composites, f_pr_xc

\(f_{pr,xc}\)

f_pr_xc

0.2

\(\text{dimensionless}\)

Lipids from composites, f_li_xc

\(f_{li,xc}\)

f_li_xc

0.3

\(\text{dimensionless}\)

Nitrogen content of composites, N_xc

\(N_{xc}\)

N_xc

0.0376/14

\(\text{kmol-N/}\text{kg-COD}\)

Nitrogen content of inerts, N_I

\(N_I\)

N_I

0.06/14

\(\text{kmol-N/}\text{kg-COD}\)

Nitrogen in amino acids and proteins, N_aa

\(N_{aa}\)

N_aa

0.007

\(\text{kmol-N/}\text{kg-COD}\)

Nitrogen content in bacteria, N_bac

\(N_{bac}\)

N_bac

0.08/14

\(\text{kmol-N/}\text{kg-COD}\)

Reference component mass concentration of hydrogen sulfide, Z_h2s

\(Z_{h2s}\)

Z_h2s

0

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

Fraction of inert particulate organics from biomass, f_xi_xb

\(f_{xi,xb}\)

f_xi_xb

0.1

\(\text{dimensionless}\)

Fraction of carbohydrates from biomass, f_ch_xb

\(f_{ch,xb}\)

f_ch_xb

0.275

\(\text{dimensionless}\)

Fraction of lipids from biomass, f_li_xb

\(f_{li,xb}\)

f_li_xb

0.35

\(\text{dimensionless}\)

Fraction of proteins from biomass, f_pr_xb

\(f_{pr,xb}\)

f_pr_xb

0.275

\(\text{dimensionless}\)

Fraction of soluble inerts from biomass, f_si_xb

\(f_{si,xb}\)

f_si_xb

0

\(\text{dimensionless}\)

Fatty acids from lipids, f_fa_li

\(f_{fa,li}\)

f_fa_li

0.95

\(\text{dimensionless}\)

Hydrogen from sugars, f_h2_su

\(f_{h2,su}\)

f_h2_su

0.19

\(\text{dimensionless}\)

Butyrate from sugars, f_bu_su

\(f_{bu,su}\)

f_bu_su

0.13

\(\text{dimensionless}\)

Propionate from sugars, f_pro_su

\(f_{pro,su}\)

f_pro_su

0.27

\(\text{dimensionless}\)

Acetate from sugars, f_ac_su

\(f_{ac,su}\)

f_ac_su

0.41

\(\text{dimensionless}\)

Hydrogen from amino acids, f_h2_aa

\(f_{h2,aa}\)

f_h2_aa

0.06

\(\text{dimensionless}\)

Valerate from amino acids, f_va_aa

\(f_{va,aa}\)

f_va_aa

0.23

\(\text{dimensionless}\)

Butyrate from amino acids, f_bu_aa

\(f_{bu,aa}\)

f_bu_aa

0.26

\(\text{dimensionless}\)

Propionate from amino acids, f_pro_aa

\(f_{pro,aa}\)

f_pro_aa

0.05

\(\text{dimensionless}\)

Acetate from amino acids, f_ac_aa

\(f_{ac,aa}\)

f_ac_aa

0.4

\(\text{dimensionless}\)

Yield of biomass on sugar substrate, Y_su

\(Y_{su}\)

Y_su

0.1

\(\text{kg-COD X/}\text{kg-COD S}\)

Yield of biomass on amino acid substrate, Y_aa

\(Y_{aa}\)

Y_aa

0.08

\(\text{kg-COD X/}\text{kg-COD S}\)

Yield of biomass on fatty acid substrate, Y_fa

\(Y_{fa}\)

Y_fa

0.06

\(\text{kg-COD X/}\text{kg-COD S}\)

Yield of biomass on valerate and butyrate substrate, Y_c4

\(Y_{c4}\)

Y_c4

0.06

\(\text{kg-COD X/}\text{kg-COD S}\)

Yield of biomass on propionate substrate, Y_pro

\(Y_{pro}\)

Y_pro

0.04

\(\text{kg-COD X/}\text{kg-COD S}\)

Yield of biomass on acetate substrate, Y_ac

\(Y_{ac}\)

Y_ac

0.05

\(\text{kg-COD X/}\text{kg-COD S}\)

Yield of hydrogen per biomass, Y_h2

\(Y_{h2}\)

Y_h2

0.06

\(\text{kg-COD X/}\text{kg-COD S}\)

Kinetic Parameters

Red text indicates the parameter has been removed in the Modified ADM1 model, and lime text indicates the parameter has been added.

Description

Symbol

Parameter

Value at 20 C

Units

First-order kinetic parameter for disintegration, k_dis

\(k_{dis}\)

k_dis

0.5

\(\text{d}^{-1}\)

First-order kinetic parameter for hydrolysis of carbohydrates, k_hyd_ch

\(k_{hyd,ch}\)

k_hyd_ch

10

\(\text{d}^{-1}\)

First-order kinetic parameter for hydrolysis of proteins, k_hyd_pr

\(k_{hyd,pr}\)

k_hyd_pr

10

\(\text{d}^{-1}\)

First-order kinetic parameter for hydrolysis of lipids, k_hyd_li

\(k_{hyd,li}\)

k_hyd_li

10

\(\text{d}^{-1}\)

Water dissociation constant, pK_W

\(pK_W\)

pKW

14

\(\text{dimensionless}\)

Process inhibition term, I

\(I\)

I

1

\(\text{dimensionless}\)

Inhibition parameter for inorganic nitrogen, K_S_IN

\(K_{S_{IN}}\)

K_S_IN

1e-4

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

Monod maximum specific uptake rate of sugars, k_m_su

\(k_{m_{su}}\)

k_m_su

30

\(\text{d}^{-1}\)

Half saturation value for uptake of sugars, K_S_su

\(K_{S_{su}}\)

K_S_su

0.5

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

Upper limit of pH for uptake rate of amino acids, pH_UL_aa

\(pH_{UL,aa}\)

pH_UL_aa

5.5

\(\text{dimensionless}\)

Lower limit of pH for uptake rate of amino acids, pH_LL_aa

\(pH_{LL,aa}\)

pH_LL_aa

4

\(\text{dimensionless}\)

Monod maximum specific uptake rate of amino acids, k_m_aa

\(k_{m_{aa}}\)

k_m_aa

50

\(\text{d}^{-1}\)

Half saturation value for uptake of amino acids, K_S_aa

\(K_{S_{aa}}\)

K_S_aa

0.3

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

Monod maximum specific uptake rate of fatty acids, k_m_fa

\(k_{m_{fa}}\)

k_m_fa

6

\(\text{d}^{-1}\)

Half saturation value for uptake of fatty acids, K_S_fa

\(K_{S_{fa}}\)

K_S_fa

0.4

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

Inhibition parameter for hydrogen during uptake of fatty acids, K_I_h2_fa

\(K_{I,h2_{fa}}\)

K_I_h2_fa

5e-6

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

Monod maximum specific uptake rate of valerate and butyrate, k_m_c4

\(k_{m_{c4}}\)

k_m_c4

20

\(\text{d}^{-1}\)

Half saturation value for uptake of valerate and butyrate, K_S_c4

\(K_{S_{c4}}\)

K_S_c4

0.2

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

Inhibition parameter for hydrogen during uptake of valerate and butyrate, K_I_h2_c4

\(K_{I,h2_{c4}}\)

K_I_h2_c4

1e-5

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

Monod maximum specific uptake rate of propionate, k_m_pro

\(k_{m_{pro}}\)

k_m_pro

13

\(\text{d}^{-1}\)

Half saturation value for uptake of propionate, K_S_pro

\(K_{S_{pro}}\)

K_S_pro

0.1

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

Inhibition parameter for hydrogen during uptake of propionate, K_I_h2_pro

\(K_{I,h2_{pro}}\)

K_I_h2_pro

3.5e-6

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

Monod maximum specific uptake rate of acetate, k_m_ac

\(k_{m_{ac}}\)

k_m_ac

8

\(\text{d}^{-1}\)

Half saturation value for uptake of acetate, K_S_ac

\(K_{S_{ac}}\)

K_S_ac

0.15

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

Inhibition parameter for ammonia during uptake of acetate, K_I_nh3

\(K_{I,nh3}\)

K_I_nh3

0.0018

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

Upper limit of pH for uptake rate of acetate, pH_UL_ac

\(pH_{UL,ac}\)

pH_UL_ac

7

\(\text{dimensionless}\)

Lower limit of pH for uptake rate of acetate, pH_LL_ac

\(pH_{LL,ac}\)

pH_LL_ac

6

\(\text{dimensionless}\)

Monod maximum specific uptake rate of hydrogen, k_m_h2

\(k_{m_{h2}}\)

k_m_h2

35

\(\text{d}^{-1}\)

Half saturation value for uptake of hydrogen, K_S_h2

\(K_{S_{h2}}\)

K_S_h2

7e-6

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

Upper limit of pH for uptake rate of hydrogen, pH_UL_h2

\(pH_{UL,h2}\)

pH_UL_h2

6

\(\text{dimensionless}\)

Lower limit of pH for uptake rate of hydrogen, pH_LL_h2

\(pH_{LL,h2}\)

pH_LL_h2

5

\(\text{dimensionless}\)

First-order decay rate for X_su, k_dec_X_su

\(k_{dec,X_{su}}\)

k_dec_X_su

0.02

\(\text{d}^{-1}\)

First-order decay rate for X_aa, k_dec_X_aa

\(k_{dec,X_{aa}}\)

k_dec_X_aa

0.02

\(\text{d}^{-1}\)

First-order decay rate for X_fa, k_dec_X_fa

\(k_{dec,X_{fa}}\)

k_dec_X_fa

0.02

\(\text{d}^{-1}\)

First-order decay rate for X_c4, k_dec_X_c4

\(k_{dec,X_{c4}}\)

k_dec_X_c4

0.02

\(\text{d}^{-1}\)

First-order decay rate for X_pro, k_dec_X_pro

\(k_{dec,X_{pro}}\)

k_dec_X_pro

0.02

\(\text{d}^{-1}\)

First-order decay rate for X_ac, k_dec_X_ac

\(k_{dec,X_{ac}}\)

k_dec_X_ac

0.02

\(\text{d}^{-1}\)

First-order decay rate for X_h2, k_dec_X_h2

\(k_{dec,X_{h2}}\)

k_dec_X_h2

0.02

\(\text{d}^{-1}\)

Valerate acid-base equilibrium constant, K_a_va

\(K_{a,va}\)

K_a_va

1.38e-5

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

Butyrate acid-base equilibrium constant, K_a_bu

\(K_{a,bu}\)

K_a_bu

1.5e-5

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

Propionate acid-base equilibrium constant, K_a_pro

\(K_{a,pro}\)

K_a_bu

1.32e-5

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

Acetate acid-base equilibrium constant, K_a_ac

\(K_{a,ac}\)

K_a_ac

1.74e-5

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

50% inhibitory concentration of H2S on acetogens, K_I_h2s_ac

\(K_{I,h2s_{ac}}\)

K_I_h2s_ac

460e-3

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

50% inhibitory concentration of H2S on c4 degraders, K_I_h2s_c4

\(K_{I,h2s_{c4}}\)

K_I_h2s_c4

481e-3

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

50% inhibitory concentration of H2S on hydrogenotrophic methanogens, K_I_h2s_h2

\(K_{I,h2s_{h2}}\)

K_I_h2s_h2

481e-3

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

50% inhibitory concentration of H2S on propionate degraders, K_I_h2s_pro

\(K_{I,h2s_{pro}}\)

K_I_h2s_pro

481e-3

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

Phosphorus limitation for inorganic phosphorus, K_S_IP

\(K_{s,IP}\)

K_S_IP

2e-5

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

Lysis rate of phosphorus accumulating organisms, b_PAO

\(b_{PAO}\)

b_PAO

0.2

\(\text{d}^{-1}\)

Lysis rate of polyhydroxyalkanoates, b_PHA

\(b_{PHA}\)

b_PHA

0.2

\(\text{d}^{-1}\)

Lysis rate of polyphosphates, b_PP

\(b_{PP}\)

b_PP

0.2

\(\text{d}^{-1}\)

Yield of acetate on polyhydroxyalkanoates, f_ac_PHA

\(f_{ac,PHA}\)

f_ac_PHA

0.4

\(\text{dimensionless}\)

Yield of butyrate on polyhydroxyalkanoates, f_bu_PHA

\(f_{bu,PHA}\)

f_bu_PHA

0.1

\(\text{dimensionless}\)

Yield of propionate on polyhydroxyalkanoates, f_pro_PHA

\(f_{pro,PHA}\)

f_pro_PHA

0.4

\(\text{dimensionless}\)

Yield of valerate on polyhydroxyalkanoates, f_va_PHA

\(f_{va,PHA}\)

f_va_PHA

0.1

\(\text{dimensionless}\)

Saturation coefficient for acetate, K_A

\(K_{A}\)

K_A

4e-3

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

Saturation coefficient for polyphosphate, K_PP

\(K_{PP}\)

k_PP

0.32e-3

\(\text{dimensionless}\)

Rate constant for storage of polyhydroxyalkanoates, q_PHA

\(q_{PHA}\)

q_PHA

3

\(\text{d}^{-1}\)

Yield of biomass on phosphate (kmol P/kg COD), Y_PO4

\(Y_{PO4}\)

Y_PO4

12.903e-3

\(\text{dimensionless}\)

Potassium coefficient for polyphosphates, K_PP

\(K_{PP}\)

K_PP

1/3

\(\text{dimensionless}\)

Magnesium coefficient for polyphosphates, Mg_PP

\(Mg_{PP}\)

Mg_PP

1/3

\(\text{dimensionless}\)

Carbon dioxide acid-base equilibrium constant, pK_a_co2

\(pK_{a,co2}\)

pK_a_co2

6.35

\(\text{dimensionless}\)

Inorganic nitrogen acid-base equilibrium constant, pK_a_IN

\(pK_{a,IN}\)

pK_a_IN

9.25

\(\text{dimensionless}\)

Properties

Description

Symbol

Variable

Index

Units

Fluid specific heat capacity

\(c_p\)

cp

None

\(\text{J/kg/K}\)

Mass density

\(\rho\)

dens_mass

[p]

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

Process Rate Equations

Red text indicates the equation has been removed in the Modified ADM1 model, lime text indicates the equation has been added, and blue text indicates the equation has been modified from its base ADM1 implementation.

Description

Equation

Disintegration

\(\rho_1 = k_{dis} C_{X_c}\)

Hydrolysis of carbohydrates

\(\rho_1 = k_{hyd,ch} C_{X_{ch}}\)

Hydrolysis of proteins

\(\rho_2 = k_{hyd,pr} C_{X_{pr}}\)

Hydrolysis of lipids

\(\rho_3 = k_{hyd,li} C_{X_{li}}\)

Uptake of sugars

\(\rho_4 = k_{m_{su}} \frac{C_{S_{su}}}{K_{S_{su}}+C_{S_{su}}} C_{X_{su}} \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,aa}\)

Uptake of amino acids

\(\rho_5 = k_{m_{aa}} \frac{C_{S_{aa}}}{K_{S_{aa}}+C_{S_{aa}}} C_{X_{aa}} \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,aa}\)

Uptake of long chain fatty acids (LCFAs)

\(\rho_6 = k_{m_{fa}} \frac{C_{S_{fa}}}{K_{S_{fa}}+C_{S_{fa}}} C_{X_{fa}} \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + C_{S_{h2}}/K_{I,h2_{fa}}} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,aa}\)

Uptake of valerate

\(\rho_7 = k_{m_{c4}} \frac{C_{S_{va}}}{K_{S_{c4}}+C_{S_{va}}} C_{X_{c4}} \frac{C_{S_{va}}}{C_{S_{bu}} + C_{S_{va}}} \cdot \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + C_{S_{h2}}/K_{I,h2_{c4}}} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,aa} I_{h2s, c4}\)

Uptake of butyrate

\(\rho_8 = k_{m_{c4}} \frac{C_{S_{bu}}}{K_{S_{c4}}+C_{S_{bu}}} C_{X_{c4}} \frac{C_{S_{bu}}}{C_{S_{bu}} + C_{S_{va}}} \cdot \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + C_{S_{h2}}/K_{I,h2_{c4}}} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,aa} I_{h2s, c4}\)

Uptake of propionate

\(\rho_9 = k_{m_{pro}} \frac{C_{S_{pro}}}{K_{S_{pro}}+C_{S_{pro}}} C_{X_{pro}} \cdot \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + C_{S_{h2}}/K_{I,h2_{pro}}} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,aa} I_{h2s, pro}\)

Uptake of acetate

\(\rho_{10} = k_{m_{ac}} \frac{C_{S_{ac}}}{K_{S_{ac}}+C_{S_{ac}}} C_{X_{ac}} \cdot \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + C_{NH3}/K_{I,nh3}} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,ac} I_{h2s, ac}\)

Uptake of hydrogen

\(\rho_{11} = k_{m_{h2}} \frac{C_{S_{h2}}}{K_{S_{h2}}+C_{S_{h2}}} C_{X_{h2}} \cdot \frac{1}{1 + K_{S_{IN}}/C_{S_{IN}}/14} \cdot \frac{1}{1 + K_{S_{IP}}/C_{S_{IP}}/31} I_{pH,h2} I_{h2s, h2}\)

Decay of X_su

\(\rho_{12} = k_{dec, X_{su}} C_{X_{su}}\)

Decay of X_aa

\(\rho_{13} = k_{dec, X_{aa}} C_{X_{aa}}\)

Decay of X_fa

\(\rho_{14} = k_{dec, X_{fa}} C_{X_{fa}}\)

Decay of X_c4

\(\rho_{15} = k_{dec, X_{c4}} C_{X_{c4}}\)

Decay of X_pro

\(\rho_{16} = k_{dec, X_{pro}} C_{X_{pro}}\)

Decay of X_ac

\(\rho_{17} = k_{dec, X_{ac}} C_{X_{ac}}\)

Decay of X_h2

\(\rho_{18} = k_{dec, X_{h2}} C_{X_{h2}}\)

Storage of S_va in X_PHA

\(\rho_{19} = q_{PHA} \frac{C_{S_{va}}}{K_{A} + C_{S{va}}} \cdot \frac{C_{X_{PP}} / C_{X_{PAO}}}{K_{PP} + \frac{C_{X_{PP}}}{C_{X_{PAO}}}} C_{X_{PAO}} \frac{C_{S_{va}}}{C_{S_{va}} + C_{S_{bu}} + C_{S_{pro}} + C_{S_{ac}}}\)

Storage of S_bu in X_PHA

\(\rho_{20} = q_{PHA} \frac{C_{S_{bu}}}{K_{A} + C_{S{bu}}} \cdot \frac{C_{X_{PP}} / C_{X_{PAO}}}{K_{PP} + \frac{C_{X_{PP}}}{C_{X_{PAO}}}} C_{X_{PAO}} \frac{C_{S_{bu}}}{C_{S_{va}} + C_{S_{bu}} + C_{S_{pro}} + C_{S_{ac}}}\)

Storage of S_pro in X_PHA

\(\rho_{21} = q_{PHA} \frac{C_{S_{pro}}}{K_{A} + C_{S{pro}}} \cdot \frac{C_{X_{PP}} / C_{X_{PAO}}}{K_{PP} + \frac{C_{X_{PP}}}{C_{X_{PAO}}}} C_{X_{PAO}} \frac{C_{S_{pro}}}{C_{S_{va}} + C_{S_{bu}} + C_{S_{pro}} + C_{S_{ac}}}\)

Storage of S_ac in X_PHA

\(\rho_{22} = q_{PHA} \frac{C_{S_{ac}}}{K_{A} + C_{S{ac}}} \cdot \frac{C_{X_{PP}} / C_{X_{PAO}}}{K_{PP} + \frac{C_{X_{PP}}}{C_{X_{PAO}}}} C_{X_{PAO}} \frac{C_{S_{ac}}}{C_{S_{va}} + C_{S_{bu}} + C_{S_{pro}} + C_{S_{ac}}}\)

Lysis of X_PAO

\(\rho_{23} = b_{PAO} C_{X_{PAO}}\)

Lysis of X_PP

\(\rho_{24} = b_{PP} C_{X_{PP}}\)

Lysis of X_PHA

\(\rho_{25} = b_{PHA} C_{X_{PHA}}\)

Additional Variables

Description

Symbol

Parameter

Value at 20 C

Units

pH of solution

\(pH\)

pH

7

\(\text{dimensionless}\)

Mass concentration of valerate, va-

\(C_{va}\)

conc_mass_va

0.011

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

Mass concentration of butyrate, bu-

\(C_{bu}\)

conc_mass_bu

0.013

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

Mass concentration of propionate, pro-

\(C_{pro}\)

conc_mass_pro

0.016

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

Mass concentration of acetate, ac-

\(C_{ac}\)

conc_mass_ac

0.2

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

Molar concentration of bicarbonate, HCO3

\(M_{hco3}\)

conc_mol_hco3

0.14

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

Molar concentration of ammonia, NH3

\(M_{nh3}\)

conc_mol_nh3

0.0041

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

Molar concentration of carbon dioxide, CO2

\(M_{co2}\)

conc_mol_co2

0.0099

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

Molar concentration of ammonium, NH4

\(M_{nh4}\)

conc_mol_nh4

0.1261

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

Molar concentration of magnesium, Mg

\(M_{Mg}\)

conc_mol_Mg

4.5822e-5

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

Molar concentration of potassium, K

\(M_{K}\)

conc_mol_K

0.010934

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

Additional Constraints

Lime text indicates the equation has been added, and blue text indicates the equation has been modified from its base ADM1 implementation.

Description

Equation

Water dissociation constant constraint

\(log(10^{-pK_{W}}) = log(10^{-14}) + (\frac{55900}{R} * (\frac{1}{T_{ref}} - \frac{1}{T}))\)

CO2 acid-base equilibrium constraint

\(log(10^{-pK_{a,co2}}) = log(10^{-6.35}) + (\frac{7646}{R} * (\frac{1}{T_{ref}} - \frac{1}{T}))\)

Nitrogen acid-base equilibrium constraint

\(log(10^{-pK_{a,IN}}) = log(10^{-9.25}) + (\frac{51965}{R} * (\frac{1}{T_{ref}} - \frac{1}{T}))\)

pH of solution

\(pH = -log(S_{H})\)

Mass concentration of valerate, va-

\(C_{va,ref} = C_{va} (1 + \frac{S_{H}}{K_{a,va}})\)

Mass concentration of butyrate, bu-

\(C_{bu,ref} = C_{bu} (1 + \frac{S_{H}}{K_{a,bu}})\)

Mass concentration of propionate, pro-

\(C_{pro,ref} = C_{pro} (1 + \frac{S_{H}}{K_{a,pro}})\)

Mass concentration of acetate, ac-

\(C_{ac,ref} = C_{ac} (1 + \frac{S_{H}}{K_{a,ac}})\)

Molar concentration of bicarbonate, HCO3

\(pK_{a,co2} = log(M_{co2}) - log(M_{hco3}) + pH\)

Molar concentration of ammonia, NH3

\(pK_{a,IN} = log(M_{nh4}) - log(M_{nh3}) + pH\)

Molar concentration of carbon dioxide, CO2

\(M_{co2} = \frac{C_{S_{IC},ref}}{12} - M_{hco3}\)

Molar concentration of ammonium, NH4+

\(M_{nh4} = \frac{C_{S_{IN},ref}}{14} - M_{nh3}\)

Molar concentration of hydrogen, H+

\(S_{H} = M_{hco3} + \frac{C_{ac}}{64} + \frac{C_{pro}}{112} + \frac{C_{bu}}{160} + \frac{C_{va}}{208} + 10^{pH - pK_{W}} + M_{a} - M_{c} - M_{nh4} - M_{Mg} - M_{K}\)

Molar concentration of magnesium, Mg

\(M_{Mg} = \frac{C_{X_{PP},ref}}{300.41}\)

Molar concentration of potassium, K

\(M_{K} = \frac{C_{X_{PP},ref}}{300.41}\)

The rules for inhibition of amino-acid-utilizing microorganisms (\(I_{pH,aa}\)), acetate-utilizing microorganisms (\(I_{pH,ac}\)), hydrogen-utilizing microorganisms (\(I_{pH,h2}\)) are:

\[ \begin{align}\begin{aligned}\begin{split}I_{pH,aa}= \begin{cases} \exp{(-3 (\frac{pH - pH_{UL,aa}}{pH_{UL,aa} - pH_{LL,aa}})^2)} & \text{for } pH \le pH_{UL,aa}\\ 1 & \text{for } pH > pH_{UL,aa} \end{cases}\end{split}\\\begin{split}I_{pH,ac}= \begin{cases} \exp{(-3 (\frac{pH - pH_{UL,ac}}{pH_{UL,ac} - pH_{LL,ac}})^2)} & \text{for } pH \le pH_{UL,ac}\\ 1 & \text{for } pH > pH_{UL,ac} \end{cases}\end{split}\\\begin{split}I_{pH,h2}= \begin{cases} \exp{(-3 (\frac{pH - pH_{UL,h2}}{pH_{UL,h2} - pH_{LL,h2}})^2)} & \text{for } pH \le pH_{UL,h2}\\ 1 & \text{for } pH > pH_{UL,h2} \end{cases}\end{split}\end{aligned}\end{align} \]

The rules for inhibition related to secondary substrate (\(I_{IN,lim}\)), hydrogen inhibition attributed to long chain fatty acids (\(I_{h2,fa}\)), hydrogen inhibition attributed to valerate and butyrate uptake (\(I_{h2,c4}\)), hydrogen inhibition attributed to propionate uptake (\(I_{h2,pro}\)), ammonia inibition attributed to acetate uptake (\(I_{nh3}\)), are:

\[ \begin{align}\begin{aligned}I_{IN,lim} = \frac{1}{1 + \frac{K_{S_{IN}}}{C_{S_{IN}}/14}}\\I_{h2, fa}= \frac{1}{1 + \frac{C_{S_{h2}}}{K_{I,h2,fa}}}\\I_{h2, c4}= \frac{1}{1 + \frac{C_{S_{h2}}}{K_{I,h2,c4}}}\\I_{h2, pro}= \frac{1}{1 + \frac{C_{S_{h2}}}{K_{I,h2,pro}}}\\I_{nh3}= \frac{1}{1 + \frac{M_{nh3}}{K_{I,nh3}}}\end{aligned}\end{align} \]

The rules for hydrogen sulfide inhibition factors are shown below; however, since \(Z_{h2s}\) is assumed to be 0, all of these inhibition factors are negligible.

\[ \begin{align}\begin{aligned}I_{h2s, ac} = \frac{1}{1 + \frac{Z_{h2s}}{K_{I,h2s,ac}}}\\I_{h2s, c4}= \frac{1}{1 + \frac{Z_{h2s}}{K_{I,h2s,c4}}}\\I_{h2s, h2}= \frac{1}{1 + \frac{Z_{h2s}}{K_{I,h2s,h2}}}\\I_{h2s, pro}= \frac{1}{1 + \frac{Z_{h2s}}{K_{I,h2s,pro}}}\end{aligned}\end{align} \]

Class Documentation

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_properties.ModifiedADM1ParameterBlock(*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

    default_arguments

    Default arguments to use with Property Package

  • 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:

(ModifiedADM1ParameterBlock) New instance

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_properties.ModifiedADM1ParameterData(component)[source]

Property Parameter Block Class

build()[source]

Callable method for Block construction.

classmethod define_metadata(obj)[source]

Set all the metadata for properties and units.

This method should be implemented by subclasses. In the implementation, they should set information into the object provided as an argument.

Parameters:

pcm (PropertyClassMetadata) – Add metadata to this object.

Returns:

None

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_properties._ModifiedADM1StateBlock(*args, **kwds)[source]

This Class contains methods which should be applied to Property Blocks as a whole, rather than individual elements of indexed Property Blocks.

initialize(state_args=None, state_vars_fixed=False, hold_state=False, outlvl=0, solver=None, optarg=None)[source]

Initialization routine for property package.

Keyword Arguments:
  • state_args – Dictionary with initial guesses for the state vars chosen. Note that if this method is triggered through the control volume, and if initial guesses were not provided at the unit model level, the control volume passes the inlet values as initial guess.The keys for the state_args dictionary are:

  • flow_mol_comp – value at which to initialize component flows (default=None)

  • pressure – value at which to initialize pressure (default=None)

  • temperature – value at which to initialize temperature (default=None)

  • outlvl – sets output level of initialization routine

  • state_vars_fixed – Flag to denote if state vars have already been fixed. True - states have already been fixed and initialization does not need to worry about fixing and unfixing variables. False - states have not been fixed. The state block will deal with fixing/unfixing.

  • 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)

  • hold_state – flag indicating whether the initialization routine should unfix any state variables fixed during initialization (default=False). True - states variables are not unfixed, and a dict of returned containing flags for which states were fixed during initialization. False - state variables are unfixed after initialization by calling the release_state method.

Returns:

If hold_states is True, returns a dict containing flags for which states were fixed during initialization.

release_state(flags, outlvl=0)[source]

Method to release state variables fixed during initialization.

Keyword Arguments:
  • flags – dict containing information of which state variables were fixed during initialization, and should now be unfixed. This dict is returned by initialize if hold_state=True.

  • outlvl – sets output level of logging

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_properties.ModifiedADM1StateBlockData(*args, **kwargs)[source]

StateBlock for calculating thermophysical properties associated with the modified ADM1 reaction system.

build()[source]

Callable method for Block construction

define_display_vars()[source]

Method used to specify components to use to generate stream tables and other outputs. Defaults to define_state_vars, and developers should overload as required.

define_state_vars()[source]

Method that returns a dictionary of state variables used in property package. Implement a placeholder method which returns an Exception to force users to overload this.

get_energy_density_terms(p)[source]

Method which returns a valid expression for enthalpy density to use in the energy balances.

get_enthalpy_flow_terms(p)[source]

Method which returns a valid expression for enthalpy flow to use in the energy balances.

get_material_density_terms(p, j)[source]

Method which returns a valid expression for material density to use in the material balances .

get_material_flow_basis()[source]

Method which returns an Enum indicating the basis of the material flow term.

get_material_flow_terms(p, j)[source]

Method which returns a valid expression for material flow to use in the material balances.

class watertap.property_models.unit_specific.anaerobic_digestion.adm1_properties_vapor.ADM1_vaporParameterBlock(*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

    default_arguments

    Default arguments to use with Property Package

  • 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:

(ADM1_vaporParameterBlock) New instance

class watertap.property_models.unit_specific.anaerobic_digestion.adm1_properties_vapor.ADM1_vaporParameterData(component)[source]

Property Parameter Block Class

build()[source]

Callable method for Block construction.

classmethod define_metadata(obj)[source]

Set all the metadata for properties and units.

This method should be implemented by subclasses. In the implementation, they should set information into the object provided as an argument.

Parameters:

pcm (PropertyClassMetadata) – Add metadata to this object.

Returns:

None

class watertap.property_models.unit_specific.anaerobic_digestion.adm1_properties_vapor._ADM1_vaporStateBlock(*args, **kwds)[source]

This Class contains methods which should be applied to Property Blocks as a whole, rather than individual elements of indexed Property Blocks.

initialize(state_args=None, state_vars_fixed=False, hold_state=False, outlvl=0, solver=None, optarg=None)[source]

Initialization routine for property package.

Keyword Arguments:
  • state_args – Dictionary with initial guesses for the state vars chosen. Note that if this method is triggered through the control volume, and if initial guesses were not provided at the unit model level, the control volume passes the inlet values as initial guess.The keys for the state_args dictionary are:

  • flow_mol_comp – value at which to initialize component flows (default=None)

  • pressure – value at which to initialize pressure (default=None)

  • temperature – value at which to initialize temperature (default=None)

  • outlvl – sets output level of initialization routine

  • state_vars_fixed – Flag to denote if state vars have already been fixed. True - states have already been fixed and initialization does not need to worry about fixing and unfixing variables. False - states have not been fixed. The state block will deal with fixing/unfixing.

  • 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)

  • hold_state – flag indicating whether the initialization routine should unfix any state variables fixed during initialization (default=False). True - states variables are not unfixed, and a dict of returned containing flags for which states were fixed during initialization. False - state variables are unfixed after initialization by calling the release_state method

Returns:

If hold_states is True, returns a dict containing flags for which states were fixed during initialization.

release_state(flags, outlvl=0)[source]

Method to release state variables fixed during initialization.

Keyword Arguments:
  • flags – dict containing information of which state variables were fixed during initialization, and should now be unfixed. This dict is returned by initialize if hold_state=True.

  • outlvl – sets output level of logging

class watertap.property_models.unit_specific.anaerobic_digestion.adm1_properties_vapor.ADM1_vaporStateBlockData(*args, **kwargs)[source]

StateBlock for calculating thermophysical properties associated with the ADM1 reaction system.

build()[source]

Callable method for Block construction

define_display_vars()[source]

Method used to specify components to use to generate stream tables and other outputs. Defaults to define_state_vars, and developers should overload as required.

define_state_vars()[source]

Method that returns a dictionary of state variables used in property package. Implement a placeholder method which returns an Exception to force users to overload this.

get_energy_density_terms(p)[source]

Method which returns a valid expression for enthalpy density to use in the energy balances.

get_enthalpy_flow_terms(p)[source]

Method which returns a valid expression for enthalpy flow to use in the energy balances.

get_material_density_terms(p, j)[source]

Method which returns a valid expression for material density to use in the material balances .

get_material_flow_basis()[source]

Method which returns an Enum indicating the basis of the material flow term.

get_material_flow_terms(p, j)[source]

Method which returns a valid expression for material flow to use in the material balances.

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_reactions.ModifiedADM1ReactionParameterBlock(*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

    property_package

    Reference to associated PropertyPackageParameter object

    default_arguments

    Default arguments to use with Property Package

  • 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:

(ModifiedADM1ReactionParameterBlock) New instance

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_reactions.ModifiedADM1ReactionParameterData(component)[source]

Property Parameter Block Class

build()[source]

Callable method for Block construction.

classmethod define_metadata(obj)[source]

Set all the metadata for properties and units.

This method should be implemented by subclasses. In the implementation, they should set information into the object provided as an argument.

Parameters:

pcm (PropertyClassMetadata) – Add metadata to this object.

Returns:

None

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_reactions._ModifiedADM1ReactionBlock(*args, **kwds)[source]

This Class contains methods which should be applied to Reaction Blocks as a whole, rather than individual elements of indexed Reaction Blocks.

initialize(outlvl=0, **kwargs)[source]

Initialization routine for reaction package.

Keyword Arguments:

outlvl – sets output level of initialization routine

Returns:

None

class watertap.property_models.unit_specific.anaerobic_digestion.modified_adm1_reactions.ModifiedADM1ReactionBlockData(*args, **kwargs)[source]

ReactionBlock for ADM1.

build()[source]

Callable method for Block construction

get_reaction_rate_basis()[source]

Method which returns an Enum indicating the basis of the reaction rate term.

References

[1] Batstone, D.J., Keller, J., Angelidaki, I., Kalyuzhnyi, S.V., Pavlostathis, S.G., Rozzi, A., Sanders, W.T.M., Siegrist, H.A. and Vavilin, V.A., 2002. The IWA anaerobic digestion model no 1 (ADM1). Water Science and technology, 45(10), pp.65-73. https://iwaponline.com/wst/article-abstract/45/10/65/6034

[2] Rosen, C. and Jeppsson, U., 2006. Aspects on ADM1 Implementation within the BSM2 Framework. Department of Industrial Electrical Engineering and Automation, Lund University, Lund, Sweden, pp.1-35. https://www.iea.lth.se/WWTmodels_download/TR_ADM1.pdf

[3] X. Flores-Alsina, K. Solon, C.K. Mbamba, S. Tait, K.V. Gernaey, U. Jeppsson, D.J. Batstone, 2016. Modelling phosphorus (P), sulfur (S) and iron (Fe) interactions for dynamic simulations of anaerobic digestion processes, Water Research. 95 370-382. https://www.sciencedirect.com/science/article/pii/S0043135416301397