pyrcel

An implementation of a simple, adiabatic cloud parcel model for use in aerosol-cloud interaction studies.
https://github.com/darothen/pyrcel

Category: Atmosphere
Sub Category: Atmospheric Chemistry and Aerosol

Keywords from Contributors

optimize archiving transforms measur generic observation compose conversion projection animals

Last synced: about 22 hours ago
JSON representation

Repository metadata

A 0D, adiabatic cloud parcel model for studying aerosol activation.

README.md

pyrcel: cloud parcel model

sample parcel model run
DOIPyPI VersionCIDocumentation Status

pyrcel is a simple, adiabatic cloud parcel model for use in
aerosol-cloud interaction studies. Rothenberg and Wang (2016) discuss the model in detail and its improvements over Nenes et al (2001):

  • Implementation of κ-Köhler theory for condensation physics (Petters and Kreidenweis, 2007)
  • Extension of model to handle arbitrary sectional representations of aerosol populations, based on user-controlled empirical or parameterized size distributions
  • JAX/diffrax-based numerical core — differentiable, batchable, GPU-ready, with no Fortran/SUNDIALS dependency

Detailed documentation is available, including a scientific description, installation details, and a basic example.

[!WARNING]
Version 2.0 Notice

This is pyrcel v2.0, a major new release with more features, greater flexibility, and a JAX-based differentiable kernel. However, there are several breaking changes compared to version 1.3.x.

Please review the migration guide to update your code.

If you wish to continue using the legacy (v1.3.x) model, you can install it from PyPI by pinning the version:

pip install "pyrcel<2"

Quick Start

The easiest way to run pyrcel from source is with uv:

$ git clone https://github.com/darothen/pyrcel.git && cd pyrcel
$ uv run python examples/basic_run.py

uv will automatically create an isolated environment and install all dependencies.
The first call compiles JAX kernels; subsequent calls are fast.

Usage

import pyrcel as pm

sulfate = pm.AerosolSpecies(
    "sulfate", pm.Lognorm(mu=0.05, sigma=2.0, N=1000.0), kappa=0.54, bins=50
)
model = pm.ParcelModel([sulfate], V=1.0, T0=283.0, S0=-0.02, P0=85000.0, console=True)
output = model.run(t_end=300.0, output_dt=10.0, terminate=True, live=True)

print(f"S_max  = {output.summary['S_max']*100:.3f} %")
print(f"N_act  = {output.Nd:.3e} m⁻³")

Key capabilities:

  • Autodiff — exact gradients of S_max w.r.t. updraft speed, initial conditions,
    accommodation coefficient, and aerosol properties via jax.grad.
  • Batching / GPUjax.vmap runs ensembles of parcels in one compiled call;
    pass device="gpu" to ParcelModel for CUDA acceleration.
  • Time-varying updraft — pass a pyrcel.InterpolatedUpdraft(ts=..., vs=...) as V.
  • Flexible outputoutput.to_pandas(), .to_xarray(), .to_netcdf(), .to_parquet().

The differentiable core (pyrcel.integrator, pyrcel.equilibrate) is usable directly
for jit/grad/vmap; ParcelModel is the interactive convenience layer (console
output, progress meter, post-solve summary table).

Installation

From PyPI (recommended):

$ pip install pyrcel

JAX (CPU) is included by default. No extras needed for standard use.

From source:

$ git clone https://github.com/darothen/pyrcel.git && cd pyrcel
$ uv sync
$ uv run python examples/basic_run.py

GPU support (CUDA 12):

$ pip install "pyrcel[gpu]"

Requirements

Development

Clone the repo and install with dev dependencies:

$ git clone https://github.com/darothen/pyrcel.git && cd pyrcel
$ uv sync --extra test
$ prek install   # installs the git pre-commit hook (requires prek: https://prek.j178.dev)

Run the fast test suite:

$ uv run pytest tests/ -m "not slow"

Lint and format are handled automatically by prek on commit, or run manually:

$ prek run --all-files

Please fork this repository if you intend to develop the model further so that the
code's provenance can be maintained.

License / Usage

All scientific code should be licensed. This code is released under the New BSD (3-clause) license.

If you use this for any scientific work resulting in a publication, please cite our
original publication detailing the model:

@article {
      author = "Daniel Rothenberg and Chien Wang",
      title = "Metamodeling of Droplet Activation for Global Climate Models",
      journal = "Journal of the Atmospheric Sciences",
      year = "2016",
      publisher = "American Meteorological Society",
      address = "Boston MA, USA",
      volume = "73",
      number = "3",
      doi = "10.1175/JAS-D-15-0223.1",
      pages= "1255 - 1272",
      url = "https://journals.ametsoc.org/view/journals/atsc/73/3/jas-d-15-0223.1.xml"
}

Additionally, please consider citing the bespoke DOI for the
specific release version of pyrcel
that you used during your research (or the base version you modified). This
allows us to track adoption and use of specific model versions over time.


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 1 day ago

Total Commits: 446
Total Committers: 6
Avg Commits per committer: 74.333
Development Distribution Score (DDS): 0.197

Commits in past year: 48
Committers in past year: 4
Avg Commits per committer in past year: 12.0
Development Distribution Score (DDS) in past year: 0.063

Name Email Commits
Daniel Rothenberg d****n@m****u 358
Daniel Rothenberg d****l@d****m 82
Marco Wurth m****h@k****u 2
dependabot[bot] 4****] 2
Milos Lompar l****m@m****u 1
Alicja a****a@c****l 1

Committer domains:


Issue and Pull Request metadata

Last synced: 17 days ago

Total issues: 43
Total pull requests: 25
Average time to close issues: 10 months
Average time to close pull requests: 2 months
Total issue authors: 5
Total pull request authors: 6
Average comments per issue: 0.79
Average comments per pull request: 0.72
Merged pull request: 15
Bot issues: 0
Bot pull requests: 5

Past year issues: 31
Past year pull requests: 15
Past year average time to close issues: 2 days
Past year average time to close pull requests: 23 days
Past year issue authors: 2
Past year pull request authors: 5
Past year average comments per issue: 0.65
Past year average comments per pull request: 0.87
Past year merged pull request: 10
Past year bot issues: 0
Past year bot pull requests: 2

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/darothen/pyrcel

Top Issue Authors

  • darothen (39)
  • Tianning-Zhao (1)
  • feifeiya8 (1)
  • marcowurth (1)
  • slayoo (1)

Top Pull Request Authors

  • darothen (14)
  • dependabot[bot] (5)
  • marcowurth (3)
  • SecondGlanceFromAlice (1)
  • wx4stg (1)
  • lompar (1)

Top Issue Labels

  • v2 (24)
  • infrastructure (8)
  • feature (7)
  • refactor (5)
  • model feature (4)
  • documentation (4)
  • science (3)
  • testing (1)

Top Pull Request Labels

  • dependencies (5)
  • python:uv (2)

Package metadata

proxy.golang.org: github.com/darothen/pyrcel

  • Homepage:
  • Documentation: https://pkg.go.dev/github.com/darothen/pyrcel#section-documentation
  • Licenses: bsd-3-clause
  • Latest release: v2.0.0+incompatible (published about 2 months ago)
  • Last Synced: 2026-08-05T09:43:12.653Z (6 days ago)
  • Versions: 14
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent packages count: 5.401%
    • Average: 5.583%
    • Dependent repos count: 5.764%
pypi.org: pyrcel

pyrcel: 0D adiabatic cloud parcel model

  • Homepage:
  • Documentation: https://pyrcel.readthedocs.io/en/latest/
  • Licenses: BSD-3-Clause
  • Latest release: 2.0.0 (published about 2 months ago)
  • Last Synced: 2026-08-05T09:43:10.671Z (6 days ago)
  • Versions: 5
  • Dependent Packages: 1
  • Dependent Repositories: 1
  • Downloads: 3,203 Last month
  • Rankings:
    • Forks count: 8.719%
    • Dependent packages count: 10.126%
    • Stargazers count: 13.962%
    • Average: 17.253%
    • Dependent repos count: 21.545%
    • Downloads: 31.913%
  • Maintainers (1)

Dependencies

requirements.txt pypi
  • Assimulo ==3.0
  • numba ==0.45.1
  • numpy ==1.17.0
  • pandas ==0.25.1
  • scipy ==1.3.1
  • xarray ==0.12.3
docs/requirements.txt pypi
  • ipython *
  • numba <0.57
  • numpy <1.25
  • numpydoc *
  • pandas *
  • pyyaml *
  • scipy <1.11
  • setuptools *
  • sphinx *
  • sphinx_rtd_theme *
  • xarray *
pyproject.toml pypi
  • numba *
  • numpy *
  • pandas *
  • pyyaml *
  • scipy *
  • setuptools *
  • setuptools-scm *
  • xarray *
docs/environment.yml conda
  • assimulo
  • ipython
  • numba
  • numpy
  • numpydoc
  • pandas
  • python 3.7
  • pyyaml
  • scipy
  • sphinx
  • sphinx_rtd_theme
  • xarray

Score: 13.502124962123938