Log interpretation and formation evaluation skill covering the full workflow
from raw log curves to reservoir properties. Calibrated for Appalachian
unconventionals (Marcellus, Utica) with general applicability.
Important: Results depend on accurate matrix and fluid parameters. Always
calibrate to core data where available. Equations assume clean sand/carbonate
matrix unless shale corrections are explicitly applied.
Module 1 — Shale Volume (Vsh)
Gamma Ray Index
def gr_index(gr, gr_clean, gr_shale):
"""
IGR = (GR - GR_clean) / (GR_shale - GR_clean)
gr, gr_clean, gr_shale: gamma ray in API units
Returns IGR clamped to [0, 1]
"""
igr = (gr - gr_clean) / (gr_shale - gr_clean)
return max(0.0, min(1.0, igr))
def dynamic_moduli(dtc, dts, rhob):
"""
dtc: compressional slowness (us/ft)
dts: shear slowness (us/ft)
rhob: bulk density (g/cc)
Returns: (E_gpa, nu) dynamic Young's modulus and Poisson's ratio
"""
vp = 304800.0 / dtc # ft/s
vs = 304800.0 / dts # ft/s
rho = rhob * 1000.0 # kg/m3
vp_m = vp * 0.3048 # m/s
vs_m = vs * 0.3048 # m/s
mu = rho * vs_m**2 # shear modulus (Pa)
r2 = (vp_m / vs_m)**2
E = mu * (3*r2 - 4) / (r2 - 1) / 1e9 # GPa
nu = (r2 - 2.0) / (2.0 * (r2 - 1.0))
return E, nu
Note: Dynamic-to-static correction: E_static ≈ 0.4–0.7 × E_dynamic for
shales. Use core measurements to calibrate before geomechanical modeling.
Marcellus brittleness reference:
Interval
E (GPa)
PR
Brittleness (%)
Upper Marcellus
20–35
0.22–0.30
25–45
Lower Marcellus
30–50
0.18–0.25
40–60
Union Springs
35–55
0.20–0.28
40–60
Onondaga Limestone
50–70
0.25–0.30
55–75
Module 6 — Net Pay Cutoffs
def net_pay(depths, vsh_log, phi_log, sw_log,
vsh_cut=0.35, phi_cut=0.05, sw_cut=0.60,
dz=0.5):
"""
Returns gross thickness, net pay thickness, and N/G ratio.
dz: sample interval (ft) — default 0.5 ft for digital logs
"""
gross = len(depths) * dz
pay_intervals = [(d, vsh, phi, sw)
for d, vsh, phi, sw
in zip(depths, vsh_log, phi_log, sw_log)
if vsh <= vsh_cut and phi >= phi_cut and sw <= sw_cut]
net = len(pay_intervals) * dz
return {
"gross_ft": gross,
"net_ft": net,
"net_gross": net / gross if gross > 0 else 0,
"pay_intervals": pay_intervals
}
Typical Appalachian cutoffs:
Parameter
Conventional gas
Marcellus
Utica/PP
Vsh max
0.35
0.50
0.60
Porosity min
0.06
0.04
0.04
Sw max
0.60
0.75
0.70
Output Format
## Formation Evaluation — [Formation], [Well Name/API]
**Interval:** X,XXX – X,XXX ft MD | **Logged:** [curves available]
### Log Quality Check
| Curve | Min | Max | Mean | Issues |
|-------|-----|-----|------|--------|
| GR (API) | | | | |
| RHOB (g/cc) | | | | |
| NPHI (frac) | | | | |
| RT (ohm-m) | | | | |
### Petrophysical Summary (Net Pay)
| Property | Value | Method |
|----------|-------|--------|
| Net pay (ft) | | Vsh/phi/Sw cutoffs |
| Average phi_ND | | N-D crossplot |
| Average Sw | | Archie |
| Swirr estimate | | Buckles / Timur |
| Brittleness avg (%) | | Rickman |
### Parameter Assumptions
- GR_clean / GR_shale: XX / XX API
- Matrix: [sandstone / limestone / mixed]
- Rw: X.XX ohm-m (source: [DST / database / salinity gradient])
- a / m / n: 1.0 / 2.0 / 2.0 (note if shaly-sand correction applied)
### Confidence: [HIGH / MEDIUM / LOW]
[Note any data quality issues, missing curves, or calibration gaps]
Error Handling
Condition
Cause
Action
phi_D < 0
RHOB > rho_matrix (heavy mineral or bad hole)
Check caliper; flag washout
Sw > 1.0
Rw too low or Rt too high
Verify Rw; check invasion
Sw < 0
Negative discriminant (Simandoux)
Use Archie or Indonesian equation
Highly variable BVW
Transition zone
Flag water production risk
Brittleness > 100%
Moduli out of range
Check DTS/DTC data quality
Caveats
Archie's equation assumes shale-free formation. In organic shales (Marcellus,
Utica), TOC contributes independent conductivity — Archie Sw is unreliable.
Use as a relative indicator only; calibrate to core.
Dynamic Young's modulus from sonic logs exceeds static lab values by 20–100%.
Apply dynamic-to-static correction before using in geomechanical or frac models.
Larionov corrections reduce IGR-to-Vsh conversion; linear method overestimates
shale content and underestimates net pay.
All cutoff values are formation-specific. Values here are starting points —
always calibrate to production data and core measurements.
Log quality in horizontal wells can be poor due to invasion, tool standoff,
and borehole geometry; evaluate LQC before interpretation.