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.
- {pytmd-2.2.0 → pytmd-2.2.2}/CITATION.cff +3 -3
- {pytmd-2.2.0 → pytmd-2.2.2}/PKG-INFO +14 -18
- {pytmd-2.2.0 → pytmd-2.2.2}/README.rst +10 -10
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/AVISO.json +34 -34
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/providers.json +21 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/__init__.py +1 -8
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/arguments.py +19 -9
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/astro.py +2 -2
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/compute.py +20 -19
- pytmd-2.2.2/pyTMD/crs.py +247 -0
- pytmd-2.2.2/pyTMD/data/d1921_tab.txt +21 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/database.json +55 -34
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/constituents.py +16 -12
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/model.py +4 -2
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/math.py +56 -2
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/predict.py +33 -12
- pytmd-2.2.2/pyTMD/spatial.py +1419 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/utilities.py +68 -2
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/PKG-INFO +14 -18
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/SOURCES.txt +1 -9
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/requires.txt +0 -4
- {pytmd-2.2.0 → pytmd-2.2.2}/pyproject.toml +6 -9
- {pytmd-2.2.0 → pytmd-2.2.2}/scripts/aviso_fes_tides.py +9 -5
- {pytmd-2.2.0 → pytmd-2.2.2}/scripts/gsfc_got_tides.py +4 -2
- {pytmd-2.2.0 → pytmd-2.2.2}/scripts/verify_box_tpxo.py +4 -2
- pytmd-2.2.2/version.txt +1 -0
- pytmd-2.2.0/pyTMD/check_points.py +0 -119
- pytmd-2.2.0/pyTMD/crs.py +0 -629
- pytmd-2.2.0/pyTMD/eop.py +0 -240
- pytmd-2.2.0/pyTMD/spatial.py +0 -2275
- pytmd-2.2.0/pyTMD/time.py +0 -355
- pytmd-2.2.0/scripts/compute_LPET_elevations.py +0 -413
- pytmd-2.2.0/scripts/compute_LPT_displacements.py +0 -533
- pytmd-2.2.0/scripts/compute_OPT_displacements.py +0 -565
- pytmd-2.2.0/scripts/compute_SET_displacements.py +0 -511
- pytmd-2.2.0/scripts/compute_tidal_currents.py +0 -640
- pytmd-2.2.0/scripts/compute_tidal_elevations.py +0 -646
- pytmd-2.2.0/version.txt +0 -1
- {pytmd-2.2.0 → pytmd-2.2.2}/.gitignore +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/CODE_OF_CONDUCT.rst +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/CONTRIBUTORS.rst +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/LICENSE +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/MANIFEST.in +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/ESR.json +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/GSFC.json +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/README.rst +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/TPXO.json +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/_model_to_database.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/_providers_to_database.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/providers/_update_providers.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/compute_tide_corrections.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/ce1973_tab1.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/ct1971_tab5.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/doodson.json +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/opoleloadcoefcmcor.txt.gz +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/tab5.2e.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/tab5.3a.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/data/tab5.3b.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/ellipse.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/interpolate.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/ATLAS.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/FES.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/GOT.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/IERS.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/OTIS.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/io/__init__.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/solve/__init__.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/solve/constants.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/tools.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD/version.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/dependency_links.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/pyTMD.egg-info/top_level.txt +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/scripts/arcticdata_tides.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/scripts/reduce_OTIS_files.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/scripts/usap_cats_tides.py +0 -0
- {pytmd-2.2.0 → pytmd-2.2.2}/setup.cfg +0 -0
- {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/
|
|
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.
|
|
40
|
-
date-released: "
|
|
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
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: pyTMD
|
|
3
|
-
Version: 2.2.
|
|
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/
|
|
33
|
-
Project-URL: Issues, https://github.com/
|
|
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/
|
|
102
|
-
:target: https://github.com/
|
|
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/
|
|
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/
|
|
177
|
+
| https://github.com/pyTMD/pyTMD
|
|
182
178
|
| A zip archive of the latest version is available directly at:
|
|
183
|
-
| https://github.com/
|
|
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/
|
|
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/
|
|
13
|
-
:target: https://github.com/
|
|
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/
|
|
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/
|
|
92
|
+
| https://github.com/pyTMD/pyTMD
|
|
93
93
|
| A zip archive of the latest version is available directly at:
|
|
94
|
-
| https://github.com/
|
|
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/
|
|
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/
|
|
272
|
-
"fes2022b/
|
|
273
|
-
"fes2022b/
|
|
274
|
-
"fes2022b/
|
|
275
|
-
"fes2022b/
|
|
276
|
-
"fes2022b/
|
|
277
|
-
"fes2022b/
|
|
278
|
-
"fes2022b/
|
|
279
|
-
"fes2022b/
|
|
280
|
-
"fes2022b/
|
|
281
|
-
"fes2022b/
|
|
282
|
-
"fes2022b/
|
|
283
|
-
"fes2022b/
|
|
284
|
-
"fes2022b/
|
|
285
|
-
"fes2022b/
|
|
286
|
-
"fes2022b/
|
|
287
|
-
"fes2022b/
|
|
288
|
-
"fes2022b/
|
|
289
|
-
"fes2022b/
|
|
290
|
-
"fes2022b/
|
|
291
|
-
"fes2022b/
|
|
292
|
-
"fes2022b/
|
|
293
|
-
"fes2022b/
|
|
294
|
-
"fes2022b/
|
|
295
|
-
"fes2022b/
|
|
296
|
-
"fes2022b/
|
|
297
|
-
"fes2022b/
|
|
298
|
-
"fes2022b/
|
|
299
|
-
"fes2022b/
|
|
300
|
-
"fes2022b/
|
|
301
|
-
"fes2022b/
|
|
302
|
-
"fes2022b/
|
|
303
|
-
"fes2022b/
|
|
304
|
-
"fes2022b/
|
|
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 (
|
|
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 >
|
|
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 >
|
|
1570
|
+
elif (np.any(coef < 0) or np.any(coef > 11)):
|
|
1563
1571
|
return None
|
|
1564
|
-
elif np.any(coef == 10):
|
|
1565
|
-
# convert to
|
|
1566
|
-
|
|
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
|
-
|
|
1614
|
-
coef = np.array(
|
|
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
|
-
|
|
12
|
-
https://
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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:
|
|
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,
|