Simultaneous log inversion in Excel - a carbonate example
Durdle Door

Simultaneous log inversion in Excel - a carbonate example

In my last LI article, I showed how the Microsoft Excel Solver could be used to run simultaneous log inversion, similar to commercial products like QuantiElan, MultiMin and MinSolv. I demonstrated the workflow with an example from a North Sea well, which included a gas-bearing sandstone section. I finished with a plaintive appeal for data in carbonates and unconventional reservoirs. My LI connection Francisco Badillo graciously shared log data from a carbonate interval, and in this article I'll show how my method worked there. I also found some excellent, detailed work on carbonates created by Craig Phillips and applied that too as a benchmark.

Francisco's data consists of a modern set of logs including array resistivity, density, neutron, spectral GR and compressional and shear slowness. Here's a log plot made in Python showing the data:

No alt text provided for this image

Initial observations -

  • the GR is low throughout the section, as is expected for a carbonate interval
  • Resistivity is very high, well above the normal operating range for an induction tool. A laterolog would have given better data, but the well may have been drilled with oil-based mud
  • the well was apparently drilled with a 6" bit below 4,400m. The hole is in poor condition, with a lot of rugosity and some significant over-gauge sections
  • Log quality is generally good despite the condition of the hole, but the density appears to be invalid in a few zones
  • The density log appears to be much more active than the neutron. I think this is due to tool count rates, not the formation or vertical resolution. In high density rock the density count rates are low and the log shows more statistical variation. In the same rock, the neutron count rates are high and the log shows less variation.

I decided to evaluate the section from 4,500m to 4,800m, because the data quality is generally good, although there are some questionable density spikes. I removed the obvious density spikes and replaced them with a transform from the compressional slowness. I then looked at a density-neutron cross plot:

No alt text provided for this image

The matrix lines were digitized from the Schlumberger chart TNPH CP-1e. Some observations from this plot:

the GR (the colour bar in the plot) is not very helpful in identifying shale zones. This could be due to the presence of uranium salts, which is quite common in carbonates

There are three different lithologies present:

  • Points plotting between the limestone and dolomite lines - these are probably mixtures of limestone and dolomite
  • Points plotting between the sandstone and limestone lines - these are probably limestones with cherts
  • Points plotting below the dolomite line - these high density zones are probably anhydritic

Before going any further, I wanted to try part of Craig Phillips' excellent Carbonate Reservoir Workflow, which is a series of Jupyter notebooks that perform a number of useful computations. I ran the section which computes grain density and porosity using the standard chartbook. The result is shown below:

No alt text provided for this image

The plot confirms my observations from the density-neutron crossplot - matrix density varies in general between 2.71g/cc and 2.85g/cc, indicating a mixture of limestone and dolomite. There are also intervals with very high grain density that are probably anhydritic, and intervals with grain density less than 2.71g/cc that could be cherty. Porosity in the interval is generally very low, less than 5%, but there are some zones where it's higher.

I decided to use the density, neutron and compressional slowness logs for the inversion. The GR doesn't seem to represent lithology, and (as noted above) the resistivity is outside of the reliable range for an induction measurement. I created three different mineral models:

  • Limestone/dolomite: this model has limestone, dolomite and mud. I assumed the mud was a 65%/35% mix of illite and quartz
  • Anhydritic: this model has anhydrite, dolomite and limestone. I didn't include porosity because these zones are probably tight
  • Cherty: this model has illite, quartz and limestone. The illite and quartz fractions are not linked.

The next issue was the mineral endpoints. I used the published endpoints for the density and compressional slowness logs, but the neutron is more challenging. The tool was logged on a limestone matrix, so the neutron endpoint is zero for limestone, but what should I use for dolomite? The dolomite matrix line on the chart does not extrapolate to the fluid point, which is of course 100% neutron, 1.0 g/cc density, and I can't have different fluid points for each log. Ideally I would use a non-linear trend, but I haven't worked out how to do that.

My solution was to use Craig's results, apparent grain density and porosity. I computed the volume fraction of limestone and dolomite, then plotted dolomite volume against the neutron to determine the neutron response in 100% dolomite. This came out to be 0.008v/v, which is close to the published value of 0.01 v/v.

With my lithologies identified and my mineral endpoints established, I then ran my Excel Solver for each lithology. This was predictably a very slow process, because I had nearly 2,000 rows of data to process and a fairly complex model. With the lithology and porosity model complete, I then computed Sw. Francisco had supplied the formation water salinity, and had also recommended using a variable m model, so I used the Shell formula in the Archie equation to determine Sw. The results are shown below:

No alt text provided for this image

The plot layout is as follows:

  • Track 1: GR and a lithology code - 3 for dolomite/limestone, 2 for cherty and 1 for anhydritic
  • Track 2: TNPH (black) and reconstructed neutron (red)
  • Track 3: RHOZ (black) and reconstructed density (red)
  • Track 4: DT (black) and reconstructed compressional slowness (red)
  • Track 5: volumetric analysis - illite is grey, quartz is yellow, limestone is light blue, dolomite is dark blue, anhydrite is purple, oil is green and water is cyan
  • Track 6: total porosity and model error (with red shading)
  • Track 7: total Sw using variable m

Overall the reconstructed logs match the inputs quite well, with a few exceptions. I made cross plots of the reconstructed vs the original logs, with frequency as colour:

No alt text provided for this image
No alt text provided for this image
No alt text provided for this image

The density match is very good, the neutron slightly poorer and the compressional slowness poorer still. That reflects my view of the reliability of the measurements. As a final check, I plotted the Solver matrix density with Craig Phillips' chartbook matrix density:

No alt text provided for this image

The match is very good.

Cameron Snow

Reservoir mapping w/ Danomics: Better, faster, stronger.

3 年

Interesting use of excel to do this, and certainly a good learning exercise, but why excel instead of Python or similar?

回复
Djaafri Mohammed

Petrophysics Engineer

3 年

SOLVER with VBA MACRO

  • 该图片无替代文字
Djaafri Mohammed

Petrophysics Engineer

3 年

thanks and Beautiful work, Andy , i already test the solver in excel , and create simple VBA macro could be essay to testing by others and attache my résulte plotted in excel

  • 该图片无替代文字
Dave Dudus

Consultant Petrophysicist with INTEG Petrophysics, Calgary; International Affiliation as Senior Petrophysicist at Virtual Petrophysics

3 年

I’ll work at getting you something over the next couple of days. Get me your email and I’ll take it from there.

回复
Dave Dudus

Consultant Petrophysicist with INTEG Petrophysics, Calgary; International Affiliation as Senior Petrophysicist at Virtual Petrophysics

3 年

Beautiful work, Andy! How long does Excel take to do the computations?

要查看或添加评论,请登录

Andy Brickell的更多文章

社区洞察

其他会员也浏览了