Skip to main content

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.

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 / GPU — jax.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 output — output.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.

Metadata

Release files for pyrcel 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyrcel 2.0.0
File Size Uploaded
pyrcel-2.0.0.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyrcel 2.0.0
File Interpreter ABI Platform
pyrcel-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.9 MB

Release files / pyrcel-2.0.0.tar.gz

Download URL pyrcel-2.0.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
8dff99be3b55f8c19658c78c95a7093a8d4e7c0e48e387496de9f1311972a3fc
BLAKE2b-256 checksum
How to use checksums
570a146c92edae2b7343579da2562b1bdad82062df0bb591448edf641fc5cf09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 25, 2026.

Transparency log

Release files / pyrcel-2.0.0-py3-none-any.whl

Download URL pyrcel-2.0.0-py3-none-any.whl
Size 176.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6056c402e0a2299bd3631041cc5ae0a42b65f644719f891120c4f3b990c9c223
BLAKE2b-256 checksum
How to use checksums
0df8d123bcbec4b9aa3627e0dca319e7d78f734fc92f5062a0a08372c6cc4b9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.3.5

2 release files

1.3.4

2 release files

1.3.2

2 release files

1.3.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page