3D structural geological modelling particularly in sparse data environments

Surfe’s Inputs and Outputs 輸入和輸出

Definitions 定義

Interface: a boundary surface separating two different regions. E.g. interface that separates two lithologies, a fault surface that separates two continuous domains/volumes.

地層界面:分隔兩個不同區域的邊界面。例如,分隔兩個不同巖性的界面,斷層面分隔兩個連續域/體。

CPD function: Conditionally Positive Definite function. Conditional in the sense that the interpolation matrix is positive definite subject to the orthogonality constraints provided by the polynomial in the null space.

條件正定函數:條件正定函數。插值矩陣是正定的,受零空間中多項式提供的正交性約束的條件。

SPD function: Strictly Positive Definite function. A Gramm matrix (e.g. our interpolation matrices) generated by such a function/kernel will have all of items eigenvalues positive.

嚴格正定函數:嚴格正定函數。由這種函數/核生成的Gramm矩陣(例如我們的插值矩陣)的所有項特徵值都是正的。

All input parameters and constraints as well as outputs to the Surfe interpolant are made through the Surfe_API class.
所有輸入參數和約束以及Surfe 插值的輸出都是通過Surfe_API類生成的。

Input Parameters

Modelling method
The modelling method parameter initializes the Surfe_API object.

使用建模方法參數來初始化Surfe_API對象。

Set by

Surfe_API(const int &modelling_method)

Usage example:

Surfe_API surfe(1); // Single Surface method
Surfe_API *surfe = new Surfe_API(2); // Lajaunie method

Acceptable integer values:

  • 1 : Single_surface

    • Models a single interface surface. No increment points are used in this method and therefore is faster to obtain the interpolant and evaluate it at a list of points.
    • 建立單一界面模型。此方法不使用增量點,因此獲得插值點並在(重採樣)點集中(重採樣)對其求值的速度更快。
  • 2 : Lajaunie_approach

    • Models multiple conformal interface surfaces. Increment points are used in this method.
    • 建立多個共形界面模型。這種方法使用增量點。
  • 3 : Vector_field

    • Models vectors fields from gradient and tangent constraints. Does not incorporate interface or increment constraints.
    • 從梯度和切線約束中建模向量場模型。不包含界面或增量約束。
  • 4: Stratigraphic_horizons

    • Models multiple conformal interface surfaces with additional constraints on the order in which the layers/interfaces where deposited/created. E.g. Layer A is on top/younger of Layer B, Layer B is on top/younger of Layer C. This method is very useful in situations where the data does not sample the volume optimally. E.g. Interface data obtain from outcrops (horizon sampling bias) – Lajaunie method fails in these situation: The increment constraint only indicate that points on the same interface have the same scalar value – nothing about the order of these interfaces are imposed by such constraints.
    • 對多個共形界面曲面建模,並對放置(排列)/創建層/界面層的順序進行附加約束。例如A層位於B層的頂部(較年輕層),B層位於C層的頂部(較年輕層)。這種方法在數據沒有最佳採樣體的情況下非常有用。例如從露頭獲得的界面數據(層位採樣偏差)- Lajaunie方法在這種情況下失敗:增量約束僅表示同一界面上的點具有相同的標量值-這些界面的順序不受此類約束的影響。
  • 5: Continuous_property

    • Models scalar data like assay data, points sampling a function like a fourier series. Does not incorporate gradient constraints.
    • 標量數據模型,如分析數據,點採樣函數,如傅立葉級數。不包含漸變約束。

RBF Kernel
The type of RBF/Kernel used in the interpolant.

Note: If CPD kernels are used special care must be taken when using inequality constraints. This is because a convex optimization problem must be solved in this case. As such, these methods require a SPD matrices. To make our matrices PD we use Lagrangian polynomial basis to ensure our functional space resides within a Reproducing Hilbert Kernel Space. Currently, the only CPD function that is supported is the cubic in these cases.

用於插值的徑向基函數(核)的類型。

注意:如果使用CPD(條件正定函數)內核,在使用不等式約束時必須特別小心。這是因爲在這種情況下必須解決凸優化問題。因此,這些方法需要SPD(嚴格正定函數)矩陣。爲了使我們的矩陣PD(正定),我們使用拉格朗日多項式基來確保我們的函數空間位於Reproducing Hilbert Kernel Space內。目前,在這些情況下,唯一受支持的CPD函數是cubic
Acceptable strings:

  • “r3” : (CPD)(cubic 三次立方體)

  • “Gaussian” : (SPD)(高斯函數)

  • “Multiquadrics”: (CPD)

  • “Inverse Multiquadrics”: (SPD)

  • “Thin Plate Spline”: (CPD)

  • “r”: (CPD)

  • “WendlandC2”: (SPD)

  • “MaternC4”: (SPD)

Important: For SPD kernels, a shape parameter is also needed. This is set by

對於SPD內核,還需要一個形狀參數。

surfe.SetRBFShapeParameter(const double &shape_parameter);

Polynomial order
Polynomials of the correct minimum order are required for CPD kernels to ensure an unique minimum norm interpolant. For cubic kernels the minimum order is 1. These polynomials are the drift functions in co-kriging.

CPD核需要正確的最小階多項式,以確保最小范數插值的唯一性。對於立方(cube)核,最小順序爲1。這些多項式是協同-克里格中的漂移函數。

Acceptable integer values:

  • 0 order:
  • 1 order:
  • 2 order:

Regression Smoothing
Regression smoothing creates an approximate interpolant instead of exact fitting. Exact fitting with real (non-synthetic data) will likely produce topological errors especially with noisy or highly varying data. If a threshold for fitting data constraints is given effectively a least squares minimization is applied to residuals. In the co-kriging world this is the nugget effect.
迴歸平滑創建一個近似的插值而不是精確的擬合。與真實數據(非合成數據)的精確擬合可能會產生拓撲誤差,特別是在噪聲或高度變化的數據中。如果有效地給出了擬合數據約束的閾值,則對殘差應用最小二乘法最小化。在協同-克里金中,這就是nugget effect效應。

Set by

surfe.SetRegressionSmoothing(const bool &use_regression_smoothing, const double &amount);

Note: Depending on the kernel used and the structural complexity sampled by the data, the value specified does not necessarily correspond to physical interpretable meaning: e.g. distance
注意:根據使用的內核和數據採樣的結構複雜性,指定的值不一定對應於物理可解釋的含義:例如距離

Greedy Algorithm
Reduces the number of data constraints (a.k.a centers in approximation theory) used by the interpolant while also accurately approximating the interpolant. Effectively this is a massive speed boost in evaluation of the interpolant. This algorithm will start with the minimum number of constraints needed to obtain an interpolant, then the interpolant will be evaluated at every data constraint which was not included into the interpolant to measure residuals (how much discrepancy there is). A small number of residuals beyond the user specified residual threshold will then be added to the interpolant until all residuals are below this threshold. A threshold for interface data and orientation data are required.

在精確逼近插值點的同時,減少插值點使用的數據約束(a.k.a 中心近似理論)。實際上,這是一個巨大的速度提升在評估插值。此算法將從獲得插值所需的最小約束數開始,然後在每個未包含在插值中的數據約束處對插值求值,以測量殘差(存在多大差異)。然後,將超出用戶指定的殘差閾值的少量殘差添加到插值中,直到所有殘差都低於此閾值。界面數據和方向數據的閾值是必需的。

Set by

surfe.SetRegressionSmoothing(const bool &use_greedy, const double &interface_uncertainty, const double &angular_uncertainty);

Note: The disadvantage of this method is that a bias is placed on outliers. Also note, that support for this method is very limited. I believe only single surface method is support.

注:這種方法的缺點是對異常值有偏差。還要注意的是,這種方法的支持非常有限。我相信只有單一的表面方法是支持。

Interface residual at point not included in interpolant: where f is the scalar field constraint for the interface point. For single surface methods, this is set to 0.

Orientation residual at point not included in interpolant:

Restricted Range
This option is somewhat like the greedy algorithm but does not suffer from the bias of outliers. All data constraints are included into the interpolant, and every data constraint has a bound on it where the smoothest interpolant is to be constrained within. To obtain such an interpolant a quadratic optimization problem is solved, which introduces computational overhead. But only finding the interpolant compute time is affected, the evaluation of the interpolant at user specified points is not affected.

約束範圍
這個選項有點像貪婪算法,但不受異常值的影響。所有數據約束都包含在插值中,並且每個數據約束都有一個邊界,其中最平滑的插值將被約束在其中。爲了得到這樣一個插值函數,需要求解一個二次優化問題,這會增加計算開銷。但隻影響插值計算時間的確定,而不影響插值在用戶指定點的計算。
For interface points:

For orientation onts:

Set by

surfe.SetRestrictedRange(const bool &use_restricted_range, const double &interface_uncertainty, const double &angular_uncertainty);

Global Anisotropy
This option derives principle directions of anisotropy using all supplied planar/gradient constraints. These directions are used to modified how distances are computed. Works well if modelled structures are very global. However, works very poorly when plunge of structures largely vary.

此選項使用所有提供的平面/漸變約束導出各向異性的主方向。這些方向用於修改計算距離的方式。如果建模的結構是非常全局的,則可以很好地工作。然而,當結構的傾斜度變化很大時,效果很差。

Set by

surfe.SetGlobalAnisotropy(const bool &g_anisotropy);

Input Constraints

There are 4 types on data constraints that can be supplied into surfe:
有4種類型的數據約束可以提供給surfe

Interface constraints

  • 3D points sampling an interface that separates two volumetric domains (e.g. lithologies, fault domains)
  • (x, y, z, level)
    • Level is a float value that organizes the stratigraphic order of the interfaces and lithologies (via inequalities). Important: Larger level values are younger (on top) than smaller level values (on bottom). Points sampling the same interface must have the same level value.
    • Level(層位屬性)是一個浮動值,用於組織界面和巖性的地層順序(通過不等式)。較大的級別值(頂部)比較小的級別值(底部)年輕。採樣相同界面的點必須具有相同的級別值。
    • Note: If only one interface is being model, any level value can be chosen. Normally 0 is specified in this case.
    • 注意:如果只有一個界面模型,則可以選擇任何級別值。在這種情況下,通常指定0。
  • Added by
surfe.AddInterfaceConstraint(const double &x,const double &y,const double &z,const double &level);
  • Added by
surfe.SetInterfaceConstraints(const MatrixXd &interface_constraints);

Accepted structure for MatrixXd:

Nx4 matrix, N = number of interface points

Columns: x, y, z, level

Note: In python, MatrixXd is a numpy array

Planar constraints

  • 3D points that have normal (Younging) information attributed to them. The normal indicates the direction in which younger stratigraphy is found. If fault surfaces are being modelled, the polarity of the normal does not matter.

  • 具有表面地層(年輕)信息的三維點。法線表示發現較年輕地層的方向。如果斷層表面正在建模,則法向的極性無關緊要。

  • There are four ways planar constraints can be added:

  1. Supply normal vector
surfe.AddPlanarConstraintwNormal(const double &x,const double &y,const double &z,
const double &nx,const double &ny,const double &nz);
  1. Supply strike, dip, polarity
  • Note polarity has two acceptable values: 0 == upright, 1 == overturned (points down)
surfe.AddPlanarConstraintwStrikeDipPolarity(const double &x,const double &y,const double &z,
const double &strike, const double &dip, const int &polarity);
  1. Supply azimuth, dip, polarity
  • Note polarity has two acceptable values: 0 == upright, 1 == overturned (points down)
  • Note that azimuth is the same as dip direction
surfe.AddPlanarConstraintwAzimuthDipPolarity(const double &x,const double &y,const double &z,
const double &azimuth,const double &dip,const int &polarity);
  1. Supply a matrix or array
surfe.SetPlanarConstraints(const MatrixXd &planar_constraints);

Accepted structure for MatrixXd:

Nx6 matrix, N = number of planar points

Columns: x, y, z, nx, ny, nz

Tangent constraints

  • 3D points that have vector attributed to them. The relationship between this vector and the scalar field is . In other words, the vector is orthogonal (90°) with respect to the gradient of the scalar field . This constraint does not have a lot of effect on changing the modeled geometry since there is a large amount of freedom with fitting this constraint. However, if a lot of these are specified in addition to supplying two tangent constraints at the same point (different vectors!) then this constraint can be useful especially for foliation orientations (there is no polarity).
    此約束對更改建模的幾何圖形沒有太大影響,因爲擬合此約束有很大的自由度。但是,如果除了在同一點上提供兩個切線約束(不同的向量!)這樣,這個約束特別適用於foliation orientations(沒有極性)。
  • Added by
surfe.AddTangentConstraint(const double &x,const double &y,const double &z,
const double &tx,const double &ty,const double &tz);
  • Added by
surfe.SetTangentConstraints(const MatrixXd &tangent_constraints);

Accepted structure for MatrixXd:

Nx6 matrix, N = number of tangent points

Columns: x, y, z, tx, ty, tz

Inequality constraints

  • 3D points sampling lithologies or inside/outside points relative to an interface/s. E.g. Does not belong to an interface. Very useful constraint since observing interface between lithologies is extremely rare and this is the most abundant type of data especially for Geological surveys.
    三維點採樣巖性或相對於界面的內部/外部點。例如,不屬於界面。非常有用的約束條件,因爲觀察巖性之間的界面非常罕見,這是最豐富的數據類型,特別是地質調查
  • (x, y, z, level)
    • Note: the level property has to be compatible and make sense with respect to the level property of the interface level property. For example, you can’t have an inequality point having the same level value as an interface point.注意:level屬性必須與interface level屬性的level屬性兼容並且有意義。例如,不能有與界面點具有相同級別值的不等式點。
  • Added by
surfe.AddInequalityConstraint(const double &x,const double &y,const double &z,const double &level);
  • Added by
surfe.SetInequalityConstraints(const MatrixXd &inequality_constraints);

Accepted structure for MatrixXd:

Nx4 matrix, N = number of inequality points

Columns: x, y, z, level

Outputs

Scalar field
Obtain the value of the scalar field at a 3D point
獲取三維點處標量場的值

Get by

surfe.EvaluateInterpolantAtPoint(const double &x,const double &y,const double &z);

Returns a double

Gradient field
Obtain the gradient of the scalar fied at a 3D point
獲取三維點上標量的梯度
Get by

surfe.EvaluateVectorInterpolantAtPoint(const double &x,const double &y,const double &z);

Returns a 3D vector

Spatial Parameters
Obtain spatial metrics of the inputted data constraints

Get by

surfe.GetDataBoundsAndResolution();

Returns a data structure called SpatialParameters

SpatialParameters data members: xmin, xmax, ymin, ymax, zmin, zmax, resolution

Note: resolution is the spatial resolution required to model the structural variability.

Interface Reference Points
For every interface being model there is a reference point for that interface (used for increments). Getting these reference points is critical when increments are used to model multiple conformal surfaces. This is because we don’t know what the scalar field values are associated to the interfaces. These values are need when applying marching cubes/tetrahedral algorithms to extract the iso surface from the modelled scalar field. The get these values you need to evaluate the interpolant at these reference points.
對於作爲模型的每個界面,都有一個該界面的參考點(用於增量)。當增量用於建模多個共形曲面時,獲取這些參考點至關重要。這是因爲我們不知道標量字段值與界面關聯的是什麼。當應用marching cubes(四面體算法)從建模標量場中提取等值曲面時,需要這些值。獲取這些值需要在這些參考點計算插值。

Get by

surfe.GetInterfaceReferencePoints(); 

Returns an array/matrix

  • Nx3 matrix, N = number of intefaces

Number of Interfaces
Gets the number of modeled interfaces by the interpolant.

Get by

surfe.GetNumberOfInterfaces();

Returns an integer

Has Interpolant been computed
This is a convenience method to determine whether or not the interpolant has been computed yet.

Get by

surfe.InterpolantComputed(); 

Returns a Boolean

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章