CamPetro

Lucia Rock Fabric Number

On this page

Summary

In carbonates, porosity alone does not predict permeability or capillary behaviour: the same porosity can be coarse and grain-supported or fine and mud-supported. Lucia's Rock fabric number places the interparticle pore space on a continuous scale from 0.5 to 4, grouped in three Lucia rock fabric class classes that follow particle size. Use it to assign a pore-size class from core descriptions, or to solve it from Interparticle porosity and Permeability and carry it to the permeability, Swirr and saturation relations.

Inputs and outputs

Item Units
Input Interparticle porosity v/v
Input Permeability mD
Output Rock fabric number dimensionless
Output Lucia class number dimensionless

Equations

Classes from rock description. Lucia grouped interparticle pore space by the size of the grains or crystals that bound it, and by whether the rock is grain-dominated or mud-dominated. The ranges below are as I recall them from Lucia's work:

Class \(\CpRFN\) Particle size Typical rock
1 0.5 to 1.5 Larger than about 100 µm Grainstone, dolograinstone, large crystalline dolostone
2 1.5 to 2.5 About 20 to 100 µm Grain-dominated packstone, medium crystalline dolostone
3 2.5 to 4.0 Smaller than about 20 µm Mud-dominated limestone, fine crystalline dolostone

RFN from porosity and permeability. Within a class, permeability is a power law of interparticle porosity, and the exponent and intercept vary smoothly with the rock fabric number. With \(k\) in mD and \(\phiIP\) a fraction:

\[ \log_{10} k = 9.7892 - 12.0838\,\log_{10}\CpRFN + \left(8.6711 - 8.2965\,\log_{10}\CpRFN\right)\log_{10}\phiIP \]

Solved for the rock fabric number:

\[ \log_{10}\CpRFN = \frac{9.7892 + 8.6711\,\log_{10}\phiIP - \log_{10} k}{12.0838 + 8.2965\,\log_{10}\phiIP} \]

The result is limited to 0.5 to 4. The class follows from the boundaries 1.5 and 2.5. The denominator is zero at an interparticle porosity of about 0.035, and the solution is not usable below about 0.04.

RFN from water saturation (empirical, unverified). Where a water saturation \(\Sw\) is known to be at or near irreducible, in a well-drained interval, a relation of the following form can be inverted for the rock fabric number:

\[ \log_{10}\CpRFN = \frac{3.1107 + 1.8834\,\log_{10}\phit + \log_{10}\Sw}{3.0634 + 1.4045\,\log_{10}\phit} \]

I could not tie these constants to a publication. Use the permeability form where core permeability exists, and treat the saturation form as a calibration aid only.

Symbol Variable Units Typical range
\(\phi_{ip}\) Interparticle porosity v/v 0.02 to 0.35
\(k\) Permeability mD 0.0001 to 10000
\(RFN\) Rock fabric number dimensionless 0.5 to 4
\(\mathrm{class}\) Lucia class number dimensionless 1 to 3
\(\phi_t\) Total porosity v/v 0 to 0.40
\(S_w\) Water saturation v/v 0 to 1

Single-value calculator

Behavior

The plot shows the rock fabric number falling as permeability rises, because at a given porosity a more permeable rock has coarser pores. At an interparticle porosity of 0.15 it is 3.19 at 1 mD, 2.06 at 10 mD, 1.33 at 100 mD and 0.86 at 1000 mD, so permeabilities from about 1 to 100 mD fall in classes 3 to 1. At 0.01 mD the unclamped value is above 4 and the result is limited to 4. The three curves show that, at the same permeability, a higher porosity gives a higher rock fabric number: at 10 mD it is 1.24 at a porosity of 0.08, 2.06 at 0.15 and 3.19 at 0.25. A rock that has to be more porous to reach the same permeability has finer pores.

Parameter guidance

Interparticle porosity is total porosity less the separate-vug porosity (see Sonic-Derived Secondary Porosity). In rock with no significant vugs it is the total porosity. Permeability is core permeability, in mD, at the same depth and scale as the porosity. Where the class is assigned from a core description, it is the description that sets the class, and the porosity-permeability form is used to check it and to refine the number inside the class. The relation is not used below an interparticle porosity of 0.04. Which RFN to carry forward is a choice among a core-based value, one solved from permeability and one solved from saturation, as discussed on the step page. How the number then constrains saturation and Swirr is covered on Sw from Lucia and Swirr from Lucia.

Worked example

Rock fabric number for a range of core samples, and the permeability that the same relation predicts back from a rock fabric number of 2 (a round trip check):

import math
L = math.log10
def rfn(phi, k):
    x = (9.7892 + 8.6711 * L(phi) - L(k)) / (12.0838 + 8.2965 * L(phi))
    return min(4.0, max(0.5, 10 ** x))
def perm(r, phi):
    return 10 ** (9.7892 - 12.0838 * L(r) + (8.6711 - 8.2965 * L(r)) * L(phi))
print(f"{'phi_ip':>7} {'k (mD)':>8} {'RFN':>6} class")
for phi, k in [(0.15, 100), (0.15, 10), (0.15, 1), (0.08, 10), (0.25, 10), (0.10, 1)]:
    r = rfn(phi, k)
    print(f"{phi:7.2f} {k:8.1f} {r:6.2f} {1 if r <= 1.5 else 2 if r <= 2.5 else 3}")
k2 = perm(2.0, 0.15)
print(f"RFN 2 at porosity 0.15 gives {k2:.2f} mD; solving back gives RFN {rfn(0.15, k2):.3f}")
print(f"RFN 1, 2, 3, 4 at 0.15: " + ", ".join(f"{perm(r, 0.15):.2f}" for r in (1, 2, 3, 4)) + " mD")
# empirical saturation form (unverified constants)
sw_rfn = lambda phi, sw: 10 ** ((3.1107 + 1.8834 * L(phi) + L(sw)) / (3.0634 + 1.4045 * L(phi)))
print("RFN from Sw at porosity 0.15, Sw 0.1, 0.2, 0.4: " + ", ".join(f"{sw_rfn(0.15, s):.2f}" for s in (0.1, 0.2, 0.4)))

Output

 phi_ip   k (mD)    RFN class
   0.15    100.0   1.33 1
   0.15     10.0   2.06 2
   0.15      1.0   3.19 3
   0.08     10.0   0.57 1
   0.25     10.0   3.19 3
   0.10      1.0   1.97 2
RFN 2 at porosity 0.15 gives 11.62 mD; solving back gives RFN 2.000
RFN 1, 2, 3, 4 at 0.15: 441.58, 11.62, 1.38, 0.31 mD
RFN from Sw at porosity 0.15, Sw 0.1, 0.2, 0.4: 1.96, 2.83, 4.07

Assumptions and limitations

  • Porosity is interparticle porosity. In vuggy rock, total porosity overstates the interparticle pore space and gives a rock fabric number that is too high.
  • The porosity-permeability relation holds for the rock types and permeability range that Lucia's data covered. Fractured and highly vuggy rock plot off it.
  • One rock fabric number describes the interval. Beds of different class mixed in a log-scale interval give an average that no single bed has.
  • Core permeability is matrix permeability at reservoir stress, from plugs at the same depth as the porosity.
  • The class boundaries at 1.5 and 2.5 and the particle size cut-offs are conventions, so a sample near a boundary is a judgement.

QC checks

  • RFN solved from core falls inside 0.5 to 4 for most samples. Many values at the limits mean the porosity is wrong (vugs) or the permeability is from fractures.
  • Class from the permeability solution agrees with the class from thin-section description. A systematic mismatch points to the porosity type.
  • On a porosity-permeability cross-plot, samples of one class fall along one line, and lines of the three classes are separated by about one order of magnitude of permeability.
  • Round trip: the permeability computed from the solved RFN returns the input permeability unless the RFN was limited.
  • RFN varies with facies and diagenesis, not as noise from sample to sample.

Going Deeper

Lucia's classification was an attempt to give carbonate petrophysics the geological control that grain size gives in sandstone. Because carbonate pore structure is changed by diagenesis, lithology does not control permeability, but the size of the particles that bound the interparticle pores does, together with the fraction of the pore space that is interparticle. The rock fabric number is a continuous version of the three classes, so that permeability and capillary behaviour can be computed from porosity without stepping at class boundaries. Separate vugs are treated apart: they add porosity and storage but little flow, and they are what the Lucia m and secondary porosity pages deal with. The saturation-based solution used in some implementations has no source that I could cite, and its values are low enough that it only makes sense for rock far above the free water level.

References

  1. Lucia, F.J., 1995. Rock-fabric/petrophysical classification of carbonate pore space for reservoir characterization. AAPG Bulletin, 79(9), 1275–1300.
  2. Lucia, F.J., 2007. Carbonate Reservoir Characterization: An Integrated Approach, 2nd edition. Springer-Verlag, Berlin Heidelberg.
  3. Jennings, J.W. and Lucia, F.J., 2003. Predicting permeability from well logs in carbonates with a link to geology for interwell permeability mapping. SPE Reservoir Evaluation & Engineering, 6(4), 215–225.

Python reference implementation

Python reference implementation

The Python reference implementation is available to registered users with a verified email address. Register or sign in to view it.