pyTMD 2.2.0__tar.gz → 2.2.2__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 (77) hide show
  1. {pytmd-2.2.0 → pytmd-2.2.2}/CITATION.cff +3 -3
  2. {pytmd-2.2.0 → pytmd-2.2.2}/PKG-INFO +14 -18
  3. {pytmd-2.2.0 → pytmd-2.2.2}/README.rst +10 -10
  4. {pytmd-2.2.0 → pytmd-2.2.2}/providers/AVISO.json +34 -34
  5. {pytmd-2.2.0 → pytmd-2.2.2}/providers/providers.json +21 -0
  6. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/__init__.py +1 -8
  7. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/arguments.py +19 -9
  8. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/astro.py +2 -2
  9. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/compute.py +20 -19
  10. pytmd-2.2.2/pyTMD/crs.py +247 -0
  11. pytmd-2.2.2/pyTMD/data/d1921_tab.txt +21 -0
  12. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/database.json +55 -34
  13. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/constituents.py +16 -12
  14. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/model.py +4 -2
  15. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/math.py +56 -2
  16. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/predict.py +33 -12
  17. pytmd-2.2.2/pyTMD/spatial.py +1419 -0
  18. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/utilities.py +68 -2
  19. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/PKG-INFO +14 -18
  20. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/SOURCES.txt +1 -9
  21. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/requires.txt +0 -4
  22. {pytmd-2.2.0 → pytmd-2.2.2}/pyproject.toml +6 -9
  23. {pytmd-2.2.0 → pytmd-2.2.2}/scripts/aviso_fes_tides.py +9 -5
  24. {pytmd-2.2.0 → pytmd-2.2.2}/scripts/gsfc_got_tides.py +4 -2
  25. {pytmd-2.2.0 → pytmd-2.2.2}/scripts/verify_box_tpxo.py +4 -2
  26. pytmd-2.2.2/version.txt +1 -0
  27. pytmd-2.2.0/pyTMD/check_points.py +0 -119
  28. pytmd-2.2.0/pyTMD/crs.py +0 -629
  29. pytmd-2.2.0/pyTMD/eop.py +0 -240
  30. pytmd-2.2.0/pyTMD/spatial.py +0 -2275
  31. pytmd-2.2.0/pyTMD/time.py +0 -355
  32. pytmd-2.2.0/scripts/compute_LPET_elevations.py +0 -413
  33. pytmd-2.2.0/scripts/compute_LPT_displacements.py +0 -533
  34. pytmd-2.2.0/scripts/compute_OPT_displacements.py +0 -565
  35. pytmd-2.2.0/scripts/compute_SET_displacements.py +0 -511
  36. pytmd-2.2.0/scripts/compute_tidal_currents.py +0 -640
  37. pytmd-2.2.0/scripts/compute_tidal_elevations.py +0 -646
  38. pytmd-2.2.0/version.txt +0 -1
  39. {pytmd-2.2.0 → pytmd-2.2.2}/.gitignore +0 -0
  40. {pytmd-2.2.0 → pytmd-2.2.2}/CODE_OF_CONDUCT.rst +0 -0
  41. {pytmd-2.2.0 → pytmd-2.2.2}/CONTRIBUTORS.rst +0 -0
  42. {pytmd-2.2.0 → pytmd-2.2.2}/LICENSE +0 -0
  43. {pytmd-2.2.0 → pytmd-2.2.2}/MANIFEST.in +0 -0
  44. {pytmd-2.2.0 → pytmd-2.2.2}/providers/ESR.json +0 -0
  45. {pytmd-2.2.0 → pytmd-2.2.2}/providers/GSFC.json +0 -0
  46. {pytmd-2.2.0 → pytmd-2.2.2}/providers/README.rst +0 -0
  47. {pytmd-2.2.0 → pytmd-2.2.2}/providers/TPXO.json +0 -0
  48. {pytmd-2.2.0 → pytmd-2.2.2}/providers/_model_to_database.py +0 -0
  49. {pytmd-2.2.0 → pytmd-2.2.2}/providers/_providers_to_database.py +0 -0
  50. {pytmd-2.2.0 → pytmd-2.2.2}/providers/_update_providers.py +0 -0
  51. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/compute_tide_corrections.py +0 -0
  52. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/ce1973_tab1.txt +0 -0
  53. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/ct1971_tab5.txt +0 -0
  54. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/doodson.json +0 -0
  55. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/opoleloadcoefcmcor.txt.gz +0 -0
  56. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/tab5.2e.txt +0 -0
  57. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/tab5.3a.txt +0 -0
  58. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/tab5.3b.txt +0 -0
  59. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/ellipse.py +0 -0
  60. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/interpolate.py +0 -0
  61. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/ATLAS.py +0 -0
  62. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/FES.py +0 -0
  63. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/GOT.py +0 -0
  64. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/IERS.py +0 -0
  65. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/OTIS.py +0 -0
  66. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/__init__.py +0 -0
  67. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/solve/__init__.py +0 -0
  68. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/solve/constants.py +0 -0
  69. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/tools.py +0 -0
  70. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/version.py +0 -0
  71. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/dependency_links.txt +0 -0
  72. {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/top_level.txt +0 -0
  73. {pytmd-2.2.0 → pytmd-2.2.2}/scripts/arcticdata_tides.py +0 -0
  74. {pytmd-2.2.0 → pytmd-2.2.2}/scripts/reduce_OTIS_files.py +0 -0
  75. {pytmd-2.2.0 → pytmd-2.2.2}/scripts/usap_cats_tides.py +0 -0
  76. {pytmd-2.2.0 → pytmd-2.2.2}/setup.cfg +0 -0
  77. {pytmd-2.2.0 → pytmd-2.2.2}/setup.py +0 -0
@@ -31,13 +31,13 @@ identifiers:
31
31
  - type: doi
32
32
  value: 10.5281/zenodo.5555395
33
33
  description: Zenodo Archive
34
- repository-code: 'https://github.com/tsutterley/pyTMD'
34
+ repository-code: 'https://github.com/pyTMD/pyTMD'
35
35
  url: 'https://pytmd.readthedocs.io'
36
36
  repository: 'https://pypi.org/project/pyTMD'
37
37
  repository-artifact: 'https://anaconda.org/conda-forge/pytmd'
38
38
  doi: "10.5281/zenodo.5555395"
39
- version: "2.2.0"
40
- date-released: "2024-12-20"
39
+ version: "2.2.2"
40
+ date-released: "2025-02-19"
41
41
  keywords:
42
42
  - Ocean Tides
43
43
  - Load Tides
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pyTMD
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: Python-based tidal prediction software for estimating ocean, load, solid Earth and pole tides
5
5
  Author: Tyler Sutterley
6
6
  Author-email: tsutterl@uw.edu
@@ -29,8 +29,8 @@ License: MIT License
29
29
 
30
30
  Project-URL: Homepage, https://pytmd.readthedocs.io
31
31
  Project-URL: Documentation, https://pytmd.readthedocs.io
32
- Project-URL: Repository, https://github.com/tsutterley/pyTMD
33
- Project-URL: Issues, https://github.com/tsutterley/pyTMD/issues
32
+ Project-URL: Repository, https://github.com/pyTMD/pyTMD
33
+ Project-URL: Issues, https://github.com/pyTMD/pyTMD/issues
34
34
  Keywords: Ocean Tides,Load Tides,Pole Tides,Solid Earth Tides,Tidal Prediction
35
35
  Classifier: Development Status :: 3 - Alpha
36
36
  Classifier: Intended Audience :: Science/Research
@@ -70,16 +70,12 @@ Requires-Dist: sphinx-design; extra == "doc"
70
70
  Requires-Dist: sphinx_rtd_theme; extra == "doc"
71
71
  Provides-Extra: all
72
72
  Requires-Dist: cartopy; extra == "all"
73
- Requires-Dist: gdal; extra == "all"
74
- Requires-Dist: h5py; extra == "all"
75
73
  Requires-Dist: ipyleaflet; extra == "all"
76
74
  Requires-Dist: ipywidgets; extra == "all"
77
75
  Requires-Dist: jplephem; extra == "all"
78
76
  Requires-Dist: matplotlib; extra == "all"
79
- Requires-Dist: mpi4py; extra == "all"
80
77
  Requires-Dist: notebook; extra == "all"
81
78
  Requires-Dist: pandas; extra == "all"
82
- Requires-Dist: pyyaml; extra == "all"
83
79
  Provides-Extra: dev
84
80
  Requires-Dist: flake8; extra == "dev"
85
81
  Requires-Dist: pytest>=4.6; extra == "dev"
@@ -93,26 +89,26 @@ pyTMD
93
89
 
94
90
  |License|
95
91
  |Documentation Status|
96
- |Coverage Status|
97
92
  |PyPI|
98
93
  |conda-forge|
94
+ |commits-since|
99
95
  |zenodo|
100
96
 
101
- .. |License| image:: https://img.shields.io/github/license/tsutterley/pyTMD
102
- :target: https://github.com/tsutterley/pyTMD/blob/main/LICENSE
97
+ .. |License| image:: https://img.shields.io/github/license/pyTMD/pyTMD
98
+ :target: https://github.com/pyTMD/pyTMD/blob/main/LICENSE
103
99
 
104
100
  .. |Documentation Status| image:: https://readthedocs.org/projects/pytmd/badge/?version=latest
105
101
  :target: https://pytmd.readthedocs.io/en/latest/?badge=latest
106
102
 
107
- .. |Coverage Status| image:: https://codecov.io/gh/tsutterley/pyTMD/branch/main/graph/badge.svg
108
- :target: https://codecov.io/gh/tsutterley/pyTMD
109
-
110
103
  .. |PyPI| image:: https://img.shields.io/pypi/v/pyTMD.svg
111
104
  :target: https://pypi.python.org/pypi/pyTMD/
112
105
 
113
106
  .. |conda-forge| image:: https://img.shields.io/conda/vn/conda-forge/pytmd
114
107
  :target: https://anaconda.org/conda-forge/pytmd
115
108
 
109
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/pyTMD/pyTMD/latest
110
+ :target: https://github.com/pyTMD/pyTMD/releases
111
+
116
112
  .. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.5555395.svg
117
113
  :target: https://doi.org/10.5281/zenodo.5555395
118
114
 
@@ -149,7 +145,7 @@ Development version from GitHub:
149
145
 
150
146
  .. code-block:: bash
151
147
 
152
- python3 -m pip install git+https://github.com/tsutterley/pyTMD.git
148
+ python3 -m pip install git+https://github.com/pyTMD/pyTMD.git
153
149
 
154
150
  Dependencies
155
151
  ############
@@ -178,9 +174,9 @@ Download
178
174
  ########
179
175
 
180
176
  | The program homepage is:
181
- | https://github.com/tsutterley/pyTMD
177
+ | https://github.com/pyTMD/pyTMD
182
178
  | A zip archive of the latest version is available directly at:
183
- | https://github.com/tsutterley/pyTMD/archive/main.zip
179
+ | https://github.com/pyTMD/pyTMD/archive/main.zip
184
180
 
185
181
  Alternative Software
186
182
  ####################
@@ -204,7 +200,7 @@ Contributing
204
200
  ############
205
201
 
206
202
  This project contains work and contributions from the `scientific community <./CONTRIBUTORS.rst>`_.
207
- If you would like to contribute to the project, please have a look at the `open issues <https://github.com/tsutterley/pyTMD/issues>`_ and the project `code of conduct <./CODE_OF_CONDUCT.rst>`_.
203
+ If you would like to contribute to the project, please have a look at the `open issues <https://github.com/pyTMD/pyTMD/issues>`_ and `discussions board <https://github.com/pyTMD/pyTMD/discussions>`_.
208
204
 
209
205
  Credits
210
206
  #######
@@ -4,26 +4,26 @@ pyTMD
4
4
 
5
5
  |License|
6
6
  |Documentation Status|
7
- |Coverage Status|
8
7
  |PyPI|
9
8
  |conda-forge|
9
+ |commits-since|
10
10
  |zenodo|
11
11
 
12
- .. |License| image:: https://img.shields.io/github/license/tsutterley/pyTMD
13
- :target: https://github.com/tsutterley/pyTMD/blob/main/LICENSE
12
+ .. |License| image:: https://img.shields.io/github/license/pyTMD/pyTMD
13
+ :target: https://github.com/pyTMD/pyTMD/blob/main/LICENSE
14
14
 
15
15
  .. |Documentation Status| image:: https://readthedocs.org/projects/pytmd/badge/?version=latest
16
16
  :target: https://pytmd.readthedocs.io/en/latest/?badge=latest
17
17
 
18
- .. |Coverage Status| image:: https://codecov.io/gh/tsutterley/pyTMD/branch/main/graph/badge.svg
19
- :target: https://codecov.io/gh/tsutterley/pyTMD
20
-
21
18
  .. |PyPI| image:: https://img.shields.io/pypi/v/pyTMD.svg
22
19
  :target: https://pypi.python.org/pypi/pyTMD/
23
20
 
24
21
  .. |conda-forge| image:: https://img.shields.io/conda/vn/conda-forge/pytmd
25
22
  :target: https://anaconda.org/conda-forge/pytmd
26
23
 
24
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/pyTMD/pyTMD/latest
25
+ :target: https://github.com/pyTMD/pyTMD/releases
26
+
27
27
  .. |zenodo| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.5555395.svg
28
28
  :target: https://doi.org/10.5281/zenodo.5555395
29
29
 
@@ -60,7 +60,7 @@ Development version from GitHub:
60
60
 
61
61
  .. code-block:: bash
62
62
 
63
- python3 -m pip install git+https://github.com/tsutterley/pyTMD.git
63
+ python3 -m pip install git+https://github.com/pyTMD/pyTMD.git
64
64
 
65
65
  Dependencies
66
66
  ############
@@ -89,9 +89,9 @@ Download
89
89
  ########
90
90
 
91
91
  | The program homepage is:
92
- | https://github.com/tsutterley/pyTMD
92
+ | https://github.com/pyTMD/pyTMD
93
93
  | A zip archive of the latest version is available directly at:
94
- | https://github.com/tsutterley/pyTMD/archive/main.zip
94
+ | https://github.com/pyTMD/pyTMD/archive/main.zip
95
95
 
96
96
  Alternative Software
97
97
  ####################
@@ -115,7 +115,7 @@ Contributing
115
115
  ############
116
116
 
117
117
  This project contains work and contributions from the `scientific community <./CONTRIBUTORS.rst>`_.
118
- If you would like to contribute to the project, please have a look at the `open issues <https://github.com/tsutterley/pyTMD/issues>`_ and the project `code of conduct <./CODE_OF_CONDUCT.rst>`_.
118
+ If you would like to contribute to the project, please have a look at the `open issues <https://github.com/pyTMD/pyTMD/issues>`_ and `discussions board <https://github.com/pyTMD/pyTMD/discussions>`_.
119
119
 
120
120
  Credits
121
121
  #######
@@ -268,40 +268,40 @@
268
268
  "FES2022": {
269
269
  "format": "FES-netcdf",
270
270
  "model_file": [
271
- "fes2022b/ocean_tide/2n2_fes2022.nc",
272
- "fes2022b/ocean_tide/eps2_fes2022.nc",
273
- "fes2022b/ocean_tide/j1_fes2022.nc",
274
- "fes2022b/ocean_tide/k1_fes2022.nc",
275
- "fes2022b/ocean_tide/k2_fes2022.nc",
276
- "fes2022b/ocean_tide/l2_fes2022.nc",
277
- "fes2022b/ocean_tide/lambda2_fes2022.nc",
278
- "fes2022b/ocean_tide/m2_fes2022.nc",
279
- "fes2022b/ocean_tide/m3_fes2022.nc",
280
- "fes2022b/ocean_tide/m4_fes2022.nc",
281
- "fes2022b/ocean_tide/m6_fes2022.nc",
282
- "fes2022b/ocean_tide/m8_fes2022.nc",
283
- "fes2022b/ocean_tide/mf_fes2022.nc",
284
- "fes2022b/ocean_tide/mks2_fes2022.nc",
285
- "fes2022b/ocean_tide/mm_fes2022.nc",
286
- "fes2022b/ocean_tide/mn4_fes2022.nc",
287
- "fes2022b/ocean_tide/ms4_fes2022.nc",
288
- "fes2022b/ocean_tide/msf_fes2022.nc",
289
- "fes2022b/ocean_tide/msqm_fes2022.nc",
290
- "fes2022b/ocean_tide/mtm_fes2022.nc",
291
- "fes2022b/ocean_tide/mu2_fes2022.nc",
292
- "fes2022b/ocean_tide/n2_fes2022.nc",
293
- "fes2022b/ocean_tide/n4_fes2022.nc",
294
- "fes2022b/ocean_tide/nu2_fes2022.nc",
295
- "fes2022b/ocean_tide/o1_fes2022.nc",
296
- "fes2022b/ocean_tide/p1_fes2022.nc",
297
- "fes2022b/ocean_tide/q1_fes2022.nc",
298
- "fes2022b/ocean_tide/r2_fes2022.nc",
299
- "fes2022b/ocean_tide/s1_fes2022.nc",
300
- "fes2022b/ocean_tide/s2_fes2022.nc",
301
- "fes2022b/ocean_tide/s4_fes2022.nc",
302
- "fes2022b/ocean_tide/sa_fes2022.nc",
303
- "fes2022b/ocean_tide/ssa_fes2022.nc",
304
- "fes2022b/ocean_tide/t2_fes2022.nc"
271
+ "fes2022b/ocean_tide_20241025/2n2_fes2022.nc",
272
+ "fes2022b/ocean_tide_20241025/eps2_fes2022.nc",
273
+ "fes2022b/ocean_tide_20241025/j1_fes2022.nc",
274
+ "fes2022b/ocean_tide_20241025/k1_fes2022.nc",
275
+ "fes2022b/ocean_tide_20241025/k2_fes2022.nc",
276
+ "fes2022b/ocean_tide_20241025/l2_fes2022.nc",
277
+ "fes2022b/ocean_tide_20241025/lambda2_fes2022.nc",
278
+ "fes2022b/ocean_tide_20241025/m2_fes2022.nc",
279
+ "fes2022b/ocean_tide_20241025/m3_fes2022.nc",
280
+ "fes2022b/ocean_tide_20241025/m4_fes2022.nc",
281
+ "fes2022b/ocean_tide_20241025/m6_fes2022.nc",
282
+ "fes2022b/ocean_tide_20241025/m8_fes2022.nc",
283
+ "fes2022b/ocean_tide_20241025/mf_fes2022.nc",
284
+ "fes2022b/ocean_tide_20241025/mks2_fes2022.nc",
285
+ "fes2022b/ocean_tide_20241025/mm_fes2022.nc",
286
+ "fes2022b/ocean_tide_20241025/mn4_fes2022.nc",
287
+ "fes2022b/ocean_tide_20241025/ms4_fes2022.nc",
288
+ "fes2022b/ocean_tide_20241025/msf_fes2022.nc",
289
+ "fes2022b/ocean_tide_20241025/msqm_fes2022.nc",
290
+ "fes2022b/ocean_tide_20241025/mtm_fes2022.nc",
291
+ "fes2022b/ocean_tide_20241025/mu2_fes2022.nc",
292
+ "fes2022b/ocean_tide_20241025/n2_fes2022.nc",
293
+ "fes2022b/ocean_tide_20241025/n4_fes2022.nc",
294
+ "fes2022b/ocean_tide_20241025/nu2_fes2022.nc",
295
+ "fes2022b/ocean_tide_20241025/o1_fes2022.nc",
296
+ "fes2022b/ocean_tide_20241025/p1_fes2022.nc",
297
+ "fes2022b/ocean_tide_20241025/q1_fes2022.nc",
298
+ "fes2022b/ocean_tide_20241025/r2_fes2022.nc",
299
+ "fes2022b/ocean_tide_20241025/s1_fes2022.nc",
300
+ "fes2022b/ocean_tide_20241025/s2_fes2022.nc",
301
+ "fes2022b/ocean_tide_20241025/s4_fes2022.nc",
302
+ "fes2022b/ocean_tide_20241025/sa_fes2022.nc",
303
+ "fes2022b/ocean_tide_20241025/ssa_fes2022.nc",
304
+ "fes2022b/ocean_tide_20241025/t2_fes2022.nc"
305
305
  ],
306
306
  "name": "FES2022",
307
307
  "reference": "https://doi.org/10.24400/527896/A01-2024.004",
@@ -81,6 +81,27 @@
81
81
  "type": "z",
82
82
  "variable": "tide_ocean"
83
83
  },
84
+ "DTU23": {
85
+ "format": "GOT-ascii",
86
+ "model_file": [
87
+ "DTU23_OceanTide/DTU23/K1_DTU23.d",
88
+ "DTU23_OceanTide/DTU23/K2_DTU23.d",
89
+ "DTU23_OceanTide/DTU23/M2_DTU23.d",
90
+ "DTU23_OceanTide/DTU23/M4_DTU23.d",
91
+ "DTU23_OceanTide/DTU23/N2_DTU23.d",
92
+ "DTU23_OceanTide/DTU23/O1_DTU23.d",
93
+ "DTU23_OceanTide/DTU23/P1_DTU23.d",
94
+ "DTU23_OceanTide/DTU23/Q1_DTU23.d",
95
+ "DTU23_OceanTide/DTU23/S1_DTU23.d",
96
+ "DTU23_OceanTide/DTU23/S2_DTU23.d"
97
+ ],
98
+ "name": "DTU23",
99
+ "reference": "https://doi.org/10.3390/rs15184479",
100
+ "scale": 0.01,
101
+ "type": "z",
102
+ "variable": "tide_ocean",
103
+ "version": "2023"
104
+ },
84
105
  "EOT20": {
85
106
  "format": "FES-netcdf",
86
107
  "model_file": [
@@ -24,14 +24,9 @@ import pyTMD.utilities
24
24
  import pyTMD.version
25
25
  from pyTMD import io
26
26
  from pyTMD import solve
27
- from pyTMD.crs import (
28
- crs,
29
- datum,
30
- _ellipsoids
31
- )
27
+ from pyTMD.crs import crs
32
28
 
33
29
  # Deprecated functions
34
- from pyTMD.check_points import check_points
35
30
  from pyTMD.compute_tide_corrections import (
36
31
  compute_corrections,
37
32
  compute_tide_corrections,
@@ -40,8 +35,6 @@ from pyTMD.compute_tide_corrections import (
40
35
  compute_OPT_corrections,
41
36
  compute_SET_corrections,
42
37
  )
43
- import pyTMD.eop
44
- import pyTMD.time
45
38
 
46
39
  # get semantic version from setuptools-scm
47
40
  __version__ = pyTMD.version.version
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  u"""
3
3
  arguments.py
4
- Written by Tyler Sutterley (12/2024)
4
+ Written by Tyler Sutterley (02/2025)
5
5
  Calculates the nodal corrections for tidal constituents
6
6
  Modification of ARGUMENTS fortran subroutine by Richard Ray 03/1999
7
7
 
@@ -39,6 +39,9 @@ REFERENCES:
39
39
  Ocean Tides", Journal of Atmospheric and Oceanic Technology, (2002).
40
40
 
41
41
  UPDATE HISTORY:
42
+ Updated 02/2025: add option to make doodson numbers strings
43
+ add Doodson number convention for converting 11 to E
44
+ add Doodson (1921) table for coefficients missing from Cartwright tables
42
45
  Updated 12/2024: added function to calculate tidal aliasing periods
43
46
  Updated 11/2024: allow variable case for Doodson number formalisms
44
47
  fix species in constituent parameters for complex tides
@@ -1488,6 +1491,8 @@ def _love_numbers(
1488
1491
  # return the Love numbers for frequency
1489
1492
  return (h2, k2, l2)
1490
1493
 
1494
+ # Doodson (1921) table with values missing from Cartwright tables
1495
+ _d1921_table = get_data_path(['data','d1921_tab.txt'])
1491
1496
  # Cartwright and Tayler (1971) table with 3rd-degree values
1492
1497
  _ct1971_table_5 = get_data_path(['data','ct1971_tab5.txt'])
1493
1498
  # Cartwright and Edden (1973) table with updated values
@@ -1542,6 +1547,8 @@ def _to_doodson_number(coef: list | np.ndarray, **kwargs):
1542
1547
  ----------
1543
1548
  coef: list or np.ndarray
1544
1549
  Doodson coefficients (Cartwright numbers) for constituent
1550
+ astype: type, default float
1551
+ Output data type for default case
1545
1552
  raise_error: bool, default True
1546
1553
  Raise exception if constituent is unsupported
1547
1554
 
@@ -1552,24 +1559,26 @@ def _to_doodson_number(coef: list | np.ndarray, **kwargs):
1552
1559
  """
1553
1560
  # default keyword arguments
1554
1561
  kwargs.setdefault('raise_error', True)
1562
+ astype = kwargs.get('astype', float)
1555
1563
  # assert length and verify array
1556
1564
  coef = np.array(coef[:6]).astype(int)
1557
1565
  # add 5 to values following Doodson convention (prevent negatives)
1558
1566
  coef[1:] += 5
1559
1567
  # check for unsupported constituents
1560
- if (np.any(coef < 0) or np.any(coef > 10)) and kwargs['raise_error']:
1568
+ if (np.any(coef < 0) or np.any(coef > 11)) and kwargs['raise_error']:
1561
1569
  raise ValueError('Unsupported constituent')
1562
- elif (np.any(coef < 0) or np.any(coef > 10)):
1570
+ elif (np.any(coef < 0) or np.any(coef > 11)):
1563
1571
  return None
1564
- elif np.any(coef == 10):
1565
- # convert to string and replace 10 with X (Cartwright convention)
1566
- DO = [str(v).replace('10','X') for v in coef]
1572
+ elif np.any(coef == 10) or np.any(coef == 11):
1573
+ # convert coefficients to strings
1574
+ # replace 10 with X and 11 with E (Doodson convention)
1575
+ DO = [str(v).replace('10','X').replace('11','E') for v in coef]
1567
1576
  # convert to Doodson number
1568
1577
  return np.str_('{0}{1}{2}.{3}{4}{5}'.format(*DO))
1569
1578
  else:
1570
1579
  # convert to single number and round off floating point errors
1571
1580
  DO = np.sum([v*10**(2-o) for o,v in enumerate(coef)])
1572
- return np.round(DO, decimals=3)
1581
+ return np.round(DO, decimals=3).astype(astype)
1573
1582
 
1574
1583
  def _to_extended_doodson(coef: list | np.ndarray, **kwargs):
1575
1584
  """
@@ -1610,8 +1619,9 @@ def _from_doodson_number(DO: str | float | np.ndarray, **kwargs):
1610
1619
  Doodson coefficients (Cartwright numbers) for constituent
1611
1620
  """
1612
1621
  # convert from Doodson number to Cartwright numbers
1613
- coef = [c.replace('X', '10') for c in re.findall(r'\w', str(DO).zfill(7))]
1614
- coef = np.array(coef, dtype=int)
1622
+ # replace 10 with X and 11 with E (Doodson convention)
1623
+ coef = np.array([c.replace('X', '10').replace('E', '11')
1624
+ for c in re.findall(r'\w', str(DO).zfill(7))], dtype=int)
1615
1625
  # remove 5 from values following Doodson convention
1616
1626
  coef[1:] -= 5
1617
1627
  return coef
@@ -8,8 +8,8 @@ PYTHON DEPENDENCIES:
8
8
  numpy: Scientific Computing Tools For Python
9
9
  https://numpy.org
10
10
  https://numpy.org/doc/stable/user/numpy-for-matlab-users.html
11
- PyEphem: Astronomical Ephemeris for Python
12
- https://rhodesmill.org/pyephem/
11
+ jplephem: Astronomical Ephemeris for Python
12
+ https://pypi.org/project/jplephem/
13
13
 
14
14
  REFERENCES:
15
15
  Jean Meeus, Astronomical Algorithms, 2nd edition, 1998.
@@ -153,6 +153,7 @@ __all__ = [
153
153
  "corrections",
154
154
  "tide_elevations",
155
155
  "tide_currents",
156
+ "tide_masks",
156
157
  "LPET_elevations",
157
158
  "LPT_displacements",
158
159
  "OPT_displacements",
@@ -219,7 +220,7 @@ def tide_elevations(
219
220
  CROP: bool = False,
220
221
  BOUNDS: list | np.ndarray | None = None,
221
222
  BUFFER: int | float | None = None,
222
- EPSG: str | int = 3031,
223
+ EPSG: str | int = 4326,
223
224
  EPOCH: list | tuple = (2000, 1, 1, 0, 0, 0),
224
225
  TYPE: str | None = 'drift',
225
226
  TIME: str = 'UTC',
@@ -260,7 +261,7 @@ def tide_elevations(
260
261
  Boundaries for cropping tide model data
261
262
  BUFFER: int, float or NoneType, default None
262
263
  Buffer distance for cropping tide model data
263
- EPSG: int, default: 3031 (Polar Stereographic South, WGS84)
264
+ EPSG: int, default: 4326 (WGS84 Latitude and Longitude)
264
265
  Input coordinate system
265
266
  EPOCH: tuple, default (2000,1,1,0,0,0)
266
267
  Time period for calculating delta times
@@ -447,7 +448,7 @@ def tide_currents(
447
448
  CROP: bool = False,
448
449
  BOUNDS: list | np.ndarray | None = None,
449
450
  BUFFER: int | float | None = None,
450
- EPSG: str | int = 3031,
451
+ EPSG: str | int = 4326,
451
452
  EPOCH: list | tuple = (2000, 1, 1, 0, 0, 0),
452
453
  TYPE: str | None = 'drift',
453
454
  TIME: str = 'UTC',
@@ -486,7 +487,7 @@ def tide_currents(
486
487
  Boundaries for cropping tide model data
487
488
  BUFFER: int, float or NoneType, default None
488
489
  Buffer distance for cropping tide model data
489
- EPSG: int, default: 3031 (Polar Stereographic South, WGS84)
490
+ EPSG: int, default: 4326 (WGS84 Latitude and Longitude)
490
491
  Input coordinate system
491
492
  EPOCH: tuple, default (2000,1,1,0,0,0)
492
493
  Time period for calculating delta times
@@ -666,7 +667,7 @@ def tide_masks(x: np.ndarray, y: np.ndarray,
666
667
  MODEL: str | None = None,
667
668
  GZIP: bool = False,
668
669
  DEFINITION_FILE: str | pathlib.Path | None = None,
669
- EPSG: str | int = 3031,
670
+ EPSG: str | int = 4326,
670
671
  METHOD: str = 'spline'
671
672
  ):
672
673
  """
@@ -686,7 +687,7 @@ def tide_masks(x: np.ndarray, y: np.ndarray,
686
687
  Tide model files are gzip compressed
687
688
  DEFINITION_FILE: str or NoneType, default None
688
689
  Tide model definition file for use
689
- EPSG: str or int, default: 3031 (Polar Stereographic South, WGS84)
690
+ EPSG: str or int, default: 4326 (WGS84 Latitude and Longitude)
690
691
  Input coordinate system
691
692
  METHOD: str, default 'spline'
692
693
  interpolation method
@@ -794,7 +795,7 @@ def tide_masks(x: np.ndarray, y: np.ndarray,
794
795
  # PURPOSE: compute long-period equilibrium tidal elevations
795
796
  def LPET_elevations(
796
797
  x: np.ndarray, y: np.ndarray, delta_time: np.ndarray,
797
- EPSG: str | int = 3031,
798
+ EPSG: str | int = 4326,
798
799
  EPOCH: list | tuple = (2000, 1, 1, 0, 0, 0),
799
800
  TYPE: str | None = 'drift',
800
801
  TIME: str = 'UTC',
@@ -811,7 +812,7 @@ def LPET_elevations(
811
812
  y-coordinates in projection EPSG
812
813
  delta_time: np.ndarray
813
814
  seconds since EPOCH or datetime array
814
- EPSG: int, default: 3031 (Polar Stereographic South, WGS84)
815
+ EPSG: int, default: 4326 (WGS84 Latitude and Longitude)
815
816
  Input coordinate system
816
817
  EPOCH: tuple, default (2000,1,1,0,0,0)
817
818
  Time period for calculating delta times
@@ -899,7 +900,7 @@ def LPET_elevations(
899
900
  # following IERS Convention (2010) guidelines
900
901
  def LPT_displacements(
901
902
  x: np.ndarray, y: np.ndarray, delta_time: np.ndarray,
902
- EPSG: str | int = 3031,
903
+ EPSG: str | int = 4326,
903
904
  EPOCH: list | tuple = (2000, 1, 1, 0, 0, 0),
904
905
  TYPE: str | None = 'drift',
905
906
  TIME: str = 'UTC',
@@ -920,7 +921,7 @@ def LPT_displacements(
920
921
  y-coordinates in projection EPSG
921
922
  delta_time: np.ndarray
922
923
  seconds since EPOCH or datetime array
923
- EPSG: int, default: 3031 (Polar Stereographic South, WGS84)
924
+ EPSG: int, default: 4326 (WGS84 Latitude and Longitude)
924
925
  Input coordinate system
925
926
  EPOCH: tuple, default (2000,1,1,0,0,0)
926
927
  Time period for calculating delta times
@@ -959,7 +960,7 @@ def LPT_displacements(
959
960
 
960
961
  # validate input arguments
961
962
  assert TIME.lower() in ('gps', 'loran', 'tai', 'utc', 'datetime')
962
- assert ELLIPSOID.upper() in pyTMD._ellipsoids
963
+ assert ELLIPSOID.upper() in pyTMD.spatial._ellipsoids
963
964
  assert CONVENTION.isdigit() and CONVENTION in timescale.eop._conventions
964
965
  # determine input data type based on variable dimensions
965
966
  if not TYPE:
@@ -998,7 +999,7 @@ def LPT_displacements(
998
999
  # degrees to radians
999
1000
  dtr = np.pi/180.0
1000
1001
  # earth and physical parameters for ellipsoid
1001
- units = pyTMD.datum(ellipsoid=ELLIPSOID, units='MKS')
1002
+ units = pyTMD.spatial.datum(ellipsoid=ELLIPSOID, units='MKS')
1002
1003
  # tidal love/shida numbers appropriate for the load tide
1003
1004
  hb2 = 0.6207
1004
1005
  lb2 = 0.0836
@@ -1099,7 +1100,7 @@ def LPT_displacements(
1099
1100
  # following IERS Convention (2010) guidelines
1100
1101
  def OPT_displacements(
1101
1102
  x: np.ndarray, y: np.ndarray, delta_time: np.ndarray,
1102
- EPSG: str | int = 3031,
1103
+ EPSG: str | int = 4326,
1103
1104
  EPOCH: list | tuple = (2000, 1, 1, 0, 0, 0),
1104
1105
  TYPE: str | None = 'drift',
1105
1106
  TIME: str = 'UTC',
@@ -1121,7 +1122,7 @@ def OPT_displacements(
1121
1122
  y-coordinates in projection EPSG
1122
1123
  delta_time: np.ndarray
1123
1124
  seconds since EPOCH or datetime array
1124
- EPSG: int, default: 3031 (Polar Stereographic South, WGS84)
1125
+ EPSG: int, default: 4326 (WGS84 Latitude and Longitude)
1125
1126
  Input coordinate system
1126
1127
  EPOCH: tuple, default (2000,1,1,0,0,0)
1127
1128
  Time period for calculating delta times
@@ -1166,7 +1167,7 @@ def OPT_displacements(
1166
1167
 
1167
1168
  # validate input arguments
1168
1169
  assert TIME.lower() in ('gps', 'loran', 'tai', 'utc', 'datetime')
1169
- assert ELLIPSOID.upper() in pyTMD._ellipsoids
1170
+ assert ELLIPSOID.upper() in pyTMD.spatial._ellipsoids
1170
1171
  assert CONVENTION.isdigit() and CONVENTION in timescale.eop._conventions
1171
1172
  assert METHOD.lower() in ('bilinear', 'spline', 'linear', 'nearest')
1172
1173
  # determine input data type based on variable dimensions
@@ -1213,7 +1214,7 @@ def OPT_displacements(
1213
1214
  # degrees to radians
1214
1215
  dtr = np.pi/180.0
1215
1216
  # earth and physical parameters for ellipsoid
1216
- units = pyTMD.datum(ellipsoid=ELLIPSOID, units='MKS')
1217
+ units = pyTMD.spatial.datum(ellipsoid=ELLIPSOID, units='MKS')
1217
1218
  # mean equatorial gravitational acceleration [m/s^2]
1218
1219
  ge = 9.7803278
1219
1220
  # density of sea water [kg/m^3]
@@ -1327,7 +1328,7 @@ def OPT_displacements(
1327
1328
  # PURPOSE: compute solid earth tidal elevations
1328
1329
  def SET_displacements(
1329
1330
  x: np.ndarray, y: np.ndarray, delta_time: np.ndarray,
1330
- EPSG: str | int = 3031,
1331
+ EPSG: str | int = 4326,
1331
1332
  EPOCH: list | tuple = (2000, 1, 1, 0, 0, 0),
1332
1333
  TYPE: str | None = 'drift',
1333
1334
  TIME: str = 'UTC',
@@ -1348,7 +1349,7 @@ def SET_displacements(
1348
1349
  y-coordinates in projection EPSG
1349
1350
  delta_time: np.ndarray
1350
1351
  seconds since EPOCH or datetime array
1351
- EPSG: int, default: 3031 (Polar Stereographic South, WGS84)
1352
+ EPSG: int, default: 4326 (WGS84 Latitude and Longitude)
1352
1353
  Input coordinate system
1353
1354
  EPOCH: tuple, default (2000,1,1,0,0,0)
1354
1355
  Time period for calculating delta times
@@ -1426,7 +1427,7 @@ def SET_displacements(
1426
1427
  nt = len(ts)
1427
1428
 
1428
1429
  # earth and physical parameters for ellipsoid
1429
- units = pyTMD.datum(ellipsoid=ELLIPSOID, units='MKS')
1430
+ units = pyTMD.spatial.datum(ellipsoid=ELLIPSOID, units='MKS')
1430
1431
 
1431
1432
  # convert input coordinates to cartesian
1432
1433
  X, Y, Z = pyTMD.spatial.to_cartesian(lon, lat,