CamPetro

TOC from Passey ΔlogR

On this page

Summary

The Passey method finds organic-rich rock from the separation between the resistivity curve and a porosity curve that has been scaled to overlay it in organic-lean rock. That ΔlogR separation is converted to Total organic carbon with a factor that depends on the Level of organic maturity. Use it when a resistivity curve and one porosity log are available and the interval is not a hydrocarbon-bearing reservoir.

Inputs and outputs

Item Units
Input True formation resistivity ohm·m
Input Resistivity baseline ohm·m
Input Compressional slowness µs/ft
Input Sonic baseline µs/ft
Input Level of organic maturity dimensionless
Output ΔlogR separation decades (dimensionless)
Output Total organic carbon wt%

Equations

The separation is measured against a baseline picked in organic-lean shale, where the curves overlay one another. There is one form per porosity log:

\[ \dlogR = \log_{10}\!\left(\frac{\Rt}{\RtBase}\right) + 0.02\,\left(\dtc - \dtBase\right) \qquad \text{(sonic)} \]
\[ \dlogR = \log_{10}\!\left(\frac{\Rt}{\RtBase}\right) - 2.5\,\left(\rhob - \rhobBase\right) \qquad \text{(density)} \]
\[ \dlogR = \log_{10}\!\left(\frac{\Rt}{\RtBase}\right) + 4.0\,\left(\phiN - \phiNBase\right) \qquad \text{(neutron)} \]

The separation is converted to organic carbon with a maturity-dependent factor:

\[ \TOC = \dlogR \times 10^{\,2.297 - 0.1688\,\LOM} \]

and the result is limited to the interval 0 to 100 wt%.

Symbol Variable Units Typical range
\(R_t\) True formation resistivity ohm·m 0.2 to 2000
\(R_{t,base}\) Resistivity baseline ohm·m 1 to 20
\(\Delta t\) Compressional slowness µs/ft 40 to 140
\(\Delta t_{base}\) Sonic baseline µs/ft 60 to 110
\(\rho_b\) Bulk density g/cm³ 1.8 to 3.0
\(\rho_{b,base}\) Density baseline g/cm³ 2.4 to 2.8
\(\phi_N\) Neutron porosity v/v -0.02 to 0.60
\(\phi_{N,base}\) Neutron baseline v/v 0.05 to 0.35
\(\Delta\!\log R\) ΔlogR separation decades (dimensionless) 0 to 4
\(\mathrm{LOM}\) Level of organic maturity dimensionless 6 to 14
\(\mathrm{TOC}\) Total organic carbon wt% 0 to 15

Single-value calculator

Behavior

TOC rises with resistivity because a larger separation means more organic matter. The strongest control is maturity: the same separation gives nearly five times as much TOC at an LOM of 8 as at an LOM of 12, because mature organic matter has generated hydrocarbons that raise the resistivity, so less organic carbon is needed to produce the same separation. The plot holds the sonic term fixed and sweeps the resistivity.

Parameter guidance

The method has three groups of inputs.

Baselines. Pick Resistivity baseline and the porosity baseline (Sonic baseline, Density baseline or Neutron baseline) at the same depth, in a thick organic-lean shale where the scaled porosity curve and the resistivity curve overlay each other. The scaling that makes them overlay is 50 µs/ft per decade of resistivity for the sonic, which is the 0.02 above. The density and neutron coefficients, 2.5 and 4.0, are the equivalent scalings for those logs. Use a single baseline over an interval of similar compaction; if the baseline drifts with depth, use a separate baseline per zone.

Maturity. Level of organic maturity comes from measured vitrinite reflectance or from a regional maturity model. See Kerogen Volume and Maturity for the conversion.

Calibration. Compare with core TOC and apply a scaling factor (TOC scaling factor) and a shift (TOC shift) if the log values are systematically off. Calibration is covered on the TOC Analysis page under shared parameter picking.

Worked example

Resistivity of 12 ohm·m against a baseline of 4 ohm·m, with the three porosity logs and baselines below, at an LOM of 10:

import math
rt, rt_base, lom = 12.0, 4.0, 10.0
factor = 10 ** (2.297 - 0.1688 * lom)
variants = {
    'sonic':   0.02 * (95.0 - 80.0),        # dt 95, baseline 80 us/ft
    'density': -2.5 * (2.45 - 2.65),        # rhob 2.45, baseline 2.65 g/cm3
    'neutron': 4.0 * (0.20 - 0.15),         # nphi 0.20, baseline 0.15
}
print(f"resistivity term = log10({rt:g}/{rt_base:g}) = {math.log10(rt / rt_base):.3f}")
print(f"maturity factor at LOM {lom:g} = {factor:.2f}")
for name, porosity_term in variants.items():
    dlogr = math.log10(rt / rt_base) + porosity_term
    print(f"{name:8s} dlogR = {dlogr:.3f}   TOC = {dlogr * factor:.2f} wt%")

Output

resistivity term = log10(12/4) = 0.477
maturity factor at LOM 10 = 4.06
sonic    dlogR = 0.777   TOC = 3.16 wt%
density  dlogR = 0.977   TOC = 3.97 wt%
neutron  dlogR = 0.677   TOC = 2.75 wt%

Assumptions and limitations

  • The baseline interval is organic-lean and the resistivity and scaled porosity curves overlay one another there. If the baseline is picked in an organic-rich interval, TOC is underestimated.
  • The resistivity separation comes from organic matter, not from hydrocarbons in the pore space of a reservoir. In a porous, hydrocarbon-bearing interval the method overestimates TOC.
  • In immature rock the resistivity does not respond to the organic matter, and only the porosity-curve term contributes. The factor for low LOM then overstates the result.
  • Conductive minerals such as pyrite lower the resistivity and cause TOC to be underestimated. Washouts and gas affect the porosity curves.
  • The baseline and the compaction state do not change over the interval being evaluated.

QC checks

  • ΔlogR is close to zero in the baseline interval and non-negative in rock that is not a source.
  • The resistivity and scaled porosity curves visibly overlay in organic-lean rock and separate in organic-rich rock.
  • TOC compares with core TOC with no strong bias. A slope or offset on a cross-plot points to the baseline, the LOM or the calibration.
  • Results are not driven by washouts, sonic cycle skips or hydrocarbon-bearing reservoir intervals.
  • Sonic, density and neutron variants give similar results where all three logs are good.

Going Deeper

The method was published by Passey and co-authors in 1990. It is a graphical overlay technique first: a porosity curve is scaled so that it tracks the resistivity in organic-lean rock, and the separation in organic-rich rock is read as organic richness. The conversion to TOC added the maturity dependence. Practical variants replace the constant resistivity baseline with one calculated continuously from porosity, so that the baseline follows changes in compaction and porosity along the well. At very high maturity the response can weaken, because the organic matter becomes more conductive, so the resistivity term is a less reliable indicator in overmature rock.

References

  1. Passey, Q.R., Creaney, S., Kulla, J.B., Moretti, F.J. and Stroud, J.D., 1990. A practical model for organic richness from porosity and resistivity logs. AAPG Bulletin, 74(12), 1777–1794.

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.