CamPetro

Neutron Tool Selection

On this page

Summary

A neutron log from one tool does not read like a neutron log from another, because the response depends on the tool design, the borehole and the matrix. Choosing the right correction needs the Neutron tool family, the tool size, the Lithology scale of the curve, the borehole fluid and the salinities. This page gives the procedure for collecting those facts, choosing an Environmental correction chart or algorithm, and detecting a wrong choice.

Inputs and outputs

Item Notes
Input The neutron curve and its mnemonic And whether it is raw, partly or fully corrected
Input Service company, tool name and generation, tool diameter From the header or the log heading
Input Wireline or LWD, and the lithology scale of the curve Limestone, sandstone or dolomite
Input Hole size and caliper, mud type, weight and salinity, temperature At the time of logging
Input Formation water salinity Expected
Input Density and caliper curves, and a clean interval of known lithology For checking
Output The chosen correction and its settings With the reasons
Output A porosity on a stated lithology scale Or the curve left as delivered, with the reason
Output A confidence statement Based on the checks

Equations

There is no single equation, because the correction for a neutron log is tool-specific and is published as charts or algorithms, not as one formula. In general terms, the corrected value is a function of the raw reading and the conditions:

\[ \phiN^{\mathrm{corr}} = f_{\mathrm{tool}}\left(\phiN^{\mathrm{raw}},\; d_h,\; w_m,\; S_m,\; S_f,\; T,\; P,\; \ldots\right) \]

where \(d_h\) is the hole size (with the tool diameter and standoff), \(w_m\) the mud weight, \(S_m\) the borehole fluid salinity, \(S_f\) the formation salinity, \(T\) the temperature and \(P\) the pressure. The function \(f_{\mathrm{tool}}\) is specific to the tool model, and the coefficients must come from that tool's published charts. They are not given here.

A conversion between lithology scales is chart-based for a neutron log, because the response to the matrix is nonlinear. For density, it is exact, and the density porosity on a matrix \(\rho_{ma}\) with fluid density \(\rho_f\) is

\[ \phi_D = \frac{\rhoMa - \rhob}{\rhoMa - \rho_f} \]

which is how the density scale can be changed (limestone 2.71, sandstone 2.65, dolomite 2.87 g/cm³ are the usual scale densities). It is also the check used below.

The procedure has five steps.

  1. Collect the facts: tool family and model, diameter, wireline or LWD, curve mnemonic and lithology scale, hole size, mud properties, temperature, and formation water salinity.
  2. Decide what has already been done to the curve. A curve may be raw, corrected for some effects, or fully environmentally corrected, and the heading or the vendor documentation says which. Apply only what is missing.
  3. Choose the correction that matches the exact tool and the conditions. If the tool is not known, use the vendor's generic correction and record that the result is less certain.
  4. Convert to the lithology scale the interpretation needs, and state the scale with the curve.
  5. Check the result against density in a clean interval of known lithology, and against the caliper. If it fails, change one thing at a time and repeat.
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

Single-value calculator

No calculator: this method is a procedure, not a single equation.

Behavior

The first part of the example converts one density, 2.50 g/cm³, to porosity on three scales: 0.1228 on limestone, 0.0909 on sandstone and 0.1979 on dolomite. The same rock reads 11 porosity units different between the sandstone and dolomite scales, which is the size of error from a wrong scale. The second part compares four candidate corrections against the density porosity of a clean limestone interval with a caliper of 8.5 to 10.4 in. The candidates are hypothetical and the data are synthetic, with a constant offset and a hole-size effect planted in the neutron curve. The uncorrected curve (A) has a bias of +0.030 and an RMS of 0.032. Candidate B, a hole-size term that is too small, has +0.028 and 0.030. Candidate D removes the offset, so the bias drops to +0.005 and the RMS to 0.011, but the slope against caliper is unchanged at +0.0102 per inch. Candidate C removes both and gets a bias of -0.000, an RMS of 0.008 and a slope of -0.0018. The bias alone would have made D look acceptable, and only the slope against caliper shows that the hole-size effect remains.

Parameter guidance

Tool family. The main families are, in general terms:

Family How it measures What to remember
Sidewall epithermal A pad on the borehole wall, detecting epithermal neutrons Pad contact and mud cake matter. Less sensitive to salinity absorbers than a thermal tool, but strongly affected by standoff.
Compensated thermal (wireline) Near and far detectors, thermal neutron counts, ratio converted to porosity The most common. Responds to neutron absorbers in the formation and the hole. Needs hole, mud and salinity corrections matching the model.
LWD thermal or epithermal Detectors on a drill collar, rotating Different geometry and standoff behaviour from wireline, and a different correction set. Not interchangeable with a wireline chart.

Within a family, each model and tool diameter has its own charts. A correction for one diameter of a tool cannot be reused for another.

Tool size and hole size. Both set the standoff and the volume of borehole fluid seen. Use the caliper over the interval and not a nominal bit size.

Lithology scale. A neutron curve states the matrix on which the instrument transform was calibrated. Read it from the heading or the header. It is usually limestone. Converting to another scale with a chart, not a constant offset, is the safe choice, and the conversion should not be applied twice.

Borehole fluid and salinity. Fresh and saline mud, borehole salinity, mud weight (barite) and formation water salinity change the correction, in different directions for different tool families. Where the chart asks for a salinity that is not known, use a bracket of values and report the range.

Temperature and pressure. Corrections exist for both and grow with depth. Use the bottom-hole or interval values.

Stay generic when the tool is unknown. A generic correction by vendor and fluid type is a fallback with a larger uncertainty. Say so in the result.

See the step page for how this fits with the other cleanup steps, and Vendor and Tool-Specific Mnemonics for recognising the curve.

Worked example

Two parts. First, the exact density conversion between matrix scales. Second, a synthetic clean limestone interval where four hypothetical correction options (none of them any real tool's) are scored against the density porosity, by bias, by RMS and by their slope against the caliper:

import numpy as np

RHO_FLUID = 1.0
MATRIX = {"limestone": 2.71, "sandstone": 2.65, "dolomite": 2.87}   # g/cc, the usual scale densities


def density_porosity(rhob, scale="limestone", rho_fluid=RHO_FLUID):
    """Density porosity on a chosen matrix scale. This conversion is exact, unlike the neutron one."""
    return (MATRIX[scale] - rhob) / (MATRIX[scale] - rho_fluid)


def residual_stats(nphi_corrected, phi_d, caliper):
    """Check a candidate correction against density porosity in a clean, water-filled limestone interval."""
    r = nphi_corrected - phi_d
    slope = np.polyfit(caliper, r, 1)[0]
    return float(np.mean(r)), float(np.sqrt(np.mean(r ** 2))), float(slope)


if __name__ in ("__main__", "worked_example"):
    # Part 1: the same rock on three matrix scales (density is exact)
    rhob = 2.50
    print(f"bulk density {rhob} g/cc")
    for scale in MATRIX:
        print(f"  density porosity on a {scale:9s} scale: {density_porosity(rhob, scale):.4f}")

    # Part 2: choosing between candidate corrections in a clean limestone, from a synthetic interval
    rng = np.random.default_rng(4)
    n = 240
    phi = np.clip(0.12 + 0.08 * np.sin(np.linspace(0, 14, n)) + rng.normal(0, 0.01, n), 0.01, 0.3)
    caliper = 8.5 + np.abs(rng.normal(0, 0.6, n))
    phi_d = density_porosity(2.71 - phi * (2.71 - RHO_FLUID) + rng.normal(0, 0.005, n))
    # The delivered neutron curve carries a constant offset and a hole-size effect that the (hidden) right
    # correction would remove. These numbers belong to this synthetic example only.
    delivered = phi + 0.025 + 0.012 * (caliper - 8.5) + rng.normal(0, 0.008, n)
    candidates = {  # hypothetical correction options, not the coefficients of any real tool
        "A  none (curve used as delivered)": delivered,
        "B  hole-size term only, too small": delivered - 0.004 * (caliper - 8.5),
        "C  offset and hole-size term": delivered - 0.025 - 0.012 * (caliper - 8.5),
        "D  offset only": delivered - 0.025,
    }
    print()
    print(f"{'candidate':36s} {'bias':>7} {'rms':>7} {'slope vs caliper (per in)':>26}")
    for name, c in candidates.items():
        bias, rms, slope = residual_stats(c, phi_d, caliper)
        print(f"{name:36s} {bias:+7.3f} {rms:7.3f} {slope:+26.4f}")
    print()
    print(f"caliper range in the interval: {caliper.min():.1f} to {caliper.max():.1f} in")

Output

bulk density 2.5 g/cc
  density porosity on a limestone scale: 0.1228
  density porosity on a sandstone scale: 0.0909
  density porosity on a dolomite  scale: 0.1979

candidate                               bias     rms  slope vs caliper (per in)
A  none (curve used as delivered)     +0.030   0.032                    +0.0102
B  hole-size term only, too small     +0.028   0.030                    +0.0062
C  offset and hole-size term          -0.000   0.008                    -0.0018
D  offset only                        +0.005   0.011                    +0.0102

caliper range in the interval: 8.5 to 10.4 in

Assumptions and limitations

  • The interval used for checking is a clean, water-filled limestone of known lithology, and the density curve is good and in gauge. Neither is certain.
  • The tool is known well enough to choose a chart. If it is not, the correction is generic and uncertain.
  • The curve is not already corrected. Applying a correction twice is one of the commonest errors.
  • The hole conditions at the time of logging (mud, salinity, temperature) were recorded correctly.
  • Density and neutron measure the same rock at the same depth. After depth matching, differences in vertical resolution still cause differences at thin beds.

QC checks

  • In clean limestone with water-filled pores, the neutron on the limestone scale agrees with the density porosity on the limestone scale, to within a few porosity units.
  • Tight, non-porous rock (anhydrite, salt, dense carbonate) reads near zero on the neutron. A large positive value there points to a wrong correction, a wrong scale or a mineral with bound hydrogen (gypsum, for example).
  • The corrected neutron does not correlate with the caliper in a clean interval. A slope against the hole size, as in the example, shows an uncorrected or mis-corrected hole effect.
  • There is no step in the neutron at a run or tool change that is not in the density. A step at a tool change suggests different corrections for the two runs.
  • Gas and shale have the expected neutron-density behaviour: the neutron reads lower than the density porosity in gas, and higher in shale.
  • The lithology scale is stated with the curve, and the result is not converted twice.

Going Deeper

A neutron tool measures the hydrogen index of the formation by counting neutrons that have been slowed by hydrogen nuclei. The raw count is turned into porosity by a transform fixed by the manufacturer for a reference hole, a reference fluid and a reference matrix. Everything that differs from that reference, from the hole size to the salinity of the water, changes the count without changing the hydrogen index of the pores, and that is what an environmental correction removes. Different manufacturers use different source strengths, spacings, detector types and energy windows, and different transforms and correction sets, which is why a curve named 'neutron porosity' is not one thing. Many interpretations use a tool-specific chart book published by the manufacturer; the most reliable method is the one that matches the tool, its generation and the conditions. In practice, an exact match is often not available, and the check against density in a known lithology is the way to find out how well the chosen correction works.

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. Rider, M. and Kennedy, M., 2011. The Geological Interpretation of Well Logs, 3rd edition. Rider-French Consulting Ltd, Sutherland, UK.

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.