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:
In this code, the following assumptions are made:
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.
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.
These will be added in the near future…
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
Questions should be addressed to Jannis Teunissen.