pyfwat 0.2.1__tar.gz

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.
Files changed (63) hide show
  1. pyfwat-0.2.1/PKG-INFO +140 -0
  2. pyfwat-0.2.1/README.md +108 -0
  3. pyfwat-0.2.1/pyfwat/__init__.py +7 -0
  4. pyfwat-0.2.1/pyfwat/cpt/ccp.cpt +14 -0
  5. pyfwat-0.2.1/pyfwat/cpt/dvp.cpt +124 -0
  6. pyfwat-0.2.1/pyfwat/cpt/kernel.cpt +11 -0
  7. pyfwat-0.2.1/pyfwat/cpt/kernel_avg.cpt +9 -0
  8. pyfwat-0.2.1/pyfwat/cpt/vel_norm.cpt +11 -0
  9. pyfwat-0.2.1/pyfwat/cpt/vs.cpt +13 -0
  10. pyfwat-0.2.1/pyfwat/data/crust1.0.npz +0 -0
  11. pyfwat-0.2.1/pyfwat/data/icon.svg +13 -0
  12. pyfwat-0.2.1/pyfwat/io/__init__.py +0 -0
  13. pyfwat-0.2.1/pyfwat/io/gllio.py +115 -0
  14. pyfwat-0.2.1/pyfwat/io/grid_model.py +149 -0
  15. pyfwat-0.2.1/pyfwat/io/misfit.py +23 -0
  16. pyfwat-0.2.1/pyfwat/io/xdmf.py +70 -0
  17. pyfwat-0.2.1/pyfwat/picker/__init__.py +0 -0
  18. pyfwat-0.2.1/pyfwat/picker/mccc.py +36 -0
  19. pyfwat-0.2.1/pyfwat/picker/picker_fig.py +297 -0
  20. pyfwat-0.2.1/pyfwat/picker/picker_ui.py +510 -0
  21. pyfwat-0.2.1/pyfwat/plot/__init__.py +0 -0
  22. pyfwat-0.2.1/pyfwat/plot/plot_dlnv.py +88 -0
  23. pyfwat-0.2.1/pyfwat/plot/plot_dv_sec.py +110 -0
  24. pyfwat-0.2.1/pyfwat/plot/plot_kernel_sec.py +95 -0
  25. pyfwat-0.2.1/pyfwat/plot/plot_misfit.py +65 -0
  26. pyfwat-0.2.1/pyfwat/plot/plot_misfit_linesearch.py +104 -0
  27. pyfwat-0.2.1/pyfwat/plot/plot_misfit_multistage.py +97 -0
  28. pyfwat-0.2.1/pyfwat/plot/plot_misfit_surf.py +125 -0
  29. pyfwat-0.2.1/pyfwat/plot/plot_noise_fit.py +77 -0
  30. pyfwat-0.2.1/pyfwat/plot/plot_res.py +69 -0
  31. pyfwat-0.2.1/pyfwat/plot/plot_rf_evts.py +74 -0
  32. pyfwat-0.2.1/pyfwat/plot/plot_rf_fit.py +53 -0
  33. pyfwat-0.2.1/pyfwat/plot/plot_stations.py +51 -0
  34. pyfwat-0.2.1/pyfwat/plot/plot_surf_data.py +93 -0
  35. pyfwat-0.2.1/pyfwat/plot/plot_tele_fit.py +85 -0
  36. pyfwat-0.2.1/pyfwat/plot/plot_vel_sec.py +232 -0
  37. pyfwat-0.2.1/pyfwat/postproc/__init__.py +0 -0
  38. pyfwat-0.2.1/pyfwat/postproc/clean.py +37 -0
  39. pyfwat-0.2.1/pyfwat/postproc/joint_kernel.py +83 -0
  40. pyfwat-0.2.1/pyfwat/postproc/model_update.py +134 -0
  41. pyfwat-0.2.1/pyfwat/postproc/optimize_ls.py +28 -0
  42. pyfwat-0.2.1/pyfwat/preproc/__init__.py +0 -0
  43. pyfwat-0.2.1/pyfwat/preproc/cal_fk_times.py +181 -0
  44. pyfwat-0.2.1/pyfwat/preproc/ch_fkmodel.py +19 -0
  45. pyfwat-0.2.1/pyfwat/preproc/checkerboard.py +130 -0
  46. pyfwat-0.2.1/pyfwat/preproc/create_crustmodel.py +248 -0
  47. pyfwat-0.2.1/pyfwat/preproc/dis2inc.py +35 -0
  48. pyfwat-0.2.1/pyfwat/preproc/gen_gauss_stf.py +48 -0
  49. pyfwat-0.2.1/pyfwat/preproc/gen_virt_fkevts.py +130 -0
  50. pyfwat-0.2.1/pyfwat/utils/__init__.py +0 -0
  51. pyfwat-0.2.1/pyfwat/utils/distaz.py +205 -0
  52. pyfwat-0.2.1/pyfwat/utils/geo.py +256 -0
  53. pyfwat-0.2.1/pyfwat/utils/pario.py +157 -0
  54. pyfwat-0.2.1/pyfwat/utils/utils.py +35 -0
  55. pyfwat-0.2.1/pyfwat.egg-info/PKG-INFO +140 -0
  56. pyfwat-0.2.1/pyfwat.egg-info/SOURCES.txt +61 -0
  57. pyfwat-0.2.1/pyfwat.egg-info/dependency_links.txt +1 -0
  58. pyfwat-0.2.1/pyfwat.egg-info/entry_points.txt +28 -0
  59. pyfwat-0.2.1/pyfwat.egg-info/not-zip-safe +1 -0
  60. pyfwat-0.2.1/pyfwat.egg-info/requires.txt +9 -0
  61. pyfwat-0.2.1/pyfwat.egg-info/top_level.txt +1 -0
  62. pyfwat-0.2.1/pyproject.toml +82 -0
  63. pyfwat-0.2.1/setup.cfg +4 -0
pyfwat-0.2.1/PKG-INFO ADDED
@@ -0,0 +1,140 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyfwat
3
+ Version: 0.2.1
4
+ Summary: Python interface for SpecFWAT (Full Waveform Adjoint Tomography)
5
+ Author-email: Mijian Xu <mijian.xu@utoronto.ca>
6
+ License: GPLv3
7
+ Project-URL: Homepage, https://github.com/xumi1993/pyfwat
8
+ Project-URL: Repository, https://github.com/xumi1993/pyfwat
9
+ Project-URL: Bug Tracker, https://github.com/xumi1993/pyfwat/issues
10
+ Keywords: seismology,full-waveform-inversion,adjoint-tomography,seismic-imaging
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Topic :: Scientific/Engineering
14
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.9
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Requires-Python: >=3.7
22
+ Description-Content-Type: text/markdown
23
+ Requires-Dist: obspy>=1.2.0
24
+ Requires-Dist: pandas>=1.0.0
25
+ Requires-Dist: numpy>=1.19.0
26
+ Requires-Dist: scipy>=1.1.0
27
+ Requires-Dist: matplotlib>=3.2.0
28
+ Requires-Dist: ruamel.yaml
29
+ Requires-Dist: h5py
30
+ Requires-Dist: pygmt
31
+ Requires-Dist: pyproj
32
+
33
+ # PyFWAT
34
+
35
+ Python interface for SpecFWAT (Full Waveform Adjoint Tomography)
36
+
37
+ ## Overview
38
+
39
+ PyFWAT is a comprehensive Python toolkit designed for full waveform inversion (FWI) and adjoint tomography workflows. It provides a complete set of tools for preprocessing seismic data, running inversions, post-processing results, and visualizing various aspects of the tomographic models and data fits.
40
+
41
+ ## Features
42
+
43
+ - **Preprocessing Tools**: Data preparation and model setup utilities
44
+ - **Plotting Utilities**: Comprehensive visualization tools for velocity models, kernels, misfits, and data fits
45
+ - **Post-processing**: Model updates, kernel operations, and optimization routines
46
+ - **Data I/O**: Support for various seismic data formats and model representations
47
+ - **Interactive Picking**: GUI-based phase picking interface for teleseismic data
48
+
49
+ ## Installation
50
+
51
+ ### Requirements
52
+
53
+ - Python >= 3.9
54
+ - ObsPy >= 1.2.0
55
+ - NumPy >= 1.19.0
56
+ - SciPy >= 1.1.0
57
+ - Matplotlib >= 3.2.0
58
+ - pandas >= 1.0.0
59
+ - PyGMT
60
+ - h5py
61
+ - pyproj
62
+ - ruamel.yaml
63
+
64
+ ### Install from source
65
+
66
+ ```bash
67
+ git clone https://github.com/xumi1993/pyfwat.git
68
+ cd pyfwat
69
+ pip install -e .
70
+ ```
71
+
72
+ ## Command-line Tools
73
+
74
+ PyFWAT provides numerous command-line utilities for various tasks:
75
+
76
+ ### Visualization Tools
77
+
78
+ - `plot_vel_sec` - Plot velocity cross-sections
79
+ - `plot_dv_sec` - Plot velocity perturbation cross-sections
80
+ - `plot_kernel_sec` - Plot sensitivity kernel cross-sections
81
+ - `plot_residual` - Visualize data residuals
82
+ - `plot_misfit` - Plot misfit evolution
83
+ - `plot_misfit_multifreq` - Plot misfit for multiple frequencies
84
+ - `plot_misfit_multistage` - Plot misfit across multiple inversion stages
85
+ - `plot_misfit_linesearch` - Visualize line search optimization
86
+ - `plot_stations` - Display station distributions
87
+ - `plot_rf_evts` - Plot receiver function events
88
+ - `plot_rf_fit` - Show receiver function data fits
89
+ - `plot_noise_fit` - Visualize ambient noise data fits
90
+ - `plot_surf_data` - Plot surface wave data
91
+ - `plot_tele_fit` - Display teleseismic waveform fits
92
+
93
+ ### Preprocessing Tools
94
+
95
+ - `gen_virt_fkevts` - Generate virtual FK events
96
+ - `gen_gauss_stf` - Generate Gaussian source time functions
97
+ - `ch_fkmodel` - Modify FK models
98
+ - `cal_fk_times` - Calculate FK travel times
99
+ - `fwat_checkerboard` - Create checkerboard resolution tests
100
+ - `fwat_createmodel` - Generate initial crustal models
101
+ - `setpar_fwat` - Configure FWAT parameters
102
+
103
+ ### Post-processing Tools
104
+
105
+ - `optimize_ls` - Perform line search optimization
106
+ - `fwat_clean` - Clean up working directories
107
+ - `fwat_joint_kernel` - Combine kernels from different data types
108
+ - `fwat_model_update` - Update velocity models
109
+ - `create_xmf` - Create XDMF files for visualization (under development)
110
+
111
+ ### Interactive Tools
112
+
113
+ - `pick_tele` - Interactive GUI for teleseismic phase picking
114
+
115
+ ## Module Structure
116
+
117
+ ```
118
+ pyfwat/
119
+ ├── io/ # Input/output utilities
120
+ ├── picker/ # Phase picking tools
121
+ ├── plot/ # Visualization modules
122
+ ├── postproc/ # Post-processing routines
123
+ ├── preproc/ # Preprocessing utilities
124
+ ├── utils/ # General utility functions
125
+ ├── cpt/ # Color palette files
126
+ └── data/ # Data resources (e.g., CRUST1.0 model)
127
+ ```
128
+
129
+ ## Contributing
130
+
131
+ Contributions are welcome! Please feel free to submit issues or pull requests.
132
+
133
+ ## License
134
+
135
+ This project is licensed under the GNU General Public License v3.0 (GPLv3).
136
+
137
+ ## Author
138
+
139
+ Mijian Xu (mijian.xu@utoronto.ca)
140
+
pyfwat-0.2.1/README.md ADDED
@@ -0,0 +1,108 @@
1
+ # PyFWAT
2
+
3
+ Python interface for SpecFWAT (Full Waveform Adjoint Tomography)
4
+
5
+ ## Overview
6
+
7
+ PyFWAT is a comprehensive Python toolkit designed for full waveform inversion (FWI) and adjoint tomography workflows. It provides a complete set of tools for preprocessing seismic data, running inversions, post-processing results, and visualizing various aspects of the tomographic models and data fits.
8
+
9
+ ## Features
10
+
11
+ - **Preprocessing Tools**: Data preparation and model setup utilities
12
+ - **Plotting Utilities**: Comprehensive visualization tools for velocity models, kernels, misfits, and data fits
13
+ - **Post-processing**: Model updates, kernel operations, and optimization routines
14
+ - **Data I/O**: Support for various seismic data formats and model representations
15
+ - **Interactive Picking**: GUI-based phase picking interface for teleseismic data
16
+
17
+ ## Installation
18
+
19
+ ### Requirements
20
+
21
+ - Python >= 3.9
22
+ - ObsPy >= 1.2.0
23
+ - NumPy >= 1.19.0
24
+ - SciPy >= 1.1.0
25
+ - Matplotlib >= 3.2.0
26
+ - pandas >= 1.0.0
27
+ - PyGMT
28
+ - h5py
29
+ - pyproj
30
+ - ruamel.yaml
31
+
32
+ ### Install from source
33
+
34
+ ```bash
35
+ git clone https://github.com/xumi1993/pyfwat.git
36
+ cd pyfwat
37
+ pip install -e .
38
+ ```
39
+
40
+ ## Command-line Tools
41
+
42
+ PyFWAT provides numerous command-line utilities for various tasks:
43
+
44
+ ### Visualization Tools
45
+
46
+ - `plot_vel_sec` - Plot velocity cross-sections
47
+ - `plot_dv_sec` - Plot velocity perturbation cross-sections
48
+ - `plot_kernel_sec` - Plot sensitivity kernel cross-sections
49
+ - `plot_residual` - Visualize data residuals
50
+ - `plot_misfit` - Plot misfit evolution
51
+ - `plot_misfit_multifreq` - Plot misfit for multiple frequencies
52
+ - `plot_misfit_multistage` - Plot misfit across multiple inversion stages
53
+ - `plot_misfit_linesearch` - Visualize line search optimization
54
+ - `plot_stations` - Display station distributions
55
+ - `plot_rf_evts` - Plot receiver function events
56
+ - `plot_rf_fit` - Show receiver function data fits
57
+ - `plot_noise_fit` - Visualize ambient noise data fits
58
+ - `plot_surf_data` - Plot surface wave data
59
+ - `plot_tele_fit` - Display teleseismic waveform fits
60
+
61
+ ### Preprocessing Tools
62
+
63
+ - `gen_virt_fkevts` - Generate virtual FK events
64
+ - `gen_gauss_stf` - Generate Gaussian source time functions
65
+ - `ch_fkmodel` - Modify FK models
66
+ - `cal_fk_times` - Calculate FK travel times
67
+ - `fwat_checkerboard` - Create checkerboard resolution tests
68
+ - `fwat_createmodel` - Generate initial crustal models
69
+ - `setpar_fwat` - Configure FWAT parameters
70
+
71
+ ### Post-processing Tools
72
+
73
+ - `optimize_ls` - Perform line search optimization
74
+ - `fwat_clean` - Clean up working directories
75
+ - `fwat_joint_kernel` - Combine kernels from different data types
76
+ - `fwat_model_update` - Update velocity models
77
+ - `create_xmf` - Create XDMF files for visualization (under development)
78
+
79
+ ### Interactive Tools
80
+
81
+ - `pick_tele` - Interactive GUI for teleseismic phase picking
82
+
83
+ ## Module Structure
84
+
85
+ ```
86
+ pyfwat/
87
+ ├── io/ # Input/output utilities
88
+ ├── picker/ # Phase picking tools
89
+ ├── plot/ # Visualization modules
90
+ ├── postproc/ # Post-processing routines
91
+ ├── preproc/ # Preprocessing utilities
92
+ ├── utils/ # General utility functions
93
+ ├── cpt/ # Color palette files
94
+ └── data/ # Data resources (e.g., CRUST1.0 model)
95
+ ```
96
+
97
+ ## Contributing
98
+
99
+ Contributions are welcome! Please feel free to submit issues or pull requests.
100
+
101
+ ## License
102
+
103
+ This project is licensed under the GNU General Public License v3.0 (GPLv3).
104
+
105
+ ## Author
106
+
107
+ Mijian Xu (mijian.xu@utoronto.ca)
108
+
@@ -0,0 +1,7 @@
1
+ import os
2
+
3
+ DATA_PATH = 'DATA'
4
+ MISFIT_PATH = 'misfits'
5
+ SOLVER_PATH = 'solver'
6
+ FWAT_PARA_FILE = os.path.join(DATA_PATH, 'fwat_params.yml')
7
+ COLORS = ['47/127/193', '150/195/125', '196/151/178', '73/108/136', 'olivedrab', 'burlywood', 'thistle']
@@ -0,0 +1,14 @@
1
+ # cpt file created by: grd2cpt out1.grd -Cpolar1 -Z
2
+ #COLOR_MODEL = RGB
3
+ #
4
+ -1 39 56 113 -0.4 39 56 113
5
+ -0.4 39 56 113 -0.14 80 94 140
6
+ -0.14 80 94 140 -0.01 255 255 255
7
+ -0.01 255 255 255 0 255 255 255
8
+ 0 255 255 255 0.01 255 255 255
9
+ 0.01 255 255 255 0.14 219 90 97
10
+ 0.14 219 90 97 1 206 28 38
11
+
12
+ B 39 56 113
13
+ F 206 28 38
14
+ N 255 255 255
@@ -0,0 +1,124 @@
1
+ # COLOR_MODEL = rgb
2
+ -12 178/24/43 -11.8 179.5/27/44.417
3
+ -11.8 179.5/27/44.417 -11.6 181/30/45.833
4
+ -11.6 181/30/45.833 -11.4 182.5/33/47.25
5
+ -11.4 182.5/33/47.25 -11.2 184/36/48.667
6
+ -11.2 184/36/48.667 -11 185.5/39/50.083
7
+ -11 185.5/39/50.083 -10.8 187/42/51.5
8
+ -10.8 187/42/51.5 -10.6 188.5/45/52.917
9
+ -10.6 188.5/45/52.917 -10.4 190/48/54.333
10
+ -10.4 190/48/54.333 -10.2 191.5/51/55.75
11
+ -10.2 191.5/51/55.75 -10 193/54/57.167
12
+ -10 193/54/57.167 -9.8 194.5/57/58.583
13
+ -9.8 194.5/57/58.583 -9.6 196/60/60
14
+ -9.6 196/60/60 -9.4 197.5/63/61.417
15
+ -9.4 197.5/63/61.417 -9.2 199/66/62.833
16
+ -9.2 199/66/62.833 -9 200.5/69/64.25
17
+ -9 200.5/69/64.25 -8.8 202/72/65.667
18
+ -8.8 202/72/65.667 -8.6 203.5/75/67.083
19
+ -8.6 203.5/75/67.083 -8.4 205/78/68.5
20
+ -8.4 205/78/68.5 -8.2 206.5/81/69.917
21
+ -8.2 206.5/81/69.917 -8 208/84/71.333
22
+ -8 208/84/71.333 -7.8 209.5/87/72.75
23
+ -7.8 209.5/87/72.75 -7.6 211/90/74.167
24
+ -7.6 211/90/74.167 -7.4 212.5/93/75.583
25
+ -7.4 212.5/93/75.583 -7.2 214/96/77
26
+ -7.2 214/96/77 -7 215.56/99.594/79.76
27
+ -7 215.56/99.594/79.76 -6.8 217.12/103.19/82.521
28
+ -6.8 217.12/103.19/82.521 -6.6 218.69/106.78/85.281
29
+ -6.6 218.69/106.78/85.281 -6.4 220.25/110.38/88.042
30
+ -6.4 220.25/110.38/88.042 -6.2 221.81/113.97/90.802
31
+ -6.2 221.81/113.97/90.802 -6 223.38/117.56/93.562
32
+ -6 223.38/117.56/93.562 -5.8 224.94/121.16/96.323
33
+ -5.8 224.94/121.16/96.323 -5.6 226.5/124.75/99.083
34
+ -5.6 226.5/124.75/99.083 -5.4 228.06/128.34/101.84
35
+ -5.4 228.06/128.34/101.84 -5.2 229.62/131.94/104.6
36
+ -5.2 229.62/131.94/104.6 -5 231.19/135.53/107.36
37
+ -5 231.19/135.53/107.36 -4.8 232.75/139.13/110.12
38
+ -4.8 232.75/139.13/110.12 -4.6 234.31/142.72/112.89
39
+ -4.6 234.31/142.72/112.89 -4.4 235.88/146.31/115.65
40
+ -4.4 235.88/146.31/115.65 -4.2 237.44/149.91/118.41
41
+ -4.2 237.44/149.91/118.41 -4 239/153.5/121.17
42
+ -4 239/153.5/121.17 -3.8 240.56/157.09/123.93
43
+ -3.8 240.56/157.09/123.93 -3.6 242.13/160.69/126.69
44
+ -3.6 242.13/160.69/126.69 -3.4 243.69/164.28/129.45
45
+ -3.4 243.69/164.28/129.45 -3.2 245/171/137.67
46
+ -3.2 245/171/137.67 -3 246.25/178.5/147.25
47
+ -3 246.25/178.5/147.25 -2.8 247.5/186/156.83
48
+ -2.8 247.5/186/156.83 -2.6 248.75/193.5/166.42
49
+ -2.6 248.75/193.5/166.42 -2.4 250/201/176
50
+ -2.4 250/201/176 -2.2 251.25/208.5/185.58
51
+ -2.2 251.25/208.5/185.58 -2 252.5/216/195.17
52
+ -2 252.5/216/195.17 -1.8 253.12/221.25/202.5
53
+ -1.8 253.12/221.25/202.5 -1.6 253.33/225/208.33
54
+ -1.6 253.33/225/208.33 -1.4 253.54/228.75/214.17
55
+ -1.4 253.54/228.75/214.17 -1.2 253.75/232.5/220
56
+ -1.2 253.75/232.5/220 -1 253.96/236.25/225.83
57
+ -1 253.96/236.25/225.83 -0.8 254.17/240/231.67
58
+ -0.8 254.17/240/231.67 -0.6 254.38/243.75/237.5
59
+ -0.6 254.38/243.75/237.5 -0.4 254.58/247.5/243.33
60
+ -0.4 254.58/247.5/243.33 -0.2 254.79/251.25/249.17
61
+ -0.2 254.79/251.25/249.17 0 white
62
+ 0 white 0.2 250.21/252.29/253.44
63
+ 0.2 250.21/252.29/253.44 0.4 245.42/249.58/251.87
64
+ 0.4 245.42/249.58/251.87 0.6 240.62/246.88/250.31
65
+ 0.6 240.62/246.88/250.31 0.8 235.83/244.17/248.75
66
+ 0.8 235.83/244.17/248.75 1 231.04/241.46/247.19
67
+ 1 231.04/241.46/247.19 1.2 226.25/238.75/245.62
68
+ 1.2 226.25/238.75/245.62 1.4 221.46/236.04/244.06
69
+ 1.4 221.46/236.04/244.06 1.6 216.67/233.33/242.5
70
+ 1.6 216.67/233.33/242.5 1.8 211.87/230.62/240.94
71
+ 1.8 211.87/230.62/240.94 2 205.5/227.22/239
72
+ 2 205.5/227.22/239 2.2 196.75/222.78/236.5
73
+ 2.2 196.75/222.78/236.5 2.4 188/218.33/234
74
+ 2.4 188/218.33/234 2.6 179.25/213.89/231.5
75
+ 2.6 179.25/213.89/231.5 2.8 170.5/209.44/229
76
+ 2.8 170.5/209.44/229 3 161.75/205/226.5
77
+ 3 161.75/205/226.5 3.2 153/200.56/224
78
+ 3.2 153/200.56/224 3.4 145.18/196.48/221.72
79
+ 3.4 145.18/196.48/221.72 3.6 141.06/193.88/220.31
80
+ 3.6 141.06/193.88/220.31 3.8 136.95/191.27/218.91
81
+ 3.8 136.95/191.27/218.91 4 132.83/188.67/217.5
82
+ 4 132.83/188.67/217.5 4.2 128.72/186.06/216.09
83
+ 4.2 128.72/186.06/216.09 4.4 124.6/183.46/214.69
84
+ 4.4 124.6/183.46/214.69 4.6 120.49/180.85/213.28
85
+ 4.6 120.49/180.85/213.28 4.8 116.38/178.25/211.88
86
+ 4.8 116.38/178.25/211.88 5 112.26/175.65/210.47
87
+ 5 112.26/175.65/210.47 5.2 108.15/173.04/209.06
88
+ 5.2 108.15/173.04/209.06 5.4 104.03/170.44/207.66
89
+ 5.4 104.03/170.44/207.66 5.6 99.917/167.83/206.25
90
+ 5.6 99.917/167.83/206.25 5.8 95.802/165.23/204.84
91
+ 5.8 95.802/165.23/204.84 6 91.688/162.62/203.44
92
+ 6 91.688/162.62/203.44 6.2 87.573/160.02/202.03
93
+ 6.2 87.573/160.02/202.03 6.4 83.458/157.42/200.62
94
+ 6.4 83.458/157.42/200.62 6.6 79.344/154.81/199.22
95
+ 6.6 79.344/154.81/199.22 6.8 75.229/152.21/197.81
96
+ 6.8 75.229/152.21/197.81 7 71.115/149.6/196.41
97
+ 7 71.115/149.6/196.41 7.2 67/147/195
98
+ 7.2 67/147/195 7.4 65.583/145.12/194.04
99
+ 7.4 65.583/145.12/194.04 7.6 64.167/143.25/193.08
100
+ 7.6 64.167/143.25/193.08 7.8 62.75/141.38/192.12
101
+ 7.8 62.75/141.38/192.12 8 61.333/139.5/191.17
102
+ 8 61.333/139.5/191.17 8.2 59.917/137.62/190.21
103
+ 8.2 59.917/137.62/190.21 8.4 58.5/135.75/189.25
104
+ 8.4 58.5/135.75/189.25 8.6 57.083/133.87/188.29
105
+ 8.6 57.083/133.87/188.29 8.8 55.667/132/187.33
106
+ 8.8 55.667/132/187.33 9 54.25/130.12/186.38
107
+ 9 54.25/130.12/186.38 9.2 52.833/128.25/185.42
108
+ 9.2 52.833/128.25/185.42 9.4 51.417/126.37/184.46
109
+ 9.4 51.417/126.37/184.46 9.6 50/124.5/183.5
110
+ 9.6 50/124.5/183.5 9.8 48.583/122.62/182.54
111
+ 9.8 48.583/122.62/182.54 10 47.167/120.75/181.58
112
+ 10 47.167/120.75/181.58 10.2 45.75/118.88/180.62
113
+ 10.2 45.75/118.88/180.62 10.4 44.333/117/179.67
114
+ 10.4 44.333/117/179.67 10.6 42.917/115.13/178.71
115
+ 10.6 42.917/115.13/178.71 10.8 41.5/113.25/177.75
116
+ 10.8 41.5/113.25/177.75 11 40.083/111.38/176.79
117
+ 11 40.083/111.38/176.79 11.2 38.667/109.5/175.83
118
+ 11.2 38.667/109.5/175.83 11.4 37.25/107.62/174.88
119
+ 11.4 37.25/107.62/174.88 11.6 35.833/105.75/173.92
120
+ 11.6 35.833/105.75/173.92 11.8 34.417/103.88/172.96
121
+ 11.8 34.417/103.88/172.96 12 33/102/172
122
+ B 178/24/43
123
+ F 33/102/172
124
+ N white
@@ -0,0 +1,11 @@
1
+ # cpt file created by: grd2cpt out1.grd -Cpolar1 -Z
2
+ #COLOR_MODEL = RGB
3
+ #
4
+ -1 39 56 113 -0.3 80 94 140
5
+ -0.3 80 94 140 0 255 255 255
6
+ 0 255 255 255 0.3 219 90 97
7
+ 0.3 219 90 97 1 206 28 38
8
+
9
+ B 39 56 113
10
+ F 206 28 38
11
+ N 255 255 255
@@ -0,0 +1,9 @@
1
+ # cpt file created by: grd2cpt out1.grd -Cpolar1 -Z
2
+ #COLOR_MODEL = RGB
3
+ #
4
+ -1 39 56 113 0 255 255 255
5
+ 0 255 255 255 1 206 28 38
6
+
7
+ B 39 56 113
8
+ F 206 28 38
9
+ N 255 255 255
@@ -0,0 +1,11 @@
1
+ # cpt file created by: grd2cpt out4.grd -Cseis -Z
2
+ #COLOR_MODEL = RGB
3
+ #
4
+ 0 145 26 36 1 228 123 47
5
+ 1 228 123 47 1.5 233 221 59
6
+ 1.5 233 221 59 3 65 166 92
7
+ 3 65 166 92 3.6 72 179 193
8
+ 3.6 72 179 193 5 34 66 135
9
+ B 145 26 36 2.654193574
10
+ F 34 66 135
11
+ N 128 128 128
@@ -0,0 +1,13 @@
1
+ # cpt file created by: grd2cpt out4.grd -Cseis -Z
2
+ #COLOR_MODEL = RGB
3
+ #
4
+ 2 145 26 36 2.654193574 145 26 36
5
+ 2.654193574 145 26 36 3.180712338 228 123 47
6
+ 3.180712338 228 123 47 3.43 233 221 59
7
+ 3.43 233 221 59 3.7 65 166 92
8
+ 3.7 65 166 92 4 72 179 193
9
+ 4 72 179 193 4.5 34 66 135
10
+ 4.5 34 66 135 5 34 66 135
11
+ B 145 26 36 2.654193574
12
+ F 34 66 135
13
+ N 128 128 128
Binary file
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg width="100%" height="100%" viewBox="0 0 514 514" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
4
+ <g id="画板1" transform="matrix(1,0,0,1,-931,-1941)">
5
+ <rect x="931" y="1941" width="514" height="514" style="fill:none;"/>
6
+ <g id="icon" transform="matrix(1,0,0,1,931,1941)">
7
+ <use xlink:href="#_Image1" x="3" y="1" width="506px" height="513px"/>
8
+ </g>
9
+ </g>
10
+ <defs>
11
+ <image id="_Image1" width="506px" height="513px" xlink:href="data:image/png;base64,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"/>
12
+ </defs>
13
+ </svg>
File without changes
@@ -0,0 +1,115 @@
1
+ import numpy as np
2
+ import os
3
+ import re
4
+ from glob import glob
5
+ from scipy.interpolate import griddata
6
+
7
+
8
+ def read_fortran_external_mesh(filename, ngllx=5, nglly=5, ngllz=5):
9
+ with open(filename, "rb") as file:
10
+ data = {}
11
+ data['nspec_ab'] = np.fromfile(file, dtype="int32", offset=4, count=1)[0]
12
+ data['nglob_ab'] = np.fromfile(file, dtype="int32",offset=8, count=1)[0]
13
+ data['nspec_irr'] = np.fromfile(file, dtype="int32",offset=8, count=1)[0]
14
+ nbool = ngllx*nglly*ngllz*data['nspec_ab']
15
+ data['ibool'] = np.fromfile(file, dtype="int32", offset=8, count=nbool).reshape(
16
+ ngllx,nglly,ngllz,data['nspec_ab'], order='F')
17
+ data['xstore'] = np.fromfile(file, dtype="float32", offset=8, count=data['nglob_ab'])
18
+ data['ystore'] = np.fromfile(file, dtype="float32", offset=8, count=data['nglob_ab'])
19
+ data['zstore'] = np.fromfile(file, dtype="float32", offset=8, count=data['nglob_ab'])
20
+ return data
21
+
22
+
23
+ def read_fortran_model(filename, nspec_ab, ngllx=5, nglly=5, ngllz=5):
24
+ with open(filename, "rb") as file:
25
+ file.seek(0)
26
+ data = np.fromfile(file, dtype="float32", offset=4)[:-1].reshape(
27
+ ngllx,nglly,ngllz,nspec_ab, order='F')
28
+ return data
29
+
30
+
31
+ class GllModel:
32
+ def __init__(self, inpath, parameters=['vp', 'vs', 'rho'], ngllx=5, nglly=5, ngllz=5) -> None:
33
+ self.inpath = inpath
34
+ self.parameters = parameters
35
+ self.model_data = {}
36
+ for para in parameters:
37
+ self.model_data[para] = []
38
+ self.nglls = {'ngllx': ngllx,
39
+ 'nglly': nglly,
40
+ 'ngllz': ngllz}
41
+ self.read_external_mesh()
42
+ self.get_minmax()
43
+
44
+ def get_minmax(self):
45
+ self.xmin = np.min([np.min(ex['xstore']) for ex in self.external_meshs])
46
+ self.xmax = np.max([np.max(ex['xstore']) for ex in self.external_meshs])
47
+ self.ymin = np.min([np.min(ex['ystore']) for ex in self.external_meshs])
48
+ self.ymax = np.max([np.max(ex['ystore']) for ex in self.external_meshs])
49
+ self.zmin = np.min([np.min(ex['zstore']) for ex in self.external_meshs])
50
+ self.zmax = np.max([np.max(ex['zstore']) for ex in self.external_meshs])
51
+
52
+ def read_external_mesh(self):
53
+ self.external_meshs = []
54
+ extbins = glob(os.path.join(
55
+ self.inpath, 'proc*_external_mesh.bin')
56
+ )
57
+ self.nproc = len(extbins)
58
+ for _, extbin in enumerate(extbins):
59
+ pname = re.search(r'proc(\d{6})', extbin).groups()[0]
60
+ mesh_data = read_fortran_external_mesh(extbin, **self.nglls)
61
+ self.external_meshs.append(mesh_data)
62
+ for para in self.parameters:
63
+ fname = os.path.join(self.inpath, 'proc{}_{}.bin'.format(pname, para))
64
+ self.model_data[para].append(read_fortran_model(fname, mesh_data['nspec_ab'], **self.nglls))
65
+
66
+ def get_points_data(self):
67
+ self.points = np.empty([0, 3+len(self.parameters)])
68
+ for i in range(self.nproc):
69
+ self.points = np.vstack((self.points, self._get_gll_point(i)))
70
+
71
+ def griddata(self, x, y, z, method='linear'):
72
+ """ grid data with given series of x, y, z.
73
+
74
+ Parameters
75
+ ----------
76
+ x : 1D numpy.ndarray
77
+ Series of x
78
+ y : 1D numpy.ndarray
79
+ Series of y
80
+ z : 1D numpy.ndarray
81
+ Series of z
82
+ method : str, optional
83
+ method for interpolation, by default 'linear'
84
+ """
85
+ # points = np.empty([0, 3+len(self.parameters)])
86
+ x_inter, y_inter, z_inter = np.meshgrid(x, y, z)
87
+ # for i in range(self.nproc):
88
+ # points = np.vstack((points, self._get_gll_point(i)))
89
+ grid_data = {}
90
+ for i, para in enumerate(self.parameters):
91
+ grid_data[para] = griddata(self.points[:, 0:3], self.points[:, i+3],
92
+ (x_inter, y_inter, z_inter), method=method)
93
+ return grid_data
94
+
95
+ def _get_gll_point(self, idx):
96
+ external_mesh = self.external_meshs[idx]
97
+ data = [self.model_data[para][idx] for para in self.parameters]
98
+ points = np.zeros([external_mesh['nspec_ab']* \
99
+ self.nglls['ngllx']*self.nglls['nglly']*self.nglls['ngllz'],
100
+ 3+len(self.parameters)]
101
+ )
102
+ n = 0
103
+ for ispec in range(external_mesh['nspec_ab']):
104
+ for k in range(self.nglls['ngllz']):
105
+ for j in range(self.nglls['nglly']):
106
+ for i in range(self.nglls['ngllx']):
107
+ iglob = external_mesh['ibool'][i,j,k,ispec]
108
+ points[n, 0] = external_mesh['xstore'][iglob-1]
109
+ points[n, 1] = external_mesh['ystore'][iglob-1]
110
+ points[n, 2] = external_mesh['zstore'][iglob-1]
111
+ for m, _ in enumerate(self.parameters):
112
+ points[n, m+3] = data[m][i, j, k, ispec]
113
+ n += 1
114
+ return points
115
+