LoopStructural 1.6.2__py3-none-any.whl → 1.6.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of LoopStructural might be problematic. Click here for more details.
- LoopStructural/datatypes/_bounding_box.py +19 -4
- LoopStructural/datatypes/_point.py +36 -2
- LoopStructural/datatypes/_structured_grid.py +17 -0
- LoopStructural/datatypes/_surface.py +17 -0
- LoopStructural/export/omf_wrapper.py +49 -21
- LoopStructural/interpolators/__init__.py +13 -0
- LoopStructural/interpolators/_api.py +81 -13
- LoopStructural/interpolators/_discrete_fold_interpolator.py +11 -4
- LoopStructural/interpolators/_discrete_interpolator.py +100 -53
- LoopStructural/interpolators/_finite_difference_interpolator.py +68 -78
- LoopStructural/interpolators/_geological_interpolator.py +27 -10
- LoopStructural/interpolators/_p1interpolator.py +3 -3
- LoopStructural/interpolators/_surfe_wrapper.py +42 -12
- LoopStructural/interpolators/supports/_2d_base_unstructured.py +16 -0
- LoopStructural/interpolators/supports/_2d_structured_grid.py +44 -9
- LoopStructural/interpolators/supports/_3d_base_structured.py +24 -7
- LoopStructural/interpolators/supports/_3d_structured_grid.py +38 -12
- LoopStructural/interpolators/supports/_3d_structured_tetra.py +7 -3
- LoopStructural/interpolators/supports/_3d_unstructured_tetra.py +8 -2
- LoopStructural/interpolators/supports/__init__.py +7 -0
- LoopStructural/interpolators/supports/_base_support.py +7 -0
- LoopStructural/modelling/__init__.py +1 -3
- LoopStructural/modelling/core/geological_model.py +2 -4
- LoopStructural/modelling/features/_analytical_feature.py +25 -16
- LoopStructural/modelling/features/_base_geological_feature.py +21 -8
- LoopStructural/modelling/features/_geological_feature.py +47 -11
- LoopStructural/modelling/features/_structural_frame.py +10 -18
- LoopStructural/modelling/features/_unconformity_feature.py +3 -3
- LoopStructural/modelling/features/builders/_base_builder.py +8 -0
- LoopStructural/modelling/features/builders/_folded_feature_builder.py +45 -14
- LoopStructural/modelling/features/builders/_geological_feature_builder.py +29 -13
- LoopStructural/modelling/features/builders/_structural_frame_builder.py +5 -0
- LoopStructural/modelling/features/fault/__init__.py +1 -1
- LoopStructural/modelling/features/fault/_fault_function.py +19 -1
- LoopStructural/modelling/features/fault/_fault_segment.py +40 -51
- LoopStructural/modelling/features/fold/__init__.py +1 -2
- LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py +0 -23
- LoopStructural/modelling/features/fold/_foldframe.py +4 -4
- LoopStructural/modelling/features/fold/_svariogram.py +81 -46
- LoopStructural/modelling/features/fold/fold_function/__init__.py +27 -0
- LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py +253 -0
- LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py +153 -0
- LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py +46 -0
- LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py +151 -0
- LoopStructural/modelling/input/process_data.py +47 -26
- LoopStructural/modelling/input/project_file.py +49 -23
- LoopStructural/utils/__init__.py +1 -0
- LoopStructural/utils/_surface.py +11 -4
- LoopStructural/utils/colours.py +26 -0
- LoopStructural/utils/features.py +5 -0
- LoopStructural/utils/maths.py +51 -0
- LoopStructural/version.py +1 -1
- LoopStructural-1.6.5.dist-info/METADATA +146 -0
- {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.5.dist-info}/RECORD +57 -52
- {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.5.dist-info}/WHEEL +1 -1
- LoopStructural/interpolators/_non_linear_discrete_interpolator.py +0 -0
- LoopStructural/modelling/features/fold/_fold_rotation_angle.py +0 -149
- LoopStructural-1.6.2.dist-info/METADATA +0 -81
- {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.5.dist-info}/LICENSE +0 -0
- {LoopStructural-1.6.2.dist-info → LoopStructural-1.6.5.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: LoopStructural
|
|
3
|
+
Version: 1.6.5
|
|
4
|
+
Summary: 3D geological modelling
|
|
5
|
+
Author-email: Lachlan Grose <lachlan.grose@monash.edu>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Documentation, https://Loop3d.org/LoopStructural/
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/loop3d/loopstructural/issues
|
|
9
|
+
Project-URL: Source Code, https://github.com/loop3d/loopstructural
|
|
10
|
+
Keywords: earth sciences,geology,3-D modelling,structural geology,uncertainty
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Science/Research
|
|
13
|
+
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
14
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
16
|
+
Classifier: Operating System :: POSIX
|
|
17
|
+
Classifier: Operating System :: MacOS
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Requires-Python: >=3.8
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: numpy>=1.18
|
|
27
|
+
Requires-Dist: pandas
|
|
28
|
+
Requires-Dist: scipy
|
|
29
|
+
Requires-Dist: scikit-image
|
|
30
|
+
Requires-Dist: scikit-learn
|
|
31
|
+
Requires-Dist: tqdm
|
|
32
|
+
Provides-Extra: all
|
|
33
|
+
Requires-Dist: loopstructural[export,inequalities,visualisation]; extra == "all"
|
|
34
|
+
Provides-Extra: visualisation
|
|
35
|
+
Requires-Dist: matplotlib; extra == "visualisation"
|
|
36
|
+
Requires-Dist: pyvista; extra == "visualisation"
|
|
37
|
+
Requires-Dist: loopstructuralviusualisation>0.1.4; extra == "visualisation"
|
|
38
|
+
Provides-Extra: export
|
|
39
|
+
Requires-Dist: geoh5py; extra == "export"
|
|
40
|
+
Requires-Dist: pyevtk; extra == "export"
|
|
41
|
+
Requires-Dist: dill; extra == "export"
|
|
42
|
+
Provides-Extra: jupyter
|
|
43
|
+
Requires-Dist: pyvista[all]; extra == "jupyter"
|
|
44
|
+
Requires-Dist: tqdm; extra == "jupyter"
|
|
45
|
+
Provides-Extra: inequalities
|
|
46
|
+
Requires-Dist: loopsolver; extra == "inequalities"
|
|
47
|
+
|
|
48
|
+
# LoopStructural: Loop3D Implicit Geological Modelling
|
|
49
|
+
|
|
50
|
+

|
|
51
|
+
[](https://badge.fury.io/py/LoopStructural)
|
|
52
|
+
[](https://github.com/Loop3D/LoopStructural/blob/master/LICENSE)
|
|
53
|
+
[](https://loop3d.github.io/LoopStructural)
|
|
54
|
+
|
|
55
|
+
## Overview
|
|
56
|
+
|
|
57
|
+
LoopStructural is an opensource Python library for 3D geological modelling. The library has been built in the scope of the Loop project ([Loop3d.org](https://loop3d.org/)). LoopStructural can:
|
|
58
|
+
|
|
59
|
+
- Model fault networks integrating fault kinematics and overprinting relationships
|
|
60
|
+
- Model folds using structural elements (fold axis, fold axial surface) for multiple fold events
|
|
61
|
+
- Use different implicit interpolation algorithms (Finite Difference, Piecewiese Linear, RBF)
|
|
62
|
+
- Export models to vtk, geoh5, omf, gocad, csv, obj formats
|
|
63
|
+
- Visualise models in an interactive python environment.
|
|
64
|
+
|
|
65
|
+
## Installation
|
|
66
|
+
|
|
67
|
+
### Google colab
|
|
68
|
+
|
|
69
|
+
LoopStructural can be used inside a google colab notebook, however interactive visualisation using kitware trame does not work. Only static plots can be displayed.
|
|
70
|
+
|
|
71
|
+
### Pip
|
|
72
|
+
|
|
73
|
+
`pip install loopstructural`
|
|
74
|
+
|
|
75
|
+
Optional dependencies are:
|
|
76
|
+
|
|
77
|
+
- loopstructuralvisualisation (wrapper for pyvista to interface with loopstructural objects)
|
|
78
|
+
- pyvista (3D visualisation)
|
|
79
|
+
- geoh5py (export to .geoh5 format)
|
|
80
|
+
- mira-omf (export to .omf format to load in Leapfrog)
|
|
81
|
+
- pyevtk
|
|
82
|
+
- dill (serialize loop models to a pickle file)
|
|
83
|
+
- tqdm (progress bars)
|
|
84
|
+
- loopsolver (experimental solver for admm inequality constraints)
|
|
85
|
+
|
|
86
|
+
You can install all of the optional dependencies using:
|
|
87
|
+
`pip install loopstructural[all]`
|
|
88
|
+
|
|
89
|
+
### conda
|
|
90
|
+
|
|
91
|
+
`conda install -c conda-forge -c loop3d loopstructural`
|
|
92
|
+
|
|
93
|
+
to install the working 3D visualisation environment
|
|
94
|
+
`conda install -c conda-forge -c loop3d loopstructural loopstructuralvisualisation pyvista trame trame-vtk trame-vuetify`
|
|
95
|
+
|
|
96
|
+
## Quickstart
|
|
97
|
+
|
|
98
|
+
- A basic geological model
|
|
99
|
+
|
|
100
|
+
```Python
|
|
101
|
+
from LoopStructural import GeologicalModel
|
|
102
|
+
from LoopStructural.datatypes import BoundingBox
|
|
103
|
+
from LoopStructural.visualisation import Loop3DView
|
|
104
|
+
from LoopStructural.datasets import load_claudius
|
|
105
|
+
|
|
106
|
+
import numpy as np
|
|
107
|
+
data, bb = load_claudius()
|
|
108
|
+
|
|
109
|
+
#bb constaints origin and maximum of axis aligned bounding box
|
|
110
|
+
#data is a pandas dataframe with X,Y,Z,val,nx,ny,nz, feature_name
|
|
111
|
+
|
|
112
|
+
model = GeologicalModel(bb[0,:],bb[1,:])
|
|
113
|
+
model.data = data
|
|
114
|
+
# nelements specifies the number of discrete interpolation elements
|
|
115
|
+
# 'stratí' is the feature name in the data dataframe
|
|
116
|
+
model.create_and_add_foliation('strati',nelements=1e5)
|
|
117
|
+
model.update()
|
|
118
|
+
# get the value of the interpolator at some random locations
|
|
119
|
+
locations = np.array(
|
|
120
|
+
[
|
|
121
|
+
np.random.uniform(bb[0, 0], bb[1, 0],5),
|
|
122
|
+
np.random.uniform(bb[0, 1], bb[1, 1],5),
|
|
123
|
+
np.random.uniform(bb[0, 2], bb[1, 2],5),
|
|
124
|
+
]
|
|
125
|
+
).T
|
|
126
|
+
val = model.evaluate_feature_value('strati', locations)
|
|
127
|
+
# get the gradient of the interpolator
|
|
128
|
+
gradient = model.evaluate_feature_gradient('strati',locations)
|
|
129
|
+
|
|
130
|
+
#Plot the scalar field of the model
|
|
131
|
+
model['strati'].scalar_field().plot()
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Documentation
|
|
137
|
+
|
|
138
|
+
The LoopStructural documentation can be found [here](https://loop3d.github.io/LoopStructural)
|
|
139
|
+
|
|
140
|
+
## Problems
|
|
141
|
+
|
|
142
|
+
Any bugs/feature requests/comments please create a new [issue](https://github.com/Loop3D/LoopStructural/issues).
|
|
143
|
+
|
|
144
|
+
## Acknowledgements
|
|
145
|
+
|
|
146
|
+
_The Loop platform is an open source 3D probabilistic geological and geophysical modelling platform, initiated by Geoscience Australia and the OneGeology consortium. The project is funded by Australian territory, State and Federal Geological Surveys, the Australian Research Council and the MinEx Collaborative Research Centre._
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
LoopStructural/__init__.py,sha256=nlJ0csTZ_xlTZrWvTKiTp3ER_XRQN6iqQ5sR94RD5QA,1331
|
|
2
|
-
LoopStructural/version.py,sha256=
|
|
2
|
+
LoopStructural/version.py,sha256=LEtHSENWZLwKaCJasxjOIQSt5Y_OahmKZYacXCmyQtI,22
|
|
3
3
|
LoopStructural/datasets/__init__.py,sha256=ylb7fzJU_DyQ73LlwQos7VamqkDSGITbbnoKg7KAOmE,677
|
|
4
4
|
LoopStructural/datasets/_base.py,sha256=FB_D5ybBYHoaNbycdkpZcRffzjrrL1xp9X0k-pyob9Y,7618
|
|
5
5
|
LoopStructural/datasets/_example_models.py,sha256=Zg33IeUyh4C-lC0DRMLqCDP2IrX8L-gNV1WxJwBGjzM,113
|
|
@@ -29,77 +29,80 @@ LoopStructural/datasets/data/geological_map_data/stratigraphic_order.csv,sha256=
|
|
|
29
29
|
LoopStructural/datasets/data/geological_map_data/stratigraphic_orientations.csv,sha256=RysyqUAIjY6iIDUfTh11n9QUQWXB_qxKnZeN_DqNzlY,26745
|
|
30
30
|
LoopStructural/datasets/data/geological_map_data/stratigraphic_thickness.csv,sha256=pnSmG-wL8-kxuoHo_pgpJrfTmsZOzc8L0vxpBRh3r8A,355
|
|
31
31
|
LoopStructural/datatypes/__init__.py,sha256=lVg64DnynMm58qvYTjLrcyWH7vk2ngr9JGMo5FaiALI,160
|
|
32
|
-
LoopStructural/datatypes/_bounding_box.py,sha256=
|
|
33
|
-
LoopStructural/datatypes/_point.py,sha256=
|
|
34
|
-
LoopStructural/datatypes/_structured_grid.py,sha256=
|
|
35
|
-
LoopStructural/datatypes/_surface.py,sha256=
|
|
32
|
+
LoopStructural/datatypes/_bounding_box.py,sha256=nTtvNj0UiQWX-61tBH6iWS8YDzHBIqTKWHUxStkKBfU,14732
|
|
33
|
+
LoopStructural/datatypes/_point.py,sha256=ayUVA3EuqAc3NFctiKycGehG2HPNj6ZAMbLANjnq1n4,6291
|
|
34
|
+
LoopStructural/datatypes/_structured_grid.py,sha256=AwSzkoAySU8ZHGbbGTyUoU3fCXuBVQAOD_6th6v0J1o,3665
|
|
35
|
+
LoopStructural/datatypes/_surface.py,sha256=3RLA6-zkWE1L3IvXdrq92Dd5asnI9Lf6ebcNmrMnn98,6445
|
|
36
36
|
LoopStructural/export/exporters.py,sha256=BniZu-PqQvHqCU6GIuJQ5FPzI9Dx_T6rI8EW1pykois,17209
|
|
37
37
|
LoopStructural/export/file_formats.py,sha256=0xKyYSW4Jv_4jsXwusg-WO6PNUhZKd6HdWSqGSaPve8,232
|
|
38
38
|
LoopStructural/export/geoh5.py,sha256=TByfnHul1Rg4oB5KPnD-yCcZ-uNr4cxuYnRB_6mclnA,4253
|
|
39
39
|
LoopStructural/export/gocad.py,sha256=cQ6v7ZD0CVubt3c2f9EwAYrziu5bEFSWBtx0uade5mg,3370
|
|
40
|
-
LoopStructural/export/omf_wrapper.py,sha256=
|
|
41
|
-
LoopStructural/interpolators/__init__.py,sha256=
|
|
42
|
-
LoopStructural/interpolators/_api.py,sha256=
|
|
40
|
+
LoopStructural/export/omf_wrapper.py,sha256=4vcF4WOQIVEYsWrfATgKCDh8nUybLTbrlXnCxZ_3fkU,3392
|
|
41
|
+
LoopStructural/interpolators/__init__.py,sha256=HcQ-wOnTKFtpS02Pxd_aP9s6bgjCb7iECYYFzX1nd44,3396
|
|
42
|
+
LoopStructural/interpolators/_api.py,sha256=EC4ogG2uPq-z_pgNGd_eTieTl92eaZ-rjyoFwXiHL_s,7839
|
|
43
43
|
LoopStructural/interpolators/_builders.py,sha256=6M8__gGDO-dyu3LPIwcPia1knLR5-EH0GBMLSF0Kuwc,6476
|
|
44
|
-
LoopStructural/interpolators/_discrete_fold_interpolator.py,sha256=
|
|
45
|
-
LoopStructural/interpolators/_discrete_interpolator.py,sha256=
|
|
46
|
-
LoopStructural/interpolators/_finite_difference_interpolator.py,sha256=
|
|
47
|
-
LoopStructural/interpolators/_geological_interpolator.py,sha256=
|
|
44
|
+
LoopStructural/interpolators/_discrete_fold_interpolator.py,sha256=eDe0R1lcQ0AuMcv7zlpu5c-soCv7AybIqQAuN2vFE3M,6542
|
|
45
|
+
LoopStructural/interpolators/_discrete_interpolator.py,sha256=EPiEWtx8RuE75xp7umy7Py4vTiFB0xgN3EFnl44ygKM,25577
|
|
46
|
+
LoopStructural/interpolators/_finite_difference_interpolator.py,sha256=oFchMqCSWjRquJmI0rNrtjFhre4O7PLyOLxZFE64Se4,15819
|
|
47
|
+
LoopStructural/interpolators/_geological_interpolator.py,sha256=4qPkJKWW1Kqe-U78CLR8ayLdFXq9aJZ2FB5_ntITxHk,11028
|
|
48
48
|
LoopStructural/interpolators/_interpolator_factory.py,sha256=LSxrf7tEWek_0tNxioGHeWWwu3Ywf8Ar79M6gC75tBY,3468
|
|
49
|
-
LoopStructural/interpolators/_non_linear_discrete_interpolator.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
49
|
LoopStructural/interpolators/_operator.py,sha256=PZOUzq9OMaJdG151dSLIo7AxRuhTj6-zEAzFZo-EOJU,1114
|
|
51
|
-
LoopStructural/interpolators/_p1interpolator.py,sha256=
|
|
50
|
+
LoopStructural/interpolators/_p1interpolator.py,sha256=4rjj4iaw2c8hOfBS9u8ycxzijYdmvpeijvhYRwUwZg0,8736
|
|
52
51
|
LoopStructural/interpolators/_p2interpolator.py,sha256=UT-As5RNsmOwHOzO_6FiRcAwlNHfi4ILbJw2LGpwKAw,10274
|
|
53
|
-
LoopStructural/interpolators/_surfe_wrapper.py,sha256=
|
|
52
|
+
LoopStructural/interpolators/_surfe_wrapper.py,sha256=uwqABnixan9bcyU08hbxO9ATO4DawItuGSGj7iAKa9U,6772
|
|
54
53
|
LoopStructural/interpolators/_cython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
55
|
-
LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=
|
|
54
|
+
LoopStructural/interpolators/supports/_2d_base_unstructured.py,sha256=maHzpHnPRoo5IOLcp4Si7kj0oaxFox8XYrknwErbyoo,11796
|
|
56
55
|
LoopStructural/interpolators/supports/_2d_p1_unstructured.py,sha256=okcy56nyjuedmknQn_95V2tm0kdMA-oJcD3U2jU8u0w,2637
|
|
57
56
|
LoopStructural/interpolators/supports/_2d_p2_unstructured.py,sha256=TeBVtT1PMV7CKzmnFZke37acMoFxouer20cskS7pVoE,10422
|
|
58
|
-
LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=
|
|
57
|
+
LoopStructural/interpolators/supports/_2d_structured_grid.py,sha256=TbAV1iw2gmZ4ovSMj04GLKaDZjbxK7YAceJ4wBYn8m8,16209
|
|
59
58
|
LoopStructural/interpolators/supports/_2d_structured_tetra.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
60
|
-
LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=
|
|
59
|
+
LoopStructural/interpolators/supports/_3d_base_structured.py,sha256=keZnVSK0_wmXCLkWicyIlIV7Wsy2p67OC8B2AOUIMDM,15531
|
|
61
60
|
LoopStructural/interpolators/supports/_3d_p2_tetra.py,sha256=CqGVJRUMxbPQZDhhopNt_s9gVhMqh4YbjQyDZonoyxc,11574
|
|
62
|
-
LoopStructural/interpolators/supports/_3d_structured_grid.py,sha256=
|
|
63
|
-
LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=
|
|
64
|
-
LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=
|
|
65
|
-
LoopStructural/interpolators/supports/__init__.py,sha256=
|
|
61
|
+
LoopStructural/interpolators/supports/_3d_structured_grid.py,sha256=0H5wh5pBcxqw3crFeXdpnaKMfbSmJNOt-v9-IQa8tSM,17286
|
|
62
|
+
LoopStructural/interpolators/supports/_3d_structured_tetra.py,sha256=5zUNtvEXDvbCHZCu6Fz9WjGbnrMaq-sYJqNUufyLcq8,26505
|
|
63
|
+
LoopStructural/interpolators/supports/_3d_unstructured_tetra.py,sha256=vc9ZffCYk7m1Ae5-H_m1P5OCHgBa9jztrklugMPPiHc,23500
|
|
64
|
+
LoopStructural/interpolators/supports/__init__.py,sha256=V0JjixoBIUZVAo5MmqARR67xDOoQwnb4G3SXeOMRSyQ,1603
|
|
66
65
|
LoopStructural/interpolators/supports/_aabb.py,sha256=Z-kH_u6c6izak0aHG3Uo14PEKQeZmYlevLDC32Q06xk,3208
|
|
67
|
-
LoopStructural/interpolators/supports/_base_support.py,sha256=
|
|
66
|
+
LoopStructural/interpolators/supports/_base_support.py,sha256=5Cwq16EhA2rx4-DFUmoM5z6DRnDfRLkachBpGyzShdM,2420
|
|
68
67
|
LoopStructural/interpolators/supports/_face_table.py,sha256=Hyj4Io63NkPRN8ab9uDHyec-2Kb8BLY_xBF6STNlvBw,3095
|
|
69
68
|
LoopStructural/interpolators/supports/_support_factory.py,sha256=c86NnM4azWhS2ajPApePap0sFI82mZC8siVAU1fCOn4,1175
|
|
70
|
-
LoopStructural/modelling/__init__.py,sha256=
|
|
69
|
+
LoopStructural/modelling/__init__.py,sha256=oW7dz6c8K1A0VcW7-mVcyqcENUrtybCb3eVUNXFvMfA,656
|
|
71
70
|
LoopStructural/modelling/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
|
-
LoopStructural/modelling/core/geological_model.py,sha256=
|
|
71
|
+
LoopStructural/modelling/core/geological_model.py,sha256=GS4VaQBdaWDn9W3hngjeUSgI83A5oDR_IjlcRQTwT_U,66120
|
|
73
72
|
LoopStructural/modelling/features/__init__.py,sha256=qTl-jTau-nnSZ4G4Np6JkBcXB01ViXhouUo_-ImoDvk,877
|
|
74
|
-
LoopStructural/modelling/features/_analytical_feature.py,sha256=
|
|
75
|
-
LoopStructural/modelling/features/_base_geological_feature.py,sha256=
|
|
73
|
+
LoopStructural/modelling/features/_analytical_feature.py,sha256=7-wFD_h6XDE89jn_trMkLeL98nHAj_5mj802mWTIp7E,2825
|
|
74
|
+
LoopStructural/modelling/features/_base_geological_feature.py,sha256=NUF0PbkS5hxKfTCAjlC9nJ0airmLUnkcSYniYG1rpjg,11620
|
|
76
75
|
LoopStructural/modelling/features/_cross_product_geological_feature.py,sha256=IOcJBgQeGBOgwymcyyEdsQHHbVs23sYPpl8xavBaPZE,2781
|
|
77
|
-
LoopStructural/modelling/features/_geological_feature.py,sha256=
|
|
76
|
+
LoopStructural/modelling/features/_geological_feature.py,sha256=Migi29Qr_hjIhNYuhclSK4I_MyETwa27lHeClhDKyu0,11221
|
|
78
77
|
LoopStructural/modelling/features/_lambda_geological_feature.py,sha256=pEfLN9HcYGluxRB7LJpcKdYqXP_Mkyo1pLZ3kZZ4mvA,2599
|
|
79
78
|
LoopStructural/modelling/features/_region.py,sha256=TB4qnoTDQM2VgRjgyODN839fKe3kuRYLllJj0xnDKXo,478
|
|
80
|
-
LoopStructural/modelling/features/_structural_frame.py,sha256=
|
|
81
|
-
LoopStructural/modelling/features/_unconformity_feature.py,sha256
|
|
79
|
+
LoopStructural/modelling/features/_structural_frame.py,sha256=Jl89dL_GsGWvtXibAr4zitVChKw9sog0-Rs9QMHw8q4,4802
|
|
80
|
+
LoopStructural/modelling/features/_unconformity_feature.py,sha256=6SAgPkjipRR0Wo4aXblKyT2YuIphZc6ys1rbLXt4Umw,2409
|
|
82
81
|
LoopStructural/modelling/features/builders/__init__.py,sha256=Gqld1C-PcaXfJ8vpkWMDCmehmd3hZNYQk1knPtl59Bk,266
|
|
83
|
-
LoopStructural/modelling/features/builders/_base_builder.py,sha256=
|
|
82
|
+
LoopStructural/modelling/features/builders/_base_builder.py,sha256=ImlKZs4sFSrtAAp1NEpQD35AKF_mLEHr7jj2DzSyAd4,3561
|
|
84
83
|
LoopStructural/modelling/features/builders/_fault_builder.py,sha256=EyDLyovrnxqSk11zWFnViok7lXMt_E-pG2QqgRgvOLk,25653
|
|
85
|
-
LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=
|
|
86
|
-
LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=
|
|
87
|
-
LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=
|
|
88
|
-
LoopStructural/modelling/features/fault/__init__.py,sha256=
|
|
89
|
-
LoopStructural/modelling/features/fault/_fault_function.py,sha256=
|
|
84
|
+
LoopStructural/modelling/features/builders/_folded_feature_builder.py,sha256=ZIhzQV0ZRFfZF_3zJGMyMPk-xVmCro5k2HJCzB790gA,6535
|
|
85
|
+
LoopStructural/modelling/features/builders/_geological_feature_builder.py,sha256=Js3NgfbFipZrTmKrIMKsNpRE5EeBxy0_TmGz3ytO5YA,21628
|
|
86
|
+
LoopStructural/modelling/features/builders/_structural_frame_builder.py,sha256=1SS_wrnkmaP7NTvTyHGTkuYaaU2Vc-_XmpmxS-CQrwg,7762
|
|
87
|
+
LoopStructural/modelling/features/fault/__init__.py,sha256=4u0KfYzmoO-ddFGo9qd9ov0gBoLqBiPAUsaw5zhEOAQ,189
|
|
88
|
+
LoopStructural/modelling/features/fault/_fault_function.py,sha256=5IzVyvv1tS5Z6geMB8FdTZpGrBYbyu38cOH03NACm0o,12797
|
|
90
89
|
LoopStructural/modelling/features/fault/_fault_function_feature.py,sha256=1F_xGGRtLZ7mBnXutEGkwWoJImSEPUuxstf0Nu-7k5w,2452
|
|
91
|
-
LoopStructural/modelling/features/fault/_fault_segment.py,sha256=
|
|
92
|
-
LoopStructural/modelling/features/fold/__init__.py,sha256=
|
|
90
|
+
LoopStructural/modelling/features/fault/_fault_segment.py,sha256=upZtkxdOPkR1bxum8MO8xUbJo_e3HRvl3JTJD1Y-L50,17723
|
|
91
|
+
LoopStructural/modelling/features/fold/__init__.py,sha256=mOq_K5IHjE3FoK7dhYpljUMGj0gvEX2Fyqtzjd4EYfQ,176
|
|
93
92
|
LoopStructural/modelling/features/fold/_fold.py,sha256=bPnnLUSiF4uoMRg8aHoOSTPRgaM0JyLoRQPu5_A-J3w,5448
|
|
94
|
-
LoopStructural/modelling/features/fold/
|
|
95
|
-
LoopStructural/modelling/features/fold/
|
|
96
|
-
LoopStructural/modelling/features/fold/
|
|
97
|
-
LoopStructural/modelling/features/fold/
|
|
93
|
+
LoopStructural/modelling/features/fold/_fold_rotation_angle_feature.py,sha256=CXLbFRQ3CrTMAcHmfdbKcmSvvLs9_6TLe0Wqi1pK2tg,892
|
|
94
|
+
LoopStructural/modelling/features/fold/_foldframe.py,sha256=Rgf5aofN0OVDTZ2pzqLzAGlJUO2rnNm3aFvLSnH77yo,7669
|
|
95
|
+
LoopStructural/modelling/features/fold/_svariogram.py,sha256=uzGaKZ5HGh8xZcsGGg68GUKVjkd5udLy7-4lh0NQc2Y,7765
|
|
96
|
+
LoopStructural/modelling/features/fold/fold_function/__init__.py,sha256=VqMjabsBd5GnPnDMXeKwXqtd0te2iXnvHxpf6jCC9YU,830
|
|
97
|
+
LoopStructural/modelling/features/fold/fold_function/_base_fold_rotation_angle.py,sha256=EC9q-zKX86AoDruXg_6MOD7lo1kVshfFcLlZ25EfFp0,8048
|
|
98
|
+
LoopStructural/modelling/features/fold/fold_function/_fourier_series_fold_rotation_angle.py,sha256=Cjb6Pt6cdRoH3WGqFyJ2rHxnMe6SKvzRayA6hTuwZA8,4069
|
|
99
|
+
LoopStructural/modelling/features/fold/fold_function/_lambda_fold_rotation_angle.py,sha256=U-IL7DETQhKh7a-cHlEKtsIg2kd8JZqO2gWyb_PKB8k,1446
|
|
100
|
+
LoopStructural/modelling/features/fold/fold_function/_trigo_fold_rotation_angle.py,sha256=v-3YkBbsqPdbPZD2ykPB3vLKz3W_BDSF2m0uxtpP2vo,4904
|
|
98
101
|
LoopStructural/modelling/input/__init__.py,sha256=HhJM3V5b-8_64LiRbF3Bd1pjWhJlcknxMSMPRrqZ0-I,153
|
|
99
102
|
LoopStructural/modelling/input/fault_network.py,sha256=0uxl7lOySdhMhNXoiOkuiHIXqAz1Ls0j-W65cmdQoP8,2348
|
|
100
103
|
LoopStructural/modelling/input/map2loop_processor.py,sha256=T7Fgqd7FNJWylLKvfIniRZBMRMeAoP8iU330-WYU8Fg,7031
|
|
101
|
-
LoopStructural/modelling/input/process_data.py,sha256=
|
|
102
|
-
LoopStructural/modelling/input/project_file.py,sha256=
|
|
104
|
+
LoopStructural/modelling/input/process_data.py,sha256=dmA6F-l8nvdH3Ckp5OaAjl3NJoWgm3PuELdXtBRGrz8,26149
|
|
105
|
+
LoopStructural/modelling/input/project_file.py,sha256=WhJkMfDK9uE7MK7HK-YK6ZOBAdwLX5P7ThZgXj444Eg,4604
|
|
103
106
|
LoopStructural/modelling/intrusions/__init__.py,sha256=EpZK3cHJwGQhPUYIwKCKu8vkNdt_nOgWF0zfhiqDYDA,712
|
|
104
107
|
LoopStructural/modelling/intrusions/geom_conceptual_models.py,sha256=jwTlhYySUj7z4DEnJoi4AINZB_N3-SW6ONRFL66OsW0,3665
|
|
105
108
|
LoopStructural/modelling/intrusions/geometric_scaling_functions.py,sha256=PK3qf0TiK-WYIBGG7fYhTD1hwlUN0s75BK8d53SLYuQ,3209
|
|
@@ -107,23 +110,25 @@ LoopStructural/modelling/intrusions/intrusion_builder.py,sha256=1cJjPyRUf3ZDkpwg
|
|
|
107
110
|
LoopStructural/modelling/intrusions/intrusion_feature.py,sha256=5DFQ1uccX7Rp3PMc_pidw-HixDtKyiRhfLkIUye_Gcc,15455
|
|
108
111
|
LoopStructural/modelling/intrusions/intrusion_frame_builder.py,sha256=Q1TPHxREcrO7Rw71nUfACZHfYnISLjqlgkUNTPT324k,40143
|
|
109
112
|
LoopStructural/modelling/intrusions/intrusion_support_functions.py,sha256=wodakheMD62WJyoKnyX8UO-C1pje0I-5kHQEoDqShzo,13951
|
|
110
|
-
LoopStructural/utils/__init__.py,sha256
|
|
111
|
-
LoopStructural/utils/_surface.py,sha256=
|
|
113
|
+
LoopStructural/utils/__init__.py,sha256=-tyTlOr939RMgya5LW4HY-lELviTgClPAZt8L0AAE4s,905
|
|
114
|
+
LoopStructural/utils/_surface.py,sha256=fPJIHVk8gs6Ws3kEW1L4gTZS8znZTNrEm8WVdtm0ZII,5721
|
|
112
115
|
LoopStructural/utils/_transformation.py,sha256=7iDPMIBoZ73ZGa_slbC9XzdMQ-ONOxvF7UkY4dJaw54,2443
|
|
116
|
+
LoopStructural/utils/colours.py,sha256=39MKnLiama0Ubhlxjhau8KtUGqBrluW0vw25qhuyJS0,552
|
|
113
117
|
LoopStructural/utils/config.py,sha256=ITGOtZTo2_QBwXkG_0AFANfE90J9siCXLzxypVmg9QA,414
|
|
114
118
|
LoopStructural/utils/dtm_creator.py,sha256=-yqGG0wyEJfTCCDghz058wull1q3zGFASjeu8oDgYnk,535
|
|
115
119
|
LoopStructural/utils/exceptions.py,sha256=SJboJ7ncMqVX-ib7MMizClwMrFZRHQhjZr2eCnVwnQE,500
|
|
120
|
+
LoopStructural/utils/features.py,sha256=WCatS4lYBrURNvWvWwhOsDVUod9KIPNq3x0OHPbWctU,241
|
|
116
121
|
LoopStructural/utils/helper.py,sha256=An9NuRH16cASUWq2ZakHc1tZt_AvUpgx8tv4cyWZEQk,6581
|
|
117
122
|
LoopStructural/utils/json_encoder.py,sha256=5YNouf1TlhjEqOYgthd07MRXc0JLgxern-nyKSZ__ws,403
|
|
118
123
|
LoopStructural/utils/linalg.py,sha256=tBXyu6NXcG2AcPuzUMnkVI4ncZWtE_MPHGj2PLXRwfY,123
|
|
119
124
|
LoopStructural/utils/logging.py,sha256=dIUWEsS2lT4G1dsf4ZYXknTR7eQkrgvGA4b_E0vMIRU,2402
|
|
120
|
-
LoopStructural/utils/maths.py,sha256=
|
|
125
|
+
LoopStructural/utils/maths.py,sha256=8iqdQdB2-bf14SzIzfFxvjWbzmPknqK9DI7CWEcW6XU,8402
|
|
121
126
|
LoopStructural/utils/regions.py,sha256=LvcOCPudF4u95-GKBOZqXVxOEcR3cOFgFpcs5x43sMk,3914
|
|
122
127
|
LoopStructural/utils/typing.py,sha256=29uVSTZdzXXH-jdlaYyBWZ1gQ2-nlZ2-XoVgG_PXNFY,157
|
|
123
128
|
LoopStructural/utils/utils.py,sha256=2Z4zVE6G752-SPmM29zebk82bROJxEwi_YiiJjcVED4,2438
|
|
124
129
|
LoopStructural/visualisation/__init__.py,sha256=5BDgKor8-ae6DrS7IZybJ3Wq_pTnCchxuY4EgzA7v1M,318
|
|
125
|
-
LoopStructural-1.6.
|
|
126
|
-
LoopStructural-1.6.
|
|
127
|
-
LoopStructural-1.6.
|
|
128
|
-
LoopStructural-1.6.
|
|
129
|
-
LoopStructural-1.6.
|
|
130
|
+
LoopStructural-1.6.5.dist-info/LICENSE,sha256=ZqGeNFOgmYevj7Ld7Q-kR4lAxWXuBRUdUmPC6XM_py8,1071
|
|
131
|
+
LoopStructural-1.6.5.dist-info/METADATA,sha256=69VHE2kjFbIx1loVcB7tV9ExJw14OgGDMka_633-Mzs,5781
|
|
132
|
+
LoopStructural-1.6.5.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
133
|
+
LoopStructural-1.6.5.dist-info/top_level.txt,sha256=QtQErKzYHfg6ddxTQ1NyaTxXBVM6qAqrM_vxEPyXZLg,15
|
|
134
|
+
LoopStructural-1.6.5.dist-info/RECORD,,
|
|
File without changes
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import numpy as np
|
|
2
|
-
from scipy.optimize import curve_fit
|
|
3
|
-
|
|
4
|
-
from ....modelling.features.fold._fold_rotation_angle_feature import (
|
|
5
|
-
fourier_series,
|
|
6
|
-
)
|
|
7
|
-
from ....modelling.features.fold import SVariogram
|
|
8
|
-
|
|
9
|
-
from ....utils import getLogger
|
|
10
|
-
|
|
11
|
-
logger = getLogger(__name__)
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class FoldRotationAngle:
|
|
15
|
-
def __init__(self, rotation_angle, fold_frame_coordinate, svario=False):
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
Parameters
|
|
19
|
-
----------
|
|
20
|
-
rotation_angle
|
|
21
|
-
fold_frame_coordinate
|
|
22
|
-
svario
|
|
23
|
-
"""
|
|
24
|
-
self.rotation_angle = rotation_angle
|
|
25
|
-
self.fold_frame_coordinate = fold_frame_coordinate
|
|
26
|
-
self.fold_rotation_function = None
|
|
27
|
-
self.svario = None
|
|
28
|
-
if svario:
|
|
29
|
-
self.svario = SVariogram(self.fold_frame_coordinate, self.rotation_angle)
|
|
30
|
-
self.fitted_params = None
|
|
31
|
-
|
|
32
|
-
def fit_fourier_series(
|
|
33
|
-
self, wl=None, lags=None, nlag=None, lag=None, skip_variogram=False, **kwargs
|
|
34
|
-
):
|
|
35
|
-
"""
|
|
36
|
-
|
|
37
|
-
Parameters
|
|
38
|
-
----------
|
|
39
|
-
wl
|
|
40
|
-
lags
|
|
41
|
-
nlag
|
|
42
|
-
lag
|
|
43
|
-
|
|
44
|
-
Returns
|
|
45
|
-
-------
|
|
46
|
-
|
|
47
|
-
"""
|
|
48
|
-
if self.svario is None:
|
|
49
|
-
self.svario = SVariogram(self.fold_frame_coordinate, self.rotation_angle)
|
|
50
|
-
if not skip_variogram:
|
|
51
|
-
self.svario.calc_semivariogram(lags=lags, nlag=nlag, lag=lag)
|
|
52
|
-
if wl is None:
|
|
53
|
-
wl = self.svario.find_wavelengths(lags=lags, nlag=nlag, lag=lag)
|
|
54
|
-
# for now only consider single fold wavelength
|
|
55
|
-
wl = wl[0]
|
|
56
|
-
guess = np.zeros(4)
|
|
57
|
-
guess[3] = wl # np.max(limb_wl)
|
|
58
|
-
logger.info(f"Guess: {guess[0]} {guess[1]} {guess[2]} {guess[3]}")
|
|
59
|
-
# mask nans
|
|
60
|
-
mask = np.logical_or(~np.isnan(self.fold_frame_coordinate), ~np.isnan(self.rotation_angle))
|
|
61
|
-
logger.info(
|
|
62
|
-
f"There are {np.sum(~mask)} nans for the fold limb rotation angle and { np.sum(mask)} observations"
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
if np.sum(mask) < len(guess):
|
|
66
|
-
logger.error(
|
|
67
|
-
"Not enough data points to fit Fourier series setting " "fold rotation angle" "to 0"
|
|
68
|
-
)
|
|
69
|
-
self.fold_rotation_function = lambda x: np.zeros(x.shape)
|
|
70
|
-
else:
|
|
71
|
-
try:
|
|
72
|
-
# try fitting using wavelength guess
|
|
73
|
-
popt, pcov = curve_fit(
|
|
74
|
-
fourier_series,
|
|
75
|
-
self.fold_frame_coordinate[mask],
|
|
76
|
-
np.tan(np.deg2rad(self.rotation_angle[mask])),
|
|
77
|
-
guess,
|
|
78
|
-
)
|
|
79
|
-
except RuntimeError:
|
|
80
|
-
try:
|
|
81
|
-
# if fitting failed, try with just 0s
|
|
82
|
-
logger.info("Running curve fit without initial guess")
|
|
83
|
-
popt, pcov = curve_fit(
|
|
84
|
-
fourier_series,
|
|
85
|
-
self.fold_frame_coordinate[mask],
|
|
86
|
-
np.tan(np.deg2rad(self.rotation_angle[mask])),
|
|
87
|
-
)
|
|
88
|
-
except RuntimeError:
|
|
89
|
-
# otherwise set the fourier series parameters to 0
|
|
90
|
-
popt = guess
|
|
91
|
-
logger.error("Could not fit curve to S-Plot, check the wavelength")
|
|
92
|
-
logger.info(f"Fitted: {popt[0]} {popt[1]} {popt[2]} {popt[3]}")
|
|
93
|
-
self.fold_rotation_function = lambda x: np.rad2deg(
|
|
94
|
-
np.arctan(fourier_series(x, popt[0], popt[1], popt[2], popt[3]))
|
|
95
|
-
)
|
|
96
|
-
self.fitted_params = popt
|
|
97
|
-
|
|
98
|
-
def __call__(self, fold_frame_coordinate):
|
|
99
|
-
"""
|
|
100
|
-
|
|
101
|
-
Parameters
|
|
102
|
-
----------
|
|
103
|
-
fold_frame_coordinate
|
|
104
|
-
|
|
105
|
-
Returns
|
|
106
|
-
-------
|
|
107
|
-
|
|
108
|
-
"""
|
|
109
|
-
return self.fold_rotation_function(fold_frame_coordinate)
|
|
110
|
-
|
|
111
|
-
def calculate_misfit(self):
|
|
112
|
-
"""
|
|
113
|
-
|
|
114
|
-
Returns
|
|
115
|
-
-------
|
|
116
|
-
|
|
117
|
-
"""
|
|
118
|
-
return np.tan(np.deg2rad(self.rotation_angle)) - np.tan(
|
|
119
|
-
np.deg2rad(self.__call__(self.fold_frame_coordinate))
|
|
120
|
-
)
|
|
121
|
-
|
|
122
|
-
def set_function(self, function):
|
|
123
|
-
"""
|
|
124
|
-
|
|
125
|
-
Parameters
|
|
126
|
-
----------
|
|
127
|
-
function
|
|
128
|
-
|
|
129
|
-
Returns
|
|
130
|
-
-------
|
|
131
|
-
|
|
132
|
-
"""
|
|
133
|
-
self.fold_rotation_function = function
|
|
134
|
-
|
|
135
|
-
def find_hinges(self, range, step):
|
|
136
|
-
|
|
137
|
-
import scipy.optimize as optimize
|
|
138
|
-
|
|
139
|
-
def fra(x):
|
|
140
|
-
x = np.array([x])
|
|
141
|
-
return self.__call__(x)
|
|
142
|
-
|
|
143
|
-
roots = []
|
|
144
|
-
x = range[0]
|
|
145
|
-
while x < range[1]:
|
|
146
|
-
result = optimize.root_scalar(fra, bracket=[x, x + step])
|
|
147
|
-
roots.append(result.root)
|
|
148
|
-
x += step
|
|
149
|
-
return roots
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: LoopStructural
|
|
3
|
-
Version: 1.6.2
|
|
4
|
-
Summary: 3D geological modelling
|
|
5
|
-
Author-email: Lachlan Grose <lachlan.grose@monash.edu>
|
|
6
|
-
License: MIT
|
|
7
|
-
Project-URL: Documentation, https://Loop3d.org/LoopStructural/
|
|
8
|
-
Project-URL: Bug Tracker, https://github.com/loop3d/loopstructural/issues
|
|
9
|
-
Project-URL: Source Code, https://github.com/loop3d/loopstructural
|
|
10
|
-
Keywords: earth sciences,geology,3-D modelling,structural geology,uncertainty
|
|
11
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
-
Classifier: Intended Audience :: Science/Research
|
|
13
|
-
Classifier: Topic :: Scientific/Engineering :: Information Analysis
|
|
14
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
15
|
-
Classifier: Operating System :: Microsoft :: Windows
|
|
16
|
-
Classifier: Operating System :: POSIX
|
|
17
|
-
Classifier: Operating System :: MacOS
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
-
Requires-Python: >=3.8
|
|
24
|
-
Description-Content-Type: text/markdown
|
|
25
|
-
License-File: LICENSE
|
|
26
|
-
Requires-Dist: numpy >=1.18
|
|
27
|
-
Requires-Dist: pandas
|
|
28
|
-
Requires-Dist: scipy
|
|
29
|
-
Requires-Dist: scikit-image
|
|
30
|
-
Requires-Dist: scikit-learn
|
|
31
|
-
Requires-Dist: tqdm
|
|
32
|
-
Provides-Extra: all
|
|
33
|
-
Requires-Dist: loopstructural[export,inequalities,visualisation] ; extra == 'all'
|
|
34
|
-
Provides-Extra: export
|
|
35
|
-
Requires-Dist: geoh5py ; extra == 'export'
|
|
36
|
-
Requires-Dist: pyevtk ; extra == 'export'
|
|
37
|
-
Requires-Dist: dill ; extra == 'export'
|
|
38
|
-
Provides-Extra: inequalities
|
|
39
|
-
Requires-Dist: loopsolver ; extra == 'inequalities'
|
|
40
|
-
Provides-Extra: jupyter
|
|
41
|
-
Requires-Dist: pyvista[all] ; extra == 'jupyter'
|
|
42
|
-
Requires-Dist: tqdm ; extra == 'jupyter'
|
|
43
|
-
Provides-Extra: visualisation
|
|
44
|
-
Requires-Dist: matplotlib ; extra == 'visualisation'
|
|
45
|
-
Requires-Dist: pyvista ; extra == 'visualisation'
|
|
46
|
-
Requires-Dist: loopstructuralviusualisation >0.1.4 ; extra == 'visualisation'
|
|
47
|
-
|
|
48
|
-
# LoopStructural: Loop3D Geological Forward Modeling Engine.
|
|
49
|
-

|
|
50
|
-

|
|
51
|
-

|
|
52
|
-
[](https://badge.fury.io/py/LoopStructural)
|
|
53
|
-
[](https://github.com/Loop3D/LoopStructural/blob/master/LICENSE)
|
|
54
|
-
[](https://loop3d.github.io/LoopStructural)
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
LoopStructural is the 3D geological modelling library for Loop ([Loop3d.org](https://loop3d.org/)). The development of LoopStructural is lead by **Lachlan Grose** as an ARC (LP170100985) post-doc at Monash University. **Laurent Ailleres** and **Gautier Laurent** have made significant contributions to the conceptual design and integration of geological concepts into the geological modelling workflow. **Roy Thomson** and **Yohan de Rose** have contributed to the implementation and integration of LoopStructural into the Loop workflow.
|
|
58
|
-
|
|
59
|
-
Loop is led by Laurent Ailleres (Monash University) with a team of Work Package leaders from:
|
|
60
|
-
* Monash University: Roy Thomson, Lachlan Grose and Robin Armit
|
|
61
|
-
* University of Western Australia: Mark Jessell, Jeremie Giraud, Mark Lindsay and Guillaume Pirot
|
|
62
|
-
* Geological Survey of Canada: Boyan Brodaric and Eric de Kemp
|
|
63
|
-
|
|
64
|
-
The project benefits from in-kind contributions from the Geological Survey of Canada, the British Geological Survey, the French Bureau de Recherches Geologiques et Minieres, the RING group at the Universite de Lorraine, the RWTH in Aachen, Germany and AUSCOPE
|
|
65
|
-
|
|
66
|
-
* Python/cython implementation of a Discrete interpolatiors
|
|
67
|
-
* Fold interpolation using constraints outlined in Laurent 2016 with fold geostatistical tools shown in Grose et al., 2017
|
|
68
|
-
* Fault interpolation
|
|
69
|
-
|
|
70
|
-
If you want to use LoopStructural the easiest way to get started is to use a docker container and a jupyter notebook environment
|
|
71
|
-
|
|
72
|
-
1. Pull the loopstructural docker image `docker pull lachlangrose/loopstructural`
|
|
73
|
-
2. Start a docker container `docker run -it -p 8888:8888 lachlangrose/loopstructural`
|
|
74
|
-
|
|
75
|
-
## Documentation
|
|
76
|
-
The LoopStructural documentation can be found [here](https://loop3d.github.io/LoopStructural)
|
|
77
|
-
## Problems
|
|
78
|
-
Any bugs/feature requests/comments please create a new [issue](https://github.com/Loop3D/LoopStructural/issues).
|
|
79
|
-
|
|
80
|
-
## Acknowledgements
|
|
81
|
-
*The Loop platform is an open source 3D probabilistic geological and geophysical modelling platform, initiated by Geoscience Australia and the OneGeology consortium. The project is funded by Australian territory, State and Federal Geological Surveys, the Australian Research Council and the MinEx Collaborative Research Centre.*
|
|
File without changes
|
|
File without changes
|