FaultsĀ¶
This file is meant to demonstrate the use of gstlearn for Faulting. It is recalled that Faulting is defined in 2-D.
import numpy as np
import pandas as pd
import sys
import os
import gstlearn as gl
import gstlearn.plot as gp
import matplotlib.pyplot as plt
Defining the InformationĀ¶
Setting some global variables
ndim = 2
gl.defineDefaultSpace(gl.ESpaceType.RN, ndim)
Defining the output grid
nx = [100, 100]
grid = gl.DbGrid.create(nx)
Defining the data points
nech = 30
data = gl.Db.createFromDbGrid(nech, grid)
Defining a Model which will serve in simulating the value at the data points.
range = 40
model = gl.Model.createFromParam(gl.ECov.CUBIC, range)
Simulate the information at the data points
err = gl.simtub(None, data, model, namconv = gl.NamingConvention("Data"))
Define the set of Faults. Note the coordinates of the fault end-points have been slightly translated from round coordinates in order to avoid having target grid node sitting exactly on fault vertices.
faults = gl.Faults()
faults.addFault(gl.PolyLine2D.create(x = [5.1, 10.1, 20.1], y = [5.1, 25.1, 50.1]))
faults.addFault(gl.PolyLine2D.create(x = [50.1, 90.1], y = [60.1, 70.1]))
faults.addFault(gl.PolyLine2D.create(x = [20.1, 80.1, 80.1, 20.1], y = [10.1, 40.1, 10.1, 10.1]))
Define the Moving Neighborhood (with a maximum of 'nmaxi' samples per neighborhood) an attach the Faults.
nmaxi = 10;
neighM = gl.NeighMoving.create(nmaxi = nmaxi)
bipt = gl.BiTargetCheckFaults(faults)
neighM.addBiTargetCheck(bipt)
Plot the information
ax = data.plot()
ax = faults.plot()
ax.geometry(dims=[8,8])
ax.decoration(title="Information")
Calculating the VariogramĀ¶
We define the parameters for the calculation of an omni-directional variogram. In a first trial, we compute the variogram without taking faults into account.
varioparam = gl.VarioParam.createOmniDirection(npas=10, dpas=5)
vario = gl.Vario.create(varioparam)
err = vario.compute(data)
vario.display()
Variogram characteristics ========================= Number of variable(s) = 1 Number of direction(s) = 1 Space dimension = 2 Variable(s) = [Data] Variance-Covariance Matrix 0.773 Direction #1 ------------ Number of lags = 10 Direction coefficients = 1.000 0.000 Direction angles (degrees) = 0.000 Tolerance on direction = 90.000 (degrees) Calculation lag = 5.000 Tolerance on distance = 50.000 (Percent of the lag value) For variable 1 Rank Npairs Distance Value 1 5.000 5.298 0.023 2 7.000 9.910 0.166 3 16.000 15.056 1.255 4 13.000 19.965 0.687 5 18.000 24.846 0.806 6 21.000 29.884 0.785 7 19.000 34.891 0.816 8 15.000 40.427 0.772 9 19.000 44.683 1.114
Represent the variogram with the number of pairs attached to each lag.
ax = vario.plot(showPairs=True)
Performing the same variogram calculation, taking the fault into account
varioparam = gl.VarioParam.createOmniDirection(npas=10, dpas=5)
varioparam.addFaults(faults)
vario = gl.Vario.create(varioparam)
err = vario.compute(data)
vario.display()
Variogram characteristics ========================= Number of variable(s) = 1 Number of direction(s) = 1 Space dimension = 2 Calculation takes Faults into account Variable(s) = [Data] Variance-Covariance Matrix 0.773 Direction #1 ------------ Number of lags = 10 Direction coefficients = 1.000 0.000 Direction angles (degrees) = 0.000 Tolerance on direction = 90.000 (degrees) Calculation lag = 5.000 Tolerance on distance = 50.000 (Percent of the lag value) For variable 1 Rank Npairs Distance Value 1 5.000 5.298 0.023 2 5.000 9.895 0.212 3 9.000 14.755 1.136 4 8.000 19.703 0.301 5 10.000 24.800 0.495 6 12.000 29.845 0.597 7 11.000 34.600 0.874 8 9.000 40.303 0.693 9 11.000 44.188 0.843
Represent the variogram again with the number of pairs attached to each lag.
ax = vario.plot(showPairs=True)
Performing the EstimationĀ¶
err = gl.kriging(data, grid, model, neighM)
Plotting the result
gp.setDefaultGeographic(dims=[8,8])
ax = grid.plot(nameRaster="*estim")
ax = data.plot()
ax = faults.plot()
ax.decoration(title="Kriging Estimate with Faults")
ax = grid.plot(nameRaster="*stdev")
ax = data.plot()
ax = faults.plot()
ax.decoration(title="St. Dev. with Faults")
grid.display()
Data Base Grid Characteristics ============================== Data Base Summary ----------------- File is organized as a regular grid Space dimension = 2 Number of Columns = 5 Total number of samples = 10000 Grid characteristics: --------------------- Origin : 0.000 0.000 Mesh : 1.000 1.000 Number : 100 100 Variables --------- Column = 0 - Name = rank - Locator = NA Column = 1 - Name = x1 - Locator = x1 Column = 2 - Name = x2 - Locator = x2 Column = 3 - Name = Kriging.Data.estim - Locator = z1 Column = 4 - Name = Kriging.Data.stdev - Locator = NA