Zero-order kinetics in a CMBR

Environmental engineering

Author

Marco A. Alsina

Published

January 6, 2026

Problem statement

Lets consider 3 continuously mixed batch reactors (CMBRs) where a substance with initial concentration \(C_0\) decays with a zero-order rate constant \(k_0\). The parameters for each reactor are listed below:

  • CMBR 1: \(C_0\) = 10 mg/L , \(k_0\) = 0.1 mg/Ls
  • CMBR 2: \(C_0\) = 10 mg/L , \(k_0\) = 0.2 mg/Ls
  • CMBR 3: \(C_0\) = 10 mg/L , \(k_0\) = 0.5 mg/Ls
  1. Plot the concentration in each reactor as a function of time.
  2. ¿What is the concentration of the substance in each reactor after 10 sec?

Solution

For a CMBR of constant volume \(V\), the concentration of a substance \(C\) that decays with a zero-order rate constant \(k_0\) can be modeled as follows:

\[ \dfrac{dC}{dt}V = k_0 V \tag{1}\]

Assuming that at time \(t=0\) the concentration of substance is \(C_0\), the previous ordinary differential equation (ODE) has the following analytical solution: \[ C(t) = C_o -k_0t \tag{2}\]

Note that, in this case, the concentration in the CMBR is independent of the reactor volume. Lets implement this last equation numerically through a function:

from numpy import linspace
import matplotlib.pyplot as plt

def conc(C0, k0, time):
    '''Concentration in a CMBR with zero-order decay
    '''
    return C0 - k0 * time

Our function receives the initial concentration C0, the zero-order decay rate constant k0, and the time. We can use the same function to model the 3 CMBRs.

Note that the time variable can be either a single value of an array of values. Thus, we can compute the evolution of the concentration in a CMBR as a function of time.

Plot of concentration

fig, ax = plt.subplots(figsize=(3,3)) # figure size

time    = linspace(0, 20) # time in sec
k0      = [0.1, 0.2, 0.5] # zero-order decay rate constant (mg/Ls)
C0      = [ 10,  10,  10] # initial concentrations (mg/L)

for i, k in enumerate(k0):
    Ct  = conc(C0[i], k, time)
    col = str(i*0.25)
    ax.plot(time, Ct, color=col, label="$k_0$ = %s mg/Ls" % k)

ax.axvline(10, color='k', ls=':')
ax.set_xlabel("time [s]")
ax.set_ylabel("concentration [mg/L]")
ax.legend(edgecolor='k')
ax.grid()
plt.show()

As expected from Equation 2, the concentration of each CMBR decays linearly as a function of time, with the slope being equal to \(k_0\). We additionally plot a vertical line at \(t=10\) s to visually inspect the concentration at this time.

Concentration after 10 sec

We can use our function considering 10 sec as the input time to compute the concentration of the substance.

t_eval = 10 # sec

for i, k in enumerate(k0):
    conc_t = conc(C0[i], k, t_eval)
    print ("CMBR %i: C(t=%s[s])= %1.1f [mg/L]" % (i+1, t_eval, conc_t) )
CMBR 1: C(t=10[s])= 9.0 [mg/L]
CMBR 2: C(t=10[s])= 8.0 [mg/L]
CMBR 3: C(t=10[s])= 5.0 [mg/L]

Follow up questions

  1. From Equation 1, verify that the dimension of the zero-order constant is [\(ML^{-3}T^{-1}\)].
  2. Show that the time it takes a CMBR to reach half of the initial concentration \(t_{1/2} = C_0/2k_0\).
  3. Show that, for zero-order decay kinetics in a CMBR, the maximum simulation time is \(C_0/k_0\).
  4. Compute the concentraction of substance in the last reactor after 20 seconds.