gempy icon indicating copy to clipboard operation
gempy copied to clipboard

Uncertainty of fault location

Open SiBoh716 opened this issue 2 years ago • 3 comments

Hello all, This question is related to #752. I have managed to access and modfiy the fault surface points and orientations. However, I want to model the uncertainty of the location of my fault by sampling it while moving it in direction of its normal vector. That to my understanding is defined by G_x, G_y and G_z. I don't necessarily want to modify the azimuth or dip, just the location of my x-, y- and z coordinates of the fault in the direction as well as opposite to the direction of the normal vector. In my example the coordinates of the surface points of the fault are: X=211, Y=272, Z=353, X=207, Y=275, Z=351. The orientation is defined as azimuth, dip and polarity: 22, 50, 1 which gives the corresponding pole vector of: G_x=0.287, G_y=0.710, G_z=0.643.

I have also gone through #482, in which @AlexanderJuestel proposed a workthrough to modify each coordinate and dip as well as azimuth. I got that to work, but I do not have any idea on how to modfiy my fault surface in the direction of the potential field as suggested in #560. There, @javoha suggested to use gx, gy, gz = np.gradient(sol.scalar_field_matrix.reshape(res)) tobtain the gradient via numpy, but I have not managed to do so. When simply calling gx, gy, gz = np.gradient(sol.scalar_field_matrix) I get the error message: not enough values to unpack (expected 3, got 2).

Does anyone have any suggestions on this?

SiBoh716 avatar Feb 16 '23 10:02 SiBoh716

Guess you'd have to reshape the scalar_field_matrix to the 3D-Model resolution. I assume that by itself, the scalar_field matrix is 2D.

Japhiolite avatar Feb 21 '23 12:02 Japhiolite

Hi @SiBoh716, sorry for the very late response. If this is still of interest: The sol.scalar_field_matrix has multiple dimensions depending on the number of scalar fields in your model (normally the number of series and faults). The example I gave only works in case of a single scalar field, meaning a model with only one strata series and no faults. In your case you would need to specify the scalar field of the fault to get the gradients by taking a slice of the sol.scalar_field_matrix:

gx, gy, gz = np.gradient(sol.scalar_field_matrix[0].reshape(res))

You can the use these gradients to move your input data points in a defined direction to calculate the uncertainty.

Best regards Jan

javoha avatar Apr 09 '23 07:04 javoha

@SiBoh716 did the pervious suggestions solve your issue?

AlexanderJuestel avatar Jun 20 '23 15:06 AlexanderJuestel