DSCM / PIC-MC Iteration
Problem
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.
Solution
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.mshof the geometry with physical surfaces defined according to DSMC gas flow simulation - One mesh file
simcase-PICMC.mshof 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.parandsimcase-PICMC.par. TheWORKMODEmust 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
INITMODEis zero, if the simulation case is started for the first time. Theifstatement 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 );