Skip to content
← Platform

ALRIM-8· Featured

Undrained Reservoir Zone Identification

My thesis. How much of a waterflood's sweep can you reconstruct without running a reservoir simulator?

Well completion report · ALRIM-8
WELL
ALRIM-8
TYPE
Oil producer · Subsurface & PE
SPUD
2025 - 2026
STACK
Python · resdata · SciPy · QGIS · Volve · Random Forest
STATUS
Completed · write-up only

About this project

My bachelor thesis at ITB, supervised by Ivan Kurnia, Ph.D.

Finding bypassed oil in a mature waterflood normally means history-matched dynamic simulation: expensive to run, and needing full recalibration every time new data arrives. The thesis asks a different question. How much of the displacement state can you reconstruct from universal data alone, meaning well completion records, static rock properties, and SCAL laboratory measurements, with no simulator in the loop?

The answer is a hybrid rule score and machine learning framework. The deterministic rule score combines two physically interpretable features: a proxy for injector travel time, and a fault-aware Dijkstra distance to producer perforations. Both are mapped to hierarchical percentile rankings. Critically, every parameter is set from displacement physics rather than tuned against the answer key, which is the constraint that makes the result mean anything at all. The machine learning layer then predicts how those scores move as completions open, so the map updates on the day a perforation changes rather than on a calendar.

Validated on Equinor's publicly released Volve dataset across 60,270 evaluation cells, filtered from 183,545 active cells to only those that ever held movable oil. On the held-out 2016 state it reaches a median per-layer AUC of 0.7277, a rank-corrected combined AUC of 0.6873, and a lift of 1.397 on the undrained class. Performance holds between 0.714 and 0.730 from 2011 to 2016.

The most useful result is the one that looks like a failure. A simple persistence baseline scores 0.9227, well above this model, and that 0.1950 gap is precisely the point: it puts a number on what dynamic simulation data is actually worth, which is the question an operator deciding whether to fund a history match actually needs answered. Redefining the domain on purely static criteria collapses AUC to 0.395, which is the non-circularity check working as intended.

Inside the app

Reducing the evaluation domain in three dimensions before scoring.
01Reducing the evaluation domain in three dimensions before scoring.
Constructing the ground truth: applying the saturation threshold that decides whether a cell counts as undrained.
02Constructing the ground truth: applying the saturation threshold that decides whether a cell counts as undrained.
Feature correlation, used to check that the score is not just re-reading one input several times.
03Feature correlation, used to check that the score is not just re-reading one input several times.
Spatial validation: rule score prediction against ground truth across the top five layers.
04Spatial validation: rule score prediction against ground truth across the top five layers.
The standalone 2026 forecast map, as it would actually be used.
05The standalone 2026 forecast map, as it would actually be used.