Water displacing oil through a porous reservoir obeys the Buckley–Leverett conservation law. In dimensionless form (position x’ from 0 at the injector to 1 at the producer, time τ measured in pore volumes injected, PVI):
∂Sw/∂τ + ∂fw(Sw)/∂x’ = 0
fw(Sw) = (krw/μw) / (krw/μw + kro/μo)
krw = Swn², kro = (1−Swn)²
Swn = (Sw − Swc) / (Swmax − Swc)
This engine solves that equation numerically with an explicit upwind finite-volume scheme (120 cells, CFL-limited sub-stepping), which is exactly how a 1D reservoir simulator advances a saturation front — no shortcuts or decorative slider math. Raising oil viscosity or lowering the residual-oil target steepens the mobility ratio, which sharpens the shock front and increases watercut earlier; the injection-rate slider only changes how many real seconds correspond to a pore volume, matching the way Buckley–Leverett fronts are rate-independent in PVI space but not in wall-clock time.
- Reservoir strip — color maps water saturation from oil-brown (Swc) to injection-blue (Sw,max = 1−Sor).
- Saturation profile — Sw(x’) plotted along the strip; the near-vertical jump is the Buckley–Leverett shock front.
- Watercut — fractional flow of water at the producer, fw(Sw at x’=1); rises sharply once the shock front breaks through.