CamPetro

Lucia

On this page

Summary

Lucia's rock-fabric approach gives the Water saturation of a carbonate reservoir rock from its porosity, its Height above free water level and its Rock fabric number, which sets the pore-size class of the rock. It is a capillary-pressure based saturation-height relation, not a resistivity equation: resistivity enters only when the rock fabric is calibrated. Use it in carbonates where Archie's constant exponents fail and where the rock fabric can be identified.

Inputs and outputs

Item Units
Input Total porosity v/v
Input Height above free water level ft
Input Rock fabric number dimensionless
Output Water saturation v/v

Equations

For each rock-fabric class, water saturation is a power function of height above the free water level and of porosity:

\[ \Sw = A\,\hFWL^{\,-B}\,\phit^{\,-C} \]

The constants depend on the class, which is set by the rock fabric number \(\CpRFN\):

Class Rock fabric number A B C Typical rock
1 0.5 to 1.5 0.02219 0.316 1.745 Grain-dominated, large pores
2 1.5 to 2.5 0.1404 0.407 1.440 Grain-dominated packstone
3 2.5 to 4.0 0.6110 0.505 1.210 Mud-dominated, small pores

The result is limited to the interval 0 to 1. Height is in feet and porosity is a fraction. The relation describes the transition zone and the irreducible saturation above it, and it has no solution at zero height. When a log-derived saturation is also available, Archie with a variable \(m\) can be used to solve for the rock fabric number (the value that makes the two agree).

Symbol Variable Units Typical range
\(h\) Height above free water level ft 0 to 1000
\(\phi_t\) Total porosity v/v 0 to 0.40
\(RFN\) Rock fabric number dimensionless 0.5 to 4
\(S_w\) Water saturation v/v 0 to 1

Single-value calculator

Behavior

Water saturation falls with height and with porosity, and the rock fabric number sets the level. At 15% porosity, a class 1 rock (RFN 1) has Sw of 0.294, 0.177, 0.142 and 0.114 at heights of 10, 50, 100 and 200 ft above the free water level. A class 2 rock (RFN 2) has 0.845, 0.439, 0.331 and 0.250, and a class 3 rock (RFN 3) has 1.0 (limited), 0.841, 0.593 and 0.418. At 100 ft the three classes differ by a factor of four, from 0.14 to 0.59. Class 3 stays at 1 up to about 36 ft: a mud-dominated rock needs a longer column to hold any hydrocarbon.

Parameter guidance

Rock fabric number is the main input. It comes from core (capillary pressure or petrographic description) or from log-based calibration, and is held constant in a zone. Height above the free water level is from the depth and the free water level, which should be picked from pressure data or the oil-water contact. Porosity: Lucia's relations were developed for interparticle porosity. Where separate vugs are significant, use the interparticle porosity (total minus separate-vug porosity), which can be estimated from the difference between total porosity and sonic porosity. Total porosity from the Porosity step is the simple choice for rocks with little vuggy porosity. In a resistivity-based calculation in the same rock, Lucia also proposed a cementation exponent that rises with the separate-vug fraction (see Going Deeper). The step page (Water Saturation) explains where this method fits. See also Swirr from Lucia, which uses the same relations at the top of the column.

Worked example

Water saturation at 15% porosity for the three classes at several heights, and the effect of porosity at one height:

def sw_lucia(phi, h, rfn):
    if rfn <= 1.5:
        s = 0.02219 * h ** -0.316 * phi ** -1.745
    elif rfn <= 2.5:
        s = 0.1404 * h ** -0.407 * phi ** -1.440
    else:
        s = 0.6110 * h ** -0.505 * phi ** -1.210
    return min(1.0, max(0.0, s))

print(f"{'h (ft)':>7} {'RFN 1':>7} {'RFN 2':>7} {'RFN 3':>7}   (porosity 0.15)")
for h in (10, 50, 100, 200):
    print(f"{h:7d} {sw_lucia(0.15, h, 1.0):7.3f} {sw_lucia(0.15, h, 2.0):7.3f} {sw_lucia(0.15, h, 3.0):7.3f}")

print()
print("Porosity effect at h = 100 ft, RFN 2:")
for phi in (0.08, 0.12, 0.16, 0.20, 0.25):
    print(f"  porosity {phi:.2f}   Sw = {sw_lucia(phi, 100.0, 2.0):.3f}")

# height at which class 3, 15% porosity first drops below 1
h = 1.0
while sw_lucia(0.15, h, 3.0) >= 1.0:
    h += 0.1
print(f"class 3 at 15% porosity reaches Sw < 1 at about {h:.1f} ft")

Output

 h (ft)   RFN 1   RFN 2   RFN 3   (porosity 0.15)
     10   0.294   0.845   1.000
     50   0.177   0.439   0.841
    100   0.142   0.331   0.593
    200   0.114   0.250   0.418

Porosity effect at h = 100 ft, RFN 2:
  porosity 0.08   Sw = 0.818
  porosity 0.12   Sw = 0.456
  porosity 0.16   Sw = 0.302
  porosity 0.20   Sw = 0.219
  porosity 0.25   Sw = 0.159
class 3 at 15% porosity reaches Sw < 1 at about 35.6 ft

Assumptions and limitations

  • Capillary equilibrium: the reservoir is in vertical capillary equilibrium with the free water level, so saturation depends on height only through the capillary relation.
  • The rock fabric number is correct and constant in the zone. A mixed zone of different classes needs a layer-by-layer assignment.
  • The relation holds for the porosity range and the fluid pair of the data it was fitted to. Different hydrocarbon densities change the pressure at a given height. Check whether the heights are for oil-water or gas-water.
  • Porosity is the interparticle porosity. Separate vugs add porosity that carries no capillary-pressure signal.
  • A free water level is known. Where it is not, the result is not meaningful.

QC checks

  • Sw falls with height above the free water level, and is 1 or near 1 at the free water level.
  • Sw from this relation agrees with resistivity-based Sw (Archie with an appropriate m) in clean parts of the reservoir. A systematic offset means the rock fabric number or the free water level is wrong.
  • The rock fabric number is within 0.5 to 4, and changes in it follow geology (facies, diagenesis), not noise.
  • Core capillary-pressure data, converted to reservoir conditions, plot on the same class curve.
  • Class 3 intervals near the base of a column have Sw close to 1 and do not appear as pay.

Going Deeper

Lucia's rock-fabric classification links pore-size distribution to the geological description of carbonate rock. The key point is that, in carbonates, porosity alone does not predict permeability or saturation, because the same porosity can be coarse and grain-supported or fine and mud-supported. The rock fabric number places a rock on a continuous scale between classes, and from it permeability and saturation are computed with relations fitted to core. In the resistivity branch of the method, Lucia proposed that the cementation exponent rises with the proportion of separate-vug porosity, as \(m = 2.14\,\phi_{sv}/\phi_t + 1.76\), where \(\phi_{sv}\) is the separate-vug porosity (total porosity minus sonic porosity). With a rock fabric number from core, the same classes give saturation-height functions without any resistivity log, which is why the method is often used to cross-check a resistivity-based saturation in carbonates.

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.

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.