Implemented the calculation of Associated Legendre polynomials using scipy, eliminating the dependency on the pyshtools package.
This commit is contained in:
parent
99bf7d752b
commit
1814b27b1a
22
README.md
22
README.md
@ -123,24 +123,26 @@ pip install pyatmos --upgrade # to upgrade a pre-existing installation
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Change log
|
## Change log
|
||||||
|
- **1.2.6 — Mar 08, 2024**
|
||||||
|
- Implemented the calculation of Associated Legendre polynomials using `scipy`, eliminating the dependency on the `pyshtools` package.
|
||||||
- **1.2.5 — Jul 16, 2023**
|
- **1.2.5 — Jul 16, 2023**
|
||||||
- Added time system for loading/updating the EOP file and Leap Second file from IERS
|
- Added time system for loading/updating the EOP file and Leap Second file from IERS.
|
||||||
- **1.2.4 — Feb 16, 2023**
|
- **1.2.4 — Feb 16, 2023**
|
||||||
- Changed functions `read_sw_nrlmsise00` and `get_sw` due to the space weather file changed from 'SW-ALL.txt' to 'SW-ALL.csv'
|
- Changed functions `read_sw_nrlmsise00` and `get_sw` due to the space weather file changed from 'SW-ALL.txt' to 'SW-ALL.csv'.
|
||||||
- Deleted the colored-progress bar for downloading space weather file, and use `wget` instead.
|
- Deleted the colored-progress bar for downloading space weather file, and use `wget` instead.
|
||||||
- **1.2.3 — Jun 7, 2021**
|
- **1.2.3 — Jun 7, 2021**
|
||||||
- Added atmospheric models **JB2008**
|
- Added atmospheric models **JB2008**
|
||||||
- Changed the output of the result to an instance
|
- Changed the output of the result to an instance.
|
||||||
- Improved the code structure for NRLMSISE-00, and the running speed is nearly threefold
|
- Improved the code structure for NRLMSISE-00, and the running speed is nearly threefold.
|
||||||
- **1.2.1 — Jan 22, 2021**
|
- **1.2.1 — Jan 22, 2021**
|
||||||
- Added **Exponential Atmosphere** up to 1000 km
|
- Added **Exponential Atmosphere** up to 1000 km.
|
||||||
- Added **Committee on Extension to the Standard Atmosphere(COESA)** up to 1000 km
|
- Added **Committee on Extension to the Standard Atmosphere(COESA)** up to 1000 km.
|
||||||
- Completed part of the help documentation for NRLMSISE-00
|
- Completed part of the help documentation for NRLMSISE-00.
|
||||||
- Improved the code structure to make it easier to read
|
- Improved the code structure to make it easier to read.
|
||||||
- **1.1.2 — Jul 26, 2020**
|
- **1.1.2 — Jul 26, 2020**
|
||||||
- Added colored-progress bar for downloading data
|
- Added colored-progress bar for downloading data.
|
||||||
- **1.1.0 — Mar 29, 2020**
|
- **1.1.0 — Mar 29, 2020**
|
||||||
- Added the International Standard Atmosphere(ISA) Model up to 86kms
|
- Added the International Standard Atmosphere(ISA) Model.
|
||||||
|
|
||||||
## Next release
|
## Next release
|
||||||
|
|
||||||
|
BIN
pyatmos/.DS_Store
vendored
BIN
pyatmos/.DS_Store
vendored
Binary file not shown.
@ -1,6 +1,6 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
from scipy.interpolate import CubicSpline
|
from scipy.interpolate import CubicSpline
|
||||||
from pyshtools.legendre import PLegendreA,PlmIndex
|
from scipy.special import lpmv
|
||||||
import pkg_resources
|
import pkg_resources
|
||||||
|
|
||||||
def nrlmsis00_data():
|
def nrlmsis00_data():
|
||||||
@ -275,9 +275,30 @@ def sg0(ex,p,ap):
|
|||||||
g0(ap[6],p)*ex**12)*(1-ex**8)/(1-ex))/sumex(ex)
|
g0(ap[6],p)*ex**12)*(1-ex**8)/(1-ex))/sumex(ex)
|
||||||
|
|
||||||
# =============== 3hr magnetic activity functions =================== #
|
# =============== 3hr magnetic activity functions =================== #
|
||||||
|
def PLegendreA(lmax, x):
|
||||||
|
"""
|
||||||
|
Calculates all unnormalized associated Legendre polynomials up to degree lmax for a given x value.
|
||||||
|
|
||||||
|
Inputs:
|
||||||
|
lmax -> [int] The maximum degree of the polynomials to compute.
|
||||||
|
x -> [float] The value at which to evaluate the polynomials.
|
||||||
|
Outputs:
|
||||||
|
res -> [array-like] An array of shape (lmax + 1) * (lmax + 2) // 2 containing the values of the unnormalized associated Legendre polynomials P_l^m(x) for l = 0, 1, ..., lmax and m = 0, 1, ..., l.
|
||||||
|
Note: The Condon-Shortley phase is excluded.
|
||||||
|
"""
|
||||||
|
res = np.zeros((lmax + 1) * (lmax + 2) // 2)
|
||||||
|
|
||||||
|
# Compute P_l^m(x) for all l and m
|
||||||
|
k = 0
|
||||||
|
for l in range(lmax + 1):
|
||||||
|
for m in range(l + 1):
|
||||||
|
res_k = lpmv(m, l, x)
|
||||||
|
if m%2: res_k *= -1
|
||||||
|
res[k] = res_k
|
||||||
|
k += 1
|
||||||
|
return res
|
||||||
|
|
||||||
def lengendre(g_lat,lmax = 8):
|
def lengendre(g_lat,lmax = 8):
|
||||||
# Index of PLegendreA_x can be calculated by PlmIndex(l,m)
|
|
||||||
x = np.sin(np.deg2rad(g_lat))
|
x = np.sin(np.deg2rad(g_lat))
|
||||||
PLegendreA_x = PLegendreA(lmax,x)
|
PLegendreA_x = PLegendreA(lmax,x)
|
||||||
return PLegendreA_x
|
return PLegendreA_x
|
||||||
|
8
setup.py
8
setup.py
@ -2,7 +2,7 @@ from setuptools import setup,find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name = 'pyatmos',
|
name = 'pyatmos',
|
||||||
version = '1.2.5',
|
version = '1.2.6',
|
||||||
description = 'A package to estimate the vertical structure of atmosphere with various atmospheric density models',
|
description = 'A package to estimate the vertical structure of atmosphere with various atmospheric density models',
|
||||||
author = 'Chunxiao Li',
|
author = 'Chunxiao Li',
|
||||||
author_email = 'lcx366@126.com',
|
author_email = 'lcx366@126.com',
|
||||||
@ -11,13 +11,14 @@ setup(
|
|||||||
long_description_content_type = 'text/markdown',
|
long_description_content_type = 'text/markdown',
|
||||||
long_description = open('README.md', 'rb').read().decode('utf-8'),
|
long_description = open('README.md', 'rb').read().decode('utf-8'),
|
||||||
keywords = ['coesa76','nrlmsise00','jb2008'],
|
keywords = ['coesa76','nrlmsise00','jb2008'],
|
||||||
python_requires = '>=3.8',
|
python_requires = '>=3.10',
|
||||||
classifiers = [
|
classifiers = [
|
||||||
'Development Status :: 4 - Beta',
|
'Development Status :: 4 - Beta',
|
||||||
'Intended Audience :: Education',
|
'Intended Audience :: Education',
|
||||||
'Intended Audience :: Science/Research',
|
'Intended Audience :: Science/Research',
|
||||||
'Programming Language :: Python :: 3.9',
|
|
||||||
'Programming Language :: Python :: 3.10',
|
'Programming Language :: Python :: 3.10',
|
||||||
|
'Programming Language :: Python :: 3.11',
|
||||||
|
'Programming Language :: Python :: 3.12',
|
||||||
'License :: OSI Approved :: MIT License',
|
'License :: OSI Approved :: MIT License',
|
||||||
],
|
],
|
||||||
packages = find_packages(),
|
packages = find_packages(),
|
||||||
@ -29,7 +30,6 @@ setup(
|
|||||||
'numba',
|
'numba',
|
||||||
'pandas',
|
'pandas',
|
||||||
'astropy',
|
'astropy',
|
||||||
'pyshtools',
|
|
||||||
'wget'
|
'wget'
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user