.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "integrations/gempy_striplog.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_integrations_gempy_striplog.py: Transform 2019: Integrating Striplog and GemPy ============================================== .. GENERATED FROM PYTHON SOURCE LINES 8-9 ! pip install welly striplog .. GENERATED FROM PYTHON SOURCE LINES 11-13 Authors: M. de la Varga, Evan Bianco, Brian Burnham and Dieter Werthmüller Importing GemPy .. GENERATED FROM PYTHON SOURCE LINES 13-27 .. code-block:: python3 import gempy as gp # Importing auxiliary libraries import numpy as np import pandas as pn import matplotlib.pyplot as plt import os import welly from welly import Location, Project import glob from striplog import Striplog, Legend, Decor pn.set_option('precision', 2) .. GENERATED FROM PYTHON SOURCE LINES 28-31 Creating striplog object ----------------------------- .. GENERATED FROM PYTHON SOURCE LINES 33-34 get well header coordinates .. GENERATED FROM PYTHON SOURCE LINES 34-39 .. code-block:: python3 well_heads = {'alpha': {'kb_coords': (0, 0, 0)}, 'beta': {'kb_coords': (10, 10, 0)}, 'gamma': {'kb_coords': (12, 0, 0)}, 'epsilon': {'kb_coords': (20, 0, 0)}} .. GENERATED FROM PYTHON SOURCE LINES 40-41 Reading tops file .. GENERATED FROM PYTHON SOURCE LINES 41-51 .. code-block:: python3 cwd = os.getcwd() if 'examples' not in cwd: data_path = os.getcwd() + '/examples' else: data_path = cwd + '/..' print(data_path+'/data/input_data/striplog_integration/*.tops') topsfiles = glob.glob(data_path+'/data/input_data/striplog_integration/*.tops') topsfiles .. rst-class:: sphx-glr-script-out Out: .. code-block:: none /WorkSSD/PythonProjects/gempy/examples/integrations/../data/input_data/striplog_integration/*.tops ['/WorkSSD/PythonProjects/gempy/examples/integrations/../data/input_data/striplog_integration/alpha_strip.tops', '/WorkSSD/PythonProjects/gempy/examples/integrations/../data/input_data/striplog_integration/beta_strip.tops', '/WorkSSD/PythonProjects/gempy/examples/integrations/../data/input_data/striplog_integration/epsilon_strip.tops', '/WorkSSD/PythonProjects/gempy/examples/integrations/../data/input_data/striplog_integration/gamma_strip.tops'] .. GENERATED FROM PYTHON SOURCE LINES 52-53 Creating striplog object .. GENERATED FROM PYTHON SOURCE LINES 53-68 .. code-block:: python3 my_striplogs = [] for file in topsfiles: with open(file) as f: text = f.read() striplog = Striplog.from_csv(text=text) my_striplogs.append(striplog) striplog_dict = {'alpha': my_striplogs[1], 'beta': my_striplogs[2], 'gamma': my_striplogs[3], 'epsilon': my_striplogs[0]} striplog_dict['alpha'][0] .. raw:: html
top0.0
primary
lithoverburden
summary50.00 m of overburden
description
data
base50.0


.. GENERATED FROM PYTHON SOURCE LINES 69-70 Plot striplog .. GENERATED FROM PYTHON SOURCE LINES 70-77 .. code-block:: python3 f, a = plt.subplots(ncols=4, sharey=True) for e, log in enumerate(striplog_dict.items()): log[1].plot(ax=a[e], legend=None) f.tight_layout() plt.show() .. image:: /integrations/images/sphx_glr_gempy_striplog_001.png :alt: gempy striplog :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 78-79 Striplog to pandas df of bottoms .. GENERATED FROM PYTHON SOURCE LINES 79-92 .. code-block:: python3 rows = [] for wellname in striplog_dict.keys(): for i, interval in enumerate(striplog_dict[wellname]): surface_name = interval.primary.lith surface_base = interval.base.middle x, y = well_heads[wellname]['kb_coords'][:-1] series = 1 rows.append([x, y, surface_base, surface_name, series, wellname]) column_names = ['X', 'Y', 'Z', 'surface', 'series', 'wellname'] df = pn.DataFrame(rows, columns=column_names) df .. raw:: html
X Y Z surface series wellname
0 0 0 50.0 overburden 1 alpha
1 0 0 80.0 miguel 1 alpha
2 0 0 100.0 evan 1 alpha
3 0 0 130.0 brian 1 alpha
4 0 0 131.0 dieter 1 alpha
5 10 10 50.0 overburden 1 beta
6 10 10 75.0 miguel 1 beta
7 10 10 110.0 brian 1 beta
8 10 10 111.0 dieter 1 beta
9 12 0 50.0 overburden 1 gamma
10 12 0 75.0 miguel 1 gamma
11 12 0 100.0 evan 1 gamma
12 12 0 130.0 brian 1 gamma
13 12 0 131.0 dieter 1 gamma
14 20 0 50.0 overburden 1 epsilon
15 20 0 75.0 miguel 1 epsilon
16 20 0 100.0 evan 1 epsilon
17 20 0 120.0 brian 1 epsilon
18 20 0 121.0 dieter 1 epsilon


.. GENERATED FROM PYTHON SOURCE LINES 93-96 GemPy model ---------------- .. GENERATED FROM PYTHON SOURCE LINES 98-99 Create gempy model object .. GENERATED FROM PYTHON SOURCE LINES 99-107 .. code-block:: python3 geo_model = gp.create_model('welly_integration') extent = [-100, 300, -100, 200, -150, 0] res = [60, 60, 60] # Initializting model using the striplog df gp.init_data(geo_model, extent, res, surface_points_df=df) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Active grids: ['regular'] welly_integration 2021-04-18 11:39 .. GENERATED FROM PYTHON SOURCE LINES 108-110 .. code-block:: python3 geo_model.surface_points.df.head() .. raw:: html
X Y Z X_c Y_c Z_c surface series id order_series smooth
0 0 0 50.0 0.44 0.47 0.25 overburden Default series 1 1 2.00e-06
1 0 0 80.0 0.44 0.47 0.44 miguel Default series 2 1 2.00e-06
2 0 0 100.0 0.44 0.47 0.56 evan Default series 3 1 2.00e-06
3 0 0 130.0 0.44 0.47 0.74 brian Default series 4 1 2.00e-06
4 0 0 131.0 0.44 0.47 0.75 dieter Default series 5 1 2.00e-06


.. GENERATED FROM PYTHON SOURCE LINES 111-113 .. code-block:: python3 geo_model.surfaces .. raw:: html
surface series order_surfaces color id
0 overburden Default series 1 #015482 1
1 miguel Default series 2 #9f0052 2
2 evan Default series 3 #ffbe00 3
3 brian Default series 4 #728f02 4
4 dieter Default series 5 #443988 5


.. GENERATED FROM PYTHON SOURCE LINES 114-122 .. code-block:: python3 dec_list = [] for e, i in enumerate(striplog_dict['alpha']): dec_list.append(Decor({'_colour': geo_model.surfaces.df.loc[e, 'color'], 'width': None, 'component': i.primary, 'hatch': None})) .. GENERATED FROM PYTHON SOURCE LINES 123-125 welly plot with gempy colors Create Decor list .. GENERATED FROM PYTHON SOURCE LINES 125-136 .. code-block:: python3 dec_list = [] for e, i in enumerate(striplog_dict['alpha']): dec_list.append(Decor({'_colour': geo_model.surfaces.df.loc[e, 'color'], 'width': None, 'component': i.primary, 'hatch': None})) # Create legend legend = Legend(dec_list) legend .. raw:: html
hatchcomponentwidthcolour
None
lithoverburden
None#015482
None
lithmiguel
None#9f0052
None
lithevan
None#ffbe00
None
lithbrian
None#728f02
None
lithdieter
None#443988


.. GENERATED FROM PYTHON SOURCE LINES 137-138 Plot striplogs: .. GENERATED FROM PYTHON SOURCE LINES 138-145 .. code-block:: python3 f, a = plt.subplots(ncols=4, sharey=True) for e, log in enumerate(striplog_dict.items()): log[1].plot(ax=a[e], legend=legend) f.tight_layout() plt.show() .. image:: /integrations/images/sphx_glr_gempy_striplog_002.png :alt: gempy striplog :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 146-147 Modifying the coordinates to make more sense .. GENERATED FROM PYTHON SOURCE LINES 147-150 .. code-block:: python3 geo_model.surface_points.df[['X', 'Y']] = geo_model.surface_points.df[['X', 'Y']] * 10 geo_model.surface_points.df['Z'] *= -1 .. GENERATED FROM PYTHON SOURCE LINES 151-152 Delete points of the basement surface since we are intepolating bottoms (that surface wont exit). .. GENERATED FROM PYTHON SOURCE LINES 152-154 .. code-block:: python3 geo_model.delete_surface_points_basement() .. rst-class:: sphx-glr-script-out Out: .. code-block:: none True .. GENERATED FROM PYTHON SOURCE LINES 155-156 Adding an arbitrary orientation. Remember gempy need an orientation per series .. GENERATED FROM PYTHON SOURCE LINES 156-159 .. code-block:: python3 geo_model.set_default_orientation() geo_model.modify_orientations(0, X=-500) .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 -500.0 1.00e-05 1.00e-05 0.0 0.0 1.0 0.01 overburden


.. GENERATED FROM PYTHON SOURCE LINES 160-163 .. code-block:: python3 gp.plot_2d(geo_model) .. image:: /integrations/images/sphx_glr_gempy_striplog_003.png :alt: Cell Number: mid Direction: y :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 164-166 .. code-block:: python3 gp.set_interpolator(geo_model) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Setting kriging parameters to their default values. Compiling theano function... Level of Optimization: fast_compile Device: cpu Precision: float64 Number of faults: 0 Compilation Done! Kriging values: values range 522.02 $C_o$ 6488.1 drift equations [3] .. GENERATED FROM PYTHON SOURCE LINES 167-169 .. code-block:: python3 gp.compute_model(geo_model) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Lithology ids [5. 5. 5. ... 1. 1. 1.] .. GENERATED FROM PYTHON SOURCE LINES 170-173 .. code-block:: python3 p2d = gp.plot_2d(geo_model, cell_number=[30], show_data=True, show=True) .. image:: /integrations/images/sphx_glr_gempy_striplog_004.png :alt: Cell Number: 30 Direction: y :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 174-177 .. code-block:: python3 gp.plot_3d(geo_model) .. image:: /integrations/images/sphx_glr_gempy_striplog_005.png :alt: gempy striplog :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 178-185 Pinch out model ------------------ As we can see the 3D model generated above does not honor the forth well lets fix it. First lets add an unconformity: between the yellow and green layer: .. GENERATED FROM PYTHON SOURCE LINES 187-189 .. code-block:: python3 geo_model.add_features('Unconformity') .. raw:: html
order_series BottomRelation isActive isFault isFinite
Default series 1 Erosion True False False
Unconformity 2 Erosion False False False


.. GENERATED FROM PYTHON SOURCE LINES 190-192 Now we set the green layer in the second series .. GENERATED FROM PYTHON SOURCE LINES 194-197 .. code-block:: python3 geo_model.map_stack_to_surfaces({'Uncomformity': ['brian', 'evan', 'dieter']}) geo_model.add_surfaces('basement') .. raw:: html
surface series order_surfaces color id
0 overburden Default series 1 #015482 1
1 miguel Default series 2 #9f0052 2
2 evan Uncomformity 1 #ffbe00 3
3 brian Uncomformity 2 #728f02 4
4 dieter Uncomformity 3 #443988 5
5 basement Uncomformity 4 #ff3f20 6


.. GENERATED FROM PYTHON SOURCE LINES 198-200 Lastly we need to add a dummy orientation to the new series: .. GENERATED FROM PYTHON SOURCE LINES 202-204 .. code-block:: python3 geo_model.add_orientations(-500, 0, -100, 'dieter', [0, 0, 1]) .. raw:: html
X Y Z G_x G_y G_z smooth surface
0 -500.0 1.00e-05 1.00e-05 0.0 0.0 1.0 0.01 overburden
1 -500.0 0.00e+00 -1.00e+02 0.0 0.0 1.0 0.01 dieter


.. GENERATED FROM PYTHON SOURCE LINES 205-207 Now we can compute: .. GENERATED FROM PYTHON SOURCE LINES 209-211 .. code-block:: python3 gp.compute_model(geo_model) .. rst-class:: sphx-glr-script-out Out: .. code-block:: none Lithology ids [6. 6. 6. ... 1. 1. 1.] .. GENERATED FROM PYTHON SOURCE LINES 212-220 .. code-block:: python3 p = gp.plot_2d(geo_model, cell_number=[30], show_data=True) f, a = plt.subplots(ncols=4, sharey=True) for e, log in enumerate(striplog_dict.items()): log[1].plot(ax=a[e], legend=legend) f.tight_layout() plt.show() .. rst-class:: sphx-glr-horizontal * .. image:: /integrations/images/sphx_glr_gempy_striplog_006.png :alt: Cell Number: 30 Direction: y :class: sphx-glr-multi-img * .. image:: /integrations/images/sphx_glr_gempy_striplog_007.png :alt: gempy striplog :class: sphx-glr-multi-img .. GENERATED FROM PYTHON SOURCE LINES 221-225 Getting better but not quite there yet. Since the yellow does not show up in the last well the pinch out has to happen somewhere before so lets add an artifial point to get that shape: .. GENERATED FROM PYTHON SOURCE LINES 227-229 .. code-block:: python3 geo_model.add_surface_points(200, 0, -75, 'evan'); .. raw:: html
X Y Z smooth surface
0 0.0 0.0 -50.0 2.00e-06 overburden
5 100.0 100.0 -50.0 2.00e-06 overburden
9 120.0 0.0 -50.0 2.00e-06 overburden
14 200.0 0.0 -50.0 2.00e-06 overburden
1 0.0 0.0 -80.0 2.00e-06 miguel
6 100.0 100.0 -75.0 2.00e-06 miguel
10 120.0 0.0 -75.0 2.00e-06 miguel
15 200.0 0.0 -75.0 2.00e-06 miguel
2 0.0 0.0 -100.0 2.00e-06 evan
11 120.0 0.0 -100.0 2.00e-06 evan
16 200.0 0.0 -100.0 2.00e-06 evan
18 200.0 0.0 -75.0 1.00e-06 evan
3 0.0 0.0 -130.0 2.00e-06 brian
7 100.0 100.0 -110.0 2.00e-06 brian
12 120.0 0.0 -130.0 2.00e-06 brian
17 200.0 0.0 -120.0 2.00e-06 brian


.. GENERATED FROM PYTHON SOURCE LINES 230-239 .. code-block:: python3 gp.compute_model(geo_model) p = gp.plot_2d(geo_model, cell_number=[30], show_data=True) f, a = plt.subplots(ncols=4, sharey=True) for e, log in enumerate(striplog_dict.items()): log[1].plot(ax=a[e], legend=legend) f.tight_layout() plt.show() .. rst-class:: sphx-glr-horizontal * .. image:: /integrations/images/sphx_glr_gempy_striplog_008.png :alt: Cell Number: 30 Direction: y :class: sphx-glr-multi-img * .. image:: /integrations/images/sphx_glr_gempy_striplog_009.png :alt: gempy striplog :class: sphx-glr-multi-img .. GENERATED FROM PYTHON SOURCE LINES 240-241 sphinx_gallery_thumbnail_number = 7 .. GENERATED FROM PYTHON SOURCE LINES 241-243 .. code-block:: python3 gp.plot_3d(geo_model) .. image:: /integrations/images/sphx_glr_gempy_striplog_010.png :alt: gempy striplog :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out Out: .. code-block:: none .. GENERATED FROM PYTHON SOURCE LINES 244-245 gp.save_model(geo_model) .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 12.397 seconds) .. _sphx_glr_download_integrations_gempy_striplog.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: gempy_striplog.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: gempy_striplog.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_