Welcome to Parcels

Parcels (Probably A Really Computationally Efficient Lagrangian Simulator) is an experimental prototype code aimed at exploring novel approaches for Lagrangian tracking of virtual ocean particles in the petascale age.

Its code is licensed under an open source MIT license and can be downloaded from https://github.com/OceanParcels/parcels.


Animation of virtual particles carried by ocean surface flow in the Agulhas Current off South Africa. The particles are advected with Parcels in data from the GlobCurrent Project. See this tutorial for the Parcels code behind this animated gif.

Parcels v0.9 manuscript and code

The manuscript detailing this first release of Parcels, version 0.9, has been accepted for publication in Geoscientific Model Development and can be cited as

Lange, M. and van Sebille, E.: Parcels v0.9: prototyping a Lagrangian Ocean Analysis framework for the petascale age, Geosci. Model Dev., https://doi.org/10.5194/gmd-2017-167, in press, 2017.

The code is available at https://github.com/OceanParcels/parcels.

Parcels development status

The current release of Parcels, version 0.9, is a fully-functional, feature-complete code for offline Lagrangian ocean analysis. See below for a list of features, or keep an eye on the Github Development Timeline page

Currently implemented in v0.9

Major developed goals beyond v0.9

  • Diffusion of particles using suite of inbuilt kernels
  • Support for non-rectangular grids, including unstructured meshes
  • Implementation of parallel execution using tiling of the domain
  • Faster and more efficient code
  • Advanced control of particles near land boundaries

Parcels Tutorials

The best way to get started with Parcels is to have a look at the Jupyter notebooks below:

Installing Parcels

The latest version of Parcels, including tests and examples, can be obtained directly from github via:

git clone https://github.com/OceanParcels/parcels.git
cd parcels
pip install -r requirements.txt
python parcels/scripts/pull_data.py

In order for Parcels to work from any directory, add the following line to your ~/.bash_profile:


Note that a functional NetCDF install is required.

Getting involved

Parcels development is supported by Imperial College London, with contributions from the people listed on the Contributors page.

If you want to help out with developing, testing or get involved in another way, please join the mailing list.

Python design overview


The figure above gives a brief overview of how the most important classes and methods in Parcels are related.

See below for links to the full documentation of the python code for Parcels

Writing Parcels Kernels

One of the most powerful features of Parcels is the ability to write custom Kernels (see e.g. this part of the Tutorial). These Kernels are little snippets of code that get executed by Parcels, giving the ability to add ‘behaviour’ to particles.

However, there are some key limitations to the Kernels that everyone who wants to write their own should be aware of:

  • Every Kernel must be a function with the following (and only those) arguments: (particle, fieldset, time, dt)

  • In order to run successfully in JIT mode, Kernel definitions can only contain the following types of commands:

    • Basic arithmetical operators (+, -, *, /) and assignments (=).

    • Basic logical operators (<, ==, >, &, |)

    • if and while loops, as well as break statements. Note that for-loops are not supported in JIT mode

    • Interpolation of a Field from the fieldset at a (time, lon, lat, depth) point, using using square brackets notation. For example, to interpolate the zonal velocity (U) field at the particle location, use the following statement:

      value = fieldset.U[time, particle.lon, particle.lat, particle.depth]
    • Functions from the maths standard library and from the custom random library at parcels.rng

    • print statements. Note however that in JIT mode these only work well for variables that are either floats or any of the inbuilt Particle properties

  • Local variables can be used in Kernels, and these variables will be accessible in all concatenated Kernels. Note that these local variables are not shared between particles, and also not between time steps.

All other functions and methods are not supported yet in Parcels Kernels. If there is a functionality that can not be programmed with this limited set of commands, please create an Issue ticket.

Parcels funding and support

Parcels development has been supported by the following organisations:


Indices and tables