Amato Del Monte 2015 Seismic Petrophysics Part 2
Amato Del Monte 2015 Seismic Petrophysics Part 2
I n Part 1 of this tutorial in the April 2015 issue of TLE, we # Forward Gassmann
loaded some logs and used a data framework called Pandas to k _ s2 = k _ d + (1 - (k _ d/k0))**2 /\
manage them. We made a lithology-fluid-class (LFC) log and ((phi/k_f2) + ((1-phi)/k0) - (k _ d/k0**2))
used it to color a crossplot. This month, we take the workflow
further with fluid-replacement modeling based on Gassmann’s # New properties
equation. This is just an introduction; see Wang (2001) and rho2 = rho1-phi * rho_f1+phi * rho _ f2
Smith et al. (2003) for comprehensive overviews. mu2 = mu1
Fluid-replacement modeling is used to predict the response vp2 = np.sqrt(((k_s2+(4./3)*mu2))/rho2)
of elastic logs (VP , VS , and density) in different fluid conditions. vs2 = np.sqrt((mu2/rho2))
In that way, we can see how much a rock would change in
terms of velocity (or impedance) if it was filled with gas instead return vp2*1000, vs2*1000, rho2, k _s2
of brine, for example. It also brings all elastic logs to a common
fluid “denominator,” enabling us to disregard fluid effects and This function takes the following parameters:
focus only on lithologic variations.
• vp1, vs1, rho1: measured VP, VS , and density — satu-
Creating new logs rated with fluid 1
The inputs to fluid-replacement modeling are Ks and µs (satu- • rho_ f1, k _ f1: density and bulk modulus of fluid 1
rated bulk and shear moduli, which we can obtain from recorded • rho_ f2, k _ f2: density and bulk modulus of fluid 2
VP, VS , and density logs), Kd and µd (dry-rock bulk and shear • k0: mineral bulk modulus
DOI:10.1190/tle34060700.1
We can put all the steps together into a Python function Results
(see the IPython notebook for details, available online at github. The final result is shown in Figure 1, highlighting a detail
com/seg), calculating the elastic parameters for fluid 2, given the of the reservoir section between 2150 m and 2200 m with
parameters for fluid 1, along with some other data about the fluids: acoustic impedance (I P ) and VP /VS ratio for the in situ case
(gray curve), brine case (blue), and gas case (red). The LFC
def frm(vp1, vs1, rho1, rho _ f1, k _ f1, log on the right is still the original one computed on the in
rho _ f2, k _ f2, k0, phi): situ case (gray curve). The same data are shown in the I P versus
VP /VS domain in Figure 2.
# Original properties We can make a few qualitative observations from these
vp1 = vp1 / 1000. crossplots:
vs1 = vs1 / 1000.
mu1 = rho1 * vs1**2. • Shales are overall quite different from sands thus are poten-
k_s1 = rho1 * vp1**2 - (4./3.)*mu1 tially easy to identify.
• Brine sands have higher I P and VP /VS than hydrocarbon-
# Inverse Gassmann bearing sands have.
k_d = (k _s1 * ((phi*k0)/k_f1+1-phi)-k0) /\ • Oil and gas cases are not very different from each other.
((phi*k0)/k_f1+(k _s1/k0)-1-phi) • Further investigation could be done on the shale intervals
that overlap with brine sands.
1
Milan, Italy. http://dx.doi.org/10.1190/tle34060700.1.
and local irregularities of the real data to create a fully synthetic [ cov _ XY var _ Y cov _YZ ]
data set that represents an idealized version of the reservoir. We [ cov _ XZ cov _ YZ var_Z ],
do this by analyzing the data through simple statistical tech-
niques in terms of tendency, dispersion, and correlation among where var_X is the variance of property X, i.e., a measure of
certain elastic properties for each lithofluid class. dispersion about the mean, whereas the covariance cov _XY is a
Central tendency is described by calculating the mean val- measure of similarity between two properties X and Y.
ues of some desired elastic property for all the existing classes. We will study the data set using only two properties (I P and
Dispersion and correlation are summarized with the covari- VP /VS ) and store everything in the DataFrame stat:
ance matrix, which can be written like this (for two generic
variables X and Y ): LFC I P _mean VP /VS _mean IP _var
1 6790 2.11 199721
[ var _ X cov _ XY ]
2 6185 2.01 337593
[ cov _ XY var _ Y ]
3 5816 1.94 360001
4 6088 2.32 492525
There are four rows, one for each lithofluid class: shale,
brine, oil, and gas sands. For each class, we store the mean
values, the variances, and the covariance. The number of sam-
ples that is a metric on the robustness of the analysis, i.e., too
few samples, points to a potential unreliability of the statisti-
cal information.
Once again, it is easy to get information out of stat; e.g., the
Figure 1. Results of fluid-replacement modeling.
average I P of brine sands (a value of 2 in the LFC log) is
(nlogs, nlogs))
>>> m = multivariate_normal(mean, sigma, NN)
>>> mc.ix[mc.LFC==i,1:] = m
Conclusions
With this tutorial, I have shown two ways to create new data
DOI:10.1190/tle34060700.1
Finally, for each class, we extract the average value mean and
the covariance matrix sigma from the stat DataFrame and then put © The Author(s). Published by the Society of Exploration
them into Python’s np.random.multivariate_normal func- Geophysicists. All article content, except where otherwise noted
tion to draw randomly selected samples from the continuous and (including republished material), is licensed under a Creative
correlated distributions of the properties I P and VP /VS: Commons Attribution 3.0 Unported License (CC BY-SA). See
http://creativecommons.org/licenses/by/3.0/. Distribution or
reproduction of this work in whole or in part commercially or
>>> for i in range(1, nlfc+1): noncommercially requires full attribution of the original publica-
>>> mean = stat.loc[i-1, tion, including its digital object identifier (DOI). Derivatives of
means[0]:means[-1]].values this work must carry the same license.