Tuesday, February 19, 2019

Flint - Connected to Geographix


Glacier Geo checklist:
  • Write a python based petrophysical software - CHECK 
  • Use software in a bunch of basins - CHECK
  • Connect to Geographix directly without using any LAS files - CHECKITY CHECK YOURSELF #beforeya #reckyaself
Every blue moon I write about Flint (a software I wrote for interpreting logs).  More often than that I am adding tweaks and features for doing things more simply than commercial software.  This last quarter I added a database connection to Geographix.  This means I can view any digital curves and tops in Geographix without exporting an LAS first.  Yes, and tops.  Flint could become a commercial Petro tool that also has the middleware to query other oil and gas databases.

Pros for Flint missing in Prizm:
  • Petro model that can perform loops
  • Interactive curve editing (fix all those spikes on RHOB)
  • Depth shifting individual curves
  • Interactive curve splicing (no Excel necessary)
  • Runs on Windows, Mac, and Linux
  • Fast
All non-technical people are allowed to stop reading now.  The rest gets into the weeds.  So all you data and code hunters continue!

Geographix is a popular geologic interpretation suite used in the oil and gas industry.  Large and small, independent companies like Chesapeake use it because there are tools for mapping, raster interpretation, and keeping track of wells and meta data.  The programs are built on a Sybase relational database.  Why is that important?  Because you can query anything in a database.  Below I will show some intro examples.

I added a little option to connect to Geographix.  In about 5 seconds I can have a well open. Or I can completely switch to a different project in 5 seconds.  Prizm can take about a minute to open before you can query for a well.  It can take a minute to switch from one GeoGraphix project to another.  



Now how do I query for curves?  Simple, little SQL query returns all the curve data I need based on a UWI and curve set name.  Here is an example for an imported curve set (any LAS loaded into GGX go into Imported curve sets).  

SELECT DBA.GX_WELL_CURVE_VALUES.WELLID, DBA.GX_WELL_CURVE_VALUES.CURVESET, DBA.GX_WELL_CURVE_VALUES.CURVENAME,
DBA.GX_WELL_CURVE_VALUES.VERSION, DBA.GX_WELL_CURVE_VALUES.CURVE_VALUES, DBA.GX_WELL_CURVE.CMD_TYPE,
DBA.GX_WELL_CURVE.CURVE_UOM, DBA.GX_WELL_CURVE.DATE_MODIFIED, DBA.GX_WELL_CURVE.DESCRIPTION, DBA.GX_WELL_CURVE.TOOL_TYPE,
DBA.GX_WELL_CURVE.REMARK, DBA.GX_WELL_CURVESET.TOPDEPTH, DBA.GX_WELL_CURVESET.BASEDEPTH, DBA.GX_WELL_CURVESET.DEPTHINCR,
DBA.GX_WELL_CURVESET.LOG_JOB, DBA.GX_WELL_CURVESET.LOG_TRIP, DBA.GX_WELL_CURVESET.SOURCE_FILE,
DBA.GX_WELL_CURVESET.TYPE, DBA.GX_WELL_CURVESET.FIELDDATA
FROM
DBA.GX_WELL_CURVE_VALUES, DBA.GX_WELL_CURVE, DBA.GX_WELL_CURVESET
WHERE(GX_WELL_CURVE.WELLID = '%s') AND(GX_WELL_CURVE.CURVESET = '%s') AND
(GX_WELL_CURVE_VALUES.WELLID = GX_WELL_CURVE.WELLID)
AND(GX_WELL_CURVE.WELLID = GX_WELL_CURVESET.WELLID) AND
(GX_WELL_CURVE.CURVENAME = GX_WELL_CURVE_VALUES.CURVENAME)
AND(GX_WELL_CURVE.CURVESET = GX_WELL_CURVESET.CURVESET) AND
(GX_WELL_CURVESET.CURVESET = GX_WELL_CURVE_VALUES.CURVESET)
ORDER
BY
GX_WELL_CURVE.CURVESET, GX_WELL_CURVE.CURVENAME, GX_WELL_CURVE.WELLID, GX_WELL_CURVE_VALUES.CURVESET,
GX_WELL_CURVE_VALUES.CURVENAME

Curve data is not saved as a value per row, rather an entire curve is saved into a single cell as a BLOB.  If you pass that array of bytes to a simple little method you can get back an array of floats.  Here is a little python snippet.  I get rid of LAS nulls (-999.25) and any chance of Not A Number (nan).



What is the point of all of this?  Keep coding all you people out there!  Small little snippets add up to big programs.  A problem isn't solved with one fell swoop.  It is usually thousand of precision slices.  The beautiful marble sculptures from Italy were not made with a sledgehammer.

Cheers,
Jon

#GeoGraphix #GlacierGeosciences #Petrophysics #Python #SQL #Dev

No comments:

Post a Comment