Skip to content

Python (and C++) interface to PartMC with Jupyter/Python, Julia and Matlab examples

License

Notifications You must be signed in to change notification settings

emmacware/PyPartMC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PyPartMC (pre-alpha!)

PyPartMC is a Python interface to PartMC, a particle-resolved Monte-Carlo code for atmospheric aerosol simulation. As it is implemented in C++, it also constitutes a C++ API to the PartMC Fortran internals.

US Funding License: GPL v3 Copyright Maintenance Github Actions Build Status API docs

TL;DR (try in a Jupyter notebook)

Python 3 Linux OK macOS OK Windows OK Jupyter

! pip install git+https://github.com/open-atmos/PyPartMC.git
import PyPartMC

Features

  • works on Linux, macOS and Windows (compatibility assured with CI builds)
  • hassle-free installation using pip (prior PartMC installation not needed)
  • works out of the box on mybinder.org, Google Colab and alike
  • ships with a set of examples maintained in a form of Jupyter notebooks
  • Pythonic API (but retaining PartMC jargon) incl. exceptions and GC deallocation of Fortran objects
  • auto-generated docs on the web
  • support for [de]serialization of all exposed structures using JSON
  • based on unmodified PartMC code
  • does not use or require shell or netCDF Fortran library
  • aiming at 100% unit test coverage

Usage examples

hello world

import PyPartMC
... TODO

Jupyter notebooks with examples

... TODO ... Open In Colab

usage in other projects

PyPartMC is also used within the tests of PySDM project ... TODO

Implementation outline

  • PyPartMC is written in C++, Fortran and Python and uses pybind11 and CMake.
  • JSON support is handled with nlohmann::json and pybind11_json
  • PartMC and selected parts of SUNDIALS are compiled during pip install and statically linked
  • C (SUNDIALS), C++ (pybind11, ...) and Fortran (PartMC) dependencies are linked through git submodules
  • a mock of Fortran netCDF API is used for i/o from/to JSON using existing netCDF API calls within PartMC
  • a mock of Fortran MPI API is used for error handling using existing MPI API calls within PartMC

Troubleshooting

Common installation issues

error: [Errno 2] No such file or directory: 'cmake'

Try rerunning after installing CMake (e.g., apt-get install cmake or brew install cmake)

How to debug

git clone --recursive git+https://github.com/open-atmos/PyPartMC.git
cd PyPartMC
DEBUG=1 VERBOSE=1 pip --verbose install -e .
gdb python 
(gdb) run -m pytest -s tests

Credits

PyPartMC:

author: Sylwester Arabas
funding: US Department of Energy Atmospheric System Research programme
copyright: University of Illinois at Urbana-Champaign
licence: GPL v3

PartMC:

authors: Nicole Riemer, Matthew West, Jeff Curtis et al.
licence: GPL v2 or later

About

Python (and C++) interface to PartMC with Jupyter/Python, Julia and Matlab examples

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 34.4%
  • Python 31.7%
  • Fortran 28.4%
  • CMake 5.5%