Rock Typing Reimagined
Building a Python, agentic AI, Excel, and dashboard framework for modern reservoir characterization. Six methods, one platform, written for engineers who want their core data to do more than sit in a binder.
Rock typing sits at the quiet center of reservoir engineering. Every static model, every dynamic simulation, every reserves estimate, and every completion design eventually depends on how we group rocks into populations that share similar pore-scale architecture and, by extension, similar flow behavior. Yet for all its centrality, the workflow has remained remarkably static for three decades.
Engineers still open the same petrophysical packages, run the same crossplots, hand-pick the same flow unit boundaries, and translate the results into a static report that gets emailed around and slowly forgotten. The numerical work is mature. The interpretive context around the numbers is not.
This is the gap we want to close. The commercial petrophysics tools dominating the industry today — whether high-end interpretation suites, geomodeling platforms, or core analysis packages — share a common limitation: they treat rock typing as a calculation problem rather than a reasoning problem. They give you numbers, but they do not give you the interpretation, the narrative, the implication for field development, or the connection back to production behavior observed in the wells.
At RFour Energy we are building a different kind of tool: a rock typing platform that combines a Python-driven computation pipeline, an Excel-friendly data ingestion layer, an interactive web dashboard, and an agentic AI interpretation layer powered by modern large language models. The platform is designed as a standalone product first, with planned future integration into the broader RFour Energy ecosystem.
This article walks through the conceptual foundation, the six rock typing methods the platform will support, the system architecture, the role of agentic AI, and the phased roadmap we are following to bring it to life. Whether you are a petrophysicist evaluating new workflows, a reservoir engineer wondering how AI fits into your toolkit, or a technical manager scoping a digital transformation initiative, this primer should give you a complete picture of what modern rock typing can look like in 2026.
Pore Throats Are the Story
Before discussing methods, it is worth re-grounding ourselves in what rock typing actually means. The term gets used loosely — sometimes for lithofacies, sometimes for electrofacies, sometimes for hydraulic flow units. The most useful definition for engineering purposes is this: rock typing is the process of classifying reservoir rocks into populations that share similar flow behavior, regardless of their geological labels.
The physical basis is pore throat geometry. Two rocks with identical mineralogy and grain size can have radically different permeability if their pore throats — the narrow constrictions that connect larger pore bodies — are different. Conversely, two rocks of different lithologies can behave identically in flow if their pore throat distributions happen to match. The Kozeny-Carman equation, the theoretical backbone of most modern rock typing methods, formalizes this intuition by linking permeability to porosity, specific surface area, and tortuosity through pore-scale geometry.
This pore-scale insight has profound implications. It means we can never predict permeability from porosity alone — the relationship is mediated by pore throat geometry, which itself depends on depositional environment, diagenesis, mineralogy, and compaction history. It also means that for the same field, different stratigraphic intervals may behave as completely separate reservoirs from a flow perspective, even if they appear geologically continuous. Rock typing is, in essence, the engineering acknowledgment that geology and flow do not always speak the same language.
The downstream applications are everywhere. Volumetric calculations need rock-type-specific cutoffs to define net pay. Permeability prediction in uncored wells requires a rock-type framework to extrapolate from cored intervals. Reservoir simulation grids need rock-type-specific relative permeability and capillary pressure curves. Completion strategies benefit from knowing which rock types will respond to stimulation. A well-built rock typing framework pays for itself many times over across the asset lifecycle.
Six Methods, One Platform
A complete platform should not lock the user into a single method. Different datasets, different reservoir styles, and different decision contexts call for different tools. The platform will support six methods, ranging from the simplest empirical approach to the most data-intensive rigorous formulation, plus a machine learning option that bridges core-based and log-based rock typing.
Winland R35 — the empirical workhorse
The Winland method is the simplest and most widely used rock typing technique. Developed by Dale Winland at Amoco in the early 1970s and published by Kolodzie in 1980, it correlates permeability and porosity to estimate the pore throat radius at 35% mercury saturation — the so-called R35 value.
log R₃₅ = 0.732 + 0.588 × log(k) − 0.864 × log(φ)
where R35 is in micrometers, k is air permeability in millidarcies, and φ is porosity in percent. R35 maps to five pore type bins:
| Pore type | R₃₅ range |
|---|---|
| Megaport | > 10 μm |
| Macroport | 2 — 10 μm |
| Mesoport | 0.5 — 2 μm |
| Microport | 0.1 — 0.5 μm |
| Nanoport | ≤ 0.1 μm |
Strengths
Requires only routine core data. Immediately interpretable. No clustering decisions needed. Natural MVP starting point.Limitations
Empirical correlation calibrated on specific sandstones and carbonates. Accuracy degrades for unconventional lithologies, extreme porosities, or clay-rich rocks. Pittman (1992) published modified versions for R₁₀, R₂₅, R₅₀.FZI and the Hydraulic Flow Unit
The Flow Zone Indicator method, introduced by Amaefule and colleagues in 1993, brought theoretical rigor to rock typing. Starting from a generalized form of the Kozeny-Carman equation, the authors derived two normalized parameters that, when plotted against each other, separate rocks into populations called Hydraulic Flow Units (HFUs).
Reservoir Quality Index
RQI (μm) = 0.0314 × √(k / φ)
Normalized porosity
φz = φ / (1 − φ)
Flow Zone Indicator
FZI (μm) = RQI / φz
The elegance of this formulation lies in what happens when we plot log(RQI) against log(φz): rocks with the same FZI fall on a straight line with unit slope, with the intercept being log(FZI). A field with multiple flow units produces a series of parallel lines, each representing a distinct hydraulic flow unit.
Strengths
Theoretical grounding in Kozeny-Carman. Separates flow populations cleanly when data supports it. Natural extension to permeability prediction within an HFU.Limitations
Sample-size sensitive — clustering with fewer than 30 samples per HFU is unreliable. Choosing the cluster count is partly subjective. Information criteria (BIC/AIC) help automate this.Pore Geometry and Structure (PGS) — beyond a single parameter
Introduced by Permadi and Susilo (2009) and refined into a more practical rock-type-curve form by Wibowo and Permadi (2013), PGS represents one of the most important rock typing advances of the past two decades. Where FZI separates rocks based on a single composite parameter — essentially reflecting specific surface area — PGS classifies rocks based on pore geometry and pore structure simultaneously. The result is a method that consistently outperforms HFU in grouping capillary pressure curves and in predicting connate water saturation, particularly for carbonates and complex pore systems where diagenesis has reshaped the original depositional fabric.
The formulation begins from the Kozeny-Carman equation but recasts it so pore geometry sits on one axis and pore structure on the other:
Pore geometry — mean hydraulic radius
y = √(k / φ)
Pore structure — shape, tortuosity, connectivity
x = k / φ³
Rock-type curve (per group)
y = a · x^b
where a is an intercept constant linked to the pore shape factor and b is the similarity exponent linked to network complexity. On log-log axes each rock type appears as a straight line with slope b and intercept log(a). Rocks with similar pore architecture cluster along the same line regardless of whether their absolute porosity and permeability values are high or low. The number of rock types is set by how many distinct (a, b) line families are needed to fit the data.
The convention is that lower rock type numbers indicate higher quality rock. RT1 is the cleanest and most connected, with the largest effective pore throats; RT8 (or whatever the bottom of the scale is for a given dataset) is the most complex and tightest. Note this is the opposite convention from some other systems — care is needed when comparing across methodologies.
Why does PGS perform better than HFU? Capillary pressure and connate water saturation depend on both pore body size and pore throat geometry, not on one or the other in isolation. HFU's reliance on a single composite parameter captures part of this physics but cannot fully separate pore size distribution from specific surface area. PGS encompasses both simultaneously. Hakiki and colleagues (2024) provided the first comprehensive physics-guided interpretation of the method, compiling thousands of measurements across sandstones, carbonates, tight rocks, and even soils. Their findings confirmed PGS rock typing is robust across twelve orders of magnitude in permeability and works for both consolidated and unconsolidated geomaterials.
For permeability prediction in uncored intervals, once a well has been classified into PGS rock types, the rock-type curve can be extended to predict permeability from porosity alone, with accuracy typically in the 80–90% range when benchmarked against held-out core data. The y-component of the PGS plot is dimensionally and conceptually linked to the Leverett J-function, providing a clean theoretical bridge between rock typing and reservoir simulation initialization — when you use PGS rock types, you get a coherent classification that flows naturally into Swc prediction, Pc curve assignment, and reservoir model population.
When PGS is cross-validated against thin-section petrographic groups, correlations of 70% or higher are typical — PGS effectively captures the diagenetic processes (cementation, dissolution, dolomitization) that reshape original depositional fabrics in carbonate reservoirs.
Strengths
Uses same input data as Winland and FZI. Outperforms HFU on capillary curves and Swc prediction. Robust across 12 orders of magnitude in permeability. Natural bridge to J-function and simulation initialization. ~70% correlation with petrographic groups.Limitations
Needs ≥15–20 samples per group for stable power-law fits. Assumes good underlying data quality (Klinkenberg-corrected, properly cleaned cores). Best run alongside FZI as a complementary cross-check.Modified Lorenz Plot — vertical heterogeneity at a glance
Advanced by Gunter and colleagues in 1997, the Modified Lorenz Plot takes a different approach: rather than classify individual samples, it identifies flow unit boundaries within a continuous depth sequence. It uses two cumulative quantities computed depth-by-depth from shallowest to deepest:
- Cumulative flow capacity — Σ(k × h), normalized to 100%
- Cumulative storage capacity — Σ(φ × h), normalized to 100%
When plotted against each other, the resulting curve has a slope that reflects the local k/φ ratio — essentially the reservoir process speed. Inflection points mark transitions between flow units. A reservoir with three flow units shows three distinct slope segments, and the boundary depths identify where the flow character changes.
Strengths
Excellent for vertical heterogeneity assessment, net pay definition, and identifying thief zones. Intuitive enough for non-specialist audiences — readable at a glance.Limitations
Operates one well at a time. Requires depth-ordered data. Does not produce a sample classification that can be propagated to other wells.Leverett J-Function — the rigorous reference
For the most rigorous form of rock typing we turn to capillary pressure. The Leverett J-function, introduced in 1941 and refined many times since, is a dimensionless form of the capillary pressure curve:
J(Sw) = (Pc / (σ × cos θ)) × √(k / φ)
where Pc is capillary pressure, σ is interfacial tension, and θ is the contact angle. For a true rock type, all samples should collapse onto a single J-function curve. Conversely, if J-function curves from a sample population do not overlap, those samples belong to different rock types. This makes the J-function both a powerful classifier and a stringent test of whether a proposed rock type is genuinely homogeneous from a flow perspective.
Strengths
Directly addresses the flow behavior of interest — capillary saturation distribution. Essential for proper reservoir simulation initialization. Stringent independent test of any proposed rock type.Limitations
Data scarcity. High-quality MICP or SCAL is expensive and available for only a small fraction of samples in most fields. Usually a validation layer, not a primary classifier.Machine Learning on Log Data — the propagation layer
The first four methods all begin with core data. But most wells in any field are uncored, and even cored wells have core over only a fraction of the reservoir interval. To make rock typing actionable at field scale, we need a way to propagate core-based classifications to uncored intervals using log data.
The general workflow:
- Train on cored intervals where both logs and core-derived rock types are available
- Validate using leave-one-well-out or random hold-out partitioning
- Predict rock type at every depth in every well using only log inputs
Feature set typically includes some subset of gamma ray (GR), bulk density (RHOB), neutron porosity (NPHI), sonic travel time (DT), resistivity (RT), and photoelectric factor (PEF). Algorithms range from k-nearest neighbors and decision trees for interpretability, to random forests, gradient boosting, and neural networks for accuracy. Unsupervised methods (Gaussian mixture models, self-organizing maps, hierarchical clustering) are valuable when core data is absent or sparse.
Strengths
Scales to millions of depth points in seconds. Bridges the cored-uncored gap that limits the other four methods.Limitations
Interpretability cost. Garbage-in-garbage-out risk. Log normalization across vintages and service companies is essential. Must be validated against held-out core ideally from a different well — a 95% training accuracy that drops to 60% on a held-out well is not useful.Data Scope: a Pyramid, Not a List
Real rock typing projects rarely fit into a single data category. The most useful framework is a pyramid.
The platform integrates all three layers. The most rigorous workflow uses MICP and routine core analysis to define rock types in the cored intervals, then trains a log-based classifier to extrapolate those rock types to the entire field. This is the same general philosophy behind modern integrated reservoir characterization workflows, with two critical differences: the entire pipeline is automated and reproducible through Python notebooks, and the interpretation of each rock type is augmented by agentic AI rather than left to manual report writing.
The Architecture — Five Layers, No Hype
The platform follows a deliberately minimalist philosophy. We have learned from building production surveillance systems at RFour Energy that the most resilient tools are those built on stable, portable components. Adding more infrastructure does not improve a tool; it just increases the maintenance burden.
What each layer does
Excel input layer. Geoscientists and engineers live in Excel. Forcing them into a new data format or a clunky web upload form is a guaranteed way to ensure the tool is never used. The platform accepts multi-sheet Excel workbooks with a documented but flexible structure, similar to the daily Excel parsing pattern used in our production systems.
Python computation layer. All numerical work happens in Python: data validation, Klinkenberg and overburden corrections, the six rock typing methods, clustering, and validation statistics. The pipeline is delivered as a Jupyter notebook that runs on a free cloud notebook environment, so no local installation is required. For users who prefer a hosted experience, the same notebook logic is exposed through an API endpoint.
Storage layer. Processed results — rock type assignments per depth per well, summary statistics per rock type, model metadata — are stored in a lightweight cloud database. Raw core data remains in the original Excel workbook; only computed outputs are persisted. This separation respects data ownership: users retain full control of their primary data and only share processed metrics with the platform.
Frontend dashboard. The dashboard is a single HTML file with vanilla JavaScript. No frameworks, no build step, no dependencies that can break. It renders the crossplots, depth tracks, summary tables, and what-if controls. Users can adjust the number of HFUs, change cutoff values, and see results update interactively. The same file works on any modern browser and can be deployed anywhere.
Agentic AI layer. The layer that makes the platform genuinely different from existing tools. The next section is dedicated to it.
Where Agentic AI Earns Its Place
Calculation is the easy part. Interpretation is hard. Anyone who has built a rock typing dashboard knows that the value is not in the crossplots themselves — it is in answering the questions that emerge when someone looks at the crossplots: Why does Rock Type 3 have such a wide spread? Should we have included those high-permeability outliers? What does this mean for the planned infill program?
These are the questions the agentic AI layer is built to address. Powered by a modern large language model with access to the underlying numerical results, the AI can:
- Generate rock type narratives. For each identified rock type, the AI produces a paragraph describing the petrophysical signature (porosity range, permeability range, FZI range, dominant pore type), the likely depositional or diagenetic origin, and the expected dynamic behavior.
- Identify outliers and anomalies. The AI flags samples that do not fit cleanly into any rock type, suggests whether they represent data quality issues or genuinely distinct populations worth investigating further, and recommends next steps.
- Recommend the appropriate method. Given the scope of available data, the AI suggests which of the six methods is most appropriate and explains the tradeoffs.
- Connect rock typing to production behavior. Where production data is available, the AI correlates rock type distribution in each well with observed production behavior, identifying wells where flow performance is consistent or inconsistent with the rock typing prediction.
- Generate report sections. The AI drafts the rock typing chapter of a technical report, including methodology description, results summary, and interpretation, formatted to corporate standards.
This is the same general pattern implemented in our other RFour Energy products, and it has proven significantly more useful than simpler chatbot integrations.
A key design consideration is cost control. Large language model calls are not free, and unbounded usage creates unpredictable expenses. The platform implements per-user usage caps with prepaid top-up options for external users, ensuring AI features remain sustainable as the user base grows.
From MVP to Full Platform — a Four-Phase Roadmap
A platform of this scope cannot be built in a single sprint. We are following a four-phase roadmap that lets us deliver value early while progressively expanding capability.
Phase 1 — MVP with Winland R35. Validates the end-to-end pipeline with the simplest possible method. Users upload an Excel workbook with porosity and permeability columns; the system computes R35, classifies each sample into one of five pore types, renders the Winland crossplot, and provides an AI-generated interpretation. No clustering, no parameter tuning, no log data. The point is to prove the architecture works.
Phase 2 — FZI/HFU, PGS, and Multi-Well. Adds the clustering machinery needed for FZI/HFU and PGS classification with automatic cluster count selection via information criteria. Both methods run side by side so users can compare classifications and identify where the two methods agree (high confidence) versus where they diverge (worth investigating). Multi-well analysis becomes possible, with the dashboard showing how rock type populations vary across the field. The AI layer expands to include cross-well comparisons, anomalous-distribution flagging, and an automatic PGS-vs-HFU agreement narrative.
Phase 3 — Log Integration and Lorenz Plot. Brings log data into the platform. The Modified Lorenz Plot is implemented for vertical heterogeneity analysis, and a log-based classifier is trained to extend rock typing to uncored intervals. This is where the platform becomes useful for field-scale work rather than well-scale analysis.
Phase 4 — Full Capability and Ecosystem Integration. Adds the most data-intensive features: MICP ingestion, J-function classification, advanced ML methods (random forests, gradient boosting, neural networks for log-based rock typing), and integration with the broader RFour Energy product ecosystem at rfourenergy.com. Users with accounts on other RFour Energy platforms will be able to flow rock typing results directly into downstream workflows.
Pitfalls Worth Avoiding
A platform is only as useful as its outputs are trustworthy. Several practical considerations shape how to build well and how users should approach rock typing in general.
Data quality is non-negotiable. Permeability measurements should be Klinkenberg-corrected for gas slip. Both porosity and permeability should be overburden-corrected when in-situ values matter. Routine core analysis often contains outliers from damaged or unrepresentative samples; statistical outlier detection should be part of every workflow.
Resist the temptation to over-classify. It is tempting to add rock types until every sample fits perfectly. This is overfitting. A useful rock typing scheme typically has between three and seven rock types for most fields. More than ten is almost always a sign that the methodology is breaking down or that the data contains noise that should not drive classifications.
Validate against dynamic data when possible. A rock typing scheme that does not correlate with production behavior is not necessarily wrong, but it is suspect. Where possible, compare the rock type distribution of high-producing wells to that of poor producers. If there is no signal, the rock typing is probably not capturing the flow controls that matter.
Remember the depositional context. Rock typing is a flow-based classification, not a geological one. The two often align, but not always. Carbonate reservoirs in particular can have rock types that cut across depositional facies because diagenesis can reshape pore networks regardless of original lithology. The interpretation should respect both perspectives.
Beware of black-box ML. Machine learning methods for log-based rock typing are powerful, but their outputs must be validated against held-out core data, ideally from wells not used in training. A model scoring 95% accuracy on the training set but 60% on held-out wells is not useful, no matter how impressive the headline number looks.
Closing
Rock typing has been a core reservoir engineering workflow for half a century. What has changed in the last few years is not the underlying physics — pore throats still control permeability, the Kozeny-Carman equation still applies, and the Leverett J-function is still the most rigorous capillary pressure framework available — but the tools available to operationalize that physics at scale.
The combination of Python notebooks for transparent computation, Excel for accessible data ingestion, single-file HTML dashboards for portable visualization, and agentic AI for interpretation creates a new kind of platform. It is not a replacement for petrophysical expertise; it is a multiplier for it. A petrophysicist using this platform can do in an hour what previously took a week, and they can carry a richer interpretation into the conversation with the rest of the asset team.
At RFour Energy we are committed to building these tools in the open, sharing both methodology and results with the broader engineering community. Future articles in this series will dive deeper into individual methods, share validation case studies on anonymized field data, and document the lessons we learn as the platform matures.
The platform discussed here is currently in Phase 1 development. Updates and access to the beta will be announced through the RFour Energy channels. If you are interested in being an early user, in contributing case studies, or in collaborating on validation, please reach out through the website.
References
Amaefule, J.O., Altunbay, M., Tiab, D., Kersey, D.G., Keelan, D.K. (1993). Enhanced reservoir description: using core and log data to identify hydraulic (flow) units and predict permeability in uncored intervals/wells. SPE 26436.
Permadi, P., Susilo, A. (2009). Permeability prediction and characteristics of pore structure and geometry as inferred from core data. SPE 125350.
Wibowo, A.S., Permadi, P. (2013). A type curve for carbonates rock typing. IPTC 16663.
Hakiki, F., et al. (2024). Physics-guided interpretation of pore geometry and structure (PGS) rock typing across twelve orders of magnitude in permeability. SPE / industry conference proceedings.
Kolodzie, S. Jr. (1980). Analysis of pore throat size and use of the Waxman-Smits equation to determine OOIP in Spindle Field, Colorado. SPE 9382.
Pittman, E.D. (1992). Relationship of porosity and permeability to various parameters derived from mercury injection-capillary pressure curves for sandstone. AAPG Bulletin, 76(2), 191–198.
Gunter, G.W., Finneran, J.M., Hartmann, D.J., Miller, J.D. (1997). Early determination of reservoir flow units using an integrated petrophysical method. SPE 38679.
Leverett, M.C. (1941). Capillary behavior in porous solids. Transactions of the AIME, 142(1), 152–169.
Carman, P.C. (1937). Fluid flow through granular beds. Transactions of the Institution of Chemical Engineers, 15, 150–166.
Kozeny, J. (1927). Über kapillare Leitung des Wassers im Boden. Sitzungsberichte der Akademie der Wissenschaften in Wien, 136, 271–306.
Tiab, D., Donaldson, E.C. (2015). Petrophysics: Theory and Practice of Measuring Reservoir Rock and Fluid Transport Properties, 4th ed. Gulf Professional Publishing.
Klinkenberg, L.J. (1941). The permeability of porous media to liquids and gases. API Drilling and Production Practice, 200–213.
Hartmann, D.J., Beaumont, E.A. (1999). Predicting reservoir system quality and performance. In Treatise of Petroleum Geology / Handbook of Petroleum Geology: Exploring for Oil and Gas Traps, AAPG.