Вы находитесь на странице: 1из 3

GEOPHYSICAL TUTORIAL — C O O R D I N AT E D BY M AT T H A L L

Seismic petrophysics: Part 1


Alessandro Amato del Monte 1

W e never seem to have enough data to analyze the com- Pandas also allows us to have a quick glance at all the logs
Downloaded 04/14/15 to 151.96.3.241. Redistribution subject to SEG license or copyright; see Terms of Use at http://library.seg.org/

plexity of the subsurface. The geologist would love to loaded by simply calling logs.describe(), which will output
have hundreds of cores, but the manager will let him have just a table such as this:
one. The geophysicist’s dream is to acquire a new 3D with long
offsets, complete azimuth coverage, and 5-m bins, but she is Stats VP VS rho phi
more likely to be stuck with a couple of 2D lines. count 4117 4117 2701 2701
The idea in this tutorial is to show how to create new data mean 2977 1371 2.22 0.29
starting from what is available so we can make deductions, std 449 297 0.06 0.03
analyze alternative scenarios, and decide whether a certain
min 1440 689 2.04 0.11
variation in lithologic properties would have an impact on
seismic. Specifically, I will show how to create new well-log 25% 2594 1141 2.18 0.28
data. In doing so, I hope to demonstrate how easily this kind of 50% 3036 1415 2.22 0.30
work can be done by all practitioners who dislike “black-box” 75% 3251 1595 2.26 0.31
approaches. max 4431 2428 2.54 0.38
The goal is to create an abstraction of the reservoir rock un-
der study to investigate alternative and plausible scenarios, e.g.,
a change in pore fluids or in some lithologic property such as Create a lithofluid-class log
porosity. The workflows I will show are: What I do first is calculate a lithofluid-class log (LFC) in
which I separate groups of data identified by similar lithologic
• Import well-log data and create a lithology curve log. and/or pore-fluid content. The values of the LFC log will be as-
• Augment data through fluid-replacement modeling. signed following these rules:
• Describe the reservoir through simple statistics.
• Create synthetic data sets that represent different scenarios. 0: Undefined 1: Brine sand 2: Oil sand 3: Gas sand 4: Shale

There is also some data-loading and data-management over- First I need to create the “flag” logs brine _ sand, oil _
head to take care of, so we will focus only on the first item in sand, gas _ sand and shale (these are logs made of 1 or 0,
this article. i.e., True or False in Python) using cutoff values on Vsh (shale
All Python code and data used here is available at http:// volume) and Sw (water saturation):
github.com/seg/tutorials. Please take a minute to look at them
and perhaps follow along by running the code yourself. >>> sand _ cutoff = 0.20
>>> brine _ sand = ((logs.VSH <= sand _ cutoff) & (logs.SW >= 0.9))
>>> oil _ sand = ((logs.VSH <= sand _ cutoff) & (logs.SW < 0.9))
Import well-log data >>> shale = (logs.VSH > sand _ cutoff)
To handle well-log data, I use a Python library called Pan-
das, which makes it very easy to manage and inspect large, com- Notice that we cannot define gas _ sand just yet (occur-
plex data sets. For example, we can load a sample data set from rence of gas sands) because the in situ log did not record any
Avseth et al. (2005) with gas sand. We will deal with that in the next tutorial, on fluid
replacement.
>>> import pandas as pd
These flag logs are then used to create the LFC log:
>>> logs = pd.read _ csv(‘qsiwell2.csv’)
>>> import numpy as np
The term logs refers to a DataFrame, a “container” we can >>> temp _ lfc = np.zeros(np.shape(logs.VSH))
use for all sort of things, such as investigating the depth range >>> temp _ lfc[brine _ sand.values] = 1
or average velocity: >>> temp _ lfc[oil _ sand.values] = 2
>>> temp _ lfc[shale.values] = 4
>>> logs[‘LFC’] = temp _ lfc
>>> print “depth min {0:.2f} m”.format(logs.DEPTH.min())
>>> print “depth max {0:.2f} m”.format(logs.DEPTH.max())
>>> print “Vp average {0:.2f} m/s”.format(logs.VP.mean()) To see how many samples each facies is made of:
depth min 2013.25 m
depth max 2640.53 m >>> string = “brine sst={0}, oil sst={1}, shale={2}”
Vp average 2977.10 m/s >>> data = (np.count _ nonzero(brine _ sand),

1
Milan, Italy. http://dx.doi.org/10.1190/tle34040440.1.

440 THE LEADING EDGE April 2015


Downloaded 04/14/15 to 151.96.3.241. Redistribution subject to SEG license or copyright; see Terms of Use at http://library.seg.org/

Figure 2. Various logs, with the new lithofluid-class log at right.

Figure 1. Histograms showing the distribution of P-wave impedance


(IP) values for lithofluid (a) class 1 = brine sand, (b) class 2 = oil sand,
and (c) class 4 = shale.

np.count _ nonzero(oil _ sand),


np.count _ nonzero(shale))
>>> print string.format(*data)
brine sst=706, oil sst=134, shale=1128

Pandas also allows us to do quick graphical inspection of the


data. For example, Figure 1 shows the way to draw IP histograms
for all the available classes.

logs.IP.hist(bins=50, by=logs.LFC)

For a comprehensive look at the data available, we plot ev- Figure 3. Crossplot showing VP /VS versus P-wave impedance for the
erything in one panel, applying a color convention for the litho- logs in Figure 2. Colors indicate the lithofluid class shown in Figure 2.
fluid classes (Figure 2).
The same data are shown in a crossplot domain that should A look ahead
be familiar to geophysicists, i.e., acoustic impedance (IP) versus In this tutorial, we have laid the foundations for the real
VP /VS (Figure 3). The colors are the same as in Figure 2, but work. In Part 2, to be published in the June issue of TLE, we
what about that red? It indicates gas sands — but so far, we don’t will look at applying Gassmann’s equation to our logs to perform
have gas sands in here. In the next tutorial, I will show how to fluid-replacement modeling (FRM). Starting with the original
synthesize gas sands and create an additional gas _ sand class. data we have looked at in this tutorial, we will continue our work

April 2015 THE LEADING EDGE 441


and replace oil with brine, then transform all the fluid to oil
and to gas (Figure 4). This will let us examine the relationship
between impedance and VP /VS with the new, synthetic data.
From there, we can do some statistical cleaning and analysis for
a complete interpretation.
Downloaded 04/14/15 to 151.96.3.241. Redistribution subject to SEG license or copyright; see Terms of Use at http://library.seg.org/

Corresponding author: alessandro.adm@gmail.com

Reference
Avseth, P., T. Mukerji, and G. Mavko, 2005, Quantitative seismic
interpretation: Applying rock physics rules to reduce interpreta-
tion risk: Cambridge University Press.

© The Author(s). Published by the Society of Exploration


Geophysicists. All article content, except where otherwise noted
(including republished material), is licensed under a Creative
Commons Attribution 3.0 Unported License (CC BY-SA). See
http://creativecommons.org/licenses/by/3.0/. Distribution or repro- Figure 4. Crossplots showing VP /VS versus P-wave impedance after
duction of this work in whole or in part commercially or noncom- fluid replacement.
mercially requires full attribution of the original publication,
including its digital object identifier (DOI). Derivatives of this
work must carry the same license.

442 THE LEADING EDGE April 2015