gempy-project / gempy

GemPy is an open-source, Python-based 3-D structural geological modeling software, which allows the implicit (i.e. automatic) creation of complex geological models from interface and orientation data. It also offers support for stochastic modeling to address parameter and model uncertainties.
https://gempy.org
European Union Public License 1.2
986 stars 235 forks source link

Conformal shift of layers in GemPy #944

Open AlexanderJuestel opened 1 month ago

AlexanderJuestel commented 1 month ago

Is your feature request related to a problem? Please describe. Sometimes, you only know the top of a reservoir (e.g., from seismics). However, based on well data, you know the (true!) thickness of that layer. The goal is now to get the base layer modelled in GemPy

Describe the solution you'd like It is not enough to just shift the top layer X m downwards. What you want is that the layer has a constant true thickness orthogonal to the layer boundary (see image). That would mean that you have to shift the layer (or points of the mesh) orthogonal to the gradient of the layer by X m (here now the thickness of the layer). Based on the shifted points, a new layer can be calculated.

image

Describe alternatives you've considered None, I will try to come up with a simple solution. I may also implement that in GemGIS then ;)

NilsChudalla commented 1 month ago

So in other words: you want to model a parallel fold instead of a similar fold? (Ramsay fold classification)

AlexanderJuestel commented 1 month ago

Yes

NilsChudalla commented 1 month ago

I was scrolling around gempy-engine and solution for quite some time. Because, getting the gradient at some point should be more than doable, given this is how we interpolate in the first place. Maybe @javoha has some nice idea next week :)

AlexanderJuestel commented 1 month ago

First, I would think of a post-processing solution. You can easily compute the normals for PyVista meshes and move the respective vertex along the normal with the corresponding length (= thickness of layer).

NilsChudalla commented 1 month ago

Generally, I am not 100% sure, if this idea is compatible with gempy in the first place. Some weird cases come my mind, if the thickness is picked too large (mainly, shifting points from the fold limb along the normal too far can have them moving beyond the fold axis plane onto the other side). This logic might be applicable in your use case, but not sure if this can be generalized.

AlexanderJuestel commented 1 month ago

Well, that is a special case that may not even exist in the real world. I do not believe that you could fold this competent 500 m thick Massenkalk layer into a tight anticline without some other funny things happening :D

NilsChudalla commented 1 month ago

Nature doing "weird things" would be the person sitting in front of the PC, not geodynamics :D Just trying to think of a general way :D

javoha commented 1 month ago

Hi friends, so I think there are a couple of interesting questions here. A) How rigorous do you want to enforce this? B) As so often: How complex is your model? C) What is gempy actually doing at the moment?

Strictly enforcing a parallel behavior I think Alex is probably correct. Getting the gradient from gempy (or jsut from the scalar field) and projecting the points by a defined distance in that direction. This would probably be feasible for simple models, but we also need to consider how our orientations influence this. My gut says this will get messy as models get more complex.

Question C) I think is actually interesting: If I create a very simple model with a fold, rather well defined for one element (red), the resulting scalar field might actually just be good enough. In this example I just put a single point for a second element in the crest of the fold (blue). I do think the result here looks more like a parallel fold that a similar fold. This does depend strongly on the given orientations but I think dependening on your use case just projecting points in the crests and troughs of your folding might give reasonable results.

image