Analytical MATLAB simulator for CO₂ plume evolution in porous media under time-dependent (stair-like) injection schedules. Fernando Alonso-Marroquin and Christian Tantardini
This repository implements a vertically averaged sharp-interface model based on:
- Nonlinear diffusion (q–Porous Media Equation)
- Barenblatt compact-support similarity solutions
- A transient full-thickness core model
- Piecewise-constant (stair-like) injection schedules
The simulator produces:
- Time evolution of plume thickness profile b(r,t)
- Core radius a(t)
- Plume edge R(t)
- Injection-rate history
- Movie of plume evolution
The plume thickness is modeled as:
b(r,t) =
- H for 0 ≤ r ≤ a(t)
- Barenblatt tail for a(t) < r < R(t)
- 0 for r ≥ R(t)
This represents:
- A full-thickness CO₂ core near the well
- A compact-support nonlinear diffusion tail
- A sharp plume edge
The Barenblatt tail is:
b(r,t) = t^{-α_B} [ C(t) - K_b r² t^{-2β_B} ]_+^{1/(1-q)}
with exponents:
β_B = 1 / [ 2(2 - q) ]
α_B = 1 / (2 - q)
The model assumes rapid vertical segregation:
- CO₂ forms a uniform upper layer of thickness b(r,t)
- Brine occupies the lower region
- Vertical mixing and capillary transition zones are neglected
- Phase densities are treated as constant
This reduces the 3D problem to a 1D radial thickness evolution.
The simulator supports stair-like injection schedules:
Q(t) = piecewise constant
Examples:
- Constant injection
- Shut-in (Q = 0)
- Variable-rate field operation
- Alternating injection/shut-in
Each injection stage updates:
- Total injected volume
- Core radius a(t)
- Tail amplitude C(t)
This allows realistic operational histories to be approximated analytically.
The repository contains:
Driver script where you define:
- Aquifer thickness H
- Porosity φ
- Residual brine saturation S_br
- Diffusivity D_b
- q exponent
- Injection schedule (time intervals + rates)
- Simulation time
Main function that:
- Computes b(r,t), a(t), R(t)
- Evolves plume over time
- Plots injection rate vs time
- Generates movie of plume evolution
- Exports video file
- Open MATLAB
- Edit parameters in:
run_plume_simulation.m