Geometric Sample Bias in Borehole Image Log Data
[ This post has been transferred from the old website to here. Apologies to those who commented and liked there as these could not be transferred. ]
Acoustic and microresistivity images enable us to quantify the fractures intersected by a well. These tools generate false-colour images where fractures appear as either bright or dark sinusoids. The dip magnitude and direction relative to the borehole axis are derived from the amplitude and minimum of the sinusoid. Then data are corrected back to geographic coordinates for analysis.
There are some questions to keep in mind when analysing a fracture population picked from borehole images:
How does sampling a 3D fracture network with a well, which is essentially just a line, dictate which fractures are included in the data?
Given the presence of hoop stresses and drilling induced damage, how well do the fractures at the borehole wall reflect the conditions beyond it?
How does the way we subset and plot data impact interpretation?
The first question refers to geometric sample bias. In this blog post, I take an in-depth look at this kind of bias and demo a workflow from the fractoolbox that helps us manage it. Future posts will address the other questions.
The figure above includes three segments from micro resistivity borehole image logs in geothermal wells (adapted from Wallis et al., 2020). Dark and bright sinusoids are fractures cross-cutting the well. Note how these sinusoids interact with tensile fractures (the dark, near-vertical lines). Because of the thermal stress conditions in high-temperature geothermal wells, tensile fractures are typically prolific.
What is Geometric Sample Bias?
Simply put, geometric sample bias (aka scanline sample bias) occurs because fractures perpendicular to a well are very likely to be intersected whereas those parallel to a well are almost never intersected. As well as impacting overall fracture frequency, geometric sample bias generates a 'blind zone' in data where almost none of the fractures that are near-parallel to the well appear in the data.
Terzaghi (1965) proposed a method to quantify the geometric sample bias using the acute angle (alpha) between the fracture plane and the well. She also developed a correction that theoretically generates a version of the fracture population without sample bias. This correction uses the alpha angle to weight each fracture: So that fractures perpendicular to the well are de-empathised while fractures parallel to the well receive the greatest emphasis.
Today this Terzaghi correction is common-place and some form of it is included in most image log analysis software. But there are two fundamental issues with the Terzaghi correction:
The weighting may mislead the interpreter emphasising solitary fractures that are not part of some significant but under-sampled population. This is most likely to occur where the weighting approaches infinity (i.e., sin(alpha) = 0).
The weighing can only be applied to fractures that were sampled and cannot correct for fractures that are absent from the dataset, such as those in the blind zone.
The first issue is partially resolved by setting an upper limit of sin α = 0.1 when calculating weighting, essentially truncating the weighting. Without inventing data, which would introduce more uncertainty, the second issue cannot be resolved numerically.
In her 1965 paper, Terzaghi drew contours of geometric sample bias (isogenic contours) on a stereonet so we can easily see its impact and the location of the blind zone. The plot below shows how the isogenic contours at intervals of sin(alpha) = 0.1 plot onto a stereonet. Fractures perpendicular to the well are sin(alpha) = 1 while fractures parallel to the well are sin(alpha) = 0. Fractures in the blind zone have sin(alpha) < 0.3. Here and in the method below, I omit the sin(alpha) = 0.1 or 0.2 contours so that the blind zone is easy to see.
Drawing these contours by hand is laborious, which perhaps explains why they didn’t become standard practice. Now using the method I describe below we can generate these contours in seconds and can regularly use them to visualise sample bias.
Adding isogenic contours to our interpretation workflow is the simplest of the three actions that I recommend analysts take to combat geometric sample bias in borehole image interpretation:
Evaluate the degree of impact that well deviation direction has on the sampled fracture population using the method outlined below.
Understand what may be missing from the borehole data by comparing it to surface mapping and a coherent structural hypothesis.
Plan to acquire image data in wells with different deviation directions and interpret these data together.
To see isogenic contours in action, check out a recent paper I published on borehole image interpretation in seven high-temperature (> 240°C) geothermal wells in Indonesia and New Zealand.
Isogenic Contours with Python
The following is a step-by-step guide to using the fractoolbox to generate isogenic contours and a contoured plot of fracture poles with the Terzaghi correction applied.
I’ve not yet deployed fractoolbox as a python package so it needs to be in the same directory as your work. Follow the instructors on the fractoolbox readme to get set up. The fractoolbox will be used to generate the isogenic contours and do some of the typical fracture data handling (eg converting dip-direction to strike).
Data will be handled as Pandas data frames. Stereonet plots are generated using mplstereonet, an excellent open-source package that also includes tools for contouring and calculating Fisher statistics. Numpy, math and matplotlib are also used. For package versions, check the fractoolbox requirements file.
Import well survey data and calculate plunge
We will use the mean well azimuth and inclination in the logged interval to generate the isogenic contours. However, the inclination data (angle upward from vertical) must first be converted to plunge (angle downward from horizontal).
Import fracture data and calculate strike
Fracture data picked from a borehole image log has orientation reported as dip azimuth. A strike angle conforming to the right-hand rule must be calculated for these data to be plotted with mplstereonet. Refer to this Juypter notebook for a description of strike-dip formats and how to plot stereonets with mplstereonet. The dip2strike function from fractoolbox converts dip azimuth to the required strike format.
Generate isogenic contours
Here we generate isogenic contours at increments of 0.1 sin(alpha) for the mean plunge and azimuth for the logged interval. If the well changes direction significantly in the logged interval, it may be better to split the data into sections of approximately equal well plunge and azimuth.
The isogeniccontour function generates 1000 fractures whose pole to plane will ascribe the contour for the given sin(alpha) argument and well deviation (plunge and azimuth).
Plot fracture poles together with isogenic contours
Using the mplstereonet package, the fractures are plotted along with the isogenic contours. I have commented out the sin(alpha) = 0.1 or 0.2 contours so that the blind zone is easy to see.
The impact of geometric sample bias is not particularly striking in this test dataset. However, there is a small number of high-angle fractures sampled within the blind zone and I wonder how many were missed.
The image below is adapted from this paper and illustrates the degree of impact geometric sample bias has on five borehole image logs. The near absence of fractures imaged inside the blind zone in all cases shows that geometric sample bias is worth paying attention to.
Without the isogenic contours, the weak cluster of fractures imaged in ML-B may have been interpreted as evidence for a north-northeast trending structural grain. As fracture orientations lie almost exclusively within the sin(alpha) = 0.9 contour, a judicious interpretation takes into consideration that the cluster of fractures is more likely to reflect sample bias than geologic phenomena. Similarly, without awareness of the blind zone, the data gaps present in NM-A and RD-B may be misinterpreted as orientations devoid of fractures. Instead, coincidence of these gaps with the blind zone tells us there may be faults and fractures in the reservoir with these orientations.
Calculate the Terzaghi correction for fractures
To calculate weighting for each fracture, we need to find the alpha angle, which is the acute angle between the fracture and the well. This means we must first find the magnitude of well plunge and azimuth at the fracture depth and append it to our fracture dataframe. The fractoolbox includes a simple interpolate function (xyzinterpolate) that I used to do this.
We then convert our data into unit vectors so we can find the acute angle between the well and fracture.
After finding the sine of the alpha angle, we can determine the weighing that will be applied to each fracture based on Terzaghi's correction method.
We can now generate plots to compare the raw data with the data corrected for geometric sample bias using the Terzaghi weighting method.
When compared to the raw data density, the Terzaghi corrected data lends greater emphasis to the north-west striking high-angle cluster of fractures.
Below are two examples from this paper. The well on the left (NM-B) comes from a Quaternary geologic sequence that formed under a relativity consistent tectonic regime, so the fracture trends are relatively consistent. In contrast, the well on the right is a Miocene aged geologic sequence that has experienced several tectonic regimes. As a consequence, the fracture trends are more various. Because fractures are less clustered in the data on the right, the blind zone remains more apparent in the corrected data when compared with the corrected data on the left.
This workflow and other components of fractoolbox is under active development so, over time, may differ slightly to what is presented here. However, the geometric sample bias will remain an issue that we should all pay a little more attention to.
Subscribe below if you'd like to be notified about new posts.
Thanks goes to my doctoral supervisor David Dempsey for his advise and contribution to this workflow. This method uses packages SciPy ecosystem (Virtanen et al., 2020) and mplstereonet (Kington, 2020). Thank you to Contact Energy for providing the open fracture and survey data used in this blog post and fractoolbox.
Terzaghi, R. D., 1965, Sources of error in joint surveys: Geotechnique, v. 15, no. 3, p. 287-304.
Kington, J., 2020, mplstereonet: GitHub.
Virtanen, P., Gommers, R., Oliphant, T. E., Haberland, M., Reddy, T., Cournapeau, D., Burovski, E., Peterson, P., Weckesser, W., Bright, J., Walt, S. J. v. d., Brett, M., Wilson, J., Millman, K. J., Mayorov, N., Nelson, A. R. J., Jones, E., Kern, R., Larson, E., Carey, C., Polat, İ., Feng, Y., Moore, E. W., VanderPlas, J., Laxalde, D., Perktold, J., Cimrman, R., Henriksen, I., Quintero, E. A., Harris, C. R., Archibald, A. M., Ribeiro, A. H., Pedregosa, F., Mulbregt, P. v., and Contributors, S., 2020, SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python: Nature Methods, v. 17, p. 261–272.
Wallis, I.C., Rowland, J. V., Dempsey, D. E., Allan, G., Sidik, R., Martikno, R., McLean, K., Sihotang, M., Azis, M. and Baroek, M. 2020. Approaches to imaging feedzone diversity with case studies from Sumatra, Indonesia, and the Taupō Volcanic Zone, New Zealand. New Zealand Geothermal Workshop: Waitangi, New Zealand.