pyTMD 2.2.7__tar.gz → 2.2.8__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.7 → pytmd-2.2.8}/MANIFEST.in +1 -0
- pytmd-2.2.8/PKG-INFO +224 -0
- pytmd-2.2.8/README.md +130 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/arguments.py +59 -24
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/astro.py +53 -1
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/compute.py +213 -31
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/crs.py +52 -24
- pytmd-2.2.8/pyTMD/data/ct1971_tab6.txt +31 -0
- pytmd-2.2.8/pyTMD/data/cte1973_tab.txt +485 -0
- pytmd-2.2.8/pyTMD/data/d1921_tab.txt +21 -0
- pytmd-2.2.8/pyTMD/data/hw1995_tab.txt +12584 -0
- pytmd-2.2.8/pyTMD/data/t1987_tab.txt +1201 -0
- pytmd-2.2.8/pyTMD/data/w1990_tab.txt +487 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/interpolate.py +280 -136
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/ATLAS.py +8 -1
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/FES.py +7 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/GOT.py +7 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/OTIS.py +7 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/__init__.py +6 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/constituents.py +96 -1
- pytmd-2.2.8/pyTMD/io/dataset.py +67 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/model.py +49 -1
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/math.py +18 -7
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/predict.py +149 -100
- pytmd-2.2.8/pyTMD.egg-info/PKG-INFO +224 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD.egg-info/SOURCES.txt +6 -3
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD.egg-info/requires.txt +11 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyproject.toml +23 -3
- pytmd-2.2.7/PKG-INFO +0 -242
- pytmd-2.2.7/README.rst +0 -158
- pytmd-2.2.7/pyTMD/data/ce1973_tab1.txt +0 -385
- pytmd-2.2.7/pyTMD/data/ct1971_tab5.txt +0 -99
- pytmd-2.2.7/pyTMD/data/ct1971_tab6.txt +0 -31
- pytmd-2.2.7/pyTMD/data/d1921_tab.txt +0 -21
- pytmd-2.2.7/pyTMD.egg-info/PKG-INFO +0 -242
- {pytmd-2.2.7 → pytmd-2.2.8}/LICENSE +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/__init__.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/compute_tide_corrections.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/data/database.json +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/data/doodson.json +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/data/opoleloadcoefcmcor.txt.gz +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/data/tab5.2e.txt +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/data/tab5.3a.txt +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/data/tab5.3b.txt +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/ellipse.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/IERS.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/io/NOAA.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/scripts/arcticdata_tides.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/scripts/aviso_fes_tides.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/scripts/gsfc_got_tides.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/scripts/reduce_OTIS_files.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/scripts/verify_box_tpxo.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/solve/__init__.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/solve/constants.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/spatial.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/tools.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/utilities.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD/version.py +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD.egg-info/dependency_links.txt +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD.egg-info/entry_points.txt +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/pyTMD.egg-info/top_level.txt +0 -0
- {pytmd-2.2.7 → pytmd-2.2.8}/setup.cfg +0 -0
pytmd-2.2.8/PKG-INFO
ADDED
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: pyTMD
|
|
3
|
+
Version: 2.2.8
|
|
4
|
+
Summary: Python-based tidal prediction software for estimating ocean, load, solid Earth and pole tides
|
|
5
|
+
Author: Tyler Sutterley
|
|
6
|
+
Author-email: tsutterl@uw.edu
|
|
7
|
+
Maintainer: pyTMD contributors
|
|
8
|
+
License: MIT License
|
|
9
|
+
|
|
10
|
+
Copyright (c) 2017 Tyler C Sutterley
|
|
11
|
+
|
|
12
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
13
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
14
|
+
in the Software without restriction, including without limitation the rights
|
|
15
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
16
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
17
|
+
furnished to do so, subject to the following conditions:
|
|
18
|
+
|
|
19
|
+
The above copyright notice and this permission notice shall be included in all
|
|
20
|
+
copies or substantial portions of the Software.
|
|
21
|
+
|
|
22
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
23
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
24
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
25
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
26
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
27
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
28
|
+
SOFTWARE.
|
|
29
|
+
|
|
30
|
+
Project-URL: Homepage, https://pytmd.readthedocs.io
|
|
31
|
+
Project-URL: Documentation, https://pytmd.readthedocs.io
|
|
32
|
+
Project-URL: Repository, https://github.com/pyTMD/pyTMD
|
|
33
|
+
Project-URL: Issues, https://github.com/pyTMD/pyTMD/issues
|
|
34
|
+
Keywords: Ocean Tides,Load Tides,Pole Tides,Solid Earth Tides,Tidal Prediction
|
|
35
|
+
Classifier: Development Status :: 3 - Alpha
|
|
36
|
+
Classifier: Intended Audience :: Science/Research
|
|
37
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
38
|
+
Classifier: Operating System :: OS Independent
|
|
39
|
+
Classifier: Programming Language :: Python :: 3
|
|
40
|
+
Classifier: Programming Language :: Python :: 3.6
|
|
41
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
42
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
43
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
44
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
45
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
46
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
47
|
+
Classifier: Topic :: Scientific/Engineering :: Physics
|
|
48
|
+
Classifier: Topic :: Scientific/Engineering :: Oceanography
|
|
49
|
+
Requires-Python: ~=3.6
|
|
50
|
+
Description-Content-Type: text/markdown
|
|
51
|
+
License-File: LICENSE
|
|
52
|
+
Requires-Dist: lxml
|
|
53
|
+
Requires-Dist: netCDF4
|
|
54
|
+
Requires-Dist: numpy
|
|
55
|
+
Requires-Dist: pyproj
|
|
56
|
+
Requires-Dist: python-dateutil
|
|
57
|
+
Requires-Dist: scipy>=1.10.1
|
|
58
|
+
Requires-Dist: timescale>=0.0.8
|
|
59
|
+
Provides-Extra: doc
|
|
60
|
+
Requires-Dist: docutils; extra == "doc"
|
|
61
|
+
Requires-Dist: graphviz; extra == "doc"
|
|
62
|
+
Requires-Dist: myst-nb; extra == "doc"
|
|
63
|
+
Requires-Dist: numpydoc; extra == "doc"
|
|
64
|
+
Requires-Dist: sphinx; extra == "doc"
|
|
65
|
+
Requires-Dist: sphinx-argparse>=0.4; extra == "doc"
|
|
66
|
+
Requires-Dist: sphinxcontrib-bibtex; extra == "doc"
|
|
67
|
+
Requires-Dist: sphinx-design; extra == "doc"
|
|
68
|
+
Requires-Dist: sphinx_rtd_theme; extra == "doc"
|
|
69
|
+
Provides-Extra: all
|
|
70
|
+
Requires-Dist: cartopy; extra == "all"
|
|
71
|
+
Requires-Dist: ipyleaflet; extra == "all"
|
|
72
|
+
Requires-Dist: ipywidgets; extra == "all"
|
|
73
|
+
Requires-Dist: jplephem; extra == "all"
|
|
74
|
+
Requires-Dist: matplotlib; extra == "all"
|
|
75
|
+
Requires-Dist: notebook; extra == "all"
|
|
76
|
+
Requires-Dist: pandas; extra == "all"
|
|
77
|
+
Provides-Extra: aws
|
|
78
|
+
Requires-Dist: xarray; extra == "aws"
|
|
79
|
+
Requires-Dist: dask; extra == "aws"
|
|
80
|
+
Requires-Dist: zarr>=3; extra == "aws"
|
|
81
|
+
Requires-Dist: h5netcdf; extra == "aws"
|
|
82
|
+
Requires-Dist: geopandas; extra == "aws"
|
|
83
|
+
Requires-Dist: pyarrow; extra == "aws"
|
|
84
|
+
Requires-Dist: obstore; extra == "aws"
|
|
85
|
+
Requires-Dist: s3fs; extra == "aws"
|
|
86
|
+
Provides-Extra: dev
|
|
87
|
+
Requires-Dist: flake8; extra == "dev"
|
|
88
|
+
Requires-Dist: pytest>=4.6; extra == "dev"
|
|
89
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
90
|
+
Requires-Dist: pytest-xdist; extra == "dev"
|
|
91
|
+
Requires-Dist: oct2py; extra == "dev"
|
|
92
|
+
Requires-Dist: boto3; extra == "dev"
|
|
93
|
+
Dynamic: license-file
|
|
94
|
+
|
|
95
|
+
# pyTMD
|
|
96
|
+
|
|
97
|
+
[](https://github.com/pyTMD/pyTMD/blob/main/LICENSE)
|
|
98
|
+
[](https://pytmd.readthedocs.io/en/latest/?badge=latest)
|
|
99
|
+
[](https://pypi.python.org/pypi/pyTMD/)
|
|
100
|
+
[](https://anaconda.org/conda-forge/pytmd)
|
|
101
|
+
[](https://github.com/pyTMD/pyTMD/releases/latest)
|
|
102
|
+
[](https://doi.org/10.5281/zenodo.5555395)
|
|
103
|
+
|
|
104
|
+
Python-based tidal prediction software for estimating ocean, load, solid Earth and pole tides
|
|
105
|
+
|
|
106
|
+
For more information: see the documentation at [pytmd.readthedocs.io](https://pytmd.readthedocs.io/)
|
|
107
|
+
|
|
108
|
+
## Installation
|
|
109
|
+
|
|
110
|
+
From PyPI:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
python3 -m pip install pyTMD
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
To include all optional dependencies:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
python3 -m pip install pyTMD[all]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Using `conda` or `mamba` from conda-forge:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
conda install -c conda-forge pytmd
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
mamba install -c conda-forge pytmd
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Development version from GitHub:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
python3 -m pip install git+https://github.com/pyTMD/pyTMD.git
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### Running with Pixi
|
|
139
|
+
|
|
140
|
+
Alternatively, you can use [Pixi](https://pixi.sh/) for a streamlined workspace environment:
|
|
141
|
+
|
|
142
|
+
1. Install Pixi following the [installation instructions](https://pixi.sh/latest/#installation)
|
|
143
|
+
2. Clone the project repository:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
git clone https://github.com/pyTMD/pyTMD.git
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
3. Move into the `pyTMD` directory
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
cd pyTMD
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
4. Install dependencies and start JupyterLab:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
pixi run start
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
This will automatically create the environment, install all dependencies, and launch JupyterLab in the [notebooks](./doc/source/notebooks/) directory.
|
|
162
|
+
|
|
163
|
+
## Dependencies
|
|
164
|
+
|
|
165
|
+
- [dateutil: powerful extensions to datetime](https://dateutil.readthedocs.io/en/stable/)
|
|
166
|
+
- [lxml: processing XML and HTML in Python](https://pypi.python.org/pypi/lxml)
|
|
167
|
+
- [netCDF4: Python interface to the netCDF C library](https://unidata.github.io/netcdf4-python/)
|
|
168
|
+
- [numpy: Scientific Computing Tools For Python](https://www.numpy.org)
|
|
169
|
+
- [pyproj: Python interface to PROJ library](https://pypi.org/project/pyproj/)
|
|
170
|
+
- [scipy: Scientific Tools for Python](https://www.scipy.org/)
|
|
171
|
+
- [timescale: Python tools for time and astronomical calculations](https://pypi.org/project/timescale/)
|
|
172
|
+
|
|
173
|
+
## References
|
|
174
|
+
|
|
175
|
+
> T. C. Sutterley, T. Markus, T. A. Neumann, M. R. van den Broeke, J. M. van Wessem, and S. R. M. Ligtenberg,
|
|
176
|
+
> "Antarctic ice shelf thickness change from multimission lidar mapping", *The Cryosphere*,
|
|
177
|
+
> 13, 1801-1817, (2019). [doi: 10.5194/tc-13-1801-2019](https://doi.org/10.5194/tc-13-1801-2019)
|
|
178
|
+
>
|
|
179
|
+
> L. Padman, M. R. Siegfried, H. A. Fricker,
|
|
180
|
+
> "Ocean Tide Influences on the Antarctic and Greenland Ice Sheets", *Reviews of Geophysics*,
|
|
181
|
+
> 56, 142-184, (2018). [doi: 10.1002/2016RG000546](https://doi.org/10.1002/2016RG000546)
|
|
182
|
+
|
|
183
|
+
## Download
|
|
184
|
+
|
|
185
|
+
The program homepage is:
|
|
186
|
+
<https://github.com/pyTMD/pyTMD>
|
|
187
|
+
|
|
188
|
+
A zip archive of the latest version is available directly at:
|
|
189
|
+
<https://github.com/pyTMD/pyTMD/archive/main.zip>
|
|
190
|
+
|
|
191
|
+
## Alternative Software
|
|
192
|
+
|
|
193
|
+
perth5 from NASA Goddard Space Flight Center:
|
|
194
|
+
<https://codeberg.org/rray/perth5>
|
|
195
|
+
|
|
196
|
+
Matlab Tide Model Driver from Earth & Space Research:
|
|
197
|
+
<https://github.com/EarthAndSpaceResearch/TMD_Matlab_Toolbox_v2.5>
|
|
198
|
+
|
|
199
|
+
Fortran OSU Tidal Prediction Software:
|
|
200
|
+
<https://www.tpxo.net/otps>
|
|
201
|
+
|
|
202
|
+
## Disclaimer
|
|
203
|
+
|
|
204
|
+
This package includes software developed at NASA Goddard Space Flight Center (GSFC) and the University of Washington Applied Physics Laboratory (UW-APL).
|
|
205
|
+
It is not sponsored or maintained by the Universities Space Research Association (USRA), AVISO or NASA.
|
|
206
|
+
The software is provided here for your convenience but *with no guarantees whatsoever*.
|
|
207
|
+
It should not be used for coastal navigation or any application that may risk life or property.
|
|
208
|
+
|
|
209
|
+
## Contributing
|
|
210
|
+
|
|
211
|
+
This project contains work and contributions from the [scientific community](./CONTRIBUTORS.rst).
|
|
212
|
+
If you would like to contribute to the project, please have a look at the [contribution guidelines](./doc/source/getting_started/Contributing.rst), [open issues](https://github.com/pyTMD/pyTMD/issues) and [discussions board](https://github.com/pyTMD/pyTMD/discussions).
|
|
213
|
+
|
|
214
|
+
## Credits
|
|
215
|
+
|
|
216
|
+
The Tidal Model Driver ([TMD](https://github.com/EarthAndSpaceResearch/TMD_Matlab_Toolbox_v2.5)) Matlab Toolbox was developed by Laurie Padman, Lana Erofeeva and Susan Howard.
|
|
217
|
+
An updated version of the TMD Matlab Toolbox ([TMD3](https://github.com/chadagreene/Tide-Model-Driver)) was developed by Chad Greene.
|
|
218
|
+
The OSU Tidal Inversion Software (OTIS) and OSU Tidal Prediction Software ([OTPS](https://www.tpxo.net/otps)) were developed by Lana Erofeeva and Gary Egbert ([copyright OSU](https://www.tpxo.net/tpxo-products-and-registration), licensed for non-commercial use).
|
|
219
|
+
The NASA Goddard Space Flight Center (GSFC) PREdict Tidal Heights (PERTH3) software was developed by Richard Ray and Remko Scharroo.
|
|
220
|
+
An updated and more versatile version of the NASA GSFC tidal prediction software ([PERTH5](https://codeberg.org/rray/perth5)) was developed by Richard Ray.
|
|
221
|
+
|
|
222
|
+
## License
|
|
223
|
+
|
|
224
|
+
The content of this project is licensed under the [Creative Commons Attribution 4.0 Attribution license](https://creativecommons.org/licenses/by/4.0/) and the source code is licensed under the [MIT license](LICENSE).
|
pytmd-2.2.8/README.md
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# pyTMD
|
|
2
|
+
|
|
3
|
+
[](https://github.com/pyTMD/pyTMD/blob/main/LICENSE)
|
|
4
|
+
[](https://pytmd.readthedocs.io/en/latest/?badge=latest)
|
|
5
|
+
[](https://pypi.python.org/pypi/pyTMD/)
|
|
6
|
+
[](https://anaconda.org/conda-forge/pytmd)
|
|
7
|
+
[](https://github.com/pyTMD/pyTMD/releases/latest)
|
|
8
|
+
[](https://doi.org/10.5281/zenodo.5555395)
|
|
9
|
+
|
|
10
|
+
Python-based tidal prediction software for estimating ocean, load, solid Earth and pole tides
|
|
11
|
+
|
|
12
|
+
For more information: see the documentation at [pytmd.readthedocs.io](https://pytmd.readthedocs.io/)
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
From PyPI:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
python3 -m pip install pyTMD
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
To include all optional dependencies:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
python3 -m pip install pyTMD[all]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Using `conda` or `mamba` from conda-forge:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
conda install -c conda-forge pytmd
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
mamba install -c conda-forge pytmd
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Development version from GitHub:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
python3 -m pip install git+https://github.com/pyTMD/pyTMD.git
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Running with Pixi
|
|
45
|
+
|
|
46
|
+
Alternatively, you can use [Pixi](https://pixi.sh/) for a streamlined workspace environment:
|
|
47
|
+
|
|
48
|
+
1. Install Pixi following the [installation instructions](https://pixi.sh/latest/#installation)
|
|
49
|
+
2. Clone the project repository:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
git clone https://github.com/pyTMD/pyTMD.git
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
3. Move into the `pyTMD` directory
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
cd pyTMD
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
4. Install dependencies and start JupyterLab:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pixi run start
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
This will automatically create the environment, install all dependencies, and launch JupyterLab in the [notebooks](./doc/source/notebooks/) directory.
|
|
68
|
+
|
|
69
|
+
## Dependencies
|
|
70
|
+
|
|
71
|
+
- [dateutil: powerful extensions to datetime](https://dateutil.readthedocs.io/en/stable/)
|
|
72
|
+
- [lxml: processing XML and HTML in Python](https://pypi.python.org/pypi/lxml)
|
|
73
|
+
- [netCDF4: Python interface to the netCDF C library](https://unidata.github.io/netcdf4-python/)
|
|
74
|
+
- [numpy: Scientific Computing Tools For Python](https://www.numpy.org)
|
|
75
|
+
- [pyproj: Python interface to PROJ library](https://pypi.org/project/pyproj/)
|
|
76
|
+
- [scipy: Scientific Tools for Python](https://www.scipy.org/)
|
|
77
|
+
- [timescale: Python tools for time and astronomical calculations](https://pypi.org/project/timescale/)
|
|
78
|
+
|
|
79
|
+
## References
|
|
80
|
+
|
|
81
|
+
> T. C. Sutterley, T. Markus, T. A. Neumann, M. R. van den Broeke, J. M. van Wessem, and S. R. M. Ligtenberg,
|
|
82
|
+
> "Antarctic ice shelf thickness change from multimission lidar mapping", *The Cryosphere*,
|
|
83
|
+
> 13, 1801-1817, (2019). [doi: 10.5194/tc-13-1801-2019](https://doi.org/10.5194/tc-13-1801-2019)
|
|
84
|
+
>
|
|
85
|
+
> L. Padman, M. R. Siegfried, H. A. Fricker,
|
|
86
|
+
> "Ocean Tide Influences on the Antarctic and Greenland Ice Sheets", *Reviews of Geophysics*,
|
|
87
|
+
> 56, 142-184, (2018). [doi: 10.1002/2016RG000546](https://doi.org/10.1002/2016RG000546)
|
|
88
|
+
|
|
89
|
+
## Download
|
|
90
|
+
|
|
91
|
+
The program homepage is:
|
|
92
|
+
<https://github.com/pyTMD/pyTMD>
|
|
93
|
+
|
|
94
|
+
A zip archive of the latest version is available directly at:
|
|
95
|
+
<https://github.com/pyTMD/pyTMD/archive/main.zip>
|
|
96
|
+
|
|
97
|
+
## Alternative Software
|
|
98
|
+
|
|
99
|
+
perth5 from NASA Goddard Space Flight Center:
|
|
100
|
+
<https://codeberg.org/rray/perth5>
|
|
101
|
+
|
|
102
|
+
Matlab Tide Model Driver from Earth & Space Research:
|
|
103
|
+
<https://github.com/EarthAndSpaceResearch/TMD_Matlab_Toolbox_v2.5>
|
|
104
|
+
|
|
105
|
+
Fortran OSU Tidal Prediction Software:
|
|
106
|
+
<https://www.tpxo.net/otps>
|
|
107
|
+
|
|
108
|
+
## Disclaimer
|
|
109
|
+
|
|
110
|
+
This package includes software developed at NASA Goddard Space Flight Center (GSFC) and the University of Washington Applied Physics Laboratory (UW-APL).
|
|
111
|
+
It is not sponsored or maintained by the Universities Space Research Association (USRA), AVISO or NASA.
|
|
112
|
+
The software is provided here for your convenience but *with no guarantees whatsoever*.
|
|
113
|
+
It should not be used for coastal navigation or any application that may risk life or property.
|
|
114
|
+
|
|
115
|
+
## Contributing
|
|
116
|
+
|
|
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 [contribution guidelines](./doc/source/getting_started/Contributing.rst), [open issues](https://github.com/pyTMD/pyTMD/issues) and [discussions board](https://github.com/pyTMD/pyTMD/discussions).
|
|
119
|
+
|
|
120
|
+
## Credits
|
|
121
|
+
|
|
122
|
+
The Tidal Model Driver ([TMD](https://github.com/EarthAndSpaceResearch/TMD_Matlab_Toolbox_v2.5)) Matlab Toolbox was developed by Laurie Padman, Lana Erofeeva and Susan Howard.
|
|
123
|
+
An updated version of the TMD Matlab Toolbox ([TMD3](https://github.com/chadagreene/Tide-Model-Driver)) was developed by Chad Greene.
|
|
124
|
+
The OSU Tidal Inversion Software (OTIS) and OSU Tidal Prediction Software ([OTPS](https://www.tpxo.net/otps)) were developed by Lana Erofeeva and Gary Egbert ([copyright OSU](https://www.tpxo.net/tpxo-products-and-registration), licensed for non-commercial use).
|
|
125
|
+
The NASA Goddard Space Flight Center (GSFC) PREdict Tidal Heights (PERTH3) software was developed by Richard Ray and Remko Scharroo.
|
|
126
|
+
An updated and more versatile version of the NASA GSFC tidal prediction software ([PERTH5](https://codeberg.org/rray/perth5)) was developed by Richard Ray.
|
|
127
|
+
|
|
128
|
+
## License
|
|
129
|
+
|
|
130
|
+
The content of this project is licensed under the [Creative Commons Attribution 4.0 Attribution license](https://creativecommons.org/licenses/by/4.0/) and the source code is licensed under the [MIT license](LICENSE).
|
|
@@ -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 (09/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,7 @@ REFERENCES:
|
|
|
39
39
|
Ocean Tides", Journal of Atmospheric and Oceanic Technology, (2002).
|
|
40
40
|
|
|
41
41
|
UPDATE HISTORY:
|
|
42
|
+
Updated 09/2025: added spherical harmonic degree to tide potential tables
|
|
42
43
|
Updated 08/2025: add Cartwright and Tayler table with radiational tides
|
|
43
44
|
make frequency function a wrapper around one that calculates using
|
|
44
45
|
Doodson coefficients (Cartwright numbers)
|
|
@@ -1773,6 +1774,8 @@ def _frequency(
|
|
|
1773
1774
|
- ``'Meeus'``
|
|
1774
1775
|
- ``'ASTRO5'``
|
|
1775
1776
|
- ``'IERS'``
|
|
1777
|
+
include_planets: bool, default False
|
|
1778
|
+
Include planetary terms in the frequency calculation
|
|
1776
1779
|
|
|
1777
1780
|
Returns
|
|
1778
1781
|
-------
|
|
@@ -1781,6 +1784,7 @@ def _frequency(
|
|
|
1781
1784
|
"""
|
|
1782
1785
|
# set default keyword arguments
|
|
1783
1786
|
kwargs.setdefault('method', 'Cartwright')
|
|
1787
|
+
kwargs.setdefault('include_planets', False)
|
|
1784
1788
|
# Modified Julian Dates at J2000
|
|
1785
1789
|
MJD = np.array([51544.5, 51544.55])
|
|
1786
1790
|
# time interval in seconds
|
|
@@ -1799,7 +1803,13 @@ def _frequency(
|
|
|
1799
1803
|
k = 90.0 + np.zeros((nt))
|
|
1800
1804
|
|
|
1801
1805
|
# determine equilibrium arguments
|
|
1802
|
-
|
|
1806
|
+
if kwargs['include_planets']:
|
|
1807
|
+
lm, lv, la, lj, ls = pyTMD.astro.planetary_longitudes(MJD)
|
|
1808
|
+
fargs = np.c_[tau, s, h, p, n, pp, k, lm, lv, la, lj, ls]
|
|
1809
|
+
else:
|
|
1810
|
+
fargs = np.c_[tau, s, h, p, n, pp, k]
|
|
1811
|
+
|
|
1812
|
+
# calculate the rates of change of the fundamental arguments
|
|
1803
1813
|
rates = (fargs[1,:] - fargs[0,:])/deltat
|
|
1804
1814
|
fd = np.dot(rates, coef)
|
|
1805
1815
|
# convert to radians per second
|
|
@@ -1986,8 +1996,8 @@ def _complex_love_numbers(
|
|
|
1986
1996
|
# frequency dependence of Love number l2
|
|
1987
1997
|
L2 = np.zeros((4), dtype=np.complex128)
|
|
1988
1998
|
L2[0] = 0.84963e-1 - 0.7395e-3j
|
|
1989
|
-
L2[1] = -0.22107e-3 - 0.
|
|
1990
|
-
L2[2] = 0.54710e-5 - 0.2990e-6j
|
|
1999
|
+
L2[1] = -0.22107e-3 - 0.9646e-5j
|
|
2000
|
+
L2[2] = -0.54710e-5 - 0.2990e-6j
|
|
1991
2001
|
L2[3] = -0.29904e-7 - 0.7717e-8j
|
|
1992
2002
|
# estimate the complex Love number fors diurnal tides
|
|
1993
2003
|
# equation 6.9 of IERS conventions 2010
|
|
@@ -2002,19 +2012,23 @@ def _complex_love_numbers(
|
|
|
2002
2012
|
# Hs1: amplitude for epoch span 1 (1900 epoch)
|
|
2003
2013
|
_d1921_table = get_data_path(['data','d1921_tab.txt'])
|
|
2004
2014
|
# Cartwright and Tayler (1971) table with 3rd-degree values
|
|
2005
|
-
# Hs1: amplitude for epoch span 1 (1861-09-21 to 1879-09-22)
|
|
2006
|
-
# Hs2: amplitude for epoch span 2 (1915-05-16 to 1933-05-22)
|
|
2007
|
-
# Hs3: amplitude for epoch span 2 (1951-05-23 to 1969-05-22)
|
|
2008
|
-
_ct1971_table_5 = get_data_path(['data','ct1971_tab5.txt'])
|
|
2009
2015
|
# Cartwright and Edden (1973) table with updated values
|
|
2010
|
-
|
|
2016
|
+
_cte1973_table = get_data_path(['data','cte1973_tab.txt'])
|
|
2011
2017
|
# Cartwright and Tayler (1971) table with radiational tides
|
|
2012
|
-
# Hs1: amplitude for epoch span 1 (1900 epoch)
|
|
2013
2018
|
_ct1971_table_6 = get_data_path(['data','ct1971_tab6.txt'])
|
|
2019
|
+
# Hartmann and Wenzel (1995) tidal potential catalog
|
|
2020
|
+
_hw1995_table = get_data_path(['data','hw1995_tab.txt'])
|
|
2021
|
+
# Tamura (1987) tidal potential catalog
|
|
2022
|
+
_t1987_table = get_data_path(['data','t1987_tab.txt'])
|
|
2023
|
+
# Woodworth (1990) tables with updated and 3rd-degree values
|
|
2024
|
+
_w1990_table = get_data_path(['data','w1990_tab.txt'])
|
|
2014
2025
|
|
|
2015
2026
|
def _parse_tide_potential_table(
|
|
2016
2027
|
table: str | pathlib.Path,
|
|
2017
|
-
|
|
2028
|
+
skiprows: int = 1,
|
|
2029
|
+
columns: int = 1,
|
|
2030
|
+
include_degree: bool = True,
|
|
2031
|
+
include_planets: bool = False
|
|
2018
2032
|
):
|
|
2019
2033
|
"""Parse tables of tide-generating potential
|
|
2020
2034
|
|
|
@@ -2022,12 +2036,18 @@ def _parse_tide_potential_table(
|
|
|
2022
2036
|
----------
|
|
2023
2037
|
table: str or pathlib.Path
|
|
2024
2038
|
table of tide-generating potentials
|
|
2025
|
-
|
|
2039
|
+
skiprows: int, default 1
|
|
2040
|
+
number of header rows to skip in the table
|
|
2041
|
+
columns: int, default 1
|
|
2026
2042
|
number of amplitude columns in the table
|
|
2043
|
+
include_degree: bool, default True
|
|
2044
|
+
table includes spherical harmonic degree
|
|
2045
|
+
include_planets: bool, default False
|
|
2046
|
+
table includes coefficients for mean longitudes of planets
|
|
2027
2047
|
|
|
2028
2048
|
Returns
|
|
2029
2049
|
-------
|
|
2030
|
-
CTE:
|
|
2050
|
+
CTE: np.ndarray
|
|
2031
2051
|
Cartwright-Tayler-Edden table values
|
|
2032
2052
|
"""
|
|
2033
2053
|
# verify table path
|
|
@@ -2035,15 +2055,32 @@ def _parse_tide_potential_table(
|
|
|
2035
2055
|
with table.open(mode='r', encoding='utf8') as f:
|
|
2036
2056
|
file_contents = f.readlines()
|
|
2037
2057
|
# number of lines in the file
|
|
2038
|
-
file_lines = len(file_contents)
|
|
2039
|
-
#
|
|
2058
|
+
file_lines = len(file_contents) - int(skiprows)
|
|
2059
|
+
# names: names of the columns in the table
|
|
2060
|
+
# formats: data types for each column in the table
|
|
2061
|
+
names = []
|
|
2062
|
+
formats = []
|
|
2063
|
+
# l: spherical harmonic degree
|
|
2064
|
+
if include_degree:
|
|
2065
|
+
names.append('l')
|
|
2066
|
+
formats.append('i')
|
|
2067
|
+
# tau: spherical harmonic dependence (order)
|
|
2040
2068
|
# s: coefficient for mean longitude of moon
|
|
2041
2069
|
# h: coefficient for mean longitude of sun
|
|
2042
2070
|
# p: coefficient for mean longitude of lunar perigee
|
|
2043
2071
|
# n: coefficient for mean longitude of ascending lunar node
|
|
2044
2072
|
# pp: coefficient for mean longitude of solar perigee
|
|
2045
|
-
names
|
|
2046
|
-
formats
|
|
2073
|
+
names.extend(['tau','s','h','p','n','pp'])
|
|
2074
|
+
formats.extend(['i','i','i','i','i','i'])
|
|
2075
|
+
# lme: coefficient for mean longitude of Mercury
|
|
2076
|
+
# lve: coefficient for mean longitude of Venus
|
|
2077
|
+
# lma: coefficient for mean longitude of Mars
|
|
2078
|
+
# lju: coefficient for mean longitude of Jupiter
|
|
2079
|
+
# lsa: coefficient for mean longitude of Saturn
|
|
2080
|
+
if include_planets:
|
|
2081
|
+
names.extend(['lme','lve','lma','lju','lsa'])
|
|
2082
|
+
formats.extend(['i','i','i','i','i'])
|
|
2083
|
+
# tide potential amplitudes (Cartwright and Tayler norm)
|
|
2047
2084
|
for c in range(columns):
|
|
2048
2085
|
# add amplitude columns to names and formats
|
|
2049
2086
|
names.append(f'Hs{c+1}')
|
|
@@ -2052,16 +2089,14 @@ def _parse_tide_potential_table(
|
|
|
2052
2089
|
names.append('DO')
|
|
2053
2090
|
formats.append('U7')
|
|
2054
2091
|
# create a structured numpy dtype for the table
|
|
2055
|
-
# names: names of the columns in the table
|
|
2056
|
-
# formats: data types for each column in the table
|
|
2057
2092
|
dtype = np.dtype({'names':names, 'formats':formats})
|
|
2058
2093
|
CTE = np.zeros((file_lines), dtype=dtype)
|
|
2059
|
-
# number of output columns
|
|
2060
|
-
|
|
2094
|
+
# total number of output columns
|
|
2095
|
+
total_columns = len(names)
|
|
2061
2096
|
# iterate over each line in the file
|
|
2062
|
-
for i,line in enumerate(file_contents):
|
|
2063
|
-
# drop last column with values from Doodson (1921)
|
|
2064
|
-
CTE[i] = np.array(tuple(line.split()[:
|
|
2097
|
+
for i,line in enumerate(file_contents[skiprows:]):
|
|
2098
|
+
# drop last column(s) with values from Doodson (1921)
|
|
2099
|
+
CTE[i] = np.array(tuple(line.split()[:total_columns]), dtype=dtype)
|
|
2065
2100
|
# return the table values
|
|
2066
2101
|
return CTE
|
|
2067
2102
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
u"""
|
|
3
3
|
astro.py
|
|
4
|
-
Written by Tyler Sutterley (
|
|
4
|
+
Written by Tyler Sutterley (09/2025)
|
|
5
5
|
Astronomical and nutation routines
|
|
6
6
|
|
|
7
7
|
PYTHON DEPENDENCIES:
|
|
@@ -18,6 +18,7 @@ REFERENCES:
|
|
|
18
18
|
Oliver Montenbruck, Practical Ephemeris Calculations, 1989.
|
|
19
19
|
|
|
20
20
|
UPDATE HISTORY:
|
|
21
|
+
Updated 09/2025: added function to compute the planetary mean longitudes
|
|
21
22
|
Updated 08/2025: convert angles with numpy radians and degrees functions
|
|
22
23
|
convert arcseconds to radians with asec2rad function in math.py
|
|
23
24
|
convert microarcseconds to radians with masec2rad function in math.py
|
|
@@ -86,6 +87,7 @@ jplephem.spk = import_dependency('jplephem.spk')
|
|
|
86
87
|
|
|
87
88
|
__all__ = [
|
|
88
89
|
"mean_longitudes",
|
|
90
|
+
"planetary_longitudes",
|
|
89
91
|
"phase_angles",
|
|
90
92
|
"doodson_arguments",
|
|
91
93
|
"delaunay_arguments",
|
|
@@ -250,6 +252,56 @@ def mean_longitudes(
|
|
|
250
252
|
# return as tuple
|
|
251
253
|
return (S, H, P, N, Ps)
|
|
252
254
|
|
|
255
|
+
# PURPOSE: compute the mean longitudes of the 5 closest planets
|
|
256
|
+
def planetary_longitudes(MJD: np.ndarray):
|
|
257
|
+
r"""
|
|
258
|
+
Computes the astronomical mean longitudes of the 5 closest planets
|
|
259
|
+
:cite:p:`Meeus:1991vh,Simon:1994vo`
|
|
260
|
+
|
|
261
|
+
Parameters
|
|
262
|
+
----------
|
|
263
|
+
MJD: np.ndarray
|
|
264
|
+
Modified Julian Day (MJD) of input date
|
|
265
|
+
|
|
266
|
+
Returns
|
|
267
|
+
-------
|
|
268
|
+
LMe: np.ndarray
|
|
269
|
+
mean longitude of Mercury (degrees)
|
|
270
|
+
LVe: np.ndarray
|
|
271
|
+
mean longitude of Venus (degrees)
|
|
272
|
+
LMa: np.ndarray
|
|
273
|
+
mean longitude of Mars (degrees)
|
|
274
|
+
LJu: np.ndarray
|
|
275
|
+
mean longitude of Jupiter (degrees)
|
|
276
|
+
LSa: np.ndarray
|
|
277
|
+
mean longitude of Saturn (degrees)
|
|
278
|
+
"""
|
|
279
|
+
# convert from MJD to centuries relative to 2000-01-01T12:00:00
|
|
280
|
+
T = (MJD - _mjd_j2000)/_century
|
|
281
|
+
# mean longitudes of Mercury
|
|
282
|
+
mercury_longitude = np.array([252.250906, 149474.0722491, 3.035e-4, 1.8e-8])
|
|
283
|
+
LMe = polynomial_sum(mercury_longitude, T)
|
|
284
|
+
# mean longitudes of Venus
|
|
285
|
+
venus_longitude = np.array([181.9798001, 58519.2130302, 3.1014e-4, 1.5e-8])
|
|
286
|
+
LVe = polynomial_sum(venus_longitude, T)
|
|
287
|
+
# mean longitudes of Mars
|
|
288
|
+
mars_longitude = np.array([355.433, 19141.6964471, 3.1052e-4, 1.e-8])
|
|
289
|
+
LMa = polynomial_sum(mars_longitude, T)
|
|
290
|
+
# mean longitudes of Jupiter
|
|
291
|
+
jupiter_longitude = np.array([34.351519, 3036.3027748, 2.233e-4, 3.7e-8])
|
|
292
|
+
LJu = polynomial_sum(jupiter_longitude, T)
|
|
293
|
+
# mean longitudes of Saturn
|
|
294
|
+
saturn_longitude = np.array([50.077444, 1223.5110686, 5.1908-4, -3.0e-8])
|
|
295
|
+
LSa = polynomial_sum(saturn_longitude, T)
|
|
296
|
+
# take the modulus of each
|
|
297
|
+
LMe = normalize_angle(LMe)
|
|
298
|
+
LVe = normalize_angle(LVe)
|
|
299
|
+
LMa = normalize_angle(LMa)
|
|
300
|
+
LJu = normalize_angle(LJu)
|
|
301
|
+
LSa = normalize_angle(LSa)
|
|
302
|
+
# return as tuple
|
|
303
|
+
return (LMe, LVe, LMa, LJu, LSa)
|
|
304
|
+
|
|
253
305
|
# PURPOSE: computes the phase angles of astronomical means
|
|
254
306
|
def phase_angles(MJD: np.ndarray):
|
|
255
307
|
# raise warning for deprecated function call
|