CamPetro

Neutron-Density Porosity

On this page

Summary

Neutron-density porosity combines the Density porosity with the Neutron porosity into a single estimate. The two logs respond differently to lithology, clay and gas, so their combination is less sensitive to each of those than either alone. Use the average in liquid-filled rock and the RMS form where gas is possible.

Inputs and outputs

Item Units
Input Neutron porosity v/v
Input Bulk density g/cm³
Input Matrix density g/cm³
Input Pore fluid density g/cm³
Output Density porosity v/v
Output Neutron-density porosity (average) v/v
Output Neutron-density porosity (RMS) v/v

Equations

Density porosity is computed from the bulk density as on the Density Porosity page:

\[ \phiDen = \frac{\rhoMa - \rhob}{\rhoMa - \rhoFl} \]

The arithmetic average combines it with the neutron porosity:

\[ \phiNDa = \frac{\phiDen + \phiN}{2} \]

and the root-mean-square form is:

\[ \phiNDr = \sqrt{\frac{\phiDen^{2} + \phiN^{2}}{2}} \]

Both are limited to the interval 0 to 1. The neutron porosity must be on the same lithology scale as the matrix density, for example the limestone scale with a limestone matrix. If it is not, convert it first.

Symbol Variable Units Typical range
\(\phi_N\) Neutron porosity v/v -0.02 to 0.60
\(\rho_b\) Bulk density g/cm³ 1.8 to 3.0
\(\rho_{ma}\) Matrix density g/cm³ 2.65 to 2.87
\(\rho_f\) Pore fluid density g/cm³ 0.2 to 1.2
\(\phi_D\) Density porosity v/v 0 to 0.40
\(\phi_{ND}\) Neutron-density porosity (average) v/v 0 to 0.40
\(\phi_{ND,rms}\) Neutron-density porosity (RMS) v/v 0 to 0.40

Single-value calculator

Behavior

The plot holds the bulk density at 2.30 g/cm³, which gives a density porosity of 0.212, and sweeps the neutron porosity. Where the neutron porosity agrees with the density porosity (0.22) the average and RMS are the same, 0.216. As the neutron porosity falls, as it does in gas, the average follows it down in a straight line and the RMS falls more slowly: at 0.12 they are 0.166 and 0.172, and at 0.05 they are 0.131 and 0.154. The RMS is never below the average, and the gap is largest when one of the two is far from the other: at this density it reaches 0.044 when the neutron reads zero. The RMS form removes part of the gas effect but not all of it, so neither form replaces a real gas correction.

Parameter guidance

Matrix and fluid density are the same picks as for density porosity and are shared with it. Neutron lithology scale. Check the units of the neutron curve. A curve on a sandstone scale used with a limestone matrix, or the reverse, is a systematic error of several porosity units.

Average or RMS. Use the average where the rock is liquid-filled. Use the RMS where gas is likely or the zone is unknown. Where the two logs agree the two forms are identical; where they disagree the RMS is higher, by up to 0.044 at the density used in the plot. The RMS also cannot be negative: a negative neutron reading is squared and read as positive, so do not use it in very tight rock without a check.

Crossplot view. Plotted as neutron porosity against bulk density, water-bearing clean rock of one lithology falls on a straight line between the matrix point and the fluid point. Gas moves points to a lower neutron porosity at a given bulk density, clay moves them toward higher neutron porosity, and a change of lithology moves them to another line. Reading the crossplot gives porosity and an apparent matrix density together, which is the idea that the mineral inversion generalizes.

Worked example

Three rocks with the same bulk density of 2.30 g/cm³ and decreasing neutron porosity, followed by a simple gas flag:

import math

def phi_d(rhob, rho_ma=2.65, rho_f=1.0):
    return (rho_ma - rhob) / (rho_ma - rho_f)

print(f"{'case':26s} {'rhob':>5s} {'nphi':>5s} {'phi_D':>6s} {'average':>8s} {'RMS':>6s}")
for case, rhob, nphi in (("water-bearing, agree", 2.30, 0.22),
                         ("moderate gas effect", 2.30, 0.12),
                         ("strong gas effect", 2.30, 0.05)):
    pd = phi_d(rhob)
    avg = (pd + nphi) / 2
    rms = math.sqrt((pd ** 2 + nphi ** 2) / 2)
    print(f"{case:26s} {rhob:5.2f} {nphi:5.2f} {pd:6.3f} {avg:8.3f} {rms:6.3f}")
print()
print("Gas flag: neutron porosity below density porosity by more than 0.03:")
for nphi in (0.22, 0.12, 0.05):
    print(f"  nphi {nphi:4.2f}: phi_D - nphi = {phi_d(2.30) - nphi:+.3f}  flag = {phi_d(2.30) - nphi > 0.03}")

Output

case                        rhob  nphi  phi_D  average    RMS
water-bearing, agree        2.30  0.22  0.212    0.216  0.216
moderate gas effect         2.30  0.12  0.212    0.166  0.172
strong gas effect           2.30  0.05  0.212    0.131  0.154

Gas flag: neutron porosity below density porosity by more than 0.03:
  nphi 0.22: phi_D - nphi = -0.008  flag = False
  nphi 0.12: phi_D - nphi = +0.092  flag = True
  nphi 0.05: phi_D - nphi = +0.162  flag = True

Assumptions and limitations

  • One matrix and one fluid for both logs. A lithology change moves the density and neutron porosity apart in a way that looks like gas or clay.
  • Gas is absent, or has been handled by the RMS form or a separate correction. In gas both logs read wrong, but in opposite directions, and the average partly cancels them.
  • The neutron curve has been environmentally corrected and is on the stated lithology scale.
  • Clay is read as porosity by both logs, so the result is a total porosity. The neutron reads more of it than the density does.
  • The two tools have different volumes of investigation and vertical resolution, so thin beds are not read identically.

QC checks

  • The two porosities track each other in clean, liquid-filled rock. Systematic separation with neutron above density means clay or a lithology with a different matrix.
  • Neutron below density by more than a few porosity units across a porous clean interval flags gas. Check against resistivity and the hydrocarbon indicators, and use the RMS form or a correction there.
  • The result compares with core porosity without a trend against clay volume or depth.
  • Neither log is out of range: no density below the fluid density and no neutron porosity below the matrix reading without an explanation.

Going Deeper

Neutron-density combination is the oldest and most used porosity method because the two errors partly cancel. In a clean water-filled rock the logs agree on the correct lithology scale. Shale raises the neutron porosity more than the density porosity, and gas lowers the neutron porosity by much more than the density porosity, so the sign of the separation is diagnostic. Weighted combinations that give the density log more weight in gas are used in practice, for example the weighting of Gaymard and Poupon, but they need the weights to be chosen for the formation, and the RMS form is a parameter-free alternative.

References

  1. Asquith, G. and Krygowski, D., 2004. Basic Well Log Analysis, 2nd edition. AAPG Methods in Exploration Series 16, American Association of Petroleum Geologists, Tulsa, OK.
  2. Schlumberger, Log Interpretation Charts. Schlumberger, Houston, Texas (updated periodically).
  3. Gaymard, R. and Poupon, A., 1968. Response of neutron and formation density logs in hydrocarbon bearing formations. The Log Analyst, 9(5), 3–12.

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.