-
Notifications
You must be signed in to change notification settings - Fork 49
Description
I am evaluating Loop Structural on a well log dataset of the Williston Basin. This is a relatively uncomplicated basin structurally but the study area is large so sedimentation dynamics come into play, and some formations change dramatically in thickness across the basin.
I am trying to create a structural surfaces from a set of formation tops (so value constraints, no gradient information). The tricky bit is that I would like to treat formation thickness as a free parameter that varies across the basin. Instead, it appears that the finite difference interpolator (at least, with defaults) fairly rigidly enforces a constant gradient in the val parameter when a conformable stratigraphy is being modeled. Is there a way to relax this constraint?
Here is the result of Loop3D modeling:
If I do a naïve interpolation of each surface separately with SciPy, I get something much closer to the data, but where stratigraphic superposition is not obeyed:
I've tried using unconformities and interfaces, but I am not sure I was using them correctly in any case.
My code is here for reference.
My model data frame looks like this:
X Y Z val interface feature_name
WELL_ID unit_name
711 TOP070_Pierre -756901.954423 2.764497e+06 431.292863 0 0 main
779 TOP070_Pierre -632910.888494 2.791280e+06 180.137160 0 0 main
784 TOP070_Pierre -632515.256795 2.795109e+06 175.260351 0 0 main
786 TOP070_Pierre -620580.894934 2.803847e+06 121.005842 0 0 main
789 TOP070_Pierre -632946.220886 2.795394e+06 183.794768 0 0 main
... ... ... ... ... ... ...
13919 TOP542_Basement -516713.285205 2.833342e+06 -3780.746761 -28 28 main
14009 TOP542_Basement -521056.245299 2.827089e+06 -3716.129032 -28 28 main
14016 TOP542_Basement -515309.978975 2.848040e+06 -3643.891288 -28 28 main
14029 TOP542_Basement -595338.113582 2.840625e+06 -3616.459233 -28 28 main
16098 TOP542_Basement -588366.037256 2.557178e+06 -2058.318517 -28 28 main
and my stratigraphy has this general structure:
{
'main': {
'TOP070_Pierre': {'max': 0, 'min': -1, 'id': 0},
'TOP097_Mowry': {'max': -1, 'min': -2, 'id': -1},
...
}
As you can see, I'm using arbitrary integer indices to track the order of surfaces; I'd expect the final interpolation to have a varying spacing between these value contours.
I apologize if I am missing some fundamentals of this package's approach, as I only just began to use it today. I'd appreciate any recommendations on the right approach to take for this particular problem.



