Pulso — Well-Test Diagnostic-Curve Shape Clustering and Attribution
An unsupervised catalogue of flow-behaviour classes ("GeoTypes") for fractured reservoirs: it clusters the SHAPE of pressure-transient Bourdet-derivative curves with DTW k-medoids, attributes each class to the fracture-network descriptors that control it (Random Forest + SHAP), and ships a browser workbench that classifies a user curve against the baked medoids with conformal prediction. It reproduces and extends Kamel Targhi et al. 2026 (Comp. Geosciences 30, 57) on a real 4TU corpus (~4768 curves), then transfers the same shape diagnostic to two real aquifer pumping-test sites, with an explicit caveat that the shape transfers but the physics does not.
Business Context
Well-test interpretation is where subsurface uncertainty gets narrowed before expensive decisions (where to drill, whether a fracture network is connected enough to produce). The value of a shape catalogue is that it turns a one-off interpretation into a reusable vocabulary: a new curve is placed against known behaviour classes, and the attribution layer says which fracture-network property most likely drives that behaviour, which in turn tells you what data would most reduce the ambiguity. The same shape-diagnostic idea carries to aquifer pumping tests, but Pulso is explicit that only the shape transfers: aquifer tests are a different physical system, transmissivity and storativity are unknown, so those curves are clustered by shape, not by a physically referenced dimensionless response.
Strategic Value
The honest differentiator is real licensed corpora plus published null and limit results. On the real 4TU curves the clustering is genuinely good (silhouette 0.72 on low-perm, 0.86 on mid-perm), and it is anchored against a single-regime control at 0.137 (the null that shows the method is not inventing structure in noise) and a noisy family at 0.172 (correct degradation). A DARTS analytic validation gate passes on a homogeneous anchor (relative L2 0.0108 against a 0.05 tolerance). Four ONNX models run inference in the browser. But Pulso is careful about what it does not claim: the strong learned-model accuracy (InceptionTime, PatchTST) is against the pipeline own k-medoids labels, not an external ground truth, so it measures how well the net reproduces the clustering, not classification against reality; the training-set silhouette there is weak (0.190). The aquifer transfer is a shape-diagnostic proof on tiny samples, with field attribution skipped where only eight curves exist. It reproduces a 2026 Computational Geosciences paper and extends it, with the negative results kept in.
The Challenge
A well test records how pressure responds when a well is produced or shut in, and the diagnostic Bourdet derivative of that response has a shape that encodes the flow regimes the fluid passed through. In a fractured reservoir the same descriptors that shape the curve (fracture density, connectivity, aperture) are exactly the geological unknowns an operator wants to constrain. The hard part is that these curves are unlabelled: there is no ground-truth "class" to train against, the recurring behaviour types have to be discovered from the shapes themselves, and any claim that a method found real structure has to survive a control where there is no structure to find.
Our Approach
Pulso is a shape-first, unsupervised catalogue. It computes the Bourdet derivative of each pressure-transient response and clusters the curves by shape with DTW k-medoids, selecting k with silhouette and a k-table, embedding with MDS. Each behaviour class is then attributed to the fracture-network descriptors that control it through a Random Forest with SHAP, permutation importance and rank-agreement, recorded per case behind a gate. Curves come from three sources: GeoDFN discrete-fracture-network ensembles and an open-DARTS DFM simulation lane, a real 4TU well-test corpus (~4768 dimensionless Bourdet-derivative curves plus ~5000 DFN descriptor rows), and two real aquifer pumping-test field sites (welltestpy: Horkheimer Insel and Lauswiesen). The classical physics core is a Bourdet derivative plus a Warren-Root dual-porosity model via Stehfest inversion, which is also the Pyodide live-lane engine. Four learned models (InceptionTime, PatchTST, a curve autoencoder and an embedding model) are exported to ONNX and run in the browser; a user pastes a curve and it is classified against the baked medoids with a conformal prediction set.
Key Performance Indicators
| KPI | Baseline | Result | Impact |
|---|---|---|---|
| Structure found, and controlled | A clustering score with no null to compare against | Silhouette 0.72 (real low-perm) and 0.86 (real mid-perm) against a 0.137 single-regime control | The null proves the classes are real shape structure, not noise |
| Real data, not planned | A method demonstrated on simulation only | ~4768 real Bourdet-derivative curves + ~5000 DFN descriptor rows (4TU) + 2 real aquifer field sites (welltestpy) | Reproduces and extends a 2026 Computational Geosciences paper |
| Validation gate | Trust the simulator without a known-answer check | DARTS analytic anchor passes: relative L2 0.0108 against a 0.05 tolerance on a homogeneous case | The simulation lane is checked against a closed-form answer |
| In-browser classification | A server inference service | 4 ONNX models (InceptionTime, PatchTST, autoencoder, embedding) run in the browser; a user curve is classified against baked medoids with conformal prediction | Accuracy is against the pipeline own cluster labels, not external ground truth |
Architecture
pulso pipeline
A shape vocabulary for pressure-transient curves
Pulso is an unsupervised catalogue of flow-behaviour classes (“GeoTypes”) for fractured reservoirs. It takes the diagnostic Bourdet derivative of a pressure-transient (well-test) response, clusters curves by shape with DTW k-medoids, and attributes each behaviour class to the fracture-network descriptors that control it. It reproduces and extends Kamel Targhi et al. 2026 (Computational Geosciences 30, 57). Live at pulso.fasl-work.com.
Real curves, a physics core, and a browser lane
The corpus is real and licensed: a 4TU well-test corpus (~4768 dimensionless Bourdet-derivative curves plus ~5000 DFN descriptor rows, GPL-3, vault-only) alongside simulated GeoDFN and open-DARTS ensembles, for 22 baked case studies. The classical physics core (Bourdet derivative plus a Warren-Root dual-porosity model via Stehfest inversion) is also the Pyodide live-lane engine, and four ONNX models (InceptionTime, PatchTST, a curve autoencoder, an embedding model) classify a user-pasted curve against the baked medoids in the browser with conformal prediction.
The nulls are the point
On the real 4TU curves the clustering is genuinely good: silhouette 0.72 on low-perm and 0.86 on mid-perm. What makes that trustworthy is the control next to it, a single-regime case at 0.137: when there is no structure, the method correctly does not find any, and a noisy family degrades to 0.172 as it should. A DARTS analytic validation gate passes on a homogeneous anchor (relative L2 0.0108 against a 0.05 tolerance), checking the simulation lane against a closed-form answer.
Honest about the limits
Two limits stay on the card. First, the aquifer generalization is a shape-diagnostic transfer only: aquifer pumping tests are a different physical system, transmissivity and storativity are unknown, so those curves are clustered by shape, not by a physically referenced response, and where a field site has only eight curves the attribution is skipped (a proof-of-transfer, not a study). Second, the learned models’ strong test accuracy (InceptionTime 0.911, PatchTST 0.902) is measured against the pipeline own k-medoids cluster labels, not an external ground truth, and the training-set silhouette there is a weak 0.190, so those nets reproduce a weakly-separated clustering rather than classify against reality. The real 4TU low-perm case is k=2 with one rare class, described as two behaviour classes (one rare) rather than a rich catalogue.
Technology Stack
In action
A short tour of the live app — the real interface, recorded from the deployed site.

Application Screenshots

