diff --git a/CITATION.cff b/CITATION.cff index 407e7ba..5c4e374 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -20,13 +20,13 @@ identifiers: - type: doi value: 10.5281/zenodo.5156864 description: Zenodo Archive -repository-code: 'https://github.com/tsutterley/gravity-toolkit' +repository-code: 'https://github.com/polargeodesy/gravity-toolkit' url: 'https://gravity-toolkit.readthedocs.io' repository: 'https://pypi.org/project/gravity-toolkit' repository-artifact: 'https://anaconda.org/conda-forge/gravity-toolkit' doi: "10.5281/zenodo.5156864" -version: "1.2.6" -date-released: "2026-07-21" +version: "1.2.7" +date-released: "2026-08-04" keywords: - geodesy - gravity diff --git a/README.md b/README.md index 457488f..39149a3 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Python tools for obtaining and working with Level-2 spherical harmonic coefficie - + @@ -23,8 +23,8 @@ Python tools for obtaining and working with Level-2 spherical harmonic coefficie Tests: - - + + @@ -37,7 +37,7 @@ Python tools for obtaining and working with Level-2 spherical harmonic coefficie License: - + @@ -71,7 +71,7 @@ mamba install -c conda-forge gravity-toolkit Development version from GitHub: ```bash -python3 -m pip install git+https://github.com/tsutterley/gravity-toolkit.git +python3 -m pip install git+https://github.com/polargeodesy/gravity-toolkit.git ``` ### Running with Pixi @@ -82,7 +82,7 @@ Alternatively, you can use [Pixi](https://pixi.sh/) for a streamlined workspace 2. Clone the project repository: ```bash -git clone https://github.com/tsutterley/gravity-toolkit.git +git clone https://github.com/polargeodesy/gravity-toolkit.git ``` 3. Move into the `gravity-toolkit` directory @@ -125,10 +125,10 @@ This will automatically create the environment, install all dependencies, and la ## Download The program homepage is: - + A zip archive of the latest version is available directly at: - + ## Disclaimer @@ -141,7 +141,7 @@ The software is provided here for your convenience but *with no guarantees whats ## Contributing This project contains work and contributions from the [scientific community](./CONTRIBUTORS.md). -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/tsutterley/gravity-toolkit/issues) and [discussions board](https://github.com/tsutterley/gravity-toolkit/discussions). +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/polargeodesy/gravity-toolkit/issues) and [discussions board](https://github.com/polargeodesy/gravity-toolkit/discussions). ## References diff --git a/doc/source/api_reference/SLR/C20.rst b/doc/source/api_reference/SLR/C20.rst index b510fa5..e7282ac 100644 --- a/doc/source/api_reference/SLR/C20.rst +++ b/doc/source/api_reference/SLR/C20.rst @@ -20,6 +20,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/SLR/C20.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/SLR/C20.py .. autofunction:: gravity_toolkit.SLR.C20 diff --git a/doc/source/api_reference/SLR/C30.rst b/doc/source/api_reference/SLR/C30.rst index 114a83a..7ed1d48 100644 --- a/doc/source/api_reference/SLR/C30.rst +++ b/doc/source/api_reference/SLR/C30.rst @@ -19,6 +19,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/SLR/C30.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/SLR/C30.py .. autofunction:: gravity_toolkit.SLR.C30 diff --git a/doc/source/api_reference/SLR/C40.rst b/doc/source/api_reference/SLR/C40.rst index 378c410..b91013d 100644 --- a/doc/source/api_reference/SLR/C40.rst +++ b/doc/source/api_reference/SLR/C40.rst @@ -18,6 +18,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/SLR/C40.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/SLR/C40.py .. autofunction:: gravity_toolkit.SLR.C40 diff --git a/doc/source/api_reference/SLR/C50.rst b/doc/source/api_reference/SLR/C50.rst index 6df4d3f..a9b03ec 100644 --- a/doc/source/api_reference/SLR/C50.rst +++ b/doc/source/api_reference/SLR/C50.rst @@ -18,6 +18,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/SLR/C50.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/SLR/C50.py .. autofunction:: gravity_toolkit.SLR.C50 diff --git a/doc/source/api_reference/SLR/CS2.rst b/doc/source/api_reference/SLR/CS2.rst index 6cc383c..7310fb4 100644 --- a/doc/source/api_reference/SLR/CS2.rst +++ b/doc/source/api_reference/SLR/CS2.rst @@ -19,6 +19,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/SLR/CS2.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/SLR/CS2.py .. autofunction:: gravity_toolkit.SLR.CS2 diff --git a/doc/source/api_reference/associated_legendre.rst b/doc/source/api_reference/associated_legendre.rst index a9d5f84..44200c8 100644 --- a/doc/source/api_reference/associated_legendre.rst +++ b/doc/source/api_reference/associated_legendre.rst @@ -14,7 +14,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/associated_legendre.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/associated_legendre.py .. autofunction:: gravity_toolkit.associated_legendre diff --git a/doc/source/api_reference/clenshaw_summation.rst b/doc/source/api_reference/clenshaw_summation.rst index 08283ab..5d8f110 100644 --- a/doc/source/api_reference/clenshaw_summation.rst +++ b/doc/source/api_reference/clenshaw_summation.rst @@ -15,6 +15,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/clenshaw_summation.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/clenshaw_summation.py .. autofunction:: gravity_toolkit.clenshaw_summation diff --git a/doc/source/api_reference/datasets/cnes_grace_sync.rst b/doc/source/api_reference/datasets/cnes_grace_sync.rst index b0dd482..83c2d81 100644 --- a/doc/source/api_reference/datasets/cnes_grace_sync.rst +++ b/doc/source/api_reference/datasets/cnes_grace_sync.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/cnes_grace_sync.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/cnes_grace_sync.py Calling Sequence ################ diff --git a/doc/source/api_reference/datasets/esa_costg_swarm_sync.rst b/doc/source/api_reference/datasets/esa_costg_swarm_sync.rst index 3207fde..5cb0fdb 100644 --- a/doc/source/api_reference/datasets/esa_costg_swarm_sync.rst +++ b/doc/source/api_reference/datasets/esa_costg_swarm_sync.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/esa_costg_swarm_sync.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/esa_costg_swarm_sync.py Calling Sequence ################ diff --git a/doc/source/api_reference/datasets/gfz_icgem_costg_ftp.rst b/doc/source/api_reference/datasets/gfz_icgem_costg_ftp.rst index e4b84f2..8ebd4a4 100644 --- a/doc/source/api_reference/datasets/gfz_icgem_costg_ftp.rst +++ b/doc/source/api_reference/datasets/gfz_icgem_costg_ftp.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/gfz_icgem_costg_ftp.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/gfz_icgem_costg_ftp.py Calling Sequence ################ diff --git a/doc/source/api_reference/datasets/gfz_isdc_dealiasing_sync.rst b/doc/source/api_reference/datasets/gfz_isdc_dealiasing_sync.rst index 0a7515b..acc6f0f 100644 --- a/doc/source/api_reference/datasets/gfz_isdc_dealiasing_sync.rst +++ b/doc/source/api_reference/datasets/gfz_isdc_dealiasing_sync.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/gfz_isdc_dealiasing_sync.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/gfz_isdc_dealiasing_sync.py Calling Sequence ################ diff --git a/doc/source/api_reference/datasets/gfz_isdc_grace_sync.rst b/doc/source/api_reference/datasets/gfz_isdc_grace_sync.rst index 339b179..fad8074 100644 --- a/doc/source/api_reference/datasets/gfz_isdc_grace_sync.rst +++ b/doc/source/api_reference/datasets/gfz_isdc_grace_sync.rst @@ -10,7 +10,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/gfz_isdc_grace_sync.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/gfz_isdc_grace_sync.py Calling Sequence ################ diff --git a/doc/source/api_reference/datasets/itsg_graz_grace_sync.rst b/doc/source/api_reference/datasets/itsg_graz_grace_sync.rst index 8155646..a183b2d 100644 --- a/doc/source/api_reference/datasets/itsg_graz_grace_sync.rst +++ b/doc/source/api_reference/datasets/itsg_graz_grace_sync.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/itsg_graz_grace_sync.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/itsg_graz_grace_sync.py Calling Sequence ################ diff --git a/doc/source/api_reference/datasets/podaac_cumulus.rst b/doc/source/api_reference/datasets/podaac_cumulus.rst index 92b011e..ff30146 100644 --- a/doc/source/api_reference/datasets/podaac_cumulus.rst +++ b/doc/source/api_reference/datasets/podaac_cumulus.rst @@ -8,7 +8,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/podaac_cumulus.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/podaac_cumulus.py Calling Sequence ################ diff --git a/doc/source/api_reference/degree_amplitude.rst b/doc/source/api_reference/degree_amplitude.rst index e7d7c89..70ee4d1 100644 --- a/doc/source/api_reference/degree_amplitude.rst +++ b/doc/source/api_reference/degree_amplitude.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/degree_amplitude.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/degree_amplitude.py .. autofunction:: gravity_toolkit.degree_amplitude diff --git a/doc/source/api_reference/destripe_harmonics.rst b/doc/source/api_reference/destripe_harmonics.rst index 291f4fe..d8e4e67 100644 --- a/doc/source/api_reference/destripe_harmonics.rst +++ b/doc/source/api_reference/destripe_harmonics.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/destripe_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/destripe_harmonics.py .. autofunction:: gravity_toolkit.destripe_harmonics diff --git a/doc/source/api_reference/fourier_legendre.rst b/doc/source/api_reference/fourier_legendre.rst index 92e0b2d..cb734ec 100644 --- a/doc/source/api_reference/fourier_legendre.rst +++ b/doc/source/api_reference/fourier_legendre.rst @@ -14,7 +14,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/fourier_legendre.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/fourier_legendre.py .. autofunction:: gravity_toolkit.fourier_legendre diff --git a/doc/source/api_reference/gauss_weights.rst b/doc/source/api_reference/gauss_weights.rst index dc61766..8593fce 100644 --- a/doc/source/api_reference/gauss_weights.rst +++ b/doc/source/api_reference/gauss_weights.rst @@ -3,7 +3,7 @@ ================================= - Computes the Gaussian weights as a function of degree -- A normalized version of Christopher Jekeli's Gaussian averaging function +- Normalized form of the Gaussian averaging function from :cite:t:`Jekeli:1981vj` Calling Sequence ################ @@ -15,6 +15,8 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gauss_weights.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gauss_weights.py .. autofunction:: gravity_toolkit.gauss_weights + +.. autofunction:: gravity_toolkit.gauss_kernel diff --git a/doc/source/api_reference/gen_averaging_kernel.rst b/doc/source/api_reference/gen_averaging_kernel.rst index ab33a9a..7f181c2 100644 --- a/doc/source/api_reference/gen_averaging_kernel.rst +++ b/doc/source/api_reference/gen_averaging_kernel.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gen_averaging_kernel.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gen_averaging_kernel.py .. autofunction:: gravity_toolkit.gen_averaging_kernel diff --git a/doc/source/api_reference/gen_disc_load.rst b/doc/source/api_reference/gen_disc_load.rst index 4a90ecf..cc86fbc 100644 --- a/doc/source/api_reference/gen_disc_load.rst +++ b/doc/source/api_reference/gen_disc_load.rst @@ -16,6 +16,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gen_disc_load.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gen_disc_load.py .. autofunction:: gravity_toolkit.gen_disc_load diff --git a/doc/source/api_reference/gen_harmonics.rst b/doc/source/api_reference/gen_harmonics.rst index e1d9b28..33c3fd7 100644 --- a/doc/source/api_reference/gen_harmonics.rst +++ b/doc/source/api_reference/gen_harmonics.rst @@ -17,7 +17,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gen_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gen_harmonics.py .. autofunction:: gravity_toolkit.gen_harmonics diff --git a/doc/source/api_reference/gen_point_load.rst b/doc/source/api_reference/gen_point_load.rst index f374bb1..c43ecd1 100644 --- a/doc/source/api_reference/gen_point_load.rst +++ b/doc/source/api_reference/gen_point_load.rst @@ -14,7 +14,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gen_point_load.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gen_point_load.py .. autofunction:: gravity_toolkit.gen_point_load diff --git a/doc/source/api_reference/gen_spherical_cap.rst b/doc/source/api_reference/gen_spherical_cap.rst index e955e04..3029af3 100644 --- a/doc/source/api_reference/gen_spherical_cap.rst +++ b/doc/source/api_reference/gen_spherical_cap.rst @@ -16,6 +16,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gen_spherical_cap.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gen_spherical_cap.py .. autofunction:: gravity_toolkit.gen_spherical_cap diff --git a/doc/source/api_reference/gen_stokes.rst b/doc/source/api_reference/gen_stokes.rst index 2bd1af9..d65bab6 100644 --- a/doc/source/api_reference/gen_stokes.rst +++ b/doc/source/api_reference/gen_stokes.rst @@ -16,6 +16,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/gen_stokes.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/gen_stokes.py .. autofunction:: gravity_toolkit.gen_stokes diff --git a/doc/source/api_reference/geocenter.rst b/doc/source/api_reference/geocenter.rst index 96e7782..efd8a8e 100644 --- a/doc/source/api_reference/geocenter.rst +++ b/doc/source/api_reference/geocenter.rst @@ -12,7 +12,7 @@ Data class for reading and processing geocenter data `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/geocenter.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/geocenter.py General Attributes and Methods ============================== diff --git a/doc/source/api_reference/grace_date.rst b/doc/source/api_reference/grace_date.rst index a37c49c..b065eed 100644 --- a/doc/source/api_reference/grace_date.rst +++ b/doc/source/api_reference/grace_date.rst @@ -16,7 +16,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/grace_date.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/grace_date.py .. autofunction:: gravity_toolkit.grace_date diff --git a/doc/source/api_reference/grace_find_months.rst b/doc/source/api_reference/grace_find_months.rst index b634ea4..dafa95c 100644 --- a/doc/source/api_reference/grace_find_months.rst +++ b/doc/source/api_reference/grace_find_months.rst @@ -15,6 +15,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/grace_find_months.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/grace_find_months.py .. autofunction:: gravity_toolkit.grace_find_months diff --git a/doc/source/api_reference/grace_input_months.rst b/doc/source/api_reference/grace_input_months.rst index 47da07e..5ee8a92 100644 --- a/doc/source/api_reference/grace_input_months.rst +++ b/doc/source/api_reference/grace_input_months.rst @@ -15,7 +15,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/grace_input_months.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/grace_input_months.py .. autofunction:: gravity_toolkit.grace_input_months diff --git a/doc/source/api_reference/grace_months_index.rst b/doc/source/api_reference/grace_months_index.rst index 3e2f44b..07ae27c 100644 --- a/doc/source/api_reference/grace_months_index.rst +++ b/doc/source/api_reference/grace_months_index.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/grace_months_index.py) +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/grace_months_index.py) .. autofunction:: gravity_toolkit.grace_months_index diff --git a/doc/source/api_reference/harmonic_gradients.rst b/doc/source/api_reference/harmonic_gradients.rst index db57c6f..0fe2bda 100644 --- a/doc/source/api_reference/harmonic_gradients.rst +++ b/doc/source/api_reference/harmonic_gradients.rst @@ -14,7 +14,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/harmonic_gradients.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/harmonic_gradients.py .. autofunction:: gravity_toolkit.harmonic_gradients diff --git a/doc/source/api_reference/harmonic_summation.rst b/doc/source/api_reference/harmonic_summation.rst index b0a44c6..e6abc30 100644 --- a/doc/source/api_reference/harmonic_summation.rst +++ b/doc/source/api_reference/harmonic_summation.rst @@ -14,7 +14,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/harmonic_summation.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/harmonic_summation.py .. autofunction:: gravity_toolkit.harmonic_summation diff --git a/doc/source/api_reference/harmonics.rst b/doc/source/api_reference/harmonics.rst index 87cb019..ce73a9c 100644 --- a/doc/source/api_reference/harmonics.rst +++ b/doc/source/api_reference/harmonics.rst @@ -62,7 +62,7 @@ Converting a dictionary object to a harmonics object and removing the mean field `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/harmonics.py General Attributes and Methods ============================== diff --git a/doc/source/api_reference/legendre.rst b/doc/source/api_reference/legendre.rst index 7954cd2..612db5c 100644 --- a/doc/source/api_reference/legendre.rst +++ b/doc/source/api_reference/legendre.rst @@ -16,6 +16,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/legendre.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/legendre.py .. autofunction:: gravity_toolkit.legendre diff --git a/doc/source/api_reference/legendre_polynomials.rst b/doc/source/api_reference/legendre_polynomials.rst index 2691eb0..5c113c9 100644 --- a/doc/source/api_reference/legendre_polynomials.rst +++ b/doc/source/api_reference/legendre_polynomials.rst @@ -15,6 +15,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/legendre_polynomials.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/legendre_polynomials.py .. autofunction:: gravity_toolkit.legendre_polynomials \ No newline at end of file diff --git a/doc/source/api_reference/mapping/plot_AIS_GrIS_maps.rst b/doc/source/api_reference/mapping/plot_AIS_GrIS_maps.rst index 8120a4b..6911a14 100644 --- a/doc/source/api_reference/mapping/plot_AIS_GrIS_maps.rst +++ b/doc/source/api_reference/mapping/plot_AIS_GrIS_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_GrIS_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_GrIS_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_AIS_grid_3maps.rst b/doc/source/api_reference/mapping/plot_AIS_grid_3maps.rst index 61203fb..34cc278 100644 --- a/doc/source/api_reference/mapping/plot_AIS_grid_3maps.rst +++ b/doc/source/api_reference/mapping/plot_AIS_grid_3maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_3maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_3maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_AIS_grid_4maps.rst b/doc/source/api_reference/mapping/plot_AIS_grid_4maps.rst index 257d597..fba255b 100644 --- a/doc/source/api_reference/mapping/plot_AIS_grid_4maps.rst +++ b/doc/source/api_reference/mapping/plot_AIS_grid_4maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_4maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_4maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_AIS_grid_maps.rst b/doc/source/api_reference/mapping/plot_AIS_grid_maps.rst index 0c58408..25f2ee4 100644 --- a/doc/source/api_reference/mapping/plot_AIS_grid_maps.rst +++ b/doc/source/api_reference/mapping/plot_AIS_grid_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_AIS_grid_movie.rst b/doc/source/api_reference/mapping/plot_AIS_grid_movie.rst index 4c1fbc8..c204c79 100644 --- a/doc/source/api_reference/mapping/plot_AIS_grid_movie.rst +++ b/doc/source/api_reference/mapping/plot_AIS_grid_movie.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_movie.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_grid_movie.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_AIS_regional_maps.rst b/doc/source/api_reference/mapping/plot_AIS_regional_maps.rst index b137b73..55dfe53 100644 --- a/doc/source/api_reference/mapping/plot_AIS_regional_maps.rst +++ b/doc/source/api_reference/mapping/plot_AIS_regional_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_regional_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_regional_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_AIS_regional_movie.rst b/doc/source/api_reference/mapping/plot_AIS_regional_movie.rst index a85a17a..6387738 100644 --- a/doc/source/api_reference/mapping/plot_AIS_regional_movie.rst +++ b/doc/source/api_reference/mapping/plot_AIS_regional_movie.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_regional_movie.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_AIS_regional_movie.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_GrIS_grid_3maps.rst b/doc/source/api_reference/mapping/plot_GrIS_grid_3maps.rst index 4b9962f..5fbb697 100644 --- a/doc/source/api_reference/mapping/plot_GrIS_grid_3maps.rst +++ b/doc/source/api_reference/mapping/plot_GrIS_grid_3maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_3maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_3maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_GrIS_grid_5maps.rst b/doc/source/api_reference/mapping/plot_GrIS_grid_5maps.rst index 2762bb8..761836b 100644 --- a/doc/source/api_reference/mapping/plot_GrIS_grid_5maps.rst +++ b/doc/source/api_reference/mapping/plot_GrIS_grid_5maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_5maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_5maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_GrIS_grid_maps.rst b/doc/source/api_reference/mapping/plot_GrIS_grid_maps.rst index f09c80d..b1307b8 100644 --- a/doc/source/api_reference/mapping/plot_GrIS_grid_maps.rst +++ b/doc/source/api_reference/mapping/plot_GrIS_grid_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_GrIS_grid_movie.rst b/doc/source/api_reference/mapping/plot_GrIS_grid_movie.rst index 1d2ec76..44b98b4 100644 --- a/doc/source/api_reference/mapping/plot_GrIS_grid_movie.rst +++ b/doc/source/api_reference/mapping/plot_GrIS_grid_movie.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_movie.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_GrIS_grid_movie.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_global_grid_3maps.rst b/doc/source/api_reference/mapping/plot_global_grid_3maps.rst index e24e0d3..b2ffc0a 100644 --- a/doc/source/api_reference/mapping/plot_global_grid_3maps.rst +++ b/doc/source/api_reference/mapping/plot_global_grid_3maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_3maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_3maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_global_grid_4maps.rst b/doc/source/api_reference/mapping/plot_global_grid_4maps.rst index f740ff7..e8766fe 100644 --- a/doc/source/api_reference/mapping/plot_global_grid_4maps.rst +++ b/doc/source/api_reference/mapping/plot_global_grid_4maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_4maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_4maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_global_grid_5maps.rst b/doc/source/api_reference/mapping/plot_global_grid_5maps.rst index 2aa1aa6..6383dfa 100644 --- a/doc/source/api_reference/mapping/plot_global_grid_5maps.rst +++ b/doc/source/api_reference/mapping/plot_global_grid_5maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_5maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_5maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_global_grid_9maps.rst b/doc/source/api_reference/mapping/plot_global_grid_9maps.rst index 05ad099..79cf691 100644 --- a/doc/source/api_reference/mapping/plot_global_grid_9maps.rst +++ b/doc/source/api_reference/mapping/plot_global_grid_9maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_9maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_9maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_global_grid_maps.rst b/doc/source/api_reference/mapping/plot_global_grid_maps.rst index 39ad85a..0cbb0c6 100644 --- a/doc/source/api_reference/mapping/plot_global_grid_maps.rst +++ b/doc/source/api_reference/mapping/plot_global_grid_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/mapping/plot_global_grid_movie.rst b/doc/source/api_reference/mapping/plot_global_grid_movie.rst index fec679d..6028637 100644 --- a/doc/source/api_reference/mapping/plot_global_grid_movie.rst +++ b/doc/source/api_reference/mapping/plot_global_grid_movie.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_movie.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mapping/plot_global_grid_movie.py Calling Sequence ################ diff --git a/doc/source/api_reference/mascons.rst b/doc/source/api_reference/mascons.rst index 7e04bf7..29db95c 100644 --- a/doc/source/api_reference/mascons.rst +++ b/doc/source/api_reference/mascons.rst @@ -6,7 +6,7 @@ Conversion routines for publicly available GRACE/GRACE-FO mascon solutions `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/mascons.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/mascons.py General Methods diff --git a/doc/source/api_reference/ocean_stokes.rst b/doc/source/api_reference/ocean_stokes.rst index 962e3c0..bdb614f 100644 --- a/doc/source/api_reference/ocean_stokes.rst +++ b/doc/source/api_reference/ocean_stokes.rst @@ -16,7 +16,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/ocean_stokes.py) +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/ocean_stokes.py) .. autofunction:: gravity_toolkit.ocean_stokes diff --git a/doc/source/api_reference/read_GIA_model.rst b/doc/source/api_reference/read_GIA_model.rst index 2049c36..32b6014 100755 --- a/doc/source/api_reference/read_GIA_model.rst +++ b/doc/source/api_reference/read_GIA_model.rst @@ -16,7 +16,7 @@ Calling Sequence `Source code`__ - .. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/read_GIA_model.py + .. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/read_GIA_model.py .. autofunction:: gravity_toolkit.read_GIA_model diff --git a/doc/source/api_reference/read_GRACE_harmonics.rst b/doc/source/api_reference/read_GRACE_harmonics.rst index f7b548a..48abe8b 100644 --- a/doc/source/api_reference/read_GRACE_harmonics.rst +++ b/doc/source/api_reference/read_GRACE_harmonics.rst @@ -20,7 +20,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/read_GRACE_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/read_GRACE_harmonics.py .. autofunction:: gravity_toolkit.read_GRACE_harmonics diff --git a/doc/source/api_reference/read_SLR_harmonics.rst b/doc/source/api_reference/read_SLR_harmonics.rst index 337e1fd..9e3ed57 100644 --- a/doc/source/api_reference/read_SLR_harmonics.rst +++ b/doc/source/api_reference/read_SLR_harmonics.rst @@ -18,7 +18,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/read_SLR_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/read_SLR_harmonics.py .. autofunction:: gravity_toolkit.read_SLR_harmonics diff --git a/doc/source/api_reference/read_gfc_harmonics.rst b/doc/source/api_reference/read_gfc_harmonics.rst index 7842380..ea3720d 100644 --- a/doc/source/api_reference/read_gfc_harmonics.rst +++ b/doc/source/api_reference/read_gfc_harmonics.rst @@ -15,6 +15,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/read_gfc_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/read_gfc_harmonics.py .. autofunction:: gravity_toolkit.read_gfc_harmonics diff --git a/doc/source/api_reference/read_love_numbers.rst b/doc/source/api_reference/read_love_numbers.rst index 97d2bd9..8ae915e 100644 --- a/doc/source/api_reference/read_love_numbers.rst +++ b/doc/source/api_reference/read_love_numbers.rst @@ -19,7 +19,7 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/read_love_numbers.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/read_love_numbers.py .. autofunction:: gravity_toolkit.read_love_numbers diff --git a/doc/source/api_reference/scripts/aod1b_geocenter.rst b/doc/source/api_reference/scripts/aod1b_geocenter.rst index 777c45a..50c4bdf 100644 --- a/doc/source/api_reference/scripts/aod1b_geocenter.rst +++ b/doc/source/api_reference/scripts/aod1b_geocenter.rst @@ -12,7 +12,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/aod1b_geocenter.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/aod1b_geocenter.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/aod1b_oblateness.rst b/doc/source/api_reference/scripts/aod1b_oblateness.rst index 028e5a9..b609af7 100644 --- a/doc/source/api_reference/scripts/aod1b_oblateness.rst +++ b/doc/source/api_reference/scripts/aod1b_oblateness.rst @@ -12,7 +12,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/aod1b_oblateness.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/aod1b_oblateness.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/calc_degree_one.rst b/doc/source/api_reference/scripts/calc_degree_one.rst index 23c6c8c..944f76e 100644 --- a/doc/source/api_reference/scripts/calc_degree_one.rst +++ b/doc/source/api_reference/scripts/calc_degree_one.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_degree_one.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_degree_one.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/calc_harmonic_resolution.rst b/doc/source/api_reference/scripts/calc_harmonic_resolution.rst index 3437468..d2d2a79 100644 --- a/doc/source/api_reference/scripts/calc_harmonic_resolution.rst +++ b/doc/source/api_reference/scripts/calc_harmonic_resolution.rst @@ -8,7 +8,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_harmonic_resolution.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_harmonic_resolution.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/calc_mascon.rst b/doc/source/api_reference/scripts/calc_mascon.rst index d2850c9..84c2bcb 100644 --- a/doc/source/api_reference/scripts/calc_mascon.rst +++ b/doc/source/api_reference/scripts/calc_mascon.rst @@ -10,7 +10,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_mascon.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_mascon.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/calc_sensitivity_kernel.rst b/doc/source/api_reference/scripts/calc_sensitivity_kernel.rst index 30f8ea5..d8309d3 100644 --- a/doc/source/api_reference/scripts/calc_sensitivity_kernel.rst +++ b/doc/source/api_reference/scripts/calc_sensitivity_kernel.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_sensitivity_kernel.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/calc_sensitivity_kernel.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/combine_harmonics.rst b/doc/source/api_reference/scripts/combine_harmonics.rst index 97fa933..bbefe0e 100644 --- a/doc/source/api_reference/scripts/combine_harmonics.rst +++ b/doc/source/api_reference/scripts/combine_harmonics.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/combine_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/combine_harmonics.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/convert_harmonics.rst b/doc/source/api_reference/scripts/convert_harmonics.rst index e099510..dc1273c 100644 --- a/doc/source/api_reference/scripts/convert_harmonics.rst +++ b/doc/source/api_reference/scripts/convert_harmonics.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/convert_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/convert_harmonics.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/dealiasing_global_uplift.rst b/doc/source/api_reference/scripts/dealiasing_global_uplift.rst index 23dacfe..c992d9d 100644 --- a/doc/source/api_reference/scripts/dealiasing_global_uplift.rst +++ b/doc/source/api_reference/scripts/dealiasing_global_uplift.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/dealiasing_global_uplift.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/dealiasing_global_uplift.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/dealiasing_monthly_mean.rst b/doc/source/api_reference/scripts/dealiasing_monthly_mean.rst index 2276954..85d3bcd 100644 --- a/doc/source/api_reference/scripts/dealiasing_monthly_mean.rst +++ b/doc/source/api_reference/scripts/dealiasing_monthly_mean.rst @@ -12,7 +12,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/dealiasing_monthly_mean.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/dealiasing_monthly_mean.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/grace_mean_harmonics.rst b/doc/source/api_reference/scripts/grace_mean_harmonics.rst index 099c720..c88e3e5 100644 --- a/doc/source/api_reference/scripts/grace_mean_harmonics.rst +++ b/doc/source/api_reference/scripts/grace_mean_harmonics.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_mean_harmonics.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_mean_harmonics.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/grace_raster_grids.rst b/doc/source/api_reference/scripts/grace_raster_grids.rst index a68fb81..634131e 100644 --- a/doc/source/api_reference/scripts/grace_raster_grids.rst +++ b/doc/source/api_reference/scripts/grace_raster_grids.rst @@ -9,7 +9,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_raster_grids.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_raster_grids.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/grace_spatial_error.rst b/doc/source/api_reference/scripts/grace_spatial_error.rst index 0ee733b..555027c 100644 --- a/doc/source/api_reference/scripts/grace_spatial_error.rst +++ b/doc/source/api_reference/scripts/grace_spatial_error.rst @@ -8,7 +8,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_spatial_error.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_spatial_error.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/grace_spatial_maps.rst b/doc/source/api_reference/scripts/grace_spatial_maps.rst index 88f087d..b1c5935 100644 --- a/doc/source/api_reference/scripts/grace_spatial_maps.rst +++ b/doc/source/api_reference/scripts/grace_spatial_maps.rst @@ -9,7 +9,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_spatial_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/grace_spatial_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/make_grace_index.rst b/doc/source/api_reference/scripts/make_grace_index.rst index 316f43f..35e4a11 100644 --- a/doc/source/api_reference/scripts/make_grace_index.rst +++ b/doc/source/api_reference/scripts/make_grace_index.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/make_grace_index.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/make_grace_index.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/mascon_reconstruct.rst b/doc/source/api_reference/scripts/mascon_reconstruct.rst index 0dce6eb..44b3880 100644 --- a/doc/source/api_reference/scripts/mascon_reconstruct.rst +++ b/doc/source/api_reference/scripts/mascon_reconstruct.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/mascon_reconstruct.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/mascon_reconstruct.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/monte_carlo_degree_one.rst b/doc/source/api_reference/scripts/monte_carlo_degree_one.rst index 12be6ca..2653cac 100644 --- a/doc/source/api_reference/scripts/monte_carlo_degree_one.rst +++ b/doc/source/api_reference/scripts/monte_carlo_degree_one.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/monte_carlo_degree_one.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/monte_carlo_degree_one.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/piecewise_grace_maps.rst b/doc/source/api_reference/scripts/piecewise_grace_maps.rst index 5160a6e..4e36cf4 100644 --- a/doc/source/api_reference/scripts/piecewise_grace_maps.rst +++ b/doc/source/api_reference/scripts/piecewise_grace_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/piecewise_grace_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/piecewise_grace_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/quick_mascon_plot.rst b/doc/source/api_reference/scripts/quick_mascon_plot.rst index b4702b4..8c27995 100644 --- a/doc/source/api_reference/scripts/quick_mascon_plot.rst +++ b/doc/source/api_reference/scripts/quick_mascon_plot.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/quick_mascon_plot.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/quick_mascon_plot.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/quick_mascon_regress.rst b/doc/source/api_reference/scripts/quick_mascon_regress.rst index 581badf..0c82031 100644 --- a/doc/source/api_reference/scripts/quick_mascon_regress.rst +++ b/doc/source/api_reference/scripts/quick_mascon_regress.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/quick_mascon_regress.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/quick_mascon_regress.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/regress_grace_maps.rst b/doc/source/api_reference/scripts/regress_grace_maps.rst index 4691437..19de153 100644 --- a/doc/source/api_reference/scripts/regress_grace_maps.rst +++ b/doc/source/api_reference/scripts/regress_grace_maps.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/regress_grace_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/regress_grace_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/run_grace_date.rst b/doc/source/api_reference/scripts/run_grace_date.rst index 05b9867..c44723b 100644 --- a/doc/source/api_reference/scripts/run_grace_date.rst +++ b/doc/source/api_reference/scripts/run_grace_date.rst @@ -10,7 +10,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/run_grace_date.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/run_grace_date.py Calling Sequence ################ diff --git a/doc/source/api_reference/scripts/run_sea_level_equation.rst b/doc/source/api_reference/scripts/run_sea_level_equation.rst index 76a6843..ca72e4b 100644 --- a/doc/source/api_reference/scripts/run_sea_level_equation.rst +++ b/doc/source/api_reference/scripts/run_sea_level_equation.rst @@ -7,7 +7,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/run_sea_level_equation.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/run_sea_level_equation.py Calling Sequence diff --git a/doc/source/api_reference/scripts/scale_grace_maps.rst b/doc/source/api_reference/scripts/scale_grace_maps.rst index f137d1a..3e1fae3 100644 --- a/doc/source/api_reference/scripts/scale_grace_maps.rst +++ b/doc/source/api_reference/scripts/scale_grace_maps.rst @@ -11,7 +11,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/scripts/scale_grace_maps.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/scripts/scale_grace_maps.py Calling Sequence ################ diff --git a/doc/source/api_reference/sea_level_equation.rst b/doc/source/api_reference/sea_level_equation.rst index 33c6357..5bdebea 100644 --- a/doc/source/api_reference/sea_level_equation.rst +++ b/doc/source/api_reference/sea_level_equation.rst @@ -17,6 +17,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/sea_level_equation.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/sea_level_equation.py .. autofunction:: gravity_toolkit.sea_level_equation diff --git a/doc/source/api_reference/spatial.rst b/doc/source/api_reference/spatial.rst index 44ca503..a616894 100644 --- a/doc/source/api_reference/spatial.rst +++ b/doc/source/api_reference/spatial.rst @@ -54,7 +54,7 @@ Converting a dictionary object to a spatial object and removing the mean field `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/spatial.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/spatial.py General Attributes and Methods ============================== diff --git a/doc/source/api_reference/time.rst b/doc/source/api_reference/time.rst index 6aeb741..448067e 100644 --- a/doc/source/api_reference/time.rst +++ b/doc/source/api_reference/time.rst @@ -45,7 +45,7 @@ Convert a calendar date into decimal years `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time.py General Methods diff --git a/doc/source/api_reference/time_series/amplitude.rst b/doc/source/api_reference/time_series/amplitude.rst index 3a506b8..07d6c57 100644 --- a/doc/source/api_reference/time_series/amplitude.rst +++ b/doc/source/api_reference/time_series/amplitude.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/amplitude.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/amplitude.py .. autofunction:: gravity_toolkit.time_series.amplitude diff --git a/doc/source/api_reference/time_series/fit.rst b/doc/source/api_reference/time_series/fit.rst index 103cea1..6a321bb 100644 --- a/doc/source/api_reference/time_series/fit.rst +++ b/doc/source/api_reference/time_series/fit.rst @@ -6,6 +6,6 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/fit.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/fit.py .. autofunction:: gravity_toolkit.time_series.aliasing_terms diff --git a/doc/source/api_reference/time_series/lomb_scargle.rst b/doc/source/api_reference/time_series/lomb_scargle.rst index 2e5f1ad..018af20 100644 --- a/doc/source/api_reference/time_series/lomb_scargle.rst +++ b/doc/source/api_reference/time_series/lomb_scargle.rst @@ -6,6 +6,6 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/lomb_scargle.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/lomb_scargle.py .. autofunction:: gravity_toolkit.time_series.lomb_scargle diff --git a/doc/source/api_reference/time_series/piecewise.rst b/doc/source/api_reference/time_series/piecewise.rst index 8786168..fd20469 100644 --- a/doc/source/api_reference/time_series/piecewise.rst +++ b/doc/source/api_reference/time_series/piecewise.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/piecewise.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/piecewise.py .. autofunction:: gravity_toolkit.time_series.piecewise diff --git a/doc/source/api_reference/time_series/regress.rst b/doc/source/api_reference/time_series/regress.rst index 30fefde..80ecd08 100644 --- a/doc/source/api_reference/time_series/regress.rst +++ b/doc/source/api_reference/time_series/regress.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/regress.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/regress.py .. autofunction:: gravity_toolkit.time_series.regress diff --git a/doc/source/api_reference/time_series/savitzky_golay.rst b/doc/source/api_reference/time_series/savitzky_golay.rst index 0f74106..1370012 100644 --- a/doc/source/api_reference/time_series/savitzky_golay.rst +++ b/doc/source/api_reference/time_series/savitzky_golay.rst @@ -16,6 +16,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/savitzky_golay.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/savitzky_golay.py .. autofunction:: gravity_toolkit.time_series.savitzky_golay diff --git a/doc/source/api_reference/time_series/smooth.rst b/doc/source/api_reference/time_series/smooth.rst index 773b37a..b7fc5f9 100644 --- a/doc/source/api_reference/time_series/smooth.rst +++ b/doc/source/api_reference/time_series/smooth.rst @@ -14,6 +14,6 @@ Calling Sequence `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/time_series/smooth.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/time_series/smooth.py .. autofunction:: gravity_toolkit.time_series.smooth diff --git a/doc/source/api_reference/tools.rst b/doc/source/api_reference/tools.rst index 195a6a0..898c307 100644 --- a/doc/source/api_reference/tools.rst +++ b/doc/source/api_reference/tools.rst @@ -6,7 +6,7 @@ `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/tools.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/tools.py General Attributes and Methods ============================== diff --git a/doc/source/api_reference/units.rst b/doc/source/api_reference/units.rst index 8ec3bad..831cd6d 100644 --- a/doc/source/api_reference/units.rst +++ b/doc/source/api_reference/units.rst @@ -29,7 +29,7 @@ Calculating the degree dependent factors for converting spatial units `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/units.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/units.py General Attributes and Methods ============================== diff --git a/doc/source/api_reference/utilities.rst b/doc/source/api_reference/utilities.rst index df9b4b4..4929e29 100644 --- a/doc/source/api_reference/utilities.rst +++ b/doc/source/api_reference/utilities.rst @@ -10,7 +10,7 @@ Download and management utilities for syncing time and auxiliary files `Source code`__ -.. __: https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/utilities.py +.. __: https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/utilities.py General Methods diff --git a/doc/source/background/GRACE-Data-Products.rst b/doc/source/background/GRACE-Data-Products.rst index 8c4ffed..18ec507 100644 --- a/doc/source/background/GRACE-Data-Products.rst +++ b/doc/source/background/GRACE-Data-Products.rst @@ -16,8 +16,8 @@ internationally from the `GFZ Information System and Data Center (ISDC) `_ and - :py:mod:`gfz_isdc_grace_ftp.py` for the `GFZ ISDC `_. + :py:mod:`podaac_cumulus.py` for `PO.DAAC AWS `_ and + :py:mod:`gfz_isdc_grace_ftp.py` for the `GFZ ISDC `_. Product Identifier ################## diff --git a/doc/source/getting_started/Contributing.rst b/doc/source/getting_started/Contributing.rst index 430baa0..eb821bd 100644 --- a/doc/source/getting_started/Contributing.rst +++ b/doc/source/getting_started/Contributing.rst @@ -11,27 +11,27 @@ You will be recognized for your work by being listed as one of the `project cont .. note:: If you have found a problem in ``gravity-toolkit``, or you would like to suggest an improvement or modification, - please submit a `GitHub issue `_ and we will get back to you. + please submit a `GitHub issue `_ and we will get back to you. Ways to Contribute ------------------ 1) Fixing typographical or coding errors -2) Submitting bug reports or feature requests through the use of `GitHub issues `_ +2) Submitting bug reports or feature requests through the use of `GitHub issues `_ 3) Improving documentation and testing 4) Sharing use cases and examples (such as `Jupyter Notebooks <../user_guide/Examples.html>`_) 5) Providing code for everyone to use Requesting a Feature -------------------- -Check the `project issues tab `_ to see if the feature has already been suggested. +Check the `project issues tab `_ to see if the feature has already been suggested. If not, please submit a new issue describing your requested feature or enhancement . Please give your feature request both a clear title and description. Let us know if this is something you would like to contribute to ``gravity-toolkit`` in your description as well. Reporting a Bug --------------- -Check the `project issues tab `_ to see if the problem has already been reported. +Check the `project issues tab `_ to see if the problem has already been reported. If not, *please* submit a new issue so that we are made aware of the problem. Please provide as much detail as possible when writing the description of your bug report. Providing information and examples will help us resolve issues faster. @@ -47,20 +47,20 @@ General Guidelines - Make each pull request as small and simple as possible - `Commit messages should be clear and describe the changes <./Contributing.html#semantic-commit-messages>`_ - Larger changes should be broken down into their basic components and integrated separately -- Bug fixes should be their own pull requests with an associated `GitHub issue `_ +- Bug fixes should be their own pull requests with an associated `GitHub issue `_ - Write a descriptive pull request message with a clear title - Be patient as reviews of pull requests take time Steps to Contribute ^^^^^^^^^^^^^^^^^^^ -1) Fork the repository to your personal GitHub account by clicking the "Fork" button on the project `main page `_. This creates your own server-side copy of the repository. +1) Fork the repository to your personal GitHub account by clicking the "Fork" button on the project `main page `_. This creates your own server-side copy of the repository. 2) Either by cloning to your local system or working in `GitHub Codespaces `_, create a work environment to make your changes. 3) Add your fork as the ``origin`` remote and the original project repository as the ``upstream`` remote. While this step isn't a necessary, it allows you to keep your fork up to date in the future. 4) Create a new branch to do your work. -5) Make your changes on the new branch and add yourself to the list of project `contributors `_. +5) Make your changes on the new branch and add yourself to the list of project `contributors `_. 6) Push your work to GitHub under your fork of the project. -7) Submit a `Pull Request `_ from your forked branch to the project repository. +7) Submit a `Pull Request `_ from your forked branch to the project repository. Adding Examples ^^^^^^^^^^^^^^^ diff --git a/doc/source/getting_started/Getting-Started.rst b/doc/source/getting_started/Getting-Started.rst index 4aa7541..4d9806a 100644 --- a/doc/source/getting_started/Getting-Started.rst +++ b/doc/source/getting_started/Getting-Started.rst @@ -85,13 +85,13 @@ Steps to Get Started #################### - `Register at NASA Earthdata <./NASA-Earthdata.html>`_ -- Run `podaac_cumulus.py `_ program with your NASA Earthdata credentials to acquire GRACE/GRACE-FO and auxiliary data +- Run `podaac_cumulus.py `_ program with your NASA Earthdata credentials to acquire GRACE/GRACE-FO and auxiliary data .. code-block:: bash python podaac_cumulus.py --user= --directory= --release RL06 -- Run `cnes_grace_sync.py `_ program to acquire CNES/GRGS GRACE/GRACE-FO data +- Run `cnes_grace_sync.py `_ program to acquire CNES/GRGS GRACE/GRACE-FO data .. code-block:: bash diff --git a/doc/source/getting_started/Install.ipynb b/doc/source/getting_started/Install.ipynb index e55d2bd..242e724 100644 --- a/doc/source/getting_started/Install.ipynb +++ b/doc/source/getting_started/Install.ipynb @@ -9,7 +9,7 @@ "\n", "## Installation\n", "\n", - "`gravity-toolkit` is available for download from the [GitHub repository](https://github.com/tsutterley/gravity-toolkit), the [Python Package Index (pypi)](https://pypi.org/project/gravity-toolkit/), and from [conda-forge](https://anaconda.org/conda-forge/gravity-toolkit).\n", + "`gravity-toolkit` is available for download from the [GitHub repository](https://github.com/polargeodesy/gravity-toolkit), the [Python Package Index (pypi)](https://pypi.org/project/gravity-toolkit/), and from [conda-forge](https://anaconda.org/conda-forge/gravity-toolkit).\n", "\n", "\n", "The simplest installation for most users will likely be using `conda` or `mamba`:\n", @@ -37,7 +37,7 @@ "To use the development repository, please fork `gravity-toolkit` into your own account and then clone onto your system:\n", "\n", "```bash\n", - "git clone https://github.com/tsutterley/gravity-toolkit.git\n", + "git clone https://github.com/polargeodesy/gravity-toolkit.git\n", "git lfs fetch --all\n", "```\n", "\n", @@ -56,7 +56,7 @@ "The development version of `gravity-toolkit` can also be installed directly from GitHub using `pip`:\n", "\n", "```bash\n", - "python3 -m pip install --user git+https://github.com/tsutterley/gravity-toolkit.git\n", + "python3 -m pip install --user git+https://github.com/polargeodesy/gravity-toolkit.git\n", "```" ] }, diff --git a/doc/source/getting_started/Resources.rst b/doc/source/getting_started/Resources.rst index 6d1c64d..9db3021 100644 --- a/doc/source/getting_started/Resources.rst +++ b/doc/source/getting_started/Resources.rst @@ -45,6 +45,6 @@ Software - `NASA PO.DAAC Tools and Services `_ - `GRACE_Tiles: GRACE gravity field inversion package `_ - `frommle: python/C++ software suite for geodesy and Earth Sciences `_ -- `geoid-toolkit: python utilities for calculating geoid heights from static gravity field coefficients `_ -- `model-harmonics: python tools for working with model synthetic spherical harmonic coefficients `_ +- `geoid-toolkit: python utilities for calculating geoid heights from static gravity field coefficients `_ +- `model-harmonics: python tools for working with model synthetic spherical harmonic coefficients `_ - `dynamic_mascons: 3D global variable-size mascon development `_ diff --git a/doc/source/index.rst b/doc/source/index.rst index 526b3c3..235eefb 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -76,13 +76,13 @@ Contribute .. grid-item-card:: Discussions :text-align: center - :link: https://github.com/tsutterley/gravity-toolkit/discussions + :link: https://github.com/polargeodesy/gravity-toolkit/discussions :material-outlined:`forum;5em` .. grid-item-card:: Issues :text-align: center - :link: https://github.com/tsutterley/gravity-toolkit/issues + :link: https://github.com/polargeodesy/gravity-toolkit/issues :material-outlined:`bug_report;5em` diff --git a/doc/source/project/Citations.rst b/doc/source/project/Citations.rst index 22c2197..a4ffd66 100644 --- a/doc/source/project/Citations.rst +++ b/doc/source/project/Citations.rst @@ -54,7 +54,7 @@ Optional Dependencies - `cartopy: Python package designed for geospatial data processing `_ - `dask: Parallel computing with task scheduling `_ -- `geoid-toolkit: Python utilities for calculating geoid heights from static gravity field coefficients `_ +- `geoid-toolkit: Python utilities for calculating geoid heights from static gravity field coefficients `_ - `gdal: Pythonic interface to the Geospatial Data Abstraction Library (GDAL) `_ - `h5py: Python interface for Hierarchal Data Format 5 (HDF5) `_ - `ipywidgets: interactive HTML widgets for Jupyter notebooks and IPython `_ diff --git a/doc/source/project/Testing.rst b/doc/source/project/Testing.rst index 007aa1a..446b4d2 100644 --- a/doc/source/project/Testing.rst +++ b/doc/source/project/Testing.rst @@ -55,8 +55,8 @@ To run in series and disable parallelization, set the number of processes to 0: Continuous Integration ^^^^^^^^^^^^^^^^^^^^^^ -We use `GitHub Actions `_ continuous integration (CI) services to build and test the project on Linux (``ubuntu-latest``), Mac (``macos-latest``) and Windows (``windows-latest``) Operating Systems. -The configuration files for this service are in the `GitHub workflows `_ directory. +We use `GitHub Actions `_ continuous integration (CI) services to build and test the project on Linux (``ubuntu-latest``), Mac (``macos-latest``) and Windows (``windows-latest``) Operating Systems. +The configuration files for this service are in the `GitHub workflows `_ directory. The workflows use ``pixi`` to install the required dependencies and build the custom environment. The GitHub Actions jobs include: diff --git a/doc/source/release_notes/release-v1.0.2.0.rst b/doc/source/release_notes/release-v1.0.2.0.rst index 3a53fe3..4e9e158 100644 --- a/doc/source/release_notes/release-v1.0.2.0.rst +++ b/doc/source/release_notes/release-v1.0.2.0.rst @@ -112,37 +112,37 @@ * ``feat``: ``abspath`` and ``expanduser`` in ``argparse`` paths * ``feat``: add ``spatial`` ascii header option * ``fix``: update ``spatial`` ``mean`` to catch more exceptions -* ``feat``: add more routines to ``spatial`` class `(#17) `_ -* ``refactor``: update podaac programs to simplify args `(#17) `_ -* ``feat``: add updated CNES sync program `(#18) `_ -* ``feat``: add GFZ ICGEM list for static models `(#18) `_ -* ``docs``: update documentation `(#18) `_ -* ``feat``: added more love number options and from gfc for mean files `(#19) `_ -* ``feat``: add `Sutterley and Velicogna geocenter `_ download `(#19) `_ -* ``feat``: updated SLR geocenter for new solutions from Minkang Cheng `(#19) `_ -* ``feat``: added download for satellite laser ranging (SLR) files from UTCSR `(#19) `_ -* ``feat``: add first public versions of mascon programs `(#20) `_ -* ``docs``: add documentation outlining programs `(#20) `_ -* ``docs``: add documentation outlining grace/grace-fo processing `(#20) `_ -* ``docs``: add blurbs to add Yara's comments `(#20) `_ -* ``docs``: use restructuredtext for background `(#20) `_ -* ``refactor``: generalize utilities for downloading from JPL drive (PO.DAAC/ECCO) `(#21) `_ -* ``feat``: can calculate means (``spatial`` and ``harmonic``) for a subset `(#21) `_ -* ``feat``: add pressure harmonics routines for OBP/surface pressure `(#21) `_ -* ``fix``: update requirements `(#21) `_ -* ``feat``: added ``time`` module to be able to convert delta times `(#22) `_ -* ``refactor``: merged ``convert_calendar_decimal`` and ``convert_julian`` with ``time`` module `(#22) `_ -* ``feat``: update netCDF4 and HDF5 programs for attributes and references `(#22) `_ -* ``docs``: update documentation `(#22) `_ -* ``test``: add test module for time programs `(#22) `_ -* ``feat``: update netCDF and HDF5 programs to read from memory `(#23) `_ -* ``feat``: update ``ftp_list`` and read for protected ftp `(#23) `_ -* ``test``: add ftp connection check `(#23) `_ -* ``refactor``: update ftp programs to use ``utilities`` `(#24) `_ -* ``feat``: add even rounding utility `(#24) `_ -* ``refactor``: moved pressure harmonics function to ``model_harmonics`` `(#24) `_ -* ``feat``: use ``harmonics`` class as output from SH generators `(#25) `_ -* ``feat``: add piecewise regression routine for breakpoint analysis `(#26) `_ +* ``feat``: add more routines to ``spatial`` class `(#17) `_ +* ``refactor``: update podaac programs to simplify args `(#17) `_ +* ``feat``: add updated CNES sync program `(#18) `_ +* ``feat``: add GFZ ICGEM list for static models `(#18) `_ +* ``docs``: update documentation `(#18) `_ +* ``feat``: added more love number options and from gfc for mean files `(#19) `_ +* ``feat``: add `Sutterley and Velicogna geocenter `_ download `(#19) `_ +* ``feat``: updated SLR geocenter for new solutions from Minkang Cheng `(#19) `_ +* ``feat``: added download for satellite laser ranging (SLR) files from UTCSR `(#19) `_ +* ``feat``: add first public versions of mascon programs `(#20) `_ +* ``docs``: add documentation outlining programs `(#20) `_ +* ``docs``: add documentation outlining grace/grace-fo processing `(#20) `_ +* ``docs``: add blurbs to add Yara's comments `(#20) `_ +* ``docs``: use restructuredtext for background `(#20) `_ +* ``refactor``: generalize utilities for downloading from JPL drive (PO.DAAC/ECCO) `(#21) `_ +* ``feat``: can calculate means (``spatial`` and ``harmonic``) for a subset `(#21) `_ +* ``feat``: add pressure harmonics routines for OBP/surface pressure `(#21) `_ +* ``fix``: update requirements `(#21) `_ +* ``feat``: added ``time`` module to be able to convert delta times `(#22) `_ +* ``refactor``: merged ``convert_calendar_decimal`` and ``convert_julian`` with ``time`` module `(#22) `_ +* ``feat``: update netCDF4 and HDF5 programs for attributes and references `(#22) `_ +* ``docs``: update documentation `(#22) `_ +* ``test``: add test module for time programs `(#22) `_ +* ``feat``: update netCDF and HDF5 programs to read from memory `(#23) `_ +* ``feat``: update ``ftp_list`` and read for protected ftp `(#23) `_ +* ``test``: add ftp connection check `(#23) `_ +* ``refactor``: update ftp programs to use ``utilities`` `(#24) `_ +* ``feat``: add even rounding utility `(#24) `_ +* ``refactor``: moved pressure harmonics function to ``model_harmonics`` `(#24) `_ +* ``feat``: use ``harmonics`` class as output from SH generators `(#25) `_ +* ``feat``: add piecewise regression routine for breakpoint analysis `(#26) `_ * ``docs``: add harmonic triangle plot notebook * ``docs``: add regression plots to spatial map notebook * ``docs``: use ``sphinx_rtd_theme`` for documentation @@ -157,65 +157,65 @@ * ``docs``: update references in point harmonics programs * ``feat``: added ``replace_masked`` to replace masked values in ``spatial`` data * ``fix``: in ``spatial`` broadcast mask over third dimension -* ``refactor``: changed remove index to files with specified formats `(#27) `_ -* ``feat``: added generic reader, generic writer and write to list functions `(#27) `_ -* ``feat``: added ``adjust_months`` function to fix "special" months cases `(#27) `_ -* ``feat``: include geocenter read program for coefficents from Sean `(#27) `_ -* ``fix``: replaced ``numpy`` bool to prevent deprecation warning `(#27) `_ +* ``refactor``: changed remove index to files with specified formats `(#27) `_ +* ``feat``: added generic reader, generic writer and write to list functions `(#27) `_ +* ``feat``: added ``adjust_months`` function to fix "special" months cases `(#27) `_ +* ``feat``: include geocenter read program for coefficents from Sean `(#27) `_ +* ``fix``: replaced ``numpy`` bool to prevent deprecation warning `(#27) `_ * ``refactor``: generalize kwargs to ascii, netCDF4 and HDF5 readers and writers * ``refactor``: moved model mascon programs to ``model_harmonics`` * ``refactor``: merged read ICGEM harmonics with ``geoid_toolkit`` reader -* ``docs``: add contribution guidelines `(#28) `_ -* ``docs``: more documentation standardization `(#28) `_ -* ``ci``: remove python 3.5 from tests `(#28) `_ +* ``docs``: add contribution guidelines `(#28) `_ +* ``docs``: more documentation standardization `(#28) `_ +* ``ci``: remove python 3.5 from tests `(#28) `_ * ``docs``: documentation standardization -* ``docs``: update documentation `(#29) `_ -* ``feat``: set a default netrc file and check access `(#29) `_ -* ``feat``: default credentials from environmental variables `(#29) `_ -* ``docs``: add rst format citations to documentation `(#30) `_ -* ``fix``: update CSR SLR function (thanks @hulecom for pointing out the file format change) `(#30) `_ -* ``fix``: update setup file to check if ``readthedocs`` `(#30) `_ -* ``feat``: adding more SLR low-degree replacements `(#31) `_ -* ``docs``: update documentation for SLR harmonics `(#31) `_ -* ``feat``: add parser object for removing commented or empty lines `(#32) `_ -* ``feat``: add GFZ SLR solutions for C20/C21+S21/C30 `(#33) `_ -* ``feat``: add GFZ GravIS geocenter solutions `(#33) `_ -* ``docs``: update documentation for GFZ solutions `(#33) `_ -* ``fix``: update grace input months for GFZ SLR `(#33) `_ -* ``feat``: added option for connection timeout to sync programs `(#34) `_ -* ``fix``: define int/float precision to prevent deprecation warning `(#35) `_ -* ``feat``: use try/except for retrieving netrc credentials `(#35) `_ -* ``feat``: add figshare secure FTP uploader to utilities `(#35) `_ -* ``ci``: use cartopy no-binary in build `(#35) `_ -* ``fix``: use first value in requirements in setup `(#35) `_ -* ``ci``: brew install ``pkg-config`` `(#35) `_ -* ``ci``: use older proj7 in brew install for cartopy `(#35) `_ -* ``ci``: add LD and CPP flags for proj7 `(#35) `_ -* ``ci``: add cython to installations `(#35) `_ -* ``ci``: ``ACCEPT_USE_OF_DEPRECATED_PROJ_API_H`` `(#35) `_ -* ``ci``: set pkg-config path `(#35) `_ -* ``refactor``: switch from parameter files to argparse arguments `(#36) `_ -* ``fix``: degree spacing in spatial programs `(#36) `_ -* ``fix``: cycles in regression program `(#38) `_ -* ``fix``: documentation for spatial programs `(#38) `_ -* ``refactor``: simplified file exports using wrappers in harmonics `(#39) `_ -* ``fix``: gfc format in ``from_file`` wrapper in harmonics `(#39) `_ -* ``fix``: format for mean files `(#40) `_ -* ``docs``: clenshaw summation citations `(#40) `_ -* ``feat``: Add 3-hour AOD interval for RL06 `#37 `_ `(#41) `_ -* ``feat``: release monthly dealiasing (for CSR GAA etc) `(#41) `_ -* ``fix``: inputs to AOD-corrected SLR geocenter coefficients `(#41) `_ -* ``feat``: output index file for monthly dealiasing SHM files `(#42) `_ -* ``feat``: added check if needing to interpolate love numbers `(#42) `_ -* ``feat``: added path to default land-sea mask for mass redistribution `(#42) `_ -* ``feat``: added option to output mean harmonics in gfc format `(#43) `_ -* ``refactor``: rename monthly mean dealiasing program `(#43) `_ -* ``feat``: output uncalibrated spherical harmonic errors (eclm and eslm) `(#43) `_ -* ``fix``: remove choices for argparse processing centers `(#43) `_ -* ``fix``: remove defaults in monthly dealiasing `(#43) `_ -* ``refactor``: no default processing center `(#43) `_ -* ``fix``: require processing center argument `(#43) `_ -* ``feat``: add months option to gfz dealiasing sync `(#43) `_ -* ``feat``: add harmonic resolution calculator `(#44) `_ +* ``docs``: update documentation `(#29) `_ +* ``feat``: set a default netrc file and check access `(#29) `_ +* ``feat``: default credentials from environmental variables `(#29) `_ +* ``docs``: add rst format citations to documentation `(#30) `_ +* ``fix``: update CSR SLR function (thanks @hulecom for pointing out the file format change) `(#30) `_ +* ``fix``: update setup file to check if ``readthedocs`` `(#30) `_ +* ``feat``: adding more SLR low-degree replacements `(#31) `_ +* ``docs``: update documentation for SLR harmonics `(#31) `_ +* ``feat``: add parser object for removing commented or empty lines `(#32) `_ +* ``feat``: add GFZ SLR solutions for C20/C21+S21/C30 `(#33) `_ +* ``feat``: add GFZ GravIS geocenter solutions `(#33) `_ +* ``docs``: update documentation for GFZ solutions `(#33) `_ +* ``fix``: update grace input months for GFZ SLR `(#33) `_ +* ``feat``: added option for connection timeout to sync programs `(#34) `_ +* ``fix``: define int/float precision to prevent deprecation warning `(#35) `_ +* ``feat``: use try/except for retrieving netrc credentials `(#35) `_ +* ``feat``: add figshare secure FTP uploader to utilities `(#35) `_ +* ``ci``: use cartopy no-binary in build `(#35) `_ +* ``fix``: use first value in requirements in setup `(#35) `_ +* ``ci``: brew install ``pkg-config`` `(#35) `_ +* ``ci``: use older proj7 in brew install for cartopy `(#35) `_ +* ``ci``: add LD and CPP flags for proj7 `(#35) `_ +* ``ci``: add cython to installations `(#35) `_ +* ``ci``: ``ACCEPT_USE_OF_DEPRECATED_PROJ_API_H`` `(#35) `_ +* ``ci``: set pkg-config path `(#35) `_ +* ``refactor``: switch from parameter files to argparse arguments `(#36) `_ +* ``fix``: degree spacing in spatial programs `(#36) `_ +* ``fix``: cycles in regression program `(#38) `_ +* ``fix``: documentation for spatial programs `(#38) `_ +* ``refactor``: simplified file exports using wrappers in harmonics `(#39) `_ +* ``fix``: gfc format in ``from_file`` wrapper in harmonics `(#39) `_ +* ``fix``: format for mean files `(#40) `_ +* ``docs``: clenshaw summation citations `(#40) `_ +* ``feat``: Add 3-hour AOD interval for RL06 `#37 `_ `(#41) `_ +* ``feat``: release monthly dealiasing (for CSR GAA etc) `(#41) `_ +* ``fix``: inputs to AOD-corrected SLR geocenter coefficients `(#41) `_ +* ``feat``: output index file for monthly dealiasing SHM files `(#42) `_ +* ``feat``: added check if needing to interpolate love numbers `(#42) `_ +* ``feat``: added path to default land-sea mask for mass redistribution `(#42) `_ +* ``feat``: added option to output mean harmonics in gfc format `(#43) `_ +* ``refactor``: rename monthly mean dealiasing program `(#43) `_ +* ``feat``: output uncalibrated spherical harmonic errors (eclm and eslm) `(#43) `_ +* ``fix``: remove choices for argparse processing centers `(#43) `_ +* ``fix``: remove defaults in monthly dealiasing `(#43) `_ +* ``refactor``: no default processing center `(#43) `_ +* ``fix``: require processing center argument `(#43) `_ +* ``feat``: add months option to gfz dealiasing sync `(#43) `_ +* ``feat``: add harmonic resolution calculator `(#44) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/v1.0.2.0 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/v1.0.2.0 diff --git a/doc/source/release_notes/release-v1.0.2.4.rst b/doc/source/release_notes/release-v1.0.2.4.rst index 831cd9f..25fb1ab 100644 --- a/doc/source/release_notes/release-v1.0.2.4.rst +++ b/doc/source/release_notes/release-v1.0.2.4.rst @@ -5,58 +5,58 @@ ===================== * ``fix``: uncertainties for SLR CS21 and CS22 -* ``feat``: add option for setting input format of the mascon files `(#46) `_ -* ``feat``: add averaging kernel program `(#46) `_ -* ``feat``: time-variable gravity data from COST-G, GRAZ, SWARM `#37 `_ `(#47) `_ -* ``feat``: time-variable gravity data from COST-G GRAZ, SWARM `#37 `_ `(#47) `_ -* ``feat``: need to add sync programs for all products `(#47) `_ -* ``refactor``: call read ICGEM from read gfc `(#47) `_ -* ``fix``: Swarm strings and titles `(#47) `_ -* ``docs``: update documentation to add additional information `(#47) `_ -* ``feat``: add sync programs for Swarm and GRACE COST-G `(#47) `_ -* ``feat``: add ITSG GRAZ GRACE sync `(#47) `_ -* ``fix``: accidental copy paste `(#47) `_ -* ``fix``: output index in separate loop for COST-G `(#47) `_ -* ``test``: add tests for COST-G, GRAZ and Swarm gfc files `(#47) `_ -* ``test``: use fixture to download geocenter files `(#47) `_ -* ``refactor``: merged integration and fourier harmonics programs ``fix``: use fill values for input ascii files in convert_harmonics ``fix``: update grid attributes after allocating for data in combine_harmonics ``ci``: install proj from source for cartopy dependency ``ci``: install devel cartopy from repo `(#48) `_ -* ``refactor``: adding new tools module to simplify notebooks `(#49) `_ -* ``feat``: adding new time functions for to/from grace months `(#49) `_ -* ``docs``: add documentation for tools `(#49) `_ -* ``fix``: adjust months if final in time series `(#49) `_ +* ``feat``: add option for setting input format of the mascon files `(#46) `_ +* ``feat``: add averaging kernel program `(#46) `_ +* ``feat``: time-variable gravity data from COST-G, GRAZ, SWARM `#37 `_ `(#47) `_ +* ``feat``: time-variable gravity data from COST-G GRAZ, SWARM `#37 `_ `(#47) `_ +* ``feat``: need to add sync programs for all products `(#47) `_ +* ``refactor``: call read ICGEM from read gfc `(#47) `_ +* ``fix``: Swarm strings and titles `(#47) `_ +* ``docs``: update documentation to add additional information `(#47) `_ +* ``feat``: add sync programs for Swarm and GRACE COST-G `(#47) `_ +* ``feat``: add ITSG GRAZ GRACE sync `(#47) `_ +* ``fix``: accidental copy paste `(#47) `_ +* ``fix``: output index in separate loop for COST-G `(#47) `_ +* ``test``: add tests for COST-G, GRAZ and Swarm gfc files `(#47) `_ +* ``test``: use fixture to download geocenter files `(#47) `_ +* ``refactor``: merged integration and fourier harmonics programs ``fix``: use fill values for input ascii files in convert_harmonics ``fix``: update grid attributes after allocating for data in combine_harmonics ``ci``: install proj from source for cartopy dependency ``ci``: install devel cartopy from repo `(#48) `_ +* ``refactor``: adding new tools module to simplify notebooks `(#49) `_ +* ``feat``: adding new time functions for to/from grace months `(#49) `_ +* ``docs``: add documentation for tools `(#49) `_ +* ``fix``: adjust months if final in time series `(#49) `_ * ``fix``: adjustable minimum in gaussian weights -* ``refactor``: slim requirements `(#50) `_ -* ``refactor``: using python logging for handling verbose output `(#51) `_ -* ``feat``: add version program and add package __version__ attribute `(#51) `_ -* ``feat``: add more remove file options in GRACE maps `(#52) `_ -* ``fix``: remove file choices in calc mascon `(#52) `_ +* ``refactor``: slim requirements `(#50) `_ +* ``refactor``: using python logging for handling verbose output `(#51) `_ +* ``feat``: add version program and add package __version__ attribute `(#51) `_ +* ``feat``: add more remove file options in GRACE maps `(#52) `_ +* ``fix``: remove file choices in calc mascon `(#52) `_ * ``fix``: logging ``CRITICAL`` * ``fix``: logging with filenames -* ``feat``: grid conversion routines for publicly available mascon solutions `(#53) `_ -* ``test``: attempt to download cost-g from http `(#53) `_ +* ``feat``: grid conversion routines for publicly available mascon solutions `(#53) `_ +* ``test``: attempt to download cost-g from http `(#53) `_ * ``refactor``: use logging to print multiprocessing exceptions -* ``refactor``: netCDF4 and HDF5 input programs `(#54) `_ -* ``ci``: update for geoid-toolkit dependencies `(#54) `_ -* ``docs``: pin docutils to 0.18 `(#54) `_ -* ``fix``: modify legendre normalization to prevent high degree overflows `(#55) `_ -* ``test``: add legendre test `(#55) `_ -* ``test``: add associated legendre polynomial test `(#56) `_ -* ``fix``: HDF5 and netCDF4 io for single time case `(#56) `_ -* ``fix``: format for index in notebooks `(#56) `_ -* ``feat``: use new GSFC weekly 5x5s for CS2 and C50 `(#57) `_ -* ``refactor``: create geocenter program for reading and operating `(#58) `_ -* ``test``: include new geocenter class `(#58) `_ -* ``feat``: add load love numbers for unit conversion `(#58) `_ -* ``feat``: add mean function to geocenter `(#58) `_ -* ``refactor``: rename SLF geocenter reader `(#58) `_ -* ``feat``: add more geocenter operations `(#58) `_ +* ``refactor``: netCDF4 and HDF5 input programs `(#54) `_ +* ``ci``: update for geoid-toolkit dependencies `(#54) `_ +* ``docs``: pin docutils to 0.18 `(#54) `_ +* ``fix``: modify legendre normalization to prevent high degree overflows `(#55) `_ +* ``test``: add legendre test `(#55) `_ +* ``test``: add associated legendre polynomial test `(#56) `_ +* ``fix``: HDF5 and netCDF4 io for single time case `(#56) `_ +* ``fix``: format for index in notebooks `(#56) `_ +* ``feat``: use new GSFC weekly 5x5s for CS2 and C50 `(#57) `_ +* ``refactor``: create geocenter program for reading and operating `(#58) `_ +* ``test``: include new geocenter class `(#58) `_ +* ``feat``: add load love numbers for unit conversion `(#58) `_ +* ``feat``: add mean function to geocenter `(#58) `_ +* ``refactor``: rename SLF geocenter reader `(#58) `_ +* ``feat``: add more geocenter operations `(#58) `_ * ``feat``: add geocenter figure programs from Sutterley and Velicogna (2019) -* ``feat``: update geocenter plot programs for AGU `(#60) `_ -* ``feat``: added netCDF4 reader for UCI iteration files `(#60) `_ -* ``feat``: added custom colormap function for some common scales `(#60) `_ -* ``feat``: added UNITS list option for converting from custom units `(#60) `_ -* ``feat``: option to specify a specific geocenter correction file `(#61) `_ -* ``feat``: can use variable loglevels for verbose output `(#61) `_ -* ``fix``: fix default file prefix to include center and release information `(#61) `_ +* ``feat``: update geocenter plot programs for AGU `(#60) `_ +* ``feat``: added netCDF4 reader for UCI iteration files `(#60) `_ +* ``feat``: added custom colormap function for some common scales `(#60) `_ +* ``feat``: added UNITS list option for converting from custom units `(#60) `_ +* ``feat``: option to specify a specific geocenter correction file `(#61) `_ +* ``feat``: can use variable loglevels for verbose output `(#61) `_ +* ``fix``: fix default file prefix to include center and release information `(#61) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/v1.0.2.4 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/v1.0.2.4 diff --git a/doc/source/release_notes/release-v1.0.2.5.rst b/doc/source/release_notes/release-v1.0.2.5.rst index c08a449..31bdf14 100644 --- a/doc/source/release_notes/release-v1.0.2.5.rst +++ b/doc/source/release_notes/release-v1.0.2.5.rst @@ -5,34 +5,34 @@ ===================== * ``fix``: add try/except for read_GRACE_geocenter import -* ``feat``: S3 access using PO.DAAC cumulus to address `#59 `_ `(#63) `_ +* ``feat``: S3 access using PO.DAAC cumulus to address `#59 `_ `(#63) `_ * ``fix``: update readable granule for L1A/B grav * ``fix``: for now use podaac drive provider -* ``docs``: updated docstrings to numpy documentation format `(#65) `_ -* ``docs``: use autodoc to build documentation `(#65) `_ -* ``feat``: new internal ncdf/hdf5 read/write within harmonics and spatial classes `(#65) `_ -* ``feat``: add citations and references to read_GIA_model `(#65) `_ -* ``docs``: update headers to remove deprecated ncdf/hdf5 read/write modules `(#65) `_ -* ``refactor``: moved Load love number wrapper function to within read `(#66) `_ -* ``feat``: change badge for pangeo to aws us-west-2 for podaac cloud access `(#66) `_ -* ``fix``: pin markupsafe to 2.0.1 to prevent soft_unicode error `(#66) `_ -* ``fix``: change function name back to load_love_numbers `(#67) `_ -* ``docs``: update history in headers `(#67) `_ -* ``test``: try docker build with windows to address `#64 `_ `(#68) `_ -* ``fix``: include utf-8 encoding in reads to be windows compliant `(#68) `_ +* ``docs``: updated docstrings to numpy documentation format `(#65) `_ +* ``docs``: use autodoc to build documentation `(#65) `_ +* ``feat``: new internal ncdf/hdf5 read/write within harmonics and spatial classes `(#65) `_ +* ``feat``: add citations and references to read_GIA_model `(#65) `_ +* ``docs``: update headers to remove deprecated ncdf/hdf5 read/write modules `(#65) `_ +* ``refactor``: moved Load love number wrapper function to within read `(#66) `_ +* ``feat``: change badge for pangeo to aws us-west-2 for podaac cloud access `(#66) `_ +* ``fix``: pin markupsafe to 2.0.1 to prevent soft_unicode error `(#66) `_ +* ``fix``: change function name back to load_love_numbers `(#67) `_ +* ``docs``: update history in headers `(#67) `_ +* ``test``: try docker build with windows to address `#64 `_ `(#68) `_ +* ``fix``: include utf-8 encoding in reads to be windows compliant `(#68) `_ * ``fix``: only sync newsletters for mission of interest * ``fix``: spatial field mapping for output * ``fix``: mask in sea level equation -* ``feat``: add from_GIA to harmonics class `(#69) `_ -* ``feat``: prepare CMR queries for version 1 of RL06 `(#69) `_ -* ``fix``: expansion and squeezing of mask variable if None `(#69) `_ -* ``feat``: add option for L2 version in sync programs `(#69) `_ -* ``fix``: improved passing of filename attribute in harmonic objects `(#70) `_ -* ``fix``: include filename when copying spatial objects `(#70) `_ -* ``refactor``: always try syncing from both grace and grace-fo missions `(#71) `_ -* ``feat``: added AW13 models using IJ05-R2 ice history `(#71) `_ -* ``feat``: allow input ascii harmonic files to have additional columns `(#71) `_ -* ``docs``: update environment file `(#71) `_ -* ``fix``: index using granules `(#71) `_ +* ``feat``: add from_GIA to harmonics class `(#69) `_ +* ``feat``: prepare CMR queries for version 1 of RL06 `(#69) `_ +* ``fix``: expansion and squeezing of mask variable if None `(#69) `_ +* ``feat``: add option for L2 version in sync programs `(#69) `_ +* ``fix``: improved passing of filename attribute in harmonic objects `(#70) `_ +* ``fix``: include filename when copying spatial objects `(#70) `_ +* ``refactor``: always try syncing from both grace and grace-fo missions `(#71) `_ +* ``feat``: added AW13 models using IJ05-R2 ice history `(#71) `_ +* ``feat``: allow input ascii harmonic files to have additional columns `(#71) `_ +* ``docs``: update environment file `(#71) `_ +* ``fix``: index using granules `(#71) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/v1.0.2.5 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/v1.0.2.5 diff --git a/doc/source/release_notes/release-v1.0.2.6.rst b/doc/source/release_notes/release-v1.0.2.6.rst index 3609aee..af0bc39 100644 --- a/doc/source/release_notes/release-v1.0.2.6.rst +++ b/doc/source/release_notes/release-v1.0.2.6.rst @@ -4,11 +4,11 @@ `Release v1.0.2.6`__ ==================== -* ``docs``: use argparse descriptions within sphinx documentation `(#72) `_ -* ``feat``: initial version of public geocenter programs `(#73) `_ -* ``feat``: output full citation for each GIA model group `(#73) `_ -* ``docs``: update background and add geocenter section `(#73) `_ -* ``feat``: added notebook for visualizing harmonic errors `(#74) `_ -* ``feat``: add changes for uploading to pypi `(#75) `_ +* ``docs``: use argparse descriptions within sphinx documentation `(#72) `_ +* ``feat``: initial version of public geocenter programs `(#73) `_ +* ``feat``: output full citation for each GIA model group `(#73) `_ +* ``docs``: update background and add geocenter section `(#73) `_ +* ``feat``: added notebook for visualizing harmonic errors `(#74) `_ +* ``feat``: add changes for uploading to pypi `(#75) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.0.2.6 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.0.2.6 diff --git a/doc/source/release_notes/release-v1.0.2.7.rst b/doc/source/release_notes/release-v1.0.2.7.rst index aaa4509..dfa0ee8 100644 --- a/doc/source/release_notes/release-v1.0.2.7.rst +++ b/doc/source/release_notes/release-v1.0.2.7.rst @@ -4,24 +4,24 @@ `Release v1.0.2.7`__ ==================== -* ``fix``: expand mask variable within if statement `(#76) `_ -* ``fix``: place ipython and tkinter imports within try/except `(#77) `_ -* ``fix``: remove cartopy for slimmer build `(#78) `_ -* ``fix``: create mask for output gridded variables `(#79) `_ -* ``refactor``: set plot tick formatter to not use offsets `(#79) `_ -* ``docs``: updated structure of documentation `(#80) `_ -* ``feat``: add program for overwriting the GRACE/GRACE-FO index `(#81) `_ -* ``feat``: made creating the spatial sensitivity kernel optional to improve compute time `(#81) `_ -* ``refactor``: moved regular expression function to utilities `(#81) `_ -* ``feat``: Dynamically select newest version of granules for index `(#82) `_ -* ``feat``: include geocenter land sea in data `(#83) `_ -* ``feat``: add GSFC SLR 5x5 download function `(#85) `_ -* ``feat``: add logging for debugging level verbose output `(#85) `_ -* ``fix``: place index filename within try/except statement `(#85) `_ -* ``feat``: add option to replace degree 4 zonal harmonics with SLR `(#86) `_ -* ``fix``: version check for mission in GFZ ftp sync `(#87) `_ -* ``feat``: add spatial gradient programs `(#87) `_ -* ``feat``: added more time parsing for longer periods `(#88) `_ -* ``refactor``: use UCI for geocenter solutions (SLR still valid) `(#88) `_ +* ``fix``: expand mask variable within if statement `(#76) `_ +* ``fix``: place ipython and tkinter imports within try/except `(#77) `_ +* ``fix``: remove cartopy for slimmer build `(#78) `_ +* ``fix``: create mask for output gridded variables `(#79) `_ +* ``refactor``: set plot tick formatter to not use offsets `(#79) `_ +* ``docs``: updated structure of documentation `(#80) `_ +* ``feat``: add program for overwriting the GRACE/GRACE-FO index `(#81) `_ +* ``feat``: made creating the spatial sensitivity kernel optional to improve compute time `(#81) `_ +* ``refactor``: moved regular expression function to utilities `(#81) `_ +* ``feat``: Dynamically select newest version of granules for index `(#82) `_ +* ``feat``: include geocenter land sea in data `(#83) `_ +* ``feat``: add GSFC SLR 5x5 download function `(#85) `_ +* ``feat``: add logging for debugging level verbose output `(#85) `_ +* ``fix``: place index filename within try/except statement `(#85) `_ +* ``feat``: add option to replace degree 4 zonal harmonics with SLR `(#86) `_ +* ``fix``: version check for mission in GFZ ftp sync `(#87) `_ +* ``feat``: add spatial gradient programs `(#87) `_ +* ``feat``: added more time parsing for longer periods `(#88) `_ +* ``refactor``: use UCI for geocenter solutions (SLR still valid) `(#88) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.0.2.7 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.0.2.7 diff --git a/doc/source/release_notes/release-v1.1.0.rst b/doc/source/release_notes/release-v1.1.0.rst index 4c936ef..b402adf 100644 --- a/doc/source/release_notes/release-v1.1.0.rst +++ b/doc/source/release_notes/release-v1.1.0.rst @@ -4,26 +4,26 @@ `Release v1.1.0`__ ================== -* ``feat``: adding CMR queries for TN files `(#89) `_ -* ``docs``: use sphinx-argparse v0.4.0 with exec search `(#89) `_ -* ``refactor``: use f-strings for formatting verbose or ascii output `(#89) `_ -* ``fix``: no gzip of TN files in cumulus program `(#91) `_ -* ``fix``: expose GSFC SLR 5x5 url as option `(#91) `_ -* ``refactor``: camel_case updates for `#90 `_ `(#91) `_ -* ``refactor``: comment format to try to match flake8 styling for `#90 `_ `(#92) `_ -* ``refactor``: implicit import as gravtk `(#93) `_ -* ``feat``: add git utilities for managing repositories `(#93) `_ -* ``test``: add test for comparing GIA reads `(#93) `_ -* ``refactor``: use attributes kwards for output to nc/hdf5 `(#93) `_ -* ``feat``: add netCDF4/HDF5 source attribute to harmonics and spatial classes `(#93) `_ -* ``docs``: slimmer build to prevent overutilization of resources `(#95) `_ -* ``docs``: remove .py from function titles `#96 `_ -* ``feat``: can iterate over harmonics, spatal and geocenter objects `(#97) `_ -* ``fix``: don't include ``get_git_revision_hash`` in output files `(#97) `_ -* ``fix``: set default GIA parameters, title, reference and url as None `(#97) `_ -* ``fix``: iteration over slm harmonics `(#97) `_ -* ``refactor``: SLR, plm and time series functions `(#98) `_ -* ``test``: single implicit import of gravity toolkit `(#98) `_ -* ``chore``: increase version number `(#98) `_ +* ``feat``: adding CMR queries for TN files `(#89) `_ +* ``docs``: use sphinx-argparse v0.4.0 with exec search `(#89) `_ +* ``refactor``: use f-strings for formatting verbose or ascii output `(#89) `_ +* ``fix``: no gzip of TN files in cumulus program `(#91) `_ +* ``fix``: expose GSFC SLR 5x5 url as option `(#91) `_ +* ``refactor``: camel_case updates for `#90 `_ `(#91) `_ +* ``refactor``: comment format to try to match flake8 styling for `#90 `_ `(#92) `_ +* ``refactor``: implicit import as gravtk `(#93) `_ +* ``feat``: add git utilities for managing repositories `(#93) `_ +* ``test``: add test for comparing GIA reads `(#93) `_ +* ``refactor``: use attributes kwards for output to nc/hdf5 `(#93) `_ +* ``feat``: add netCDF4/HDF5 source attribute to harmonics and spatial classes `(#93) `_ +* ``docs``: slimmer build to prevent overutilization of resources `(#95) `_ +* ``docs``: remove .py from function titles `#96 `_ +* ``feat``: can iterate over harmonics, spatal and geocenter objects `(#97) `_ +* ``fix``: don't include ``get_git_revision_hash`` in output files `(#97) `_ +* ``fix``: set default GIA parameters, title, reference and url as None `(#97) `_ +* ``fix``: iteration over slm harmonics `(#97) `_ +* ``refactor``: SLR, plm and time series functions `(#98) `_ +* ``test``: single implicit import of gravity toolkit `(#98) `_ +* ``chore``: increase version number `(#98) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.1.0 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.1.0 diff --git a/doc/source/release_notes/release-v1.2.0.rst b/doc/source/release_notes/release-v1.2.0.rst index 0f81a43..b62738c 100644 --- a/doc/source/release_notes/release-v1.2.0.rst +++ b/doc/source/release_notes/release-v1.2.0.rst @@ -4,27 +4,27 @@ `Release v1.2.0`__ ================== -* ``refactor``: new repo name following `#84 `_ `(#99) `_ -* ``docs``: update docstrings `(#100) `_ -* ``fix``: verify warnings have type and filtered after `(#101) `_ -* ``feat``: added function to retrieve named units `(#102) `_ -* ``fix``: set custom units as top option in if/else statements `(#102) `_ -* ``feat``: added wrapper function for smoothing and converting to output units `(#102) `_ -* ``test``: add test for getting units `(#102) `_ -* ``fix``: expand harmonics case where data is a single degree `(#103) `_ -* ``fix``: harmonics case where maximum spherical harmonic degree is 0 `(#103) `_ -* ``fix``: units case where maximum spherical harmonic degree is 0 `(#103) `_ -* ``fix``: load love number case with maximum spherical harmonic degree is 0 `(#103) `_ -* ``feat``: add PREM hard and soft sediment love numbers `(#104) `_ -* ``feat``: data class for load love numbers with attributes for model `(#105) `_ -* ``feat``: customizable file-level attributes to netCDF4 and HDF5 `(#106) `_ -* ``feat``: add root attributes to output netCDF4 and HDF5 files `(#107) `_ -* ``fix``: only attempt to squeeze from final dimension in harmonics objects `(#108) `_ -* ``feat``: add indexing of filenames to object iterators `(#109) `_ -* ``feat``: new ``scaling_factors`` inheritance of ``spatial`` class `(#110) `_ -* ``refactor``: simplified unit factors in spherical caps and disc loads `(#111) `_ -* ``fix``: case insensitive searching for HDF5 and netCDF4 GIA attributes `(#111) `_ -* ``docs``: slimmer builds by placing imports within try/except `(#111) `_ -* ``refactor``: remove deprecated functions `(#112) `_ +* ``refactor``: new repo name following `#84 `_ `(#99) `_ +* ``docs``: update docstrings `(#100) `_ +* ``fix``: verify warnings have type and filtered after `(#101) `_ +* ``feat``: added function to retrieve named units `(#102) `_ +* ``fix``: set custom units as top option in if/else statements `(#102) `_ +* ``feat``: added wrapper function for smoothing and converting to output units `(#102) `_ +* ``test``: add test for getting units `(#102) `_ +* ``fix``: expand harmonics case where data is a single degree `(#103) `_ +* ``fix``: harmonics case where maximum spherical harmonic degree is 0 `(#103) `_ +* ``fix``: units case where maximum spherical harmonic degree is 0 `(#103) `_ +* ``fix``: load love number case with maximum spherical harmonic degree is 0 `(#103) `_ +* ``feat``: add PREM hard and soft sediment love numbers `(#104) `_ +* ``feat``: data class for load love numbers with attributes for model `(#105) `_ +* ``feat``: customizable file-level attributes to netCDF4 and HDF5 `(#106) `_ +* ``feat``: add root attributes to output netCDF4 and HDF5 files `(#107) `_ +* ``fix``: only attempt to squeeze from final dimension in harmonics objects `(#108) `_ +* ``feat``: add indexing of filenames to object iterators `(#109) `_ +* ``feat``: new ``scaling_factors`` inheritance of ``spatial`` class `(#110) `_ +* ``refactor``: simplified unit factors in spherical caps and disc loads `(#111) `_ +* ``fix``: case insensitive searching for HDF5 and netCDF4 GIA attributes `(#111) `_ +* ``docs``: slimmer builds by placing imports within try/except `(#111) `_ +* ``refactor``: remove deprecated functions `(#112) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.0 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.0 diff --git a/doc/source/release_notes/release-v1.2.1.rst b/doc/source/release_notes/release-v1.2.1.rst index fb21535..ebc6f21 100644 --- a/doc/source/release_notes/release-v1.2.1.rst +++ b/doc/source/release_notes/release-v1.2.1.rst @@ -4,57 +4,57 @@ `Release v1.2.1`__ ================== -* ``feat``: add global dealiasing uplift program `(#113) `_ -* ``refactor``: in monthly dealiasing, read data into flattened ``harmonics`` objects `(#113) `_ -* ``feat``: debug-level logging of member names and header lines `(#113) `_ -* ``feat``: add ``extend_matrix`` function `(#113) `_ -* ``feat``: add ``wrap_longitudes`` to ``tools`` `(#113) `_ -* ``refactor``: convert ``shape`` and ``ndim`` to ``harmonics`` and ``spatial`` class properties `(#113) `_ -* ``refactor``: updated inputs to ``spatial`` ``from_ascii`` function `(#113) `_ -* ``fix``: scale and dimensions `(#113) `_ -* ``fix``: ``spatial`` ``extend_matrix`` `(#113) `_ -* ``feat``: add mapping programs from Sutterley et al. 2019 and 2020 `(#114) `_ -* ``fix``: output file append in regress_grace_maps.py `(#114) `_ -* ``refactor``: merge regional plot programs into single program `(#114) `_ -* ``docs``: add documentation for graphing programs `(#114) `_ -* ``fix``: place cmap set in try/except `(#114) `_ -* ``refactor``: add descriptive file-level attributes to output netCDF4/HDF5 files `(#115) `_ -* ``feat``: include option to not compensate for elastic deformation for `#37 `_ `(#115) `_ -* ``feat``: added regex formatting for CNES GRGS harmonics `(#115) `_ -* ``feat``: added functions for getting unit attributes for known types `(#116) `_ -* ``docs``: improve typing for variables in docstrings `(#116) `_ -* ``feat``: add initial geostrophic current program `(#117) `_ -* ``feat``: add angular velocity of the Earth to ``units`` `(#117) `_ -* ``fix``: set ``case_insensitive_filename`` to ``None`` if filename is empty `(#117) `_ -* ``feat``: add solver option to geocenter and mascons `(#118) `_ -* ``feat``: allow option ``0`` in ``combine_harmonics.py`` for no unit conversion `(#118) `_ -* ``fix``: ``remove_label`` in ``tools.py`` `(#118) `_ -* ``fix``: frame in geostrophic currents notebook `(#118) `_ -* ``fix``: allow love numbers to be None for custom units case `(#119) `_ -* ``fix``: headers in plot script documentation `(#119) `_ -* ``feat``: add notes about shida numbers `(#119) `_ -* ``fix``: podaac now has different openers for s3 and data endpoints `(#120) `_ -* ``feat``: add piecewise program `(#120) `_ -* ``feat``: add additional fit term options to regression programs `(#120) `_ -* ``docs``: remove binder links :( `(#120) `_ -* ``fix``: add podaac cumulus test and skip drive `(#120) `_ -* ``fix``: bump GFZ GravIS files to Release-03 `(#120) `_ -* ``feat``: split S2 tidal aliasing terms into GRACE and GRACE-FO eras `(#121) `_ -* ``feat``: add reify decorator for evaluation of properties `(#121) `_ -* ``refactor``: use formatting for reading from date file `(#121) `_ -* ``refactor``: use ``pathlib`` to define and operate on paths `(#123) `_ -* ``feat``: split S2 tidal aliasing terms into GRACE and GRACE-FO eras `(#123) `_ -* ``fix``: remove deprecated podaac drive sync programs `(#123) `_ -* ``docs``: remove references to deprecated sync programs `(#123) `_ -* ``refactor``: use fit module for getting tidal aliasing terms `(#125) `_ -* ``feat``: add functions to retrieve and revoke Earthdata tokens `(#125) `_ -* ``feat``: more operatations on spatial error if in possible data keys `(#125) `_ -* ``docs``: scrub PO.DAAC Drive and WebDAV `(#126) `_ -* ``fix``: append amplitude and phase titles when creating flags `(#127) `_ -* ``refactor``: modified custom units in spherical caps and disc loads `(#129) `_ -* ``fix``: GRACE/GRACE-FO months in drift function for `#131 `_ `(#132) `_ -* ``feat``: can choose different tidal aliasing periods `(#132) `_ -* ``feat``: add timescale class for converting between time scales `(#133) `_ -* ``feat``: add functions for retrieving leap seconds from NIST or IERF servers `(#133) `_ +* ``feat``: add global dealiasing uplift program `(#113) `_ +* ``refactor``: in monthly dealiasing, read data into flattened ``harmonics`` objects `(#113) `_ +* ``feat``: debug-level logging of member names and header lines `(#113) `_ +* ``feat``: add ``extend_matrix`` function `(#113) `_ +* ``feat``: add ``wrap_longitudes`` to ``tools`` `(#113) `_ +* ``refactor``: convert ``shape`` and ``ndim`` to ``harmonics`` and ``spatial`` class properties `(#113) `_ +* ``refactor``: updated inputs to ``spatial`` ``from_ascii`` function `(#113) `_ +* ``fix``: scale and dimensions `(#113) `_ +* ``fix``: ``spatial`` ``extend_matrix`` `(#113) `_ +* ``feat``: add mapping programs from Sutterley et al. 2019 and 2020 `(#114) `_ +* ``fix``: output file append in regress_grace_maps.py `(#114) `_ +* ``refactor``: merge regional plot programs into single program `(#114) `_ +* ``docs``: add documentation for graphing programs `(#114) `_ +* ``fix``: place cmap set in try/except `(#114) `_ +* ``refactor``: add descriptive file-level attributes to output netCDF4/HDF5 files `(#115) `_ +* ``feat``: include option to not compensate for elastic deformation for `#37 `_ `(#115) `_ +* ``feat``: added regex formatting for CNES GRGS harmonics `(#115) `_ +* ``feat``: added functions for getting unit attributes for known types `(#116) `_ +* ``docs``: improve typing for variables in docstrings `(#116) `_ +* ``feat``: add initial geostrophic current program `(#117) `_ +* ``feat``: add angular velocity of the Earth to ``units`` `(#117) `_ +* ``fix``: set ``case_insensitive_filename`` to ``None`` if filename is empty `(#117) `_ +* ``feat``: add solver option to geocenter and mascons `(#118) `_ +* ``feat``: allow option ``0`` in ``combine_harmonics.py`` for no unit conversion `(#118) `_ +* ``fix``: ``remove_label`` in ``tools.py`` `(#118) `_ +* ``fix``: frame in geostrophic currents notebook `(#118) `_ +* ``fix``: allow love numbers to be None for custom units case `(#119) `_ +* ``fix``: headers in plot script documentation `(#119) `_ +* ``feat``: add notes about shida numbers `(#119) `_ +* ``fix``: podaac now has different openers for s3 and data endpoints `(#120) `_ +* ``feat``: add piecewise program `(#120) `_ +* ``feat``: add additional fit term options to regression programs `(#120) `_ +* ``docs``: remove binder links :( `(#120) `_ +* ``fix``: add podaac cumulus test and skip drive `(#120) `_ +* ``fix``: bump GFZ GravIS files to Release-03 `(#120) `_ +* ``feat``: split S2 tidal aliasing terms into GRACE and GRACE-FO eras `(#121) `_ +* ``feat``: add reify decorator for evaluation of properties `(#121) `_ +* ``refactor``: use formatting for reading from date file `(#121) `_ +* ``refactor``: use ``pathlib`` to define and operate on paths `(#123) `_ +* ``feat``: split S2 tidal aliasing terms into GRACE and GRACE-FO eras `(#123) `_ +* ``fix``: remove deprecated podaac drive sync programs `(#123) `_ +* ``docs``: remove references to deprecated sync programs `(#123) `_ +* ``refactor``: use fit module for getting tidal aliasing terms `(#125) `_ +* ``feat``: add functions to retrieve and revoke Earthdata tokens `(#125) `_ +* ``feat``: more operatations on spatial error if in possible data keys `(#125) `_ +* ``docs``: scrub PO.DAAC Drive and WebDAV `(#126) `_ +* ``fix``: append amplitude and phase titles when creating flags `(#127) `_ +* ``refactor``: modified custom units in spherical caps and disc loads `(#129) `_ +* ``fix``: GRACE/GRACE-FO months in drift function for `#131 `_ `(#132) `_ +* ``feat``: can choose different tidal aliasing periods `(#132) `_ +* ``feat``: add timescale class for converting between time scales `(#133) `_ +* ``feat``: add functions for retrieving leap seconds from NIST or IERF servers `(#133) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.1 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.1 diff --git a/doc/source/release_notes/release-v1.2.2.rst b/doc/source/release_notes/release-v1.2.2.rst index 4df8255..abb329e 100644 --- a/doc/source/release_notes/release-v1.2.2.rst +++ b/doc/source/release_notes/release-v1.2.2.rst @@ -4,44 +4,44 @@ `Release v1.2.2`__ ================== -* ``feat``: add land_stokes function to parallel ocean_stokes `(#138) `_ -* ``docs``: update font and style of flowchart `(#138) `_ -* ``feat``: add zorder to quick mascon plot `(#138) `_ -* ``fix``: environment for auto update `(#138) `_ -* ``feat``: add string representation of major classes `(#139) `_ -* ``feat``: add raster program for GRACE projected fields `(#139) `_ -* ``ci``: bump versions of imported actions `(#139) `_ -* ``ci``: use mamba for builds `(#140) `_ -* ``docs``: use micromamba for RTD builds `(#140) `_ -* ``fix``: check that collection metadata urls exist `(#141) `_ -* ``fix``: don't restrict version number to a set list of presently available `(#141) `_ -* ``feat``: output netCDF4 files for all geocenter runs `(#142) `_ -* ``fix``: plot S11 `(#142) `_ -* ``fix``: prevent double printing of filenames when using debug `(#143) `_ -* ``refactor``: simplify I-matrix and G-matrix calculations `(#143) `_ -* ``feat``: add widget for setting endpoint for accessing PODAAC data `(#145) `_ -* ``fix``: added check to verify access to s3 buckets `(#145) `_ -* ``feat``: add Greenland 5 map code `(#145) `_ -* ``fix``: autoupdate files `(#145) `_ -* ``fix``: add ssl context update for deprecation `(#145) `_ -* ``fix``: spelling mistakes `(#145) `_ -* ``fix``: place time and month variables in try/except block `(#145) `_ -* ``feat``: added argument for products in CMR shortname query `(#145) `_ -* ``fix``: increase mask buffer to twice the smoothing radius in raster `(#145) `_ -* ``refactor``: use wrapper to importlib for optional dependencies `(#146) `_ -* ``feat``: make classes subscriptable and allow item assignment `(#146) `_ -* ``feat``: add lomb scargle wrapper program `(#146) `_ -* ``refactor``: remove timescale class and leap second calculations `(#146) `_ -* ``fix``: update CMR search utility to replace deprecated scrolling `(#147) `_ -* ``fix``: endpoint for TN-13 and TN-14 is now documentation `(#148) `_ -* ``feat``: add function to scrape GSFC website for GRACE mascons `(#149) `_ -* ``fix``: deprecated widget object copies for `#150 `_ `(#151) `_ -* ``fix``: add polar argument for x == +/-1 to prevent drift `(#151) `_ -* ``feat``: allow reading love numbers where degree is infinite `(#151) `_ -* ``fix``: check if the GRACE/GRACE-FO files are gfc format for `#152 `_ `(#153) `_ -* ``docs``: use ``sphinxcontrib-bibtex`` for citations `(#154) `_ -* ``fix``: deprecated tick label resizing `(#155) `_ -* ``docs``: merge multiple bibtex citations together `(#156) `_ -* ``fix``: deprecated tick label resizing `(#156) `_ +* ``feat``: add land_stokes function to parallel ocean_stokes `(#138) `_ +* ``docs``: update font and style of flowchart `(#138) `_ +* ``feat``: add zorder to quick mascon plot `(#138) `_ +* ``fix``: environment for auto update `(#138) `_ +* ``feat``: add string representation of major classes `(#139) `_ +* ``feat``: add raster program for GRACE projected fields `(#139) `_ +* ``ci``: bump versions of imported actions `(#139) `_ +* ``ci``: use mamba for builds `(#140) `_ +* ``docs``: use micromamba for RTD builds `(#140) `_ +* ``fix``: check that collection metadata urls exist `(#141) `_ +* ``fix``: don't restrict version number to a set list of presently available `(#141) `_ +* ``feat``: output netCDF4 files for all geocenter runs `(#142) `_ +* ``fix``: plot S11 `(#142) `_ +* ``fix``: prevent double printing of filenames when using debug `(#143) `_ +* ``refactor``: simplify I-matrix and G-matrix calculations `(#143) `_ +* ``feat``: add widget for setting endpoint for accessing PODAAC data `(#145) `_ +* ``fix``: added check to verify access to s3 buckets `(#145) `_ +* ``feat``: add Greenland 5 map code `(#145) `_ +* ``fix``: autoupdate files `(#145) `_ +* ``fix``: add ssl context update for deprecation `(#145) `_ +* ``fix``: spelling mistakes `(#145) `_ +* ``fix``: place time and month variables in try/except block `(#145) `_ +* ``feat``: added argument for products in CMR shortname query `(#145) `_ +* ``fix``: increase mask buffer to twice the smoothing radius in raster `(#145) `_ +* ``refactor``: use wrapper to importlib for optional dependencies `(#146) `_ +* ``feat``: make classes subscriptable and allow item assignment `(#146) `_ +* ``feat``: add lomb scargle wrapper program `(#146) `_ +* ``refactor``: remove timescale class and leap second calculations `(#146) `_ +* ``fix``: update CMR search utility to replace deprecated scrolling `(#147) `_ +* ``fix``: endpoint for TN-13 and TN-14 is now documentation `(#148) `_ +* ``feat``: add function to scrape GSFC website for GRACE mascons `(#149) `_ +* ``fix``: deprecated widget object copies for `#150 `_ `(#151) `_ +* ``fix``: add polar argument for x == +/-1 to prevent drift `(#151) `_ +* ``feat``: allow reading love numbers where degree is infinite `(#151) `_ +* ``fix``: check if the GRACE/GRACE-FO files are gfc format for `#152 `_ `(#153) `_ +* ``docs``: use ``sphinxcontrib-bibtex`` for citations `(#154) `_ +* ``fix``: deprecated tick label resizing `(#155) `_ +* ``docs``: merge multiple bibtex citations together `(#156) `_ +* ``fix``: deprecated tick label resizing `(#156) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.2 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.2 diff --git a/doc/source/release_notes/release-v1.2.3.rst b/doc/source/release_notes/release-v1.2.3.rst index 152fb85..f367657 100644 --- a/doc/source/release_notes/release-v1.2.3.rst +++ b/doc/source/release_notes/release-v1.2.3.rst @@ -7,4 +7,4 @@ * ``chore``: bump version to ``1.2.3`` * ``fix``: update ``MANIFEST.in`` to include version and requirements -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.3 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.3 diff --git a/doc/source/release_notes/release-v1.2.4.rst b/doc/source/release_notes/release-v1.2.4.rst index e2bcc93..f3a1dc9 100644 --- a/doc/source/release_notes/release-v1.2.4.rst +++ b/doc/source/release_notes/release-v1.2.4.rst @@ -4,10 +4,10 @@ `Release v1.2.4`__ ================== -* ``test``: add check for reading lsmasks `(#157) `_ -* ``ci``: verify that ``git-lfs`` is used `(#157) `_ -* ``docs``: add badge for conda-forge `(#157) `_ +* ``test``: add check for reading lsmasks `(#157) `_ +* ``ci``: verify that ``git-lfs`` is used `(#157) `_ +* ``docs``: add badge for conda-forge `(#157) `_ * ``chore``: bump version to ``1.2.4`` * ``docs``: add ``repository-artifact`` to ``CITATION.cff`` -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.4 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.4 diff --git a/doc/source/release_notes/release-v1.2.5.rst b/doc/source/release_notes/release-v1.2.5.rst index 41d83d9..b95df87 100644 --- a/doc/source/release_notes/release-v1.2.5.rst +++ b/doc/source/release_notes/release-v1.2.5.rst @@ -4,31 +4,31 @@ `Release v1.2.5`__ ================== -* ``feat``: added options to run SLF from input spatial fields `(#158) `_ -* ``fix``: add netCDF4 to default requirements `(#158) `_ -* ``fix``: copy latitude and longitude as float64 for numpy 2.0 stability `(#158) `_ -* ``feat``: added option to set the density of water in g/cm^3 `(#158) `_ -* ``fix``: earthdata link for `#160 `_ `(#162) `_ -* ``fix``: change default endpoint in cumulus to ``data`` for `#161 `_ `(#162) `_ -* ``ci``: add paths to check if needing to run tests `(#162) `_ -* ``docs``: notebooks in documentation `(#163) `_ +* ``feat``: added options to run SLF from input spatial fields `(#158) `_ +* ``fix``: add netCDF4 to default requirements `(#158) `_ +* ``fix``: copy latitude and longitude as float64 for numpy 2.0 stability `(#158) `_ +* ``feat``: added option to set the density of water in g/cm^3 `(#158) `_ +* ``fix``: earthdata link for `#160 `_ `(#162) `_ +* ``fix``: change default endpoint in cumulus to ``data`` for `#161 `_ `(#162) `_ +* ``ci``: add paths to check if needing to run tests `(#162) `_ +* ``docs``: notebooks in documentation `(#163) `_ * ``fix``: docstring for UCI geocenter files -* ``refactor``: organize scripts into subdirectories `(#165) `_ -* ``docs``: add logo and color scheme `(#165) `_ -* ``docs``: add annotations `(#165) `_ -* ``docs``: add code of conduct `(#165) `_ -* ``docs``: add project pages `(#165) `_ -* ``refactor``: use ``pyproject.toml`` for builds `(#165) `_ +* ``refactor``: organize scripts into subdirectories `(#165) `_ +* ``docs``: add logo and color scheme `(#165) `_ +* ``docs``: add annotations `(#165) `_ +* ``docs``: add code of conduct `(#165) `_ +* ``docs``: add project pages `(#165) `_ +* ``refactor``: use ``pyproject.toml`` for builds `(#165) `_ * ``docs``: adjust ``style.css`` -* ``docs``: add spherical harmonic plots `(#166) `_ -* ``docs``: add ``cartopy`` to ``environment.yml`` `(#166) `_ -* ``ci``: use pixi for builds `(#167) `_ -* ``docs``: use pixi for builds `(#167) `_ -* ``refactor``: GFZ ISDC ftp server is being retired `(#168) `_ -* ``fix``: Update pixi.lock `(#168) `_ +* ``docs``: add spherical harmonic plots `(#166) `_ +* ``docs``: add ``cartopy`` to ``environment.yml`` `(#166) `_ +* ``ci``: use pixi for builds `(#167) `_ +* ``docs``: use pixi for builds `(#167) `_ +* ``refactor``: GFZ ISDC ftp server is being retired `(#168) `_ +* ``fix``: Update pixi.lock `(#168) `_ * ``docs``: fix testing description * ``docs``: fix contributors (now markdown) -* ``fix``: switch ``from_gfz`` to https as ftp server is retired `(#169) `_ +* ``fix``: switch ``from_gfz`` to https as ftp server is retired `(#169) `_ * ``chore``: bump version to ``1.2.5`` -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.5 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.5 diff --git a/doc/source/release_notes/release-v1.2.6.rst b/doc/source/release_notes/release-v1.2.6.rst index 8343cac..892e84d 100644 --- a/doc/source/release_notes/release-v1.2.6.rst +++ b/doc/source/release_notes/release-v1.2.6.rst @@ -4,28 +4,28 @@ `Release v1.2.6`__ ================== -* ``ci``: use new ``pixi`` coverage task `(#171) `_ -* ``chore``: simplify build to use ``matplotlib-base`` `(#171) `_ -* ``chore``: bump versions of ``setuptools`` and ``pixi`` `(#172) `_ -* ``refactor``: use ``np.einsum`` for spherical harmonic summations `(#174) `_ -* ``refactor``: use ``np.radians`` to convert from degrees to radians `(#174) `_ -* ``refactor``: use ``np.hypot`` to calculate the sum of two squares `(#174) `_ -* ``feat``: add dunder (magic) methods for mathematical operations `(#174) `_ -* ``test``: add fourier vs integration test `(#174) `_ -* ``docs``: update documentation to add more sections `(#174) `_ -* ``docs``: convert README to markdown `(#174) `_ -* ``feat``: add ability to change cache dir `(#174) `_ -* ``docs``: make NASA Earthdata an executed notebook `(#174) `_ -* ``refactor``: make new map ``pixi`` environment `(#174) `_ -* ``test``: add failsafe for downloading GRACE files `(#174) `_ -* ``docs``: add release notes (including prior) `(#174) `_ +* ``ci``: use new ``pixi`` coverage task `(#171) `_ +* ``chore``: simplify build to use ``matplotlib-base`` `(#171) `_ +* ``chore``: bump versions of ``setuptools`` and ``pixi`` `(#172) `_ +* ``refactor``: use ``np.einsum`` for spherical harmonic summations `(#174) `_ +* ``refactor``: use ``np.radians`` to convert from degrees to radians `(#174) `_ +* ``refactor``: use ``np.hypot`` to calculate the sum of two squares `(#174) `_ +* ``feat``: add dunder (magic) methods for mathematical operations `(#174) `_ +* ``test``: add fourier vs integration test `(#174) `_ +* ``docs``: update documentation to add more sections `(#174) `_ +* ``docs``: convert README to markdown `(#174) `_ +* ``feat``: add ability to change cache dir `(#174) `_ +* ``docs``: make NASA Earthdata an executed notebook `(#174) `_ +* ``refactor``: make new map ``pixi`` environment `(#174) `_ +* ``test``: add failsafe for downloading GRACE files `(#174) `_ +* ``docs``: add release notes (including prior) `(#174) `_ * ``docs``: clean up NASA Earthdata notebook -* ``refactor``: simplify clenshaw summations `(#175) `_ -* ``refactor``: ``ruff`` format `(#175) `_ -* ``ci``: add ``ruff`` format checker `(#175) `_ -* ``feat``: add function to create HTML representations of custom classes `(#178) `_ -* ``fix``: case where there are months but it is an integer `(#178) `_ -* ``feat``: add ability to use a custom weighting function `(#180) `_ -* ``feat``: add functions to convert times to ``numpy.datetime64`` `(#183) `_ +* ``refactor``: simplify clenshaw summations `(#175) `_ +* ``refactor``: ``ruff`` format `(#175) `_ +* ``ci``: add ``ruff`` format checker `(#175) `_ +* ``feat``: add function to create HTML representations of custom classes `(#178) `_ +* ``fix``: case where there are months but it is an integer `(#178) `_ +* ``feat``: add ability to use a custom weighting function `(#180) `_ +* ``feat``: add functions to convert times to ``numpy.datetime64`` `(#183) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.6 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.6 diff --git a/doc/source/release_notes/release-v1.2.7.rst b/doc/source/release_notes/release-v1.2.7.rst index c76024a..eb61dc3 100644 --- a/doc/source/release_notes/release-v1.2.7.rst +++ b/doc/source/release_notes/release-v1.2.7.rst @@ -4,9 +4,9 @@ `Release v1.2.7`__ ================== -* ``refactor``: use a custom logger for progress tracking `(#185) `_ -* ``refactor``: change formatting of sync program logs `(#185) `_ -* ``feat``: add logger to ``geocenter``, ``harmonics`` and ``spatial`` classes `(#185) `_ -* ``fix``: updates for typing error with numpy deprecations `(#185) `_ +* ``refactor``: use a custom logger for progress tracking `(#185) `_ +* ``refactor``: change formatting of sync program logs `(#185) `_ +* ``feat``: add logger to ``geocenter``, ``harmonics`` and ``spatial`` classes `(#185) `_ +* ``fix``: updates for typing error with numpy deprecations `(#185) `_ -.. __: https://github.com/tsutterley/gravity-toolkit/releases/tag/1.2.7 +.. __: https://github.com/polargeodesy/gravity-toolkit/releases/tag/1.2.7 diff --git a/doc/source/user_guide/NASA-Earthdata.ipynb b/doc/source/user_guide/NASA-Earthdata.ipynb index 5e4b1d7..0fa2ca9 100644 --- a/doc/source/user_guide/NASA-Earthdata.ipynb +++ b/doc/source/user_guide/NASA-Earthdata.ipynb @@ -35,7 +35,7 @@ "### Steps to Sync from PO.DAAC\n", "\n", "1. [Register with NASA Earthdata Login system](https://urs.earthdata.nasa.gov/users/new)\n", - "2. [Sync time-variable gravity data using your Earthdata credentials](https://github.com/tsutterley/gravity-toolkit/blob/main/gravity_toolkit/datasets/podaac_cumulus.py)\n", + "2. [Sync time-variable gravity data using your Earthdata credentials](https://github.com/polargeodesy/gravity-toolkit/blob/main/gravity_toolkit/datasets/podaac_cumulus.py)\n", "\n", "Can also create a `.netrc` file for permanently storing NASA Earthdata credentials:\n", "\n", diff --git a/gravity_toolkit/__init__.py b/gravity_toolkit/__init__.py index dadee3e..524e235 100644 --- a/gravity_toolkit/__init__.py +++ b/gravity_toolkit/__init__.py @@ -34,7 +34,7 @@ from gravity_toolkit.degree_amplitude import degree_amplitude from gravity_toolkit.destripe_harmonics import destripe_harmonics from gravity_toolkit.fourier_legendre import fourier_legendre, legendre_gradient -from gravity_toolkit.gauss_weights import gauss_weights +from gravity_toolkit.gauss_weights import gauss_weights, gauss_kernel from gravity_toolkit.gen_averaging_kernel import gen_averaging_kernel from gravity_toolkit.gen_disc_load import gen_disc_load from gravity_toolkit.gen_harmonics import gen_harmonics diff --git a/gravity_toolkit/associated_legendre.py b/gravity_toolkit/associated_legendre.py index be59738..8d37c98 100644 --- a/gravity_toolkit/associated_legendre.py +++ b/gravity_toolkit/associated_legendre.py @@ -305,6 +305,7 @@ def plm_holmes(LMAX, x, MMAX=None, astype=np.float64): else: return plm[:, : MMAX + 1, :], dplm[:, : MMAX + 1, :] + def plm_mohlenkamp(LMAX, x, MMAX=None, astype=np.float64): r""" Computes fully-normalized associated Legendre Polynomials and their diff --git a/gravity_toolkit/gauss_weights.py b/gravity_toolkit/gauss_weights.py index 1649e24..ae13a5b 100755 --- a/gravity_toolkit/gauss_weights.py +++ b/gravity_toolkit/gauss_weights.py @@ -2,7 +2,7 @@ """ gauss_weights.py Original IDL code gauss_weights.pro written by Sean Swenson -Adapted by Tyler Sutterley (03/2023) +Adapted by Tyler Sutterley (08/2026) Computes the Gaussian weights as a function of degree A normalized version of Jekeli's Gaussian averaging function @@ -38,6 +38,7 @@ alpha = alog(2.)/(1.-cos(rad/6371.)) UPDATE HISTORY: + Updated 08/2026: add gauss_kernel function for averaging kernel routines Updated 03/2023: improve typing for variables in docstrings Updated 04/2022: updated docstrings to numpy documentation format Updated 09/2021: added option for setting minimum value threshold @@ -59,9 +60,9 @@ def gauss_weights(hw, LMAX, CUTOFF=1e-10): Parameters ---------- hw: float - Gaussian smoothing radius in kilometers + Gaussian smoothing radius (km) LMAX: int - Maximum degree of spherical harmonic coefficients + maximum degree of spherical harmonic coefficients CUTOFF: float, default 1e-10 minimum value for tail of Gaussian averaging function @@ -70,38 +71,84 @@ def gauss_weights(hw, LMAX, CUTOFF=1e-10): wl: np.ndarray degree dependent weighting function """ + # check if distance is smaller than cutoff + if hw < CUTOFF: + wl = 1.0 / (2.0 * np.pi) + return wl # allocate for output weights wl = np.zeros((LMAX + 1)) # radius of the Earth in km rad_e = 6371.0 - if hw < CUTOFF: - # distance is smaller than cutoff - wl[:] = 1.0 / (2.0 * np.pi) - else: - # calculate gaussian weights using recursion - b = np.log(2.0) / (1.0 - np.cos(hw / rad_e)) - # weight for degree 0 - wl[0] = 1.0 / (2.0 * np.pi) - # weight for degree 1 - wl[1] = wl[0] * ( - (1.0 + np.exp(-2.0 * b)) / (1.0 - np.exp(-2.0 * b)) - 1.0 / b - ) - # valid flag - valid = True - # spherical harmonic degree - l = 2 - # while valid (within cutoff) - # and spherical harmonic degree is less than LMAX - while valid and (l <= LMAX): - # calculate weight with recursion - wl[l] = (1.0 - 2.0 * l) / b * wl[l - 1] + wl[l - 2] - # weight is less than cutoff - if wl[l] < CUTOFF: - # set all weights to cutoff - wl[l : LMAX + 1] = CUTOFF - # set valid flag - valid = False - # add 1 to l - l += 1 + # calculate gaussian weights using recursion + b = np.log(2.0) / (1.0 - np.cos(hw / rad_e)) + # weight for degree 0 + wl[0] = 1.0 / (2.0 * np.pi) + # weight for degree 1 + wl[1] = wl[0] * ( + (1.0 + np.exp(-2.0 * b)) / (1.0 - np.exp(-2.0 * b)) - 1.0 / b + ) + # valid flag + valid = True + # spherical harmonic degree + l = 2 + # while valid (within cutoff) + # and spherical harmonic degree is less than LMAX + while valid and (l <= LMAX): + # calculate weight with recursion + wl[l] = (1.0 - 2.0 * l) / b * wl[l - 1] + wl[l - 2] + # weight is less than cutoff + if wl[l] < CUTOFF: + # set all weights to cutoff + wl[l : LMAX + 1] = CUTOFF + # set valid flag + valid = False + # add 1 to l + l += 1 # return the gaussian weights return wl + + +def gauss_kernel(hw, LMAX, CUTOFF=1e-15): + """ + Computes the Legendre coefficients of a Gaussian correlation + function :cite:p:`Jekeli:1981vj,Swenson:2002hs` + + Parameters + ---------- + hw: float + half-width of the Gaussian kernel (km) + LMAX: int + maximum degree of spherical harmonic coefficients + CUTOFF: float, default 1e-15 + minimum value for tail of Gaussian kernel + + Returns + ------- + wl: np.ndarray + degree dependent weighting function + """ + # radius of the Earth in km + rad_e = 6371.0 + # valid flag + valid = True + # allocate for gaussian function + gl = np.zeros((LMAX + 1)) + # calculate gaussian kernel using recursion + b = np.log(2.0) / (1.0 - np.cos(hw / rad_e)) + # weight for degree 0 + gl[0] = (1.0 - np.exp(-2.0 * b)) / b + # weight for degree 1 + gl[1] = (1.0 + np.exp(-2.0 * b)) / b - (1.0 - np.exp(-2.0 * b)) / b**2 + # seed for other spherical harmonic degrees + l = 2 + # generate Legendre coefficients of Gaussian correlation function + while valid and (l <= LMAX): + gl[l] = (1.0 - 2.0 * l) / b * gl[l - 1] + gl[l - 2] + # check validity + if gl[l] < CUTOFF: + gl[l : LMAX + 1] = CUTOFF + valid = False + # add to counter for spherical harmonic degree + l += 1 + # return the gaussian function + return gl diff --git a/gravity_toolkit/gen_averaging_kernel.py b/gravity_toolkit/gen_averaging_kernel.py index 41e6aee..f4e222c 100755 --- a/gravity_toolkit/gen_averaging_kernel.py +++ b/gravity_toolkit/gen_averaging_kernel.py @@ -7,8 +7,10 @@ Generates averaging kernel coefficients which minimize the total error CALLING SEQUENCE: - Wlms = gen_averaging_kernel(gclm,gslm,eclm,eslm,sigma,hw, - LMIN=0, LMAX=60, UNITS=0, LOVE=(hl,kl,ll)) + Wlms = gen_averaging_kernel( + gclm, gslm, eclm, eslm, sigma, + LMIN=0, LMAX=60, UNITS=0, RAD=300, LOVE=(hl,kl,ll) + ) INPUTS: gclm: cosine spherical harmonics of exact averaging kernel @@ -16,11 +18,11 @@ eclm: measurement error in the cosine harmonics eslm: measurement error in the sine harmonics sigma: variance of the surface mass signal - hw: Gaussian radius of the kernel in kilometers OPTIONS: LMAX: Upper bound of Spherical Harmonic Degrees MMAX: Upper bound of Spherical Harmonic Orders (default = LMAX) + RAD: Gaussian radius of the kernel (km) UNITS: units of input spherical harmonics 0: fully-normalized 1: mass coefficients (cmwe) @@ -44,6 +46,8 @@ 107(B9), (2002). https://doi.org/10.1029/2001JB000576 UPDATE HISTORY: + Updated 08/2026: separate the Gaussian kernel function + rename Gaussian half-width to RAD to parallel other functions Updated 06/2023: added option for setting minimum value threshold use harmonics class for spherical harmonic operations Updated 04/2023: allow love numbers to be None for mass units case @@ -56,7 +60,7 @@ """ import numpy as np -import gravity_toolkit.units +from gravity_toolkit import gauss_kernel, harmonics, units def gen_averaging_kernel( @@ -65,12 +69,12 @@ def gen_averaging_kernel( eclm, eslm, sigma, - hw, LMAX=60, MMAX=None, - CUTOFF=1e-15, + RAD=0, UNITS=0, LOVE=None, + CUTOFF=1e-15, ): r""" Generates averaging kernel coefficients which minimize the @@ -91,14 +95,12 @@ def gen_averaging_kernel( measurement error in the sine harmonics sigma: float variance of the surface mass signal - hw: float - Gaussian radius of the kernel in kilometers LMAX: int, default 60 Upper bound of Spherical Harmonic Degrees MMAX: int or NoneType, default None Upper bound of Spherical Harmonic Orders - CUTOFF: float, default 1e-15 - minimum value for tail of Gaussian averaging function + RAD: float, default 0 + Gaussian radius of the kernel (km) UNITS: int, default 0 Input data units @@ -106,6 +108,8 @@ def gen_averaging_kernel( - ``1``: mass coefficients (cm w.e., g/cm\ :sup:`2`) LOVE: tuple or NoneType, default None Load Love numbers up to degree LMAX (``hl``, ``kl``, ``ll``) + CUTOFF: float, default 1e-15 + minimum value for tail of Gaussian kernel Returns ------- @@ -119,7 +123,7 @@ def gen_averaging_kernel( MMAX = np.copy(LMAX) # Earth Parameters - factors = gravity_toolkit.units(lmax=LMAX) + factors = units(lmax=LMAX) # extract arrays of kl, hl, and ll Love Numbers if UNITS == 0: # Input coefficients are fully-normalized @@ -127,59 +131,41 @@ def gen_averaging_kernel( elif UNITS == 1: # Inputs coefficients are mass (cmwe) dfactor = np.ones((LMAX + 1)) - # average radius of the earth (km) - rad_e = factors.rad_e / 1e5 - - # allocate for gaussian function - gl = np.zeros((LMAX + 1)) - # calculate gaussian weights using recursion - b = np.log(2.0) / (1.0 - np.cos(hw / rad_e)) - # weight for degree 0 - gl[0] = (1.0 - np.exp(-2.0 * b)) / b - # weight for degree 1 - gl[1] = (1.0 + np.exp(-2.0 * b)) / b - (1.0 - np.exp(-2.0 * b)) / b**2 - # valid flag - valid = True - # spherical harmonic degree - l = 2 - # generate Legendre coefficients of Gaussian correlation function - while valid and (l <= LMAX): - gl[l] = (1.0 - 2.0 * l) / b * gl[l - 1] + gl[l - 2] - # check validity - if gl[l] < CUTOFF: - gl[l : LMAX + 1] = CUTOFF - valid = False - # add to counter for spherical harmonic degree - l += 1 - # Convert sigma to correlation function amplitude + # calculate legendre coefficients of a Gaussian correlation function + gl = gauss_kernel(RAD, LMAX, CUTOFF=CUTOFF) + + # copy of the area under the kernel area = np.copy(gclm[0, 0]) - temp_0 = np.zeros((LMAX + 1)) + + # Convert sigma to correlation function amplitude + variance = np.zeros((LMAX + 1)) for l in range(0, LMAX + 1): # equivalent to 0:LMAX mm = np.min([MMAX, l]) # find min of MMAX and l m = np.arange(0, mm + 1) # create m array 0:l or 0:MMAX - temp_0[l] = (gl[l] / 2.0) * np.sum(gclm[l, m] ** 2 + gslm[l, m] ** 2) + variance[l] = (gl[l] / 2.0) * np.sum(gclm[l, m] ** 2 + gslm[l, m] ** 2) # divide by the square of the area under the kernel - temp = np.sum(temp_0) / area**2 + root = np.sqrt(np.sum(variance) / np.power(area, 2)) # signal variance - sigma_0 = sigma / np.sqrt(temp) + sigma_0 = sigma / root # Compute averaging kernel coefficients - Ylms = gravity_toolkit.harmonics(lmax=LMAX, mmax=MMAX) + Ylms = harmonics(lmax=LMAX, mmax=MMAX) Ylms.clm = np.zeros((LMAX + 1, MMAX + 1)) Ylms.slm = np.zeros((LMAX + 1, MMAX + 1)) # for each spherical harmonic degree for l in range(0, LMAX + 1): # equivalent to 0:lmax # inverse of smoothed signal variance in output units - ldivg = (dfactor[l] ** 2) / (gl[l] * sigma_0**2) + coeff = (dfactor[l] ** 2) / (gl[l] * sigma_0**2) # for each valid spherical harmonic order mm = np.min([MMAX, l]) - for m in range(0, mm + 1): - temp = 1.0 + 2.0 * ldivg * eclm[l, m] ** 2 - Ylms.clm[l, m] = gclm[l, m] / temp - temp = 1.0 + 2.0 * ldivg * eslm[l, m] ** 2 - Ylms.slm[l, m] = gslm[l, m] / temp + m = np.arange(0, mm + 1) + # compute averaging kernel coefficients + temp = 1.0 + 2.0 * coeff * eclm[l, m] ** 2 + Ylms.clm[l, m] = gclm[l, m] / temp + temp = 1.0 + 2.0 * coeff * eslm[l, m] ** 2 + Ylms.slm[l, m] = gslm[l, m] / temp # return kernels divided by the area under the kernel return Ylms.scale(1.0 / area) diff --git a/gravity_toolkit/geocenter.py b/gravity_toolkit/geocenter.py index 9b119b9..9992d5e 100644 --- a/gravity_toolkit/geocenter.py +++ b/gravity_toolkit/geocenter.py @@ -16,6 +16,8 @@ UPDATE HISTORY: Updated 08/2026: add file logger for reading and writing files + add ocean and land seasonal geocenter functions + turn some functions into classmethods to create geocenter objects Updated 07/2026: add dunder (magic) methods for mathematical operations add HTML representation of geocenter class Updated 06/2024: use wrapper to importlib for optional dependencies @@ -95,26 +97,22 @@ def __init__(self, **kwargs): # WGS84 ellipsoid parameters a_axis = 6378137.0 # [m] semimajor axis of the ellipsoid flat = 1.0 / 298.257223563 # flattening of the ellipsoid - # Mean Earth's Radius in mm having the same volume as WGS84 ellipsoid - kwargs.setdefault( - 'radius', 1000.0 * a_axis * (1.0 - flat) ** (1.0 / 3.0) - ) - # cartesian coordinates - kwargs.setdefault('X', None) - kwargs.setdefault('Y', None) - kwargs.setdefault('Z', None) + # Earth's mean radius having the same volume as WGS84 ellipsoid + radius = 1000.0 * a_axis * (1.0 - flat) ** (1.0 / 3.0) # set default class attributes - self.C10 = None - self.C11 = None - self.S11 = None - self.X = copy.copy(kwargs['X']) - self.Y = copy.copy(kwargs['Y']) - self.Z = copy.copy(kwargs['Z']) - self.time = None - self.month = None - self.filename = None + self.C10 = kwargs.get('C10', None) + self.C11 = kwargs.get('C11', None) + self.S11 = kwargs.get('S11', None) + # cartesian coordinates + self.X = kwargs.get('X', None) + self.Y = kwargs.get('Y', None) + self.Z = kwargs.get('Z', None) + # time and month variables + self.time = kwargs.get('time', None) + self.month = kwargs.get('month', None) + self.filename = kwargs.get('filename', None) # Average Radius of the Earth [mm] - self.radius = copy.copy(kwargs['radius']) + self.radius = kwargs.get('radius', radius) # create logger for class self.logger = logging.getLogger(__name__) # iterator @@ -195,8 +193,10 @@ def from_AOD1B(self, release, year, month, product='glo'): # first column: ISO-formatted date and time cal_date = time.strptime(line_contents[0], r'%Y-%m-%dT%H:%M:%S') # verify that dates are within year and month - assert cal_date.tm_year == year - assert cal_date.tm_mon == month + if cal_date.tm_year != year: + raise ValueError(f'Years mismatch: {cal_date.tm_year} {year}') + if cal_date.tm_mon != month: + raise ValueError(f'Months mismatch: {cal_date.tm_mon} {month}') # second-fourth columns: X, Y and Z geocenter variations temp.X[i], temp.Y[i], temp.Z[i] = np.array( line_contents[1:], dtype='f' @@ -824,6 +824,72 @@ def from_netCDF4(self, geocenter_file, group=None, **kwargs): # return the geocenter harmonics return self.from_dict(DEG1) + @classmethod + def land_seasonal(cls, time): + """ + Model the seasonal component of geocenter motion induced by land water + variations as estimated by :cite:t:`Chen:1999ki` + + Parameters + ---------- + time: np.ndarray + decimal years for geocenter motion + """ + # Annual amplitudes of geocenter components (mm) + AA = dict(X=1.28, Y=0.52, Z=3.30) + # Annual phase of geocenter components (radians) + AP = dict(X=np.radians(44), Y=np.radians(182), Z=np.radians(43)) + # Semi-Annual amplitudes of geocenter components (mm) + SAA = dict(X=0.15, Y=0.56, Z=0.50) + # Semi-Annual phase of geocenter components (radians) + SAP = dict(X=np.radians(331), Y=np.radians(312), Z=np.radians(75)) + # dictionary with geocenter components + XYZ = {} + for key in ['X', 'Y', 'Z']: + # annual and semi-annual components of the geocenter motion + ANN = AA[key] * np.sin(2.0 * np.pi * time + AP[key]) + SEMI = SAA[key] * np.sin(4.0 * np.pi * time + SAP[key]) + XYZ[key] = ANN + SEMI + # create geocenter object from the components + temp = cls(time=time, **XYZ).from_cartesian() + # remove the mean geocenter motion from the seasonal component + temp.mean(apply=True) + # return the seasonal geocenter motion + return temp + + @classmethod + def ocean_seasonal(cls, time): + """ + Model the seasonal component of geocenter motion induced by ocean + variations as estimated by :cite:t:`Chen:1999ki` + + Parameters + ---------- + time: np.ndarray + decimal years for geocenter motion + """ + # Annual amplitudes of geocenter components (mm) + AA = dict(X=0.96, Y=0.97, Z=0.49) + # Annual phase of geocenter components (radians) + AP = dict(X=np.radians(73), Y=np.radians(52), Z=np.radians(3)) + # Semi-Annual amplitudes of geocenter components (mm) + SAA = dict(X=0.86, Y=0.73, Z=0.25) + # Semi-Annual phase of geocenter components (radians) + SAP = dict(X=np.radians(187), Y=np.radians(173), Z=np.radians(232)) + # dictionary with geocenter components + XYZ = {} + for key in ['X', 'Y', 'Z']: + # annual and semi-annual components of the geocenter motion + ANN = AA[key] * np.sin(2.0 * np.pi * time + AP[key]) + SEMI = SAA[key] * np.sin(4.0 * np.pi * time + SAP[key]) + XYZ[key] = ANN + SEMI + # create geocenter object from the components + temp = cls(time=time, **XYZ).from_cartesian() + # remove the mean geocenter motion from the seasonal component + temp.mean(apply=True) + # return the seasonal geocenter motion + return temp + def copy(self, **kwargs): """ Copy a ``geocenter`` object to a new ``geocenter`` object @@ -899,7 +965,8 @@ def from_dict(self, temp, **kwargs): pass return self - def from_harmonics(self, temp, **kwargs): + @classmethod + def from_harmonics(cls, temp, **kwargs): """ Convert a ``harmonics`` object to a ``geocenter`` object @@ -910,30 +977,45 @@ def from_harmonics(self, temp, **kwargs): fields: list default keys in ``harmonics`` object """ + # reshape to matrices if flattened # assign degree and order fields temp.update_dimensions() # set default keyword arguments kwargs.setdefault('fields', ['time', 'month', 'filename']) - # try to assign variables to self + # try to get attributes from the harmonics object + attributes = {} for key in kwargs['fields']: try: val = getattr(temp, key) - setattr(self, key, np.copy(val)) except AttributeError: pass - # get spherical harmonic objects - if temp.ndim == 2: - self.C10 = np.copy(temp.clm[1, 0]) - self.C11 = np.copy(temp.clm[1, 1]) - self.S11 = np.copy(temp.slm[1, 1]) + else: + attributes[key] = np.copy(val) + # get spherical harmonics + if temp.flattened: + # find the indices of the degree 1 spherical harmonics + # l0 should be 1 and l1 should be lmax + 1 + (l0,) = np.flatnonzero((temp.l == 1) & (temp.m == 0)) + (l1,) = np.flatnonzero((temp.l == 1) & (temp.m == 1)) + # extract from flattened arrays + C10 = temp.clm[l0] + C11 = temp.clm[l1] + S11 = temp.slm[l1] + elif temp.ndim == 2: + # extract from matrix + C10 = np.copy(temp.clm[1, 0]) + C11 = np.copy(temp.clm[1, 1]) + S11 = np.copy(temp.slm[1, 1]) elif temp.ndim == 3: - self.C10 = np.copy(temp.clm[1, 0, :]) - self.C11 = np.copy(temp.clm[1, 1, :]) - self.S11 = np.copy(temp.slm[1, 1, :]) + # extract from matrix with time dimension + C10 = np.copy(temp.clm[1, 0, :]) + C11 = np.copy(temp.clm[1, 1, :]) + S11 = np.copy(temp.slm[1, 1, :]) # return the geocenter object - return self + return cls(C10=C10, C11=C11, S11=S11, **attributes) - def from_matrix(self, clm, slm): + @classmethod + def from_matrix(cls, clm, slm, **kwargs): """ Converts spherical harmonic matrices to a ``geocenter`` object @@ -948,10 +1030,11 @@ def from_matrix(self, clm, slm): clm = np.atleast_3d(clm) slm = np.atleast_3d(slm) # output geocenter object - self.C10 = np.copy(clm[1, 0, :]) - self.C11 = np.copy(clm[1, 1, :]) - self.S11 = np.copy(slm[1, 1, :]) - return self + C10 = np.copy(clm[1, 0, :]) + C11 = np.copy(clm[1, 1, :]) + S11 = np.copy(slm[1, 1, :]) + # return the geocenter object + return cls(C10=C10, C11=C11, S11=S11, **kwargs) def to_dict(self, **kwargs): """ @@ -1171,12 +1254,19 @@ def mean(self, apply=False, indices=Ellipsis): temp.C10 = np.mean(self.C10[indices]) temp.C11 = np.mean(self.C11[indices]) temp.S11 = np.mean(self.S11[indices]) + temp.to_cartesian() # calculating the time-variable gravity field by removing # the static component of the gravitational field if apply: + # remove the mean degree-one components self.C10 -= temp.C10 self.C11 -= temp.C11 self.S11 -= temp.S11 + if apply and np.any(self.X) and np.any(self.Y) and np.any(self.Z): + # remove the mean geocenter motion + self.X -= temp.X + self.Y -= temp.Y + self.Z -= temp.Z # calculate mean of temporal variables for key in ['time', 'month']: try: diff --git a/gravity_toolkit/harmonic_summation.py b/gravity_toolkit/harmonic_summation.py index 47c92b8..366d134 100755 --- a/gravity_toolkit/harmonic_summation.py +++ b/gravity_toolkit/harmonic_summation.py @@ -1,7 +1,7 @@ #!/usr/bin/env python """ harmonic_summation.py -Written by Tyler Sutterley (07/2026) +Written by Tyler Sutterley (08/2026) Returns the spatial field for a series of spherical harmonics @@ -30,6 +30,7 @@ units.py: class for converting spherical harmonic data to specific units UPDATE HISTORY: + Updated 08/2026: change assertions to value errors Updated 07/2026: use np.einsum for spherical harmonic summations use np.radians to convert from degrees to radians Updated 04/2023: allow love numbers to be None for custom units case @@ -159,8 +160,10 @@ def harmonic_transform( MMAX = np.copy(LMAX) # verify that longitudes cover the complete sphere - assert np.isclose(np.min(lon), 0.0) - assert np.isclose(np.max(lon), 360.0) + if not np.isclose(np.min(lon), 0.0): + raise ValueError(f'Longitude array must start at 0 degrees') + if not np.isclose(np.max(lon), 360.0): + raise ValueError(f'Longitude array must end at 360 degrees') # number of longitudinal points phimax = len(np.squeeze(lon)) # colatitude in radians diff --git a/gravity_toolkit/legendre_polynomials.py b/gravity_toolkit/legendre_polynomials.py index 67b855a..8dafb5d 100755 --- a/gravity_toolkit/legendre_polynomials.py +++ b/gravity_toolkit/legendre_polynomials.py @@ -122,4 +122,3 @@ def legendre_polynomials(lmax, x, ASTYPE=np.float64): return (pl[:, 0], dpl[:, 0]) else: return (pl, dpl) - diff --git a/gravity_toolkit/read_SLR_harmonics.py b/gravity_toolkit/read_SLR_harmonics.py index dc575eb..c1edf5b 100644 --- a/gravity_toolkit/read_SLR_harmonics.py +++ b/gravity_toolkit/read_SLR_harmonics.py @@ -1,7 +1,7 @@ #!/usr/bin/env python """ read_SLR_harmonics.py -Written by Tyler Sutterley (05/2023) +Written by Tyler Sutterley (08/2026) Reads in low-degree spherical harmonic coefficients calculated from Satellite Laser Ranging (SLR) measurements @@ -50,6 +50,7 @@ time.py: utilities for calculating time operations UPDATE HISTORY: + Updated 08/2026: change assertions to value errors Updated 05/2023: use pathlib to define and operate on paths Updated 03/2023: improve typing for variables in docstrings Updated 11/2022: use f-strings for formatting verbose or ascii output @@ -208,7 +209,10 @@ def read_CSR_monthly_6x1(SLR_file, SCALE=1e-10, HEADER=True): line_contents = file_contents[count].split() # verify arc number from iteration and file IARC = int(line_contents[0]) - assert IARC == (d + 1) + if IARC != (d + 1): + raise ValueError( + f'Arc number mismatch: expected {d + 1}, got {IARC}' + ) # modified Julian date of the middle of the month Ylms['MJD'][d] = np.mean(np.array(line_contents[5:7], dtype=np.float64)) # date of the mid-point of the arc given in years diff --git a/gravity_toolkit/scripts/calc_degree_one.py b/gravity_toolkit/scripts/calc_degree_one.py index df98628..99d2d50 100755 --- a/gravity_toolkit/scripts/calc_degree_one.py +++ b/gravity_toolkit/scripts/calc_degree_one.py @@ -4,7 +4,7 @@ Written by Tyler Sutterley (08/2026) Calculates degree 1 variations using GRACE coefficients of degree 2 and greater, - and ocean bottom pressure variations from ECCO and OMCT/MPIOM + and modeled ocean bottom pressure variations Relation between Geocenter Motion in mm and Normalized Geoid Coefficients X = sqrt(3)*a*C11 @@ -177,6 +177,7 @@ UPDATE HISTORY: Updated 08/2026: use default file logger for valid and failed program runs + moved seasonal land water degree-1 model to geocenter class Updated 07/2026: use np.einsum for spherical harmonic summations can remove sets of harmonic files from the GRACE/GRACE-FO data use np.radians to convert from degrees to radians @@ -377,43 +378,6 @@ def load_AOD(base_dir, PROC, DREL, DSET, START, END, MISSING, LMAX): return gravtk.harmonics().from_dict(grace_Ylms) -# PURPOSE: model the seasonal component of an initial degree 1 model -# using preliminary estimates of annual and semi-annual variations from LWM -# as calculated in Chen et al. (1999), doi:10.1029/1998JB900019 -# NOTE: this is to get an accurate assessment of the land water mass for the -# eustatic component (not for the ocean component from GRACE) -def model_seasonal_geocenter(grace_date): - # Annual amplitudes of (Soil Moisture + Snow) geocenter components (mm) - AAx = 1.28 - AAy = 0.52 - AAz = 3.30 - # Annual phase of (Soil Moisture + Snow) geocenter components (degrees) - APx = 44.0 - APy = 182.0 - APz = 43.0 - # Semi-Annual amplitudes of (Soil Moisture + Snow) geocenter components - SAAx = 0.15 - SAAy = 0.56 - SAAz = 0.50 - # Semi-Annual phase of (Soil Moisture + Snow) geocenter components - SAPx = 331.0 - SAPy = 312.0 - SAPz = 75.0 - # calculate each geocenter component from the amplitude and phase - # converting the phase from degrees to radians - X = AAx * np.sin( - 2.0 * np.pi * grace_date + np.radians(APx) - ) + SAAx * np.sin(4.0 * np.pi * grace_date + np.radians(SAPx)) - Y = AAy * np.sin( - 2.0 * np.pi * grace_date + np.radians(APy) - ) + SAAy * np.sin(4.0 * np.pi * grace_date + np.radians(SAPy)) - Z = AAz * np.sin( - 2.0 * np.pi * grace_date + np.radians(APz) - ) + SAAz * np.sin(4.0 * np.pi * grace_date + np.radians(SAPz)) - DEG1 = gravtk.geocenter(X=X - X.mean(), Y=Y - Y.mean(), Z=Z - Z.mean()) - return DEG1.from_cartesian() - - # PURPOSE: calculate a geocenter time-series def calc_degree_one( base_dir, @@ -637,7 +601,7 @@ def calc_degree_one( GAD_Ylms.mean(apply=True) GAC_Ylms.mean(apply=True) # convert GAC to geocenter object - GAC = gravtk.geocenter().from_harmonics(GAC_Ylms) + GAC = gravtk.geocenter.from_harmonics(GAC_Ylms) # filter GRACE/GRACE-FO coefficients if DESTRIPE: # destriping GRACE GSM and GAD coefficients @@ -666,7 +630,7 @@ def calc_degree_one( GIA_Ylms = GIA_Ylms_rate.drift(GSM_Ylms.time, epoch=2003.3) GIA_Ylms.month[:] = np.copy(GSM_Ylms.month) # save geocenter coefficients of monthly GIA variability - gia = gravtk.geocenter().from_harmonics(GIA_Ylms) + gia = gravtk.geocenter.from_harmonics(GIA_Ylms) # GRACE GAD degree 1 GAD = gravtk.geocenter() @@ -704,7 +668,7 @@ def calc_degree_one( # truncate to degree and order LMAX/MMAX ATM_Ylms = ATM_Ylms.truncate(lmax=LMAX, mmax=MMAX) # save geocenter coefficients of the atmospheric jump corrections - atm = gravtk.geocenter().from_harmonics(ATM_Ylms) + atm = gravtk.geocenter.from_harmonics(ATM_Ylms) # read bottom pressure model if applicable if MODEL not in ('OMCT', 'MPIOM'): @@ -775,7 +739,7 @@ def calc_degree_one( # redistributing the mass over the ocean if specified remove_Ylms.add(Ylms) # save geocenter coefficients of the auxiliary corrections - remove = gravtk.geocenter().from_harmonics(remove_Ylms) + remove = gravtk.geocenter.from_harmonics(remove_Ylms) # Calculating cos/sin of phi arrays # output [m,phi] @@ -841,7 +805,7 @@ def calc_degree_one( # get seasonal variations of an initial geocenter correction # for use in the land water mass calculation - seasonal_geocenter = model_seasonal_geocenter(tdec) + seasonal_geocenter = gravtk.geocenter.land_seasonal(tdec) # iterate solutions: if not single iteration n_iter = 0 @@ -1661,14 +1625,12 @@ def print_global(fid, PROC, DREL, MODEL, AOD, GIA, SLR, S21, month): fid.write(' {0:22}: {1}\n'.format('creator_institution', inst)) # date range and date created calendar_year, calendar_month = gravtk.time.grace_to_calendar(month) - start_time = '{0:4.0f}-{1:02.0f}'.format( - calendar_year[0], calendar_month[0] - ) + start_time = f'{calendar_year[0]:4.0f}-{calendar_month[0]:02.0f}' fid.write(' {0:22}: {1}\n'.format('time_coverage_start', start_time)) - end_time = '{0:4.0f}-{1:02.0f}'.format( - calendar_year[-1], calendar_month[-1] - ) + end_time = f'{calendar_year[-1]:4.0f}-{calendar_month[-1]:02.0f}' fid.write(' {0:22}: {1}\n'.format('time_coverage_end', end_time)) + duration = f'{month[-1] - month[0]:02.0f} months' + fid.write(' {0:22}: {1}\n'.format('time_coverage_duration', duration)) today = time.strftime('%Y-%m-%d', time.localtime()) fid.write(' {0:22}: {1}\n'.format('date_created', today)) fid.write('\n') diff --git a/gravity_toolkit/scripts/grace_spatial_maps.py b/gravity_toolkit/scripts/grace_spatial_maps.py index 5801c05..01dffdf 100755 --- a/gravity_toolkit/scripts/grace_spatial_maps.py +++ b/gravity_toolkit/scripts/grace_spatial_maps.py @@ -486,16 +486,16 @@ def grace_spatial_maps( attributes['earth_density'] = f'{factors.rho_e:0.3f} g/cm^3' attributes['earth_gravity_constant'] = f'{factors.GM:0.3f} cm^3/s^2' # add geospatial attributes - attributes['ROOT']['geospatial_lat_min'] = grid.lat.min() - attributes['ROOT']['geospatial_lat_max'] = grid.lat.max() - attributes['ROOT']['geospatial_lon_min'] = grid.lon.min() - attributes['ROOT']['geospatial_lon_max'] = grid.lon.max() - attributes['ROOT']['geospatial_lat_units'] = 'degrees_north' - attributes['ROOT']['geospatial_lon_units'] = 'degrees_east' + attributes['geospatial_lat_min'] = grid.lat.min() + attributes['geospatial_lat_max'] = grid.lat.max() + attributes['geospatial_lon_min'] = grid.lon.min() + attributes['geospatial_lon_max'] = grid.lon.max() + attributes['geospatial_lat_units'] = 'degrees_north' + attributes['geospatial_lon_units'] = 'degrees_east' # add temporal attributes - attributes['ROOT']['time_coverage_start'] = np.datetime_as_string(SD) - attributes['ROOT']['time_coverage_end'] = np.datetime_as_string(ED) - attributes['ROOT']['time_coverage_duration'] = str(ED - SD) + attributes['time_coverage_start'] = np.datetime_as_string(SD) + attributes['time_coverage_end'] = np.datetime_as_string(ED) + attributes['time_coverage_duration'] = str(ED - SD) # add attributes to output spatial object attributes['reference'] = f'Output from {pathlib.Path(sys.argv[0]).name}' grid.attributes['ROOT'] = attributes diff --git a/gravity_toolkit/scripts/mascon_reconstruct.py b/gravity_toolkit/scripts/mascon_reconstruct.py index 3ed3839..6dcfa1e 100644 --- a/gravity_toolkit/scripts/mascon_reconstruct.py +++ b/gravity_toolkit/scripts/mascon_reconstruct.py @@ -167,8 +167,6 @@ def mascon_reconstruct( OUTPUT_DIRECTORY = pathlib.Path(OUTPUT_DIRECTORY).expanduser().absolute() if not OUTPUT_DIRECTORY.exists(): OUTPUT_DIRECTORY.mkdir(mode=MODE, parents=True, exist_ok=True) - # list object of output files for file logs (full path) - output_files = [] # for datasets not GSM: will add a label for the dataset dset_str = '' if (DSET == 'GSM') else f'_{DSET}' @@ -288,28 +286,23 @@ def mascon_reconstruct( END, suffix[DATAFORM], ) - OUTPUT_FILE = OUTPUT_DIRECTORY.joinpath(file_format.format(*args)) + output_file = OUTPUT_DIRECTORY.joinpath(file_format.format(*args)) # attributes for output files attributes = {} attributes['reference'] = ( f'Output from {pathlib.Path(sys.argv[0]).name}' ) # output harmonics to file - mascon_Ylms.to_file(OUTPUT_FILE, format=DATAFORM, **attributes) + mascon_Ylms.to_file(output_file, format=DATAFORM, **attributes) # print file name to index - print(mascon_Ylms.compressuser(OUTPUT_FILE), file=fid) + print(mascon_Ylms.compressuser(output_file), file=fid) # change the permissions mode - OUTPUT_FILE.chmod(mode=MODE) - # add file to list - output_files.append(OUTPUT_FILE) + output_file.chmod(mode=MODE) # close the reconstruct index fid.close() # change the permissions mode of the index file RECONSTRUCT_FILE.chmod(mode=MODE) - # return the list of output files - return output_files - # PURPOSE: create argument parser def arguments(): @@ -471,15 +464,6 @@ def arguments(): default=lsmask, help='Land-sea mask for redistributing mascon mass', ) - # Output log file for each job in forms - # validrun_2002-04-01T00:00:00_PID-00000.log - # failedrun_2002-04-01T00:00:00_PID-00000.log - parser.add_argument( - '--log', - default=False, - action='store_true', - help='Output log file for each job', - ) # print information about processing run parser.add_argument( '--verbose', @@ -516,7 +500,7 @@ def main(): try: info(args) # run mascon_reconstruct algorithm with parameters - output_files = mascon_reconstruct( + mascon_reconstruct( args.product, args.lmax, args.radius, @@ -543,22 +527,6 @@ def main(): # current exception being handled logger.critical(f'process id {os.getpid():d} failed') logger.error(traceback.format_exc()) - if args.log: # write failed job completion log file - logfile = gravtk.utilities.create_log_file( - 'failedrun', - filename=pathlib.Path(sys.argv[0]).name, - arguments=vars(args), - ) - logger.info(logfile) - else: - if args.log: # write successful job completion log file - logfile = gravtk.utilities.create_log_file( - 'validrun', - filename=pathlib.Path(sys.argv[0]).name, - arguments=vars(args), - output=output_files, - ) - logger.info(logfile) # run main program diff --git a/gravity_toolkit/scripts/monte_carlo_degree_one.py b/gravity_toolkit/scripts/monte_carlo_degree_one.py index 97a77ab..7ef8be0 100644 --- a/gravity_toolkit/scripts/monte_carlo_degree_one.py +++ b/gravity_toolkit/scripts/monte_carlo_degree_one.py @@ -1,10 +1,10 @@ #!/usr/bin/env python """ monte_carlo_degree_one.py -Written by Tyler Sutterley (09/2026) +Written by Tyler Sutterley (08/2026) Calculates degree 1 errors using GRACE coefficients of degree 2 and greater, - and ocean bottom pressure variations from OMCT/MPIOM in a Monte Carlo scheme + and modeled ocean bottom pressure variations in a Monte Carlo scheme Relation between Geocenter Motion in mm and Normalized Geoid Coefficients X = sqrt(3)*a*C11 @@ -157,8 +157,8 @@ https://doi.org/10.1029/2005GL025305 UPDATE HISTORY: - Updated 09/2026: little bit of clean up for readability Updated 08/2026: use default file logger for valid and failed program runs + moved seasonal land water degree-1 model to geocenter class Updated 07/2026: use np.einsum for spherical harmonic summations can remove sets of harmonic files from the GRACE/GRACE-FO data use np.radians to convert from degrees to radians @@ -249,43 +249,6 @@ def info(args): logger.info(f'process id: {os.getpid():d}') -# PURPOSE: model the seasonal component of an initial degree 1 model -# using preliminary estimates of annual and semi-annual variations from LWM -# as calculated in Chen et al. (1999), doi:10.1029/1998JB900019 -# NOTE: this is to get an accurate assessment of the land water mass for the -# eustatic component (not for the ocean component from GRACE) -def model_seasonal_geocenter(grace_date): - # Annual amplitudes of (Soil Moisture + Snow) geocenter components (mm) - AAx = 1.28 - AAy = 0.52 - AAz = 3.30 - # Annual phase of (Soil Moisture + Snow) geocenter components (degrees) - APx = 44.0 - APy = 182.0 - APz = 43.0 - # Semi-Annual amplitudes of (Soil Moisture + Snow) geocenter components - SAAx = 0.15 - SAAy = 0.56 - SAAz = 0.50 - # Semi-Annual phase of (Soil Moisture + Snow) geocenter components - SAPx = 331.0 - SAPy = 312.0 - SAPz = 75.0 - # calculate each geocenter component from the amplitude and phase - # converting the phase from degrees to radians - X = AAx * np.sin( - 2.0 * np.pi * grace_date + np.radians(APx) - ) + SAAx * np.sin(4.0 * np.pi * grace_date + np.radians(SAPx)) - Y = AAy * np.sin( - 2.0 * np.pi * grace_date + np.radians(APy) - ) + SAAy * np.sin(4.0 * np.pi * grace_date + np.radians(SAPy)) - Z = AAz * np.sin( - 2.0 * np.pi * grace_date + np.radians(APz) - ) + SAAz * np.sin(4.0 * np.pi * grace_date + np.radians(SAPz)) - DEG1 = gravtk.geocenter(X=X - X.mean(), Y=Y - Y.mean(), Z=Z - Z.mean()) - return DEG1.from_cartesian() - - # PURPOSE: calculate the satellite error for a geocenter time-series def monte_carlo_degree_one( base_dir, @@ -536,7 +499,7 @@ def monte_carlo_degree_one( GIA_Ylms = GIA_Ylms_rate.drift(GSM_Ylms.time, epoch=2003.3) GIA_Ylms.month[:] = np.copy(GSM_Ylms.month) # save geocenter coefficients of monthly GIA variability - gia = gravtk.geocenter().from_harmonics(GIA_Ylms) + gia = gravtk.geocenter.from_harmonics(GIA_Ylms) # read atmospheric jump corrections from Fagiolini et al. (2015) ATM_Ylms = GSM_Ylms.zeros_like() @@ -551,7 +514,7 @@ def monte_carlo_degree_one( # truncate to degree and order LMAX/MMAX ATM_Ylms = ATM_Ylms.truncate(lmax=LMAX, mmax=MMAX) # save geocenter coefficients of the atmospheric jump corrections - atm = gravtk.geocenter().from_harmonics(ATM_Ylms) + atm = gravtk.geocenter.from_harmonics(ATM_Ylms) # input spherical harmonic datafiles to be removed from the GRACE data # Remove sets of Ylms from the GRACE data before returning @@ -604,7 +567,7 @@ def monte_carlo_degree_one( # redistributing the mass over the ocean if specified remove_Ylms.add(Ylms) # save geocenter coefficients of the auxiliary corrections - remove = gravtk.geocenter().from_harmonics(remove_Ylms) + remove = gravtk.geocenter.from_harmonics(remove_Ylms) # input spherical harmonic datafiles to be used in monte carlo error_Ylms = [] @@ -753,7 +716,7 @@ def monte_carlo_degree_one( # get seasonal variations of an initial geocenter correction # for use in the land water mass calculation - seasonal_geocenter = model_seasonal_geocenter(tdec) + seasonal_geocenter = gravtk.geocenter.land_seasonal(tdec) # degree 1 iterations for each monte carlo run iteration = gravtk.geocenter() @@ -766,16 +729,20 @@ def monte_carlo_degree_one( for t in range(n_files): # calculate uncertainty for time t and each degree/order Ylms = gravtk.harmonics(lmax=LMAX, mmax=MMAX) - seed = np.random.rand(LMAX + 1, MMAX + 1) - Ylms.clm = (1.0 - 2.0 * seed) * delta_Ylms.clm - seed = np.random.rand(LMAX + 1, MMAX + 1) - Ylms.slm = (1.0 - 2.0 * seed) * delta_Ylms.slm + Ylms.clm = ( + 1.0 - 2.0 * np.random.rand(LMAX + 1, MMAX + 1) + ) * delta_Ylms.clm + Ylms.slm = ( + 1.0 - 2.0 * np.random.rand(LMAX + 1, MMAX + 1) + ) * delta_Ylms.slm # add additional uncertainty terms for eYlms in error_Ylms: - seed = np.random.rand(LMAX + 1, MMAX + 1) - Ylms.clm += (1.0 - 2.0 * seed) * eYlms.clm - seed = np.random.rand(LMAX + 1, MMAX + 1) - Ylms.slm += (1.0 - 2.0 * seed) * eYlms.slm + Ylms.clm += ( + 1.0 - 2.0 * np.random.rand(LMAX + 1, MMAX + 1) + ) * eYlms.clm + Ylms.slm += ( + 1.0 - 2.0 * np.random.rand(LMAX + 1, MMAX + 1) + ) * eYlms.slm # Removing monthly GIA signal, atmospheric correction # and the auxiliary coefficients @@ -1367,14 +1334,12 @@ def print_global(fid, PROC, DREL, MODEL, GIA, SLR, S21, month): fid.write(' {0:22}: {1}\n'.format('creator_institution', inst)) # date range and date created calendar_year, calendar_month = gravtk.time.grace_to_calendar(month) - start_time = '{0:4.0f}-{1:02.0f}'.format( - calendar_year[0], calendar_month[0] - ) + start_time = f'{calendar_year[0]:4.0f}-{calendar_month[0]:02.0f}' fid.write(' {0:22}: {1}\n'.format('time_coverage_start', start_time)) - end_time = '{0:4.0f}-{1:02.0f}'.format( - calendar_year[-1], calendar_month[-1] - ) + end_time = f'{calendar_year[-1]:4.0f}-{calendar_month[-1]:02.0f}' fid.write(' {0:22}: {1}\n'.format('time_coverage_end', end_time)) + duration = f'{month[-1] - month[0]:02.0f} months' + fid.write(' {0:22}: {1}\n'.format('time_coverage_duration', duration)) today = time.strftime('%Y-%m-%d', time.localtime()) fid.write(' {0:22}: {1}\n'.format('date_created', today)) fid.write('\n') diff --git a/gravity_toolkit/time.py b/gravity_toolkit/time.py index 6eef200..55d2f4e 100644 --- a/gravity_toolkit/time.py +++ b/gravity_toolkit/time.py @@ -15,6 +15,7 @@ UPDATE HISTORY: Updated 08/2026: output numpy.datetime64 objects from file parsers added astype option to calendar_days function (can now be int) + change assertions to value errors Updated 07/2026: added function to convert times to numpy datetimes Updated 06/2024: remove timescale class and leap second calculations Updated 06/2023: add timescale class for converting between time scales @@ -226,7 +227,8 @@ def to_datetime(timedelta: np.ndarray, attributes: str, unit: str = 's'): ``numpy.datetime64`` array """ # verify that units are numpy datetime compatible - assert unit in ['D', 'h', 'm', 's', 'ms', 'us', 'ns'] + if unit not in ['D', 'h', 'm', 's', 'ms', 'us', 'ns']: + raise ValueError(f'Invalid unit: {unit}') # get the epoch and units from the attributes epoch, to_secs = parse_date_string(attributes) # convert epoch to datetime variable diff --git a/gravity_toolkit/time_series/lomb_scargle.py b/gravity_toolkit/time_series/lomb_scargle.py index 03ccc3a..3372c82 100755 --- a/gravity_toolkit/time_series/lomb_scargle.py +++ b/gravity_toolkit/time_series/lomb_scargle.py @@ -1,7 +1,7 @@ #!/usr/bin/env python """ lomb_scargle.py -Written by Tyler Sutterley (06/2024) +Written by Tyler Sutterley (08/2026) Wrapper function for computing Lomb-Scargle periodograms @@ -49,6 +49,7 @@ https://doi.org/10.1086/164037 UPDATE HISTORY: + Updated 08/2026: change assertions to value errors Updated 06/2024: add function docstrings Updated 01/2015: added centroid output Written 08/2013 @@ -126,7 +127,8 @@ def lomb_scargle(t_in, d_in, **kwargs): # number of angular frequencies N = int(kwargs['N']) - assert len(OMEGA) == 2, 'Angular frequency range must have 2 values' + if len(OMEGA) != 2: + raise ValueError('Angular frequency range must have 2 values') # array of angular frequencies angular_freq = np.linspace(OMEGA[0], OMEGA[1], N) diff --git a/pixi.lock b/pixi.lock index d80f0d4..3b3816e 100644 --- a/pixi.lock +++ b/pixi.lock @@ -1,8 +1,20 @@ version: 7 platforms: - name: linux-64 + virtual-packages: + - __unix=0=0 + - __linux=4.18 + - __glibc=2.28 + - __archspec=0=x86_64 - name: osx-arm64 + virtual-packages: + - __unix=0=0 + - __osx=13.0 + - __archspec=0=m1 - name: win-64 + virtual-packages: + - __win=10.0 + - __archspec=0=x86_64 environments: all: channels: @@ -254,7 +266,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - - pypi: . + - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda @@ -492,7 +504,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - - pypi: . + - pypi: ./ win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda @@ -729,7 +741,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py313h5fd188c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - - pypi: . + - pypi: ./ aws: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -1061,7 +1073,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/zarr-3.2.1-pyhc364b38_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - - pypi: . + - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.25.2-pyhcf101f3_0.conda @@ -1379,7 +1391,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - - pypi: . + - pypi: ./ win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiobotocore-2.25.2-pyhcf101f3_0.conda @@ -1697,7 +1709,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py313h5fd188c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - - pypi: . + - pypi: ./ default: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -1814,7 +1826,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - - pypi: . + - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/boto3-1.40.45-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.40.70-pyhd8ed1ab_0.conda @@ -1916,7 +1928,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - - pypi: . + - pypi: ./ win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/boto3-1.40.45-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/botocore-1.40.70-pyhd8ed1ab_0.conda @@ -2020,7 +2032,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py313h5fd188c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - - pypi: . + - pypi: ./ dev: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -2371,8 +2383,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - - pypi: . + - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/34/c7/e1c2e8a67f6cc0aa43abe0046fb3b7a020980649e6a843751dc7ce9eb170/websockets-17.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda @@ -2680,8 +2697,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - - pypi: . + - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/46/69/66e5b7d01445e0eeb1d4ab419c30315f2c90cf7a8a8cd4ecc47f894dba54/websockets-17.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda @@ -2986,8 +3008,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py313h5fd188c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - - pypi: . + - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/22/36/fb521f0f2994c25509651f169efe5582dddd8713d57a0757ba87859372ef/websockets-17.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl doc: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -3327,8 +3354,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - - pypi: . + - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/34/c7/e1c2e8a67f6cc0aa43abe0046fb3b7a020980649e6a843751dc7ce9eb170/websockets-17.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/adwaita-icon-theme-49.0-unix_0.conda @@ -3625,8 +3657,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - - pypi: . + - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/46/69/66e5b7d01445e0eeb1d4ab419c30315f2c90cf7a8a8cd4ecc47f894dba54/websockets-17.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-1.0.0-pyhd8ed1ab_1.conda @@ -3920,8 +3957,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py313h5fd188c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - - pypi: . + - pypi: ./ + - pypi: https://files.pythonhosted.org/packages/22/36/fb521f0f2994c25509651f169efe5582dddd8713d57a0757ba87859372ef/websockets-17.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl map: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -4172,7 +4214,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.14-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - - pypi: . + - pypi: ./ osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda @@ -4410,7 +4452,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.2-h8088a28_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - - pypi: . + - pypi: ./ win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/_python_abi3_support-1.0-hd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.11.0-pyhcf101f3_0.conda @@ -4647,7 +4689,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.2-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py313h5fd188c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-hbeecb71_2.conda - - pypi: . + - pypi: ./ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 @@ -17317,7 +17359,7 @@ packages: purls: [] size: 354697 timestamp: 1742433568506 -- pypi: . +- pypi: ./ name: gravity-toolkit requires_dist: - boto3 @@ -17334,7 +17376,7 @@ packages: - graphviz ; extra == 'doc' - myst-nb ; extra == 'doc' - numpydoc ; extra == 'doc' - - sphinx ; extra == 'doc' + - sphinx-autobuild ; extra == 'doc' - sphinx-argparse>=0.4 ; extra == 'doc' - sphinxcontrib-bibtex ; extra == 'doc' - sphinx-design ; extra == 'doc' @@ -17358,6 +17400,28 @@ packages: - pyshp ; extra == 'map' - shapely ; extra == 'map' requires_python: ~=3.6 +- pypi: https://files.pythonhosted.org/packages/22/36/fb521f0f2994c25509651f169efe5582dddd8713d57a0757ba87859372ef/websockets-17.1-cp313-cp313-win_amd64.whl + name: websockets + version: '17.1' + sha256: 0340bbef6bfbe16da888b3983d666a4db4954ac3253c38f13bc7aba0c7db5a2f + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/31/3a/0da302f2307aee316922806ebd5726c542cbd787c938271cf14a074c7daf/watchfiles-1.2.0-cp313-cp313-macosx_11_0_arm64.whl + name: watchfiles + version: 1.2.0 + sha256: 7ba0480b9a74af058f43b337e937a451e109295c420916d68ad24e3dc02f5e44 + requires_dist: + - anyio>=3.0.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/34/c7/e1c2e8a67f6cc0aa43abe0046fb3b7a020980649e6a843751dc7ce9eb170/websockets-17.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: websockets + version: '17.1' + sha256: c3241d684a76eaaef8b2dc789afde4343cd3aad55ea81e4e8ab3605b529bae51 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/46/69/66e5b7d01445e0eeb1d4ab419c30315f2c90cf7a8a8cd4ecc47f894dba54/websockets-17.1-cp313-cp313-macosx_11_0_arm64.whl + name: websockets + version: '17.1' + sha256: fd8f47dbf2e8adb15c847215f83436de3fdb120b51fdae0fbbdf69fd97a3ad80 + requires_python: '>=3.11' - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl name: graphviz version: '0.21' @@ -17378,3 +17442,60 @@ packages: - sphinx-autodoc-typehints ; extra == 'docs' - sphinx-rtd-theme>=0.2.5 ; extra == 'docs' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/6c/89b1a230a78f57c52dd8893adb1f92f94411721b6ec12596c56d98c74356/watchfiles-1.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: watchfiles + version: 1.2.0 + sha256: ca148d73dea36c9763aaa351e4d7a51780ec1584217c45276f4fe8239c768b71 + requires_dist: + - anyio>=3.0.0 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/c8/cb/6a6a47d5b464bd08695d254f3da6e7986cc70c9fa5d778eda57538edfe56/starlette-1.6.0-py3-none-any.whl + name: starlette + version: 1.6.0 + sha256: a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c + requires_dist: + - anyio>=3.6.2,<5 + - typing-extensions>=4.10.0 ; python_full_version < '3.13' + - httpx2>=2.0.0 ; extra == 'full' + - httpx>=0.27.0,<0.29.0 ; extra == 'full' + - itsdangerous ; extra == 'full' + - jinja2 ; extra == 'full' + - python-multipart>=0.0.18 ; extra == 'full' + - pyyaml ; extra == 'full' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/20/56411b52f917696995f5ad27d2ea7e9492c84a043c5b49a3a3173573cd93/sphinx_autobuild-2025.8.25-py3-none-any.whl + name: sphinx-autobuild + version: 2025.8.25 + sha256: b750ac7d5a18603e4665294323fd20f6dcc0a984117026d1986704fa68f0379a + requires_dist: + - colorama>=0.4.6 + - sphinx + - starlette>=0.35 + - uvicorn>=0.25 + - watchfiles>=0.20 + - websockets>=11 + - httpx ; extra == 'test' + - pytest>=6 ; extra == 'test' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/f1/79/4a20b54ab0491485ccd8c077db2d39187c7f12b3e15485d38a7be37c81b4/uvicorn-0.52.4-py3-none-any.whl + name: uvicorn + version: 0.52.4 + sha256: f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 + requires_dist: + - click>=7.0 + - h11>=0.8 + - typing-extensions>=4.0 ; python_full_version < '3.11' + - httptools>=0.8.0 ; extra == 'standard' + - python-dotenv>=0.13 ; extra == 'standard' + - pyyaml>=5.1 ; extra == 'standard' + - uvloop>=0.15.1 ; platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'win32' and extra == 'standard' + - watchfiles>=0.20 ; extra == 'standard' + - websockets>=13.0 ; extra == 'standard' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f9/36/14b76ca57652e5cc5fd1c11f32a261292c08a0d19a00351013c2549cbfb2/watchfiles-1.2.0-cp313-cp313-win_amd64.whl + name: watchfiles + version: 1.2.0 + sha256: a0f27f01bee51861392bb6b7c4fdb290b27d1eb194e9e28788d68102a0e898d9 + requires_dist: + - anyio>=3.0.0 + requires_python: '>=3.10' diff --git a/pyproject.toml b/pyproject.toml index dd16f87..e287a95 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -56,8 +56,8 @@ classifiers = [ [project.urls] Homepage = "https://gravity-toolkit.readthedocs.io" Documentation = "https://gravity-toolkit.readthedocs.io" -Repository = "https://github.com/tsutterley/gravity-toolkit" -Issues = "https://github.com/tsutterley/gravity-toolkit/issues" +Repository = "https://github.com/polargeodesy/gravity-toolkit" +Issues = "https://github.com/polargeodesy/gravity-toolkit/issues" [project.optional-dependencies] doc = [ @@ -135,51 +135,6 @@ map = ["cartopy", "gdal", "pyshp", "shapely"] "run_grace_date.py" = "gravity_toolkit.scripts.run_grace_date:main" "run_sea_level_equation.py" = "gravity_toolkit.scripts.run_sea_level_equation:main" "scale_grace_maps.py" = "gravity_toolkit.scripts.scale_grace_maps:main" -# production code -"calc_SLR_RMS.py" = "gravity_toolkit.scripts.calc_SLR_RMS:main" -"combine_HEX_ATM_errors.py" = "gravity_toolkit.scripts.combine_HEX_ATM_errors:main" -"combine_HEX_Caron_errors.py" = "gravity_toolkit.scripts.combine_HEX_Caron_errors:main" -"combine_HEX_leakage.py" = "gravity_toolkit.scripts.combine_HEX_leakage:main" -"combine_HEX_mascons.py" = "gravity_toolkit.scripts.combine_HEX_mascons:main" -"combine_HEX_mascon_timeseries.py" = "gravity_toolkit.scripts.combine_HEX_mascon_timeseries:main" -"combine_HEX_OBP_errors.py" = "gravity_toolkit.scripts.combine_HEX_OBP_errors:main" -"combine_HEX_SLF_errors.py" = "gravity_toolkit.scripts.combine_HEX_SLF_errors:main" -"combine_HEX_spherical_caps.py" = "gravity_toolkit.scripts.combine_HEX_spherical_caps:main" -"combine_HEX_TWC_errors.py" = "gravity_toolkit.scripts.combine_HEX_TWC_errors:main" -"combine_sea_level_data.py" = "gravity_toolkit.scripts.combine_sea_level_data:main" -"copy_parameter_files.py" = "gravity_toolkit.scripts.copy_parameter_files:main" -"create_public_SLF_data.py" = "gravity_toolkit.scripts.create_public_SLF_data:main" -"create_public_timeseries.py" = "gravity_toolkit.scripts.create_public_timeseries:main" -"delta_degree_one.py" = "gravity_toolkit.scripts.delta_degree_one:main" -"geocenter_spatial_maps.py" = "gravity_toolkit.scripts.geocenter_spatial_maps:main" -"gia_covariance_errors_caron.py" = "gravity_toolkit.scripts.gia_covariance_errors_caron:main" -"grace_spatial_differences.py" = "gravity_toolkit.scripts.grace_spatial_differences:main" -"grace_spatial_mask.py" = "gravity_toolkit.scripts.grace_spatial_mask:main" -"grace_spatial_mean.py" = "gravity_toolkit.scripts.grace_spatial_mean:main" -"kernel_degree_one_error.py" = "gravity_toolkit.scripts.kernel_degree_one_error:main" -"kernel_degree_one.py" = "gravity_toolkit.scripts.kernel_degree_one:main" -"make_sea_level_error_shells.py" = "gravity_toolkit.scripts.make_sea_level_error_shells:main" -"make_sea_level_mascon_shells.py" = "gravity_toolkit.scripts.make_sea_level_mascon_shells:main" -"make_sea_level_shells.py" = "gravity_toolkit.scripts.make_sea_level_shells:main" -"model_degree_one.py" = "gravity_toolkit.scripts.model_degree_one:main" -"nominal_grace_date.py" = "gravity_toolkit.scripts.nominal_grace_date:main" -"plot_mascon_SLF_combined.py" = "gravity_toolkit.scripts.plot_mascon_SLF_combined:main" -"plot_mascon_SLF_iterations.py" = "gravity_toolkit.scripts.plot_mascon_SLF_iterations:main" -"plot_mascon_SLF_timeseries.py" = "gravity_toolkit.scripts.plot_mascon_SLF_timeseries:main" -"plot_SLR_azimuthal.py" = "gravity_toolkit.scripts.plot_SLR_azimuthal:main" -"plot_SLR_zonals.py" = "gravity_toolkit.scripts.plot_SLR_zonals:main" -"regional_spherical_caps.py" = "gravity_toolkit.scripts.regional_spherical_caps:main" -"remove_grace_spatial.py" = "gravity_toolkit.scripts.remove_grace_spatial:main" -"remove_mascon_reconstruct.py" = "gravity_toolkit.scripts.remove_mascon_reconstruct:main" -"remove_sea_level_errors.py" = "gravity_toolkit.scripts.remove_sea_level_errors:main" -"remove_sea_level_fields.py" = "gravity_toolkit.scripts.remove_sea_level_fields:main" -"sea_level_differences.py" = "gravity_toolkit.scripts.sea_level_differences:main" -"sea_level_error.py" = "gravity_toolkit.scripts.sea_level_error:main" -"sea_level_mean.py" = "gravity_toolkit.scripts.sea_level_mean:main" -"sea_level_regress.py" = "gravity_toolkit.scripts.sea_level_regress:main" -"sea_level_stokes.py" = "gravity_toolkit.scripts.sea_level_stokes:main" -"simple_parallel_shell.py" = "gravity_toolkit.scripts.simple_parallel_shell:main" -"upload_to_figshare.py" = "gravity_toolkit.scripts.upload_to_figshare:main" [tool.setuptools.packages.find] exclude = ["test*", "run*"] @@ -285,7 +240,7 @@ args = [ { "arg" = "flags", "default" = "--jobs=auto" }, { "arg" = "auto", "default" = "" }, ] -cmd = "sphinx-{{ auto }}build --builder={{ builder }} {{ flags }} source build" +cmd = "sphinx-{{ auto }}build --builder={{ builder }} {{ flags }} source build/{{ builder }}" cwd = "doc" description = "Create documentation with sphinx" @@ -301,7 +256,7 @@ description = "Create documentation with sphinx and live-reload over a browser" [tool.pixi.feature.doc.tasks.clean-docs] depends-on = [ - { task = "docs", args = ["html", "--jobs=auto --fresh-env", ""] }, + { task = "docs", args = ["html", "--jobs=auto --fresh-env --write-all", ""] }, ] description = "Remove build artifacts and rebuild the documentation with sphinx" diff --git a/test/out.recurs.csv.gz b/test/out.recurs.csv.gz new file mode 100644 index 0000000..6db9b89 Binary files /dev/null and b/test/out.recurs.csv.gz differ diff --git a/test/test_gaussian.py b/test/test_gaussian.py new file mode 100644 index 0000000..1eae082 --- /dev/null +++ b/test/test_gaussian.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +""" +test_gaussian.py (08/2026) +Tests Gaussian weights versus outputs from recurs.f +""" + +import inspect +import pathlib +import numpy as np +import gravity_toolkit as gravtk + +# path to test files +filename = inspect.getframeinfo(inspect.currentframe()).filename +filepath = pathlib.Path(filename).absolute().parent + + +# PURPOSE: test gaussian weights functions +def test_gaussian_weights(): + # read input Gaussian weights file + filename = filepath.joinpath(f'out.recurs.csv.gz') + table = np.genfromtxt(filename, delimiter=',', names=True) + # maximum degree and order of table + lmax = table['l'].max().astype('i') + # table has four columns of values for alphas 450, 500, 625, 900 + for i, alpha in enumerate([450, 500, 625, 900]): + # data column in the csv + column = f'b_alpha_{alpha:d}' + # convert from alpha to Gaussian half-width + hw = 6371.0 * np.arccos(1.0 - np.log(2.0) / alpha) + # calculate Gaussian weights + # normalize to compare with outputs from recurs + gw = 2.0 * np.pi * gravtk.gauss_weights(hw, lmax, CUTOFF=1e-10) + # check validity + assert np.allclose(gw, table[column], atol=5e-7) diff --git a/test/test_geocenter.py b/test/test_geocenter.py new file mode 100644 index 0000000..3faae9c --- /dev/null +++ b/test/test_geocenter.py @@ -0,0 +1,104 @@ +#!/usr/bin/env python +""" +test_geocenter.py (08/2026) +""" + +import pytest +import numpy as np +import gravity_toolkit as gravtk + + +# PURPOSE: model the seasonal component of an initial degree 1 model +# using preliminary estimates of annual and semi-annual variations from LWM +# as calculated in Chen et al. (1999), doi:10.1029/1998JB900019 +# NOTE: this is to get an accurate assessment of the land water mass for the +# eustatic component (not for the ocean component from GRACE) +def test_land_seasonal(): + # create a range of test dates + grace_date = np.arange(2002.25, 2020.25, 1.0 / 12.0) + # Annual amplitudes of (Soil Moisture + Snow) geocenter components (mm) + AAx = 1.28 + AAy = 0.52 + AAz = 3.30 + # Annual phase of (Soil Moisture + Snow) geocenter components (degrees) + APx = 44.0 + APy = 182.0 + APz = 43.0 + # Semi-Annual amplitudes of (Soil Moisture + Snow) geocenter components + SAAx = 0.15 + SAAy = 0.56 + SAAz = 0.50 + # Semi-Annual phase of (Soil Moisture + Snow) geocenter components + SAPx = 331.0 + SAPy = 312.0 + SAPz = 75.0 + # calculate each geocenter component from the amplitude and phase + # converting the phase from degrees to radians + X = AAx * np.sin( + 2.0 * np.pi * grace_date + np.radians(APx) + ) + SAAx * np.sin(4.0 * np.pi * grace_date + np.radians(SAPx)) + Y = AAy * np.sin( + 2.0 * np.pi * grace_date + np.radians(APy) + ) + SAAy * np.sin(4.0 * np.pi * grace_date + np.radians(SAPy)) + Z = AAz * np.sin( + 2.0 * np.pi * grace_date + np.radians(APz) + ) + SAAz * np.sin(4.0 * np.pi * grace_date + np.radians(SAPz)) + valid = gravtk.geocenter(X=X - X.mean(), Y=Y - Y.mean(), Z=Z - Z.mean()) + valid.from_cartesian() + # calculate using direct function + DEG1 = gravtk.geocenter.land_seasonal(grace_date) + # compare geocenter and degree one components + for key in ['X', 'Y', 'Z', 'C10', 'C11', 'S11']: + assert np.allclose(valid[key], DEG1[key]) + + +def test_ocean_seasonal(): + # create a range of test dates + grace_date = np.arange(2002.25, 2020.25, 1.0 / 12.0) + # Annual amplitudes of ocean (TOPEX) geocenter components (mm) + AAx = 0.96 + AAy = 0.97 + AAz = 0.49 + # Annual phase of ocean (TOPEX) geocenter components (degrees) + APx = 73.0 + APy = 52.0 + APz = 3.0 + # Semi-Annual amplitudes of ocean (TOPEX) geocenter components + SAAx = 0.86 + SAAy = 0.73 + SAAz = 0.25 + # Semi-Annual phase of ocean (TOPEX) geocenter components + SAPx = 187.0 + SAPy = 173.0 + SAPz = 232.0 + # calculate each geocenter component from the amplitude and phase + # converting the phase from degrees to radians + X = AAx * np.sin( + 2.0 * np.pi * grace_date + np.radians(APx) + ) + SAAx * np.sin(4.0 * np.pi * grace_date + np.radians(SAPx)) + Y = AAy * np.sin( + 2.0 * np.pi * grace_date + np.radians(APy) + ) + SAAy * np.sin(4.0 * np.pi * grace_date + np.radians(SAPy)) + Z = AAz * np.sin( + 2.0 * np.pi * grace_date + np.radians(APz) + ) + SAAz * np.sin(4.0 * np.pi * grace_date + np.radians(SAPz)) + valid = gravtk.geocenter(X=X - X.mean(), Y=Y - Y.mean(), Z=Z - Z.mean()) + valid.from_cartesian() + # calculate using direct function + DEG1 = gravtk.geocenter.ocean_seasonal(grace_date) + # compare geocenter and degree one components + for key in ['X', 'Y', 'Z', 'C10', 'C11', 'S11']: + assert np.allclose(valid[key], DEG1[key]) + + +# PURPOSE: test the from_harmonics class method +def test_from_harmonics(): + rng = np.random.default_rng() + Ylms = gravtk.harmonics(lmax=1).zeros() + Ylms.clm[1, 0] = rng.random() + Ylms.clm[1, 1] = rng.random() + Ylms.slm[1, 1] = rng.random() + geocenter = gravtk.geocenter.from_harmonics(Ylms) + assert geocenter.C10 == Ylms.clm[1, 0] + assert geocenter.C11 == Ylms.clm[1, 1] + assert geocenter.S11 == Ylms.slm[1, 1]