User Tools

Site Tools



On this page we give a brief overview of the 3D particle code that was (and is being) developed in our group: Pamdi3D (Particle Model Discharge). A brief summary of the history: the development of a particle code was started by Chao Li, who developed a hybrid particle/fluid code. Margreet Nool restructured this code, from which Jannis Teunissen then extracted just the particle part. To be able to do meaningful simulations with just particles, much had to be changed and essentially all the code was rewritten by Jannis. Later, Anbang Sun has contributed to parts of the code.

Important notes This code is still under development. Currently, we are transitioning to a newer version, for which much has been rewritten to make the code more general and clear. If you want incorporate parts of our particle model in your own code, please contact us for more details. Furthermore, Jannis is currently busy writing a paper describing this code in much more detail than on this page.


It is often important to know for what applications a simulation model was developed, because different simplifying assumptions can be made for different applications, and these assumptions make a model more efficient but also more specialized. Therefore, let us give a list of applications we had in mind while developing the simulations. We wanted to simulate/study:

  • the inception of streamer discharges around electrodes
  • the formation and destabilization of inception clouds around electrodes
  • the formation of single streamer discharges by a polarized `seed'
  • the evolution of a discharge in an electric field globally above breakdown
  • the interaction between streamer channels
  • the branching of streamers


In this code, the following assumptions are made:

  • The discharge plasma is weakly ionized.
  • The electrical currents are not big enough to create significant magnetic fields compared to the electric fields.
  • Ions are immobile.
  • We do not include heating or chemical reactions in the background gas.

Description of components

Here we'll describe the functionality of the essential components of the code.

Only electrons are included as particles in the particle model. Different types of ions are included as a densities, and neutral gas molecules provide a background that electrons randomly collide with.


We use a particle-in-cell (PIC) approach, with tri-linear interpolation to map particles to densities, also known as cloud-in-cell (CIC). As a particle mover we use the so-called velocity-verlet scheme. For electron-neutral collisions, we use the null-collision method. For a description of the adaptive particle management that we use, see this paper.

Electric field

We use a block-based adaptive mesh refinement strategy. For each block, the Poisson equation is solved for the electric potential using Fishpack. Because of this, blocks at the same refinement level are not allowed to touch each other.


We include a discrete approach to photoionization, with data for nitrogen/oxygen mixtures, much like in this article DOI


We currently include an electrode in a less-than-optimal way, namely by placing test charges on the electrode surface that are adjusted to keep it equipotential. Because we use the rather strict (buf efficient) Fishpack solver, we do not have the flexibility of including them more directly into the equations.


The input consists of particle cross sections and a text configuration file. Output is in the Silo format, which can be easily visualized using for example Visit or Paraview.

Usage examples

These will be added in the near future…

Source / installation

The source code can be found here.

The code depends on the following external libraries, which are distributed along with the code:

Furthermore, you need to have a working MPI installation with development files, such as openmpi or mpich, and a Fortran compiler.

To compile, execute the following commands:

$ git submodule init
$ git submodule update
$ make

Running (sequential):

$ ./pampi3d my_config_file.txt

Running (parallel, N = number of tasks):

$ mpirun -n N ./pampi3d my_config_file.txt

You can also specify multiple configuration files, like:

$ ./pampi3d cfg_base.txt cfg_1.txt

This should1) work with newer versions (> 4.4) of gfortan.


Questions should be addressed to Jannis Teunissen.

codes/particle.txt · Last modified: 2014/08/25 17:44 by jannis