Citation

openPMD (Open Standard for Particle-Mesh Data Files) is a community project with many people contributing to it. If you use openPMD and/or openPMD related software in your work, please credit it when publishing and/or presenting work performed with it in order to give back to the community.

openPMD-standard

The central definition of openPMD is the meta data schema defined in openPMD/openPMD-standard. The most general reference to openPMD is:

Tip

Axel Huebl, Remi Lehe, Jean-Luc Vay, David P. Grote, Ivo F. Sbalzarini, Stephan Kuschel, David Sagan, Christopher Mayes, Frederic Perez, Fabian Koller, Franz Poeschel, Carsten Fortmann-Grote, Angel Ferran Pousa, Juncheng E, Maxence Thevenet and Michael Bussmann. “openPMD: A meta data standard for particle and mesh based data,” DOI:10.5281/zenodo.591699 (2015)

The equivalent BibTeX code is:

@misc{openPMDstandard,
  author       = {Huebl, Axel and
                  Lehe, R{\'e}mi and
                  Vay, Jean-Luc and
                  Grote, David P. and
                  Sbalzarini, Ivo and
                  Kuschel, Stephan and
                  Sagan, David and
                  Mayes, Christopher and
                  P{\'e}rez, Fr{\'e}d{\'e}ric and
                  Koller, Fabian and
                  Poeschel, Franz and
                  Fortmann-Grote, Carsten and
                  Ferran Pousa, Angel and
                  E, Juncheng and
                  Th{\'e}venet, Maxence and
                  Bussmann, Michael},
  title        = {{openPMD: A meta data standard for particle and mesh based data}},
  year         = 2015,
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.591699},
  url          = {https://www.openPMD.org},
  howpublished = {https://github.com/openPMD}
}

Since the openPMD-standard is an actively evolving meta data schema, a specific version of the openPMD standard might be used in your work. You can select a version-specific DOI from the release page and add the version number to the cited title, e.g.

Note

[author list as above] … “openPMD 1.1.0: A meta data standard for particle and mesh based data,” DOI:10.5281/zenodo.1167843 (2018)

openPMD-api

openPMD-api is a software library that provides a reference implementation of the openPMD-standard for popular data formats. It targets both desktop as well as high-performance computing environments.

It is good scientific practice to document all used software, including transient dependencies, with versions in, e.g. a methods section of a publication. As a software citation, you almost always want to refer to a specific version of openPMD-api in your work, as illustrated for version 0.14.3:

Tip

Axel Huebl, Franz Poeschel, Fabian Koller, Junmin Gu, Michael Bussmann, Jean-Luc Vay and Kesheng Wu. “openPMD-api 0.14.3: C++ & Python API for Scientific I/O with openPMD,” DOI:10.14278/rodare.1234 (2021)

A list of all releases and DOIs can be found on the release page.

We also provide a DOI that refers to all releases of openPMD-api:

Note

Axel Huebl, Franz Poeschel, Fabian Koller, Junmin Gu, Michael Bussmann, Jean-Luc Vay and Kesheng Wu. “openPMD-api: C++ & Python API for Scientific I/O with openPMD” DOI:10.14278/rodare.27 (2018)

The equivalent BibTeX code is:

@misc{openPMDapi,
  author       = {Huebl, Axel and
                  Poeschel, Franz and
                  Koller, Fabian and
                  Gu, Junmin and
                  Bussmann, Michael and
                  Vay, Jean-Luc and
                  Wu, Kesheng},
  title        = {{openPMD-api: C++ \& Python API for Scientific I/O with openPMD}},
  month        = june,
  year         = 2018,
  doi          = {10.14278/rodare.27},
  url          = {https://github.com/openPMD/openPMD-api}
}

Dependent Software

The good way to control complex software environments is to install software through a package manager (see installation). Furthermore, openPMD-api provides functionality to simplify the documentation of its version and enabled backends:

C++17

#include <openPMD/openPMD.hpp>
#include <iostream>

namespace io = openPMD;

// ...
std::cout << "openPMD-api: "
          << io::getVersion() << std::endl;
std::cout << "openPMD-standard: "
          << io::getStandard() << std::endl;

std::cout << "openPMD-api backend variants: " << std::endl;
for( auto const & v : io::getVariants() )
    std::cout << "  " << v.first << ": "
              << v.second << std::endl;

Python

import openpmd_api as io

print("openPMD-api: {}"
      .format(io.__version__))
print("openPMD-api backend variants: {}"
      .format(io.variants))