User Tools

DSCM / PIC-MC Iteration


While for PIC-MC plasma simulations usually a homogeneous background gas pressure is assumed, it may be desired to use a “real” background gas distribution. However there are a few issues related to that task:

  • The DSMC simulation uses time steps of typically 10-5…10-6 s and may reach total simulation times in the range of seconds on the one hand.
  • On the other hand, typical time steps in PIC-MC are less than 5·10-11 s. Under these conditions the gas flow can not be simultaneously simulated: It would take ages until some noticeable development in the background gas pressure distribution shows up.
  • Another problem is related to the wall boundary conditions: In PIC-MC e. g. a conductive chamber wall has to be defined as a single physical surface in order to be on the same potential everywhere. However DSMC related features such as gas inlets or pumping surfaces have different physical IDs - this would confuse the electric field solver in a PIC-MC simulation.


The way to circumvent the above mentioned issues is to perform time scale splitting. For this purpose we need the following:

  • One mesh file simcase-DSMC.msh of the geometry with physical surfaces defined according to DSMC gas flow simulation
  • One mesh file simcase-PICMC.msh of the geometry with physical surfaces defined according to PIC-MC plasma simulation
  • Two separated parameter files for DSMC and for PIC-MC simulation. Let us assume, these files are called simcase-DSMC.par and simcase-PICMC.par. The WORKMODE must be set to 0 in case of the DSMC file and to 1 in case of the PIC-MC file.

The solution is to perform the DSMC simulation first. After completion of the DSMC simulation, the neutral pressure distribution can be loaded into the PICMC simulation case. In this first stage, only the relevant neutral species are required, while the charged species come into play in the subsequent PICMC simulation1).

It is recommended to use a rather low NREAL_xxx factor for the neutrals2): With higher number of simulation particles the statistics gets improved. Since the neutral particles will act as ionization sources in the plasma simulation, a well-distributed statistics is important in order to avoid artificial inhomogeneities in the ion generation profile.

For the PICMC plasma simulation case it is important to consider that all “physical surfaces” must form closed three-dimensional objects. If source surfaces (e.g. gas inlets, sputter sources etc.) are still needed they must be defined as separate membranes. Finally, we need a way of including the DSMC computed gas distribution into the plasma simulation. This is done via the optional block User_Block, which can be specified in the parameter file. In the following, a working example is given (assuming that the PICMC case is in simcase-picmc.par and the DSMC case in simcase-dsmc.par and both are in the same folder).

block User_Block: {
  if INITMODE==0 then {
    out "** Reading neutral gas distribution **\n";
    S.read_checkpoint("simcase-dsmc/checkpoint/particles_Ar.bin", "particles", "Ar");
    S.read_checkpoint("simcase-dsmc/checkpoint/particles_O2.bin", "particles", "O2");
    S.read_checkpoint("simcase-dsmc/checkpoint/averages_Ar.bin",  "averages",  "Ar");
    S.read_checkpoint("simcase-dsmc/checkpoint/averages_O2.bin",  "averages",  "O2");
  } else {
    out "** Skipping User_Block since this is a restart **\n";

A few explanatory notes follow:

  • The variable INITMODE is zero, if the simulation case is started for the first time. The if statement assures that the particle initialization procedure is performed only once and will be ignored on restarts.
  • In the initialization routine, first the neutral gas distribution - Ar and O2 in the example - is read from the case simcase-dsmc.
  • The initial charge distribution can be defined in the species definition of the PICMC parameter file. Since only the neutral gas checkpoint files are read, the initialization of the charge distribution is untouched.

In case you want to use the surface chemistry defined in your DSMC case during your PICMC calculations, you also have to read in the checkpoints for the materials with:

S.read_checkpoint("simcase-dsmc/checkpoint/material_TiO2.bin",   "material", "TiO2"  );
S.read_checkpoint("simcase-dsmc/checkpoint/material_Ti_met.bin", "material", "Ti_met");

If you iterate many times between DSMC and PICMC you maybe also want to reuse a previously simulated charge distribution:

S.read_checkpoint("simcase-picmc/checkpoint/charges.bin",        "charges",  0       );
This was different in PICMC version ⇐2.3.7.x, where the particle information of all species went into a single dump-file.
…at least during a couple of time steps at the end of the DSMC simulation