High-performance Atmospheric Radiation Package
Project description
Pyharp: Python-first High-performance Atmosphere Radiation Package
Pyharp is the one-stop tool for calculating the radiation flux of planetary atmospheres, from terrestrial to giant planets. Detailed documentation and examples are available at https://pyharp.readthedocs.io.
Installation
Pyharp can be installed via pip:
pip install pyharp
We support Linux and Mac operation systems with Python version 3.10+.
Spectroscopy workflow
Pyharp also includes pyharp.spectra, a pure-Python spectroscopy workflow for
HITRAN line data, HITRAN CIA data, single-state absorption spectra,
transmittance products, diagnostic plots, and gas-mixture overview figures.
The former standalone spectra library now lives under the pyharp.spectra
namespace.
The main library entry points are available from pyharp.spectra:
from pathlib import Path
from pyharp.spectra import (
AbsorptionSpectrum,
SpectroscopyConfig,
SpectralBandConfig,
compute_absorption_spectrum,
)
band = SpectralBandConfig(
name="single_state",
wavenumber_min_cm1=20.0,
wavenumber_max_cm1=2500.0,
resolution_cm1=1.0,
)
config = SpectroscopyConfig(
output_path=Path("output/h2o_absorption_300K_1bar.nc"),
hitran_cache_dir=Path("hitran"),
species_name="H2O",
)
spectrum: AbsorptionSpectrum = compute_absorption_spectrum(
config=config,
band=band,
temperature_k=300.0,
pressure_pa=1.0e5,
)
SpectroscopyConfig.hitran_cache_dir stores downloaded HITRAN line and CIA
files. SpectroscopyConfig.output_path controls where NetCDF products are
written by CLI helpers and is also used to create parent output directories.
H2O continuum calculations use the MT_CKD_H2O coefficient file at
external/MT_CKD_H2O/data/absco-ref_wv-mt-ckd.nc relative to the Pyharp
repository root. It is tracked as a Git submodule. Clone Pyharp with
submodules to fetch it immediately:
git clone --recurse-submodules https://github.com/chengcli/pyharp
If you already cloned Pyharp, initialize the submodule from the repository root:
git submodule update --init --recursive external/MT_CKD_H2O
If you are using command line argument outside of pyharp, clone MT_CKD directly:
mkdir -p external && cd external && git clone https://github.com/AER-RC/MT_CKD_H2O
The pyharp-dump CLI writes NetCDF spectroscopy products for single species,
CIA pairs, and gas mixtures:
pyharp-dump xsection --species H2O --temperature-k 300 --pressure-bar 1 --wn-range=20,2500
pyharp-dump xsection --pair H2-H2 --temperature-k 300 --pressure-bar 1 --wn-range=20,10000
pyharp-dump xsection --pair H2-H2 --cia-model xiz --h2-state eq --temperature-k 300 --pressure-bar 1 --wn-range=20,10000
pyharp-dump transmission --species H2O --path-length-km 1 --wn-range=20,2500
Use repeated --wn-range=min,max values to write one NetCDF file per band.
When you also pass --output, pyharp appends _<wnmin>_<wnmax> to the
requested stem for each generated file.
Use --output-dir to place auto-generated filenames under a different
directory without overriding the filename pattern. For state-grid dumps, the
auto-generated state section is written as
<min_temp>_<max_temp>K_<min_pres>_<max_pres>bar, where temperature bounds
come from the full (temperature + del_temperature) grid.
Use --temperature-k and --pressure-bar as paired comma-separated vectors,
for example --temperature-k 300,400 --pressure-bar 1,10. Add
--del-temperature-k to evaluate temperature anomalies around each base
state, for example --del-temperature-k -10,-5,0,5,10. Dump outputs are
written on (del_temperature, pressure, wavenumber), include a
temperature(pressure) variable for the base temperatures, store the
pressure coordinate in Pa, and still retain
degenerate del_temperature and pressure dimensions when only one state is
requested.
Across pyharp.spectra, wavenumber ranges are interpreted as
lower-inclusive and upper-exclusive: --wn-range=20,22 with 1 cm^-1
resolution samples 20 and 21, not 22.
See the pyharp-dump CLI documentation
for the full command reference, output naming conventions, and NetCDF schema.
Plotting diagnostics are available from one entry point, pyharp-plot. It
provides CIA binary coefficient, molecular cross-section, attenuation,
transmission, and overview plot subcommands:
pyharp-plot binary --pair H2-H2 --temperature-k 300 --wn-range=20,10000
pyharp-plot binary --pair H2-H2 --cia-model 2018 --h2-state eq --temperature-k 300 --wn-range=20,10000
pyharp-plot binary --pair H2-H2 --cia-model xiz --h2-state eq --temperature-k 300 --wn-range=20,10000
pyharp-plot xsection --species CO2 --temperature-k 300 --pressure-bar 1 --wn-range=20,2500
pyharp-plot attenuation --species CO2 --temperature-k 300 --pressure-bar 1 --wn-range=20,2500
pyharp-plot transmission --composition H2O:0.1,H2:0.9 --temperature-k 300 --pressure-bar 1 --path-length-km 1 --wn-range=25,2500
pyharp-plot overview --species H2O CO2 --temperature-k 300 --pressure-bar 1 --wn-range=20,2500 --wn-range=2500,10000
Use --pair for CIA pairs, --species for molecules, and --composition
for gas mixtures such as H2O:0.1,H2:0.9. All plot commands accept
--wn-range=min,max; overview accepts multiple --wn-range values for
multi-page PDFs. These ranges are lower-inclusive and upper-exclusive. Use
--output to choose the output path. Without --output, plots are written
under --output-dir (default output/) with names derived from the target,
plot type, temperature, pressure, and wavenumber range.
For plot commands that use pressure, --temperature-k and --pressure-bar
also accept matched comma-separated vectors such as
--temperature-k 300,400 --pressure-bar 1,10. pyharp-plot then runs one
plot per (T,P) pair in parallel. For xsection, attenuation, and
transmission, one explicit --output path reused across multiple state
pairs is expanded with _<temperature>K_<pressure>bar suffixes. For
overview, all state/range pages are combined into one PDF.
Molecular line calculations also accept --broadening-composition BROADENER:FRACTION,...,
for example air:0.8,self:0.2 or H2:0.85,He:0.15.
If a requested foreign broadener is unavailable in the HITRAN table for the
active absorber, Pyharp falls back to air for that fraction.
CIA pair workflows now derive the backend directly from --cia-model:
--cia-model autokeeps the built-in HITRAN default filename mapping underhitran/--cia-model 2011resolvesH2-H2_2011.ciaorH2-He_2011.ciafrom HITRAN--cia-model 2018 --h2-state eq|nmresolvesH2-H2_eq_2018.ciaorH2-H2_nm_2018.ciafrom HITRAN--cia-model xiz|orton --h2-state eq|nmselects one of the legacy H2-H2 or H2-He tables underorton_xiz_cia/
If a requested HITRAN pair/model/state combination does not have a configured
file, pyharp raises an error rather than silently falling back to another CIA
dataset. HITRAN 2011 does not distinguish eq vs nm, while xiz and
orton require an explicit H2 spin-state choice through --h2-state.
See the pyharp-plot CLI documentation for command-specific options and more examples.
Supported built-in HITRAN line species are CH4, CO2, H2, H2O, H2S,
N2, and NH3. Built-in CIA pair resolution includes the self pairs for these species
where HITRAN CIA data is configured, plus CO2-CH4, CO2-H2, H2-He, and
N2-CH4.
pyharp.spectra does not provide a fixed reference-column radiative-transfer
experiment. Use the core Pyharp radiative-transfer APIs for column RT
calculations, and use pyharp.spectra for spectroscopy inputs, diagnostics,
single-state products, and overview plots.
Development
If you want to further develop Pyharp, you will need to install it locally, which allows you to modify the source code and test. Open a Linux or Mac terminal and clone this repo using the following command:
git clone https://github.com/chengcli/pyharp
This will copy all source files into your local computer. You will need to install a few
system libraries before installing Pyharp. All following instructions are executed under
the pyharp/ directory.
System required for building locally
- Python 3.10+
- Linux or macOS
- netCDF
- python virtual environment (venv)
MacOS installation
brew install netcdf
RedHat installation
sudo yum install netcdf
Ubuntu installation
sudo apt-get install libnetcdf-dev
Build C++ library
After you completed the installation steps, you can build the pyharp library.
We will build the package in-place, meaning that the build (binary files) are
located under pyharp/build/bin. To do so, make a new directory named build
mkdir build
All build files will be generated and placed under this directory. It is completely safe
to delete the whole directory if you want another build. cd to build and cmake
cd build
cmake ..
This command tells the cmake command to look for CMakeFiles.txt in the parent directory,
and start configuring the compile environment. Then compile the code by
make -j4
This comman will use 4 cores to compile the code in parallel. Once complete, all
executable files will be placed in build/bin.
Build python package locally (dev mode)
The python library can be installed by running the following command in the root directory:
pip install -e .
Test the installation
To test the installation, import pyharp in a python shell:
import pyharp
The build is successful if you do not see any error messages.
Contributing
Contributions are welcome! Please open an issue or PR if you’d like to:
- Find a bug
- Suggest new functions
- Add examples
- Improve documentation
- Expand test coverage
Contact
Maintained by @chengcli — feel free to reach out with ideas, feedback, or collaboration proposals.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyharp-2.3.8-cp313-cp313-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp313-cp313-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 31.3 MB
- Tags: CPython 3.13, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f055113c3dbfcfb5646c660ed8bf22657c650b59c3664d190bb1933501846d8f
|
|
| MD5 |
94c9b0b9a08371caaa0246ad731c4d2a
|
|
| BLAKE2b-256 |
c964d6ab0471a8a04bad0101ed463572478fe8999e7365c3355cb4d75b54a8f5
|
File details
Details for the file pyharp-2.3.8-cp313-cp313-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp313-cp313-macosx_15_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.13, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b47a0cc9f2ae59a1bddee565693f2e158dfd4622fe3b23c553e30e9b837f18a
|
|
| MD5 |
9ef331bc28679beac93478da24d72e88
|
|
| BLAKE2b-256 |
7e3658707d99ac16ba6999cb32efda21b713d2ded9b7177660c284714c4d3c57
|
File details
Details for the file pyharp-2.3.8-cp312-cp312-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp312-cp312-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 31.2 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
722b6727885fd4d288c3e83bb01e8622bd2c78571e9fb8dd4a178ead389480d4
|
|
| MD5 |
ba0db0a2de3a58e00db1390c0ee4f7a1
|
|
| BLAKE2b-256 |
0fdfb921404288e7760512fab31533c5cde435fe33ae3ca2cd95fe5084dc5bcb
|
File details
Details for the file pyharp-2.3.8-cp312-cp312-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp312-cp312-macosx_15_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.12, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ade8b42bc8507f2e91da413c35b6efc124d4e56ad1860fefe4c1defec4c6ab60
|
|
| MD5 |
3a21d842f5f45ed4a190aa95d7a053a4
|
|
| BLAKE2b-256 |
c17c294e99ddde29d0dc29c0c8d4fc5bb5a740f68552143d2ae3d3b91b481ff7
|
File details
Details for the file pyharp-2.3.8-cp311-cp311-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp311-cp311-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 31.2 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0563e0cb7f9e9570780e35cca8ad6a49bacc49b9f24fd13cd544ac0954d5fdee
|
|
| MD5 |
d45b37f7670851a91f7eb3fe53c4bc9f
|
|
| BLAKE2b-256 |
95fc465886952c91d9b08ad3729aa0af01b17aebd627d6b92c304ea8f5beca90
|
File details
Details for the file pyharp-2.3.8-cp311-cp311-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp311-cp311-macosx_15_0_arm64.whl
- Upload date:
- Size: 4.9 MB
- Tags: CPython 3.11, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d69861c69415129cb0700338435669a2f19bbbd7384f8a248725d1a04bc68db
|
|
| MD5 |
25c4f51a6513f6deb9ab82d72c2ec38a
|
|
| BLAKE2b-256 |
6c9fefad9396a22fe07da1f338c7f4c008f46ae02b29838a6469d752e80fdecd
|
File details
Details for the file pyharp-2.3.8-cp310-cp310-manylinux_2_27_x86_64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp310-cp310-manylinux_2_27_x86_64.whl
- Upload date:
- Size: 31.1 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d5d448049c63b0bb0fedc17e90f80a2ea2edd56ee01636adacf24eaa2cbb91ca
|
|
| MD5 |
4387def8dc5cea43df5b74e3b9aac4f3
|
|
| BLAKE2b-256 |
4ae1cbaaa72d7d0287d0507dad9a710bf78707aae364cb39fbcf00fd4a2ba85f
|
File details
Details for the file pyharp-2.3.8-cp310-cp310-macosx_15_0_arm64.whl.
File metadata
- Download URL: pyharp-2.3.8-cp310-cp310-macosx_15_0_arm64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.10, macOS 15.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec7245a969c5d7d612ee5a67628787ba77eab09c23350d11e9dc4cd2f3533e26
|
|
| MD5 |
457e6f294ccaabd27924bdc82b489776
|
|
| BLAKE2b-256 |
bd485f6a7217be20886dec84ed0112e38d84e510edaa5783945de84fc97e17b5
|