gempy icon indicating copy to clipboard operation
gempy copied to clipboard

Influence surface thickness

Open domist07 opened this issue 4 years ago • 10 comments

Is anywhere a parameter which I can set to influence the varying surface thickness? Figure_1_c Where the numbers are, there are borehole data points. I have set the smooth to the points to zero. As you can see in the picture above only at the boreholes, the surface thickness between the red and yellow lines, which are in one series, is bigger, but i want, that it in-/ and decrease smoother like this: Figure_2 For the second picture I set the yellow and red surface-lines to different series, but thats geologically not correct.

domist07 avatar Mar 10 '20 16:03 domist07

Hi domist07, can you maybe sent some more surrounding data and scale info? Based on your sections it is difficult to see how other input data might have an effect or how the effect scales in relation to your whole model. I have one or two ideas how to handle this but a little more context would be very helpful.

javoha avatar Mar 11 '20 14:03 javoha

The extend of the wohle project is: 187 x 1191 x 74 m The additional data: Structure isLith True isFault True number faults 2 number surfaces 6 number series 6 number surfaces per series [1, 1, 1, 2, 1, 0] len surfaces surface_points [3, 3, 27, 27, 28, 28] len series surface_points [3, 3, 27, 55, 28, 0] len series orientations [3, 3, 27, 55, 28, 0] Options dtype float64 output geology theano_optimizer fast_run device cpu verbosity [] Kriging
range 1207.51 $C_o$ 34716.2 drift equations [3, 3, 3, 3, 3, 3] nugget grad 0.01 nugget scalar 1e-06 Rescaling rescaling factor 2301.18 3D Plot of the area: Figure_3

What else informations do you need?

domist07 avatar Mar 11 '20 15:03 domist07

Hi, so why I was asking for more details: In general there has to be some input data that causes the yellow layer to bend up, and the red layer to bend down between the boreholes. Otherwise it should more or less be just a straight interpolation between those points. Even with the other info you provided, it is hard to tell which data points cause this behavior.

One thing you could try is play around with the range of the underlying variogram/covariance function. I checked but there seems to be an issue and right now it is difficult/impossible to change it properly. There is a new pull request (#325 ) that showcases the problem and I hope we can fix it soon so that you can try if that offers a solution.

javoha avatar Mar 12 '20 13:03 javoha

How can I set the range of the variogram/covariance function? Is this the right command: geo_data.modify_kriging_parameters('range', XXX) ?

domist07 avatar Mar 12 '20 14:03 domist07

OK - the correct way to do it (#325) is to geo_data.modify_kriging_parameters('range', XXX) and then recompile the interpolator (interp_data = gp.set_interpolation_data() with update_kriging flag set to False. You can play around with it a little, smaller ranges should make the problem worse, big ranges might improve it. Not sure if that is the solution. You can also try to set the "global" nugget effect to zero with the same function (using "nugget grad" instead of "range" but that should be covered by your smoothing factor.

javoha avatar Mar 16 '20 08:03 javoha

The global nugget effect is not a thing anymore. I am going to leave the issue open until I delete those properties. @javoha if you have a strong opinion add a method to change the "global" nugget that under the hood calls geo_model.modify_surface_points('all', smooth=X)

Leguark avatar Mar 23 '20 17:03 Leguark

Related to #266

Leguark avatar Mar 25 '20 10:03 Leguark

Hi @domist07 ,

sorry again for the late answer. With the material you provided I was able to get a smoother result by changing the C_0 parameter (corresponding to the nugget effect) in the kriging parameters to a very small value. Here is how I did it (I think you might have forgotten to update the interpolator properly):

geo_data.modify_kriging_parameters('$C_o$', 0.1)
interp_data = gp.set_interpolation_data(geo_data, update_kriging=False)
gp.compute_model(geo_data, sort_surfaces=False, compute_mesh=True)

gp._plot.plot_2d(geo_data, section_names="LS2", show_lith=False, show_data=False, figsize=(30,30))

And here are the results: Before and after: Before Improved

javoha avatar Apr 22 '20 07:04 javoha

Yes that works, thank you! Therefore I've found the "initial" error: If I set geo_data.orientations.df['smooth'] = 0.0001 # or smaller after loading the orientations, the problem arrises 🤔. Independet what C_0 I set. Have you any idea why the orientations influence the surface thickness?

domist07 avatar Apr 22 '20 16:04 domist07