hklemm / Prospero

0 stars 0 forks source link

[Module I] Faults not handled correctly #1

Open jonathanlintott opened 7 years ago

jonathanlintott commented 7 years ago

From Trine:

Faults are currently not treated correctly. When used with some surfaces they don’t show at all (e.g. LKT80_depth_interpolated_extrapolated_common_grid_Ext_grid1). With surfaces on other grids they show but look very wrong (e.g. LKT80_depth_common_grid). Note that if fault is first shown at the surface where it shows (but looks wrong) it will keep being visible if the surface is changed until the fault is removed. The error message in the folder is given when the fault is loaded onto LKT80_depth_interpolated_extrapolated_common_grid_Ext_grid1

screenshot_odd_fault error message

Data files in geophys\geophys\tje048\Prospero\Errors\Faults

jonathanlintott commented 7 years ago

Planned solution:

I plan to completely re-write how Prospero handles faults. I will use the Trimesh package which has methods to find intersections between different trimeshes. This will require the horizons to be internally converted to trimeshes for intersection-location.

hklemm commented 7 years ago

Well, be aware that creating Trimeshes from Fault sticks is not trivial. However, we figured out a way to create Gocad trimesh files from Petrel.

jonathanlintott commented 7 years ago

If I can get the Trimesh solution working I will abandon fault sticks altogether and make use of the Gocad importer you have already written for CanopyGeo.

hklemm commented 7 years ago

Have a word with Trine regarding that solution because getting a fault surface in Petrel is apparently non-trivial.

jonathanlintott commented 7 years ago

No success with trying Trimesh, but after a chat with Adam I've implemented a binary search algorithm instead. My test cases look better. Let me know how it goes for you.

jonathanlintott commented 7 years ago

For handover:

If anyone is able to design a better method for finding fault-horizon intersects then it can be implemented in Prospero simply by re-writing the 'find_fault_intersect' method in the BaseModel in the data_model module. It accepts the name of the fault and horizon as arguments and returns an internal Polygon class with the intersect as its x and y data.