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 way to circumvent the above mentioned issues is to perform time scale splitting. For this purpose we need the following:
simcase-DSMC.msh
of the geometry with physical surfaces defined according to DSMC gas flow simulationsimcase-PICMC.msh
of the geometry with physical surfaces defined according to PIC-MC plasma simulation 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:
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.simcase-dsmc
. 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 );