DSMC and PICMC documentation
2024-09-20
3 Preprocessing
This chapter contains all information required to set up a simulation case.
3.1 Parameter file review
This site explains step by step all parts of the parameter file.
3.1.1 General parameters
DT = 1e-5;
TSIM = 1.0;
DT
is the time step in [s] of the simulation. For DSMC
its usually in the order of 10-6-10-5 and all
particles are moved in each time step. In PICMC mode its in the order of
10-12-10-10 and only electrons are moved in each
time step. The ions and neutral atoms are moved appr. each
30th and 300th step depending on the mass ratio
related to the electrons. The value should be chosen in a way that the
mean travelling distance of particles is less than their mean free
path.
Example: If we assume Argon (Ar) as gas species and a mean total pressure of about 0.5 Pa, then the mean free path of the gas atoms will be about 1.3 cm (see mean free path, section (sec:num_constraints_dsmc?)). At 300 K, the mean velocity of an Ar atom is 398 m/s. Within a time step of 10-5 s this yields a mean travelling distance per time step of about 4 mm.
TSIM
gives the total simulation time in [s] and is in
the order of 1 for DSMC and 10-5 for PICMC.
NPLOTS = 10;
NDUMPS = 1;
NPLOTS
gives the total number of plot evenly distributed
over the total simulation time. If you make a restart of a simulation
the number of plots made before is not taken into account.
The value NDUMPS
is the number of particle dumps /
checkpoints made during the simulation also evenly distributed over the
total simulation time. If you have a checkpoint you can continue /
restart the simulation from that point on. A new checkpoint overwrites
the old one. A value of 1 means that the checkpoint is created when the
simulation reaches its end. It is recommended to increase this value if
the simulation is very time-consuming and you would lose several days if
your simulation unexpectedly crashes.
WORKMODE = 0;
PSOLL = 1;
PSAMPLE = 1e-7;
WORKMODE
accepts three different values, 0 if you want
to simulate the gasflow of neutral particles with the DSMC method, 1 if
a PICMC plasma simulation is favored or 2 if you are only interested in
the electric field of a given setup. In case of a PICMC simulation the
next two parameters are likewise evaluated. PSOLL
is the
aimed power dissipation in [W] and PSAMPLE
is the sampling
time for this power setpoint in [s].
T0 = 300;
NCOUNTS = 100;
VPMAX = 1000;
The T0
parameter defines the initial particle and border
temperature in [K]. You could also use a non-trivial temperature distribution
on a wall. NCOUNTS
is the number of sampling intervals for
particle counters. The value of
VPMAX
is the maximum voltage which is used in the voltage
function.
3.1.2 Species
SPECIES = ["Ar", "Arplus", "e"];
NREAL_Ar = 1e12;
P0_Ar = 0.5;
NREAL_Arplus = 1e5;
P0_Arplus = 1e14;
NREAL_e = 1e5;
P0_e = 1e14;
The selection of gas species is defined within an array
SPECIES
. If multiple species are required, they can be
written in a comma separated list such as above. A list of all available
species can be found in section (sec:prep_species_list?).
For each species SP
, the parameters NREAL_SP
and P0_SP
must be defined with the following meaning:
NREAL_SP
: Statistical weight of the speciesSP
. A value of e.g. 1e12 means, that one particle in the simulation corresponds to 1e12 particles in the physical reality. The collision statistics are handled according to this weighting factor. It is possible to use different weighting factors for different species; e.g. if we have 1 % oxygen diluted in Argon, we may useNREAL_Ar = 1e12; NREAL_O2 = 1e10;
in order to get a similar amount of simulation particles for both species.P0_SP
: IfSP
is a neutral species, this defines the initial pressure in Pa. IfSP
is a charged species (electron / ion), the initial density in [1/m³] is expected here instead.
In order to define proper values for these parameters, some statistical constraints of your simulation case have to be taken into account first. Please refer to the section (sec:num_constraints_dsmc?) for general information.
3.1.3 Frozen species
On demand, some of the species contained in the SPECIES
array can be treated as frozen. In this case, no particles are
stored; instead the species are treated as continuous background.
Species properties considered are then averaged values of density,
velocity components <vx>, <vy>,
<vz> as well as the square velocity
<v2>. The averaged values are stored cell-wise. In case
of initialization of a frozen species via the P0_species
parameter in the parameter file, only the averaged density and the
square velocity will be non-zero. An alternative is to load the species
from a checkpoint of another simulation. In this case, also the flow
velocity stored in <vx>, <vy>,
<vz> can be relevant.
Example: In a PIC-MC plasma simulation in Argon, the Argon background should be treated as continuous, homogeneous background. In this case, the species definition section in the parameter file could look as follows.`SPECIES = [“Ar”, “Arplus”, “e”];
NREAL_Ar = 6e+9;
P0_Ar = 0.5;
NREAL_e = 20000;
P0_e = 1e13;
NREAL_Arplus = 20000;
P0_Arplus = 1e13;
FROZEN_SPECIES = ["Ar"];
Note: If charged species (electrons, ions) are
present in a DSMC simulation (WORKMODE=0
), they are
automatically being treated as frozen.
3.1.4 Plots
NUMBER = ["Ar", "Arplus", "e"];
DENSITY = ["Arplus", "e"];
PRESSURE = [];
TEMPERATURE = [];
ENERGY = ["Arplus", "e"];
VELOCITY = [];
COLLISION = [];
ABSORPTION = ["Arplus", "e"];
DESORPTION = [];
MESHDATA = [];
POSITION = [];
FIELD = ["PHI"];
COVERAGE = [];
DEPOSITION = [];
Here, we have some predefined lists for each output quantity, where the species of interest can be inserted. Please refer to section (sec:post_processing_data?) for further details.
Depending on your choice, the respectively quantity will be dumped
into a 3D-outputfile for each plot interval (defined by
TSIM
and NPLOTS
). The 3D-outputfiles have the
ending .pos
and can be displayed with GMSH. They can be
further postprocessed via the RIG-VM postprocessing module in section
(sec:ppp_rvm?) or via
GMSH (section (sec:ppp_gmsh?)).
3.1.5 Simulation volume
UNIT = 1.0;
BB = [x0, y0, z0, x1, y1, z1];
The standard treatment of the simulation volume is to put the whole
geometric mesh model within a rectangular box, which is referred to as
Bounding box. The bounding box dimensions are defined within
the vector BB
, where, (x0, y0,
z0) and (x1, y1, z1) specify
two opposing edges with lower and upper coordinates.
Important: Before specifying any coordinates, first
make sure that the UNIT
variable correctly represents the
scale of your geometric model:
Mesh unit | UNIT variable |
---|---|
m | 1.0 |
mm | 0.001 |
inch | 0.0254 |
When the parameter file is created via
initpicmc meshfile
the upper and lower edge coordinates are
automatically set according to the maximum / minimum node coordinates
occurring in the mesh file. However it is principally possible to set
different bounding box dimensions e.g. in order to perform the
simulation in only a fraction of the geometric model.
After you have set the bounding box dimensions, the simulation volume
can be divided into multiple segments via the vectors
NX, NY, NZ
, and the number of cells for each segment can be
specified. In the 2D plasma example in section (sec:picmc_2d_a700v?)
the size of the bounding box is 360 mm in X, 105 mm in Y and 1 mm in Z
direction. Assumed the cell dimension should be 1x1x1 mm³, we would need
360x105x1 cells. A possible segmentation would be:
NX = [60, 60, 60, 60, 60, 60];
NY = [35, 35, 35];
NZ = [1];
This gives six segments in X direction with 60 cells each, i.e. 360 cells in total, while the total number of cells in Y direction is 3x35 = 105. As it is a 2D model within the XY plane, there is no variation in Z direction expected; therefore the number of cells in Z is 1. The above shown segmentation gives a total of 18 segments, i.e. up to 18 CPUs can be used for parallel execution of the job.
Without further parameters the segmentation is always equi-distant.
In order to provide a segmentation with customized distances, the
vectors DIV_X, DIV_Y, DIV_Z
can be used.
DIV_X = [lx1, lx2];
DIV_Y = [ly1, ly2];
DIV_Z = [lz1, lz2];
The length values of the segments in the respective direction have to
be in the scale given by the UNIT
parameter above. The
number of entries in DIV_X
and NX
etc. must
fit and the sum of the segment lengths (lx1+lx2+...+lxn) has to be equal
to the corresponding bounding box length.
TYPE_x1 = "outlet";
TYPE_x2 = "outlet";
TYPE_y1 = "outlet";
TYPE_y2 = "outlet";
TYPE_z1 = "outlet";
TYPE_z2 = "outlet";
Finally, it must be defined what happens if a particle crosses the
outer boundary of the bounding box. The bounding box has six sides
labeled x1, x2, y1, y2, z1, z2
(i.e. lower x side, upper x
side etc.). For each side, the type can be one of the following:
"outlet"
: Particles hitting this surface disappear immediately."specular"
: Particles are specularly reflected."periodic"
: Particles crossing this border are re-inserted at the opposite surface.
3.1.6 Manually segmented simulation domain
block MQUAD: {
block FirstBox: {
DIV_X = [50, 50];
DIV_Y = [100];
DIV_Z = [20];
NX = [5, 5];
NY = [10];
NZ = [2];
X0 = 0; Y0 = 0; Z0 = 0;
};
block SecondBox: {
DIV_X = [50, 50];
DIV_Y = [100];
DIV_Z = [20];
NX = [5, 5];
NY = [10];
NZ = [2];
NREAL_SCALE_X = [0.5, 1.0];
};
};
block MJOIN: {
FirstBox.join_center(SecondBox, "x");
};
For some geometric models a common rectangular simulation box is not efficient since large parts of the simulation volume might be unused. In such case it is possible to use the Multiquad approach, where multiple bounding boxes with individual segmentation and cell spacing can be defined for different parts of the simulation model.
As shown above, this is done by defining several segmented bounding
boxes within a construct block name = { ... }
. Each name
must start with a letter and can additionally contain digits or the
_
underline character. A box must contain the three vectors
DIV_X, DIV_Y, DIV_Z
, which contain the dimensions of the
respective segments in x, y, and z direction. Additionally, the vectors
NX, NY, NZ
contain the number of cells for each segment.
Optionally, the following additional parameters can be included:
NREAL_SCALE
= global parameter to scale theNReal
value for each species within this boxNREAL_SCALE_X, NREAL_SCALE_Y, NREAL_SCALE_Z
= Vector of scale factors for theNReal
value of each species, separated by segment in x, y, or z direction.X0, Y0, Z0
= In order to define global coordinates, exactly one of the boxes must contain the coordinates of its lower-coordinate corner expressed byX0, Y0, Z0
. The coordinates of the remaining boxes are then automatically reconstructed according to the join-commands in the subsequent blockMJOIN
.
From picmc version 2.446 on, it is also possible to define the scale
factors for NReal for each species, separately. This is done by putting
the species name in front of
NREAL_SCALE_X, NREAL_SCALE_Y,NREAL_SCALE_Z
as shown in
following example:
block SecondBox: {
DIV_X = [50, 50];
DIV_Y = [100];
DIV_Z = [20];
NX = [5, 5];
NY = [10];
NZ = [2];
Ar.NREAL_SCALE_X = [0.5, 1.0];
O2.NREAL_SCALE_X = [1.0, 0.5];
};
This feature is useful in cases, where the relative species concentrations are strongly varying across the geometry.
The geometric arrangement of the boxes is defined within
block MJOIN
, which is described in detail in the gasflow
simulation example of section (sec:dsmc_example_2?).
The MQUAD/MJOIN feature can be used in DSMC and in PIC-MC mode
(WORKMODE
=0 or 1); however, in PIC-MC mode it only works if
the arrangement of segments and cells across connecting surfaces do
exactly match on both sides. For DSMC, it is no problem if there is an
offset/mismatch in cells/segments between adjacent boxes.
3.1.7 Specification of the geometric mesh files
MESHFILE = "a700v.msh";
BEMMESH = "pk750.msh";
The geometric information is obtained from mesh files generated by
GMSH. The filename is specified in MESHFILE
. If the
parameter file has been created via the initpicmc
command,
the according mesh filename is already automatically inserted. However
it is not required that the parameter file and mesh file have the same
name, it is e.g. possible to make multiple copies of the parameter file
using same mesh file but with a variation of other parameters
(e.g. total pressure, gas species composition, power etc.). Also, the
mesh file may be replaced by another one provided that the overall
geometric dimension and the number and labelling of physical surfaces is
the same.
For plasma simulation with magnetic field, it is additionally
possible to obtain the magnetic field from a fix-magnetic assembly. In
that case, an additional meshfile for the magnetic setup is required in
the BEMMESH
variable (see the 2D plasma simulation example
in section (sec:picmc_2d_a700v?)
for further details), whose name has to be inserted manually.
3.1.8 Border definition
block BORDER_TYPES: {
Border Wall = {
icodec = 1;
type = "wall";
T = PAR.T0;
#epsr = 1.0;
#vf = "VP*cos(2*PI*13.56e6*TIME)";
#vf_coupling = "";
reactions: {
add_plain_reaction("Arplus", 1, 1, ["Ar", "e"], [1, 0.1]);
set_emission_energy("e", 0, 5, 1);
add_absorption("e", 1.0);
add_energy_histogram("Arplus", 0, 250, 1000);
};
};
};
In this section, the physical functions of the different physical
surfaces of the geometric mesh model are specified. After creation
of the parameter file with initpicmc
an empty surface
template entry is automatically created for each physical
surface found in the mesh file. There is a large choice of physical
parameters and mechanisms that can be assigned to each surface, please
refer to chapter (sec:prep_wall_model?)
about the wall interaction model for a detailed
guide.
3.1.9 Additional switches
NCOUNTS = 100;
TAVG = 1;
SINGLE_PLOT_FOLDER = 1;
ICP_SOURCE = 1;
The number of sampling intervals for the particle counters / averaged
surface data can be set in the NCOUNTS
parameter, more
information can be found here.
TAVG
is the time averaging mode which is activated by
default (value of 1). It could also be switched off (value of 0), which
means that a plot represents the simulation state at the exact time step
of its generation rather than the averaged values since to the last
plot. We recommend to not switch it off, because otherwise the plot will
be quite noisy.
With SINGLE_PLOT_FOLDER
set to 1, all post processing
files are put directly into the simulation folder instead of sub
directories.
ICP_SOURCE
should be uncommented (and set to 1) if BEM
solver is used only to compute an ICP source field. This switch improves
solver performance as unnecessary computations are skipped.
3.1.10 Special model parameters
ELECTRON_ENERGY_PARTITIONING = 1;
MATERIAL_ACCELERATION = 1;
NOISE_FILTER_COEFFICIENT = 0;
ICP_SAMPLING_INTERVAL = 1;
FIELDSOLVER_THRESHOLD = 1e-10;
The ELECTRON_ENERGY_PARTITIONING
switch defines how
electron energy should be distributed in ionization collisions. With the
default behaviour one-takes-it-all (= 1) incident electrons
keep the remaining energy, i.e. minus the ionization threshold. With
equal-share (= 0) the remaining energy is equally divided
between incident and secondary electron.
MATERIAL_ACCELERATION
is a factor by which coverage
processes can be speed up. This is useful for simulations where surface
reactions' convergence is lagging behind that of gas and plasma dynamics
(e.g., surface oxidation vs. O2 partial pressure
convergence). The default value of 1 means no acceleration.
NOISE_FILTER_COEFFICIENT
is still experimental. It
enables a dampening algorithm to suppress artificial heating. The goal
is to violate plasma frequency related time step constraints by a factor
without consequences. The default value (= 0) disables the noise
filter.
In ICP simulations setting ICP_SAMPLING_INTERVAL
to 0
neglects the electron current induced field portion. For ICP simulations
at low power and plasma density < 1016 m-3 this
is a valid approximation to speed up performance. A sampling interval of
1 should do in all other cases.
The FIELDSOLVER_THRESHOLD
parameter sets the accuracy of
electric fieldsolver. The default value of 10-10 should be
sufficient for most of the simulation cases. If you really know what you
are doing you can change this value to loosen or tighten the convergence
criterion.
3.1.11 Magnetic and electric field
BFIELDFILE = "external_field.txt";
Path to the external magnetic field file, see External magnetic field support for more information.
ELECTRODES = ["T1", "T2"];
P_SETPOINT = [0.5, 0.6];
I_SETPOINT = [0.005, 0.006];
If you have more than one controlled electrode you have to comment in
the ELECTRODES
list. The strings in this list correspond to
the names of the borders / geometric boundaries from the
BORDER_TYPES
block. Then you can set individual power
(P_SETPOINT
) or current setpoints (I_SETPOINT
)
for these electrodes. As a result you will have separate controlled
voltages, which can be referred to as VP[0]
,
VP[1]
, etc. in the voltage functions of the borders.
3.1.12 Particle initialization
block Init_Particles: {
S.distribution_xyz("Ar", 0.125, 0.0475, 0, 1, PAR.T0);
};
For certain setups you might want to place single particles in the
simulation volume. This can be done within the
Init_Particles
block. The syntax of the
distribution_xyz
function is the following:
- Species name
- x, y, and z coordinate
- Number of particles
- Temperature of the particle
3.1.13 Moving meshes
NMOVES = 2;
block Move_Mesh: {
float angle = 5;
float sinus = sin(angle * PI / 180);
float cosinus = cos(angle * PI / 180);
# example for rotation of codec 1 around z axis
# with center point (100, 100, 0) without translation
S.move_mesh(1,
cosinus, sinus, 0, -sinus, cosinus, 0, 0, 0, 1,
100, 100, 0,
0, 0, 0);
};
In DSMC simulations you can move parts of the mesh, normally the
substrate. The movements of codecs with particle sources as well as a
combination with a restart are not yet possible. The number of moves is
set with the NMOVES
parameter. To preserve the plot
integrity you should move the mesh all X plots, while X must divide
NPLOTS without remainder. Multiple movements per plot are also possible,
but the plots (except the meshdata) may look weird.
The syntax of the move_mesh
function is the
following:
- Number of the codec to move
- The 9 rotation matrix elements: m11, m12, m13, m21, m22, m23, m31, m32, m33
- The location of the point to rotate around
- The translation vector elements t1, t2, t3
As you see in the above example you can define variables and calculate values inside the block. If you want to move multiple codecs, just use a second function inside the block.
3.1.14 User actions and functions
block User_Block: {; }
The User_Block
is executed once before the time cycles
start and can be used for combining DMSC and PIC-MC simulations
(time scale splitting) as shown in this example
block User_Functions: {; }
In the User_Functions
block it is possible to include
user defined functions for use during the simulation, more information
can be found in following
section.
3.1.15 User functions
In this block it is possible to include user defined functions for use during the simulation, e.g. a special voltage function. The syntax is the following:
type function_name(variable_name=type) = {
return calculated_value;
};
The type of the function as well as the variables can be "integer" or "float", the names of both are arbitrary but have to start with a letter. The number of variables is not limited and the calculated value can include common mathematical functions. An example of such a user function is the modulo function:
float myModulo(dividend=float, divisor=float) = {
integer quotient = dividend / divisor;
return dividend - quotient * divisor;
};
The use of this user function in the voltage function of an electrode would be e.g.:
vf = "-VP*myModulo(TIME, PAR.PERIOD)+DC_BIAS";
3.1.16 Species and cross sections
SPECIESFILE = "my_species_definition.r";
SIGMAFILE = "my_sigma.r";
If you want to use alternative or additional species not included by
default, you have to specify the name of your own file in
SPECIESFILE
. Normally you then also have to specify your
own SIGMAFILE
which includes the cross sections of the new
species. The list of all available species can be found in section (sec:prep_species_list?).
SIGMA_DEBUG = 1;
SIGMA_ENERGY = 2000.0;
By activating SIGMA_DEBUG
(setting the value to 1) one
text file for each collision cross section in use is written to the
simulation folder. This data can be beneficial if you want to show the
curves in a presentation. The SIGMA_ENERGY
parameter can be
used to manually set the limit in eV up to which the cross sections are
calculated. Since the default value is 1100.0 eV, you may get some
warning messages if you have strong electric fields and particle
energies are higher than the limit.
3.1.17 Debugging
DEBUG = 0;
NTESTCYCLES = 200;
The DEBUG
mode is switched off (= 0) by default, but can
be switched on (= 1) if your simulation does not start properly and you
want to know exactly what's the problem. The output can be quite long,
so consider redirecting it to a file.
The default number of test cycles for the load measurement ahead of
every simulation shutdown is 200, which should be appropriate for the
most cases. Changing this can be done by setting
NTESTCYCLES
to the desired value. Depending on these
measurements a load balancing is carried out, if you restart a
simulation and the number of quads is higher than the number of
requested CPUs.
3.2 Additionally imported files
3.2.1 CAD file import into GMSH
In order to use STEP or IGES files from external CAD programs (SolidEdge, Inventor, etc.) in GMSH, the following steps are required:
- Assumed the step file is named
model.stp
, as a first step, an empty *.GEO file (e. g.model.geo
) has to be created in the same directory. Within the GEO file, one single command for opening the step file has to be typed:
Merge "model.stp";
- The file
model.geo
can now be opened in GMSH. In order to have a proper mesh size for all points of the geometry, go into the "Mesh" menu and select Mesh-->Define-->Element size at points. Type a proper value (e. g. 20 mm) into the number field and press return. Afterwards, you should select every point of the model with the mouse1 and finally press "e". - In your
model.geo
file, GMSH has added a line like
Characteristic Length{<point numbers>} = 20;
- Invoke the meshing algorithm in GMSH by pressing the "2" key and have a close look to the meshed geometry. If there are features, which are not well resolved by the mesh (e. g. small nozzles) it may be required to define a smaller element size at certain points.
this is easily obtained by pressing "Ctrl" before the mouse selection, which enables to use a selection frame↩︎
3.2.2 Import of external magnetic field
There is the option to load an external magnetic field instead of calculating it with the included BEM magnetic field solver. There are the following two possibilities:
- Magnetic field with few datapoints and unstructured arrangement
- Magnetic field with many datapoints and structured arrangement in a box
3.2.2.1 Magnetic field support with unstructured data points
To activate this feature, the following line of the parameter file has to be uncommented:
= "external_field.txt"; BFIELDFILE
There are two supported file formats for the unstructured magnetic field: text and binary format. The format is determined during runtime, independent of the file extension. The conditions for the text format are the following:
- an entry consists of 6 values, three values for the x-y-z-position and three values for the Bx-By-Bz-strength at that point
- only one entry per line
- the separators for the values are either tabulators or spaces
and the conditions for the binary format are:
- an entry consists of 6 values, three values for the x-y-z-position and three values for the Bx-By-Bz-strength at that point
- no separators between the values or the entries
- the values have to be double precision floating point numbers
Additionally the following conditions are valid for both formats:
- the coordinates of the external field have to fit with the mesh
coordinates but are always to be given in (m), even if
the
UNIT
in the parameter file (sec. (sec:par_file_volume?)) is chosen differently - the values for the strength of the external field have to be given in tesla (T)
- the volume covered by the external field has to be greater than or equal to the simulation volume
The resolution of the external field compared to the simulation resolution does not matter because the magnetic field is interpolated, but not extrapolated (see point above).
Important notes:
- The coordinates have to be given in meter (m) irrespective of the used mesh unit given in the parameter file for the simulation volume, see section (sec:par_file_volume?).
- The order and structure of the coordinate points can be completely arbitrary, however the interpolation routine scales with the product of coordinate points in the simulation volume and data points in the TXT file. Thus, for large B field datasets the time for reading and interpolating the B field data can become unreasonable.
3.2.2.2 Magnetic field support with structured data points arranged in a box
The second method of importing a magnetic field is available since version 2.4.3.5 and was implemented for large datasets, where the point coordinates are aligned in a rectangular box. This simplifies the interpolation of the magnetic field data on the simulation grid points and thus, this method is much faster in case of very large B field files.
The import command of "rastered B field files" is implemented as a
method of the PICMC object and can be activated via the user block
(section (sec:par_file_userblock?))
in the parameter file. To use it, leave the parameter
#BFIELDFILE
commented out, uncomment the
User_Block:
at the end of the parameter file and use the
following commands:
block User_Block: {
bfieldfile = "large-bfield-file.txt";
message = "Reading rastered external Bfield from $(bfieldfile)";
console "** $(message) **\n";
write_logentry(message);
S.read_bfield_raster(bfieldfile,
-300, -884, 14, 300, 884, 210,
151, 443, 50, 1e-4);
};
The syntax of the command is
S.read_bfield_raster(bfieldfile,
x0, y0, z0, x1, y1, z1,
nx, ny, nz, factor);
The parameters have the following meaning:
- bfieldfile = Filename of the file containing the magnetic field data (path relative to the *.par file)
- x0, y0, z0 = Lower coordinates of the rectangular box
- x1, y1, z1 = Upper coordinates of the rectangular box
- nx, ny, nz = Number of data points in X, Y, and Z direction
- factor = Factor, by which the magnetic field vector shall be multplied (in case if the magnetic field in the TXT file is not given in Tesla units, the above example uses a factor of 10-4 for converting from Gauss to Tesla)
Important notes:
- The format of the TXT file is six columns with (X,Y,Z) coordinates in the first three columns and (Bx, By, Bz) field vector in the columes 4-6. The separator between the columns shall be one or more blank spaces.
- The ordering of the coordinate points in the TXT file does not
matter. It is only required that all
nx*ny*nz
points are included exactly once, otherwise an error message will be displayed. - Unlike the older B field import method mentioned above (section (sec:import_magnet_unsorted?)), all coordinates here are sensitive to the mesh unit specified in the simulation volume (see section (sec:par_file_volume?)). This also applies for the coordinate points in the TXT file.
- The interpolation of the B field values onto the simulation grid is performed via trilinear interpolation. It is required that the simulation grid (as specified in the simulation volume (section (sec:par_file_volume?)) either has the same size as the magnetic field box or fits within.
3.3 Wall interaction model
The interaction between the gas phase and walls is designed with the aim to provide an interface for setting up arbitrary reaction chains with high flexibility. For meshed geometric boundaries, there is one common wall type, where reactions and particle sources can be attached. Additionally, it is possible to declare single-sided mesh surfaces as membranes. Membranes fulfill special purposes such as virtual particle sources in the simulation space, particle flow barriers or virtual surfaces for sampling of energy and angular flux distributions.
A wall is represented in the GMSH mesh file as one physical surface group. In the PIC-MC / DSMC simulation parameter file a wall is represented as a Border entry as shown in the following example:
block BORDER_TYPES: {# ...
= {
Border Inlet = 2; # Codec number from meshfile
icodec type = "wall"; # Alternative type: "membrane"
= PAR.T0; # Wall temperature
T
reactions: {"O2", 1, "Pa");
add_source(;
}# Rel. dielectric permittivity (insulator only)
# epsr = 1.0;
# Voltage function (conductor, can be time-dependent)
# vf = "VP*cos(2*PI*13.56e6*TIME)"; # Voltage function (conductor)
# Counter electrode in case of relative potential
# vf_coupling = "";
;
}
# ...
; }
Each Border entry has the following common parameters:
icodec
: Integer number specifying the physical surface group. This number is automatically extracted from the mesh file and should be only changed in special cases 2.type
: String constant which can be either"wall"
or"membrane"
. A"wall"
must be part of a 3D object of the mesh file, while the"membrane"
is a virtual, single-sided (i. e. infinitesimal) surface which can be used to block orifices, insert additional particle sources or for sampling purposes.T
: Floating point number specifying the wall temperature in K.reactions: { \... };
: Within this block, wall reactions and particle sources can be specified. A detailed description is given in the following subsections.epsr
: Optional floating point variable specifying the dielectric permittivity of a dielectric insulating object (e.g. a glass susbtrate) in case of a plasma simulation.vf
: Optional string variable specifying a time-dependent voltage function.vf_coupling
: Optional string variable specifying a counter electrode within systems of floating electrodes with built-in potential difference.
3.3.1 Particle sources
3.3.1.1 Constant sources
Particle sources can either have Maxwellian or Sputter type energy
emission, or a given emission energy interval can be specified. The
declaration syntax is
add_source("species", amount, "unit");
Example:
"O2", 50, "sccm");
add_source("Al", 10, "Pa"); add_source(
Both commands declare a particle source. The first argument is the
gas species to be created, the second argument the
amount. The unit argument can be
either "sccm"
or "Pa"
specifying a mass flow
or pressure controlled source, respectively.
e.g. if a modified mesh file with different physical surface numbers shall be used with a given parameter file, this process is error-prone, you need to be careful↩︎
3.3.1.2 Sources with inscribed profile
For the source surface it may be required to have a non-uniform profile over the source surface.
An example is magnetron sputtering where the sputtering emission
distribution from the cathode depends on the Ar+ ion
bombardment profile. The Ar+ ion bombardment profile can be
stored in an absorption plot by putting Arplus
into the
ABSORPTION
plot list.
In a subsequent DSMC neutral transport simulation, e.g. in order to evaluate the film thickness profile of the sputtered material, there is now an easy way to use the Ar+ ion bombardment profile for defining the sputtering source:
"Ti", 50, "sccm"); # Flow controlled Ti source
add_source("Ti", 4.89, 1.0); # Sputtering with Ub = 4.89 eV
set_emission_sputter("Arplus-absorption.pos"); # Specify distribution profile
set_profile(# (e.g. ion flux profile from
# previous plasma simulation)
The file Arplus-absorption.pos
is a simulation output
file. It can be either in cell resolution or in mesh resolution.
Alternatively, a time-averaged file can be made from several absorption
plots via post processing. In the set_profile
command, the
filename has to be given as relative path with respect to the location
of the parameter file (in the example above,
Arplus-absorption.pos
must be in the same directory as the
parameter file).
A more accurate way is to model the sputtering process within the
PIC-MC plasma simulation by taking into account the angular and energy
dependency of the sputtering yield. In this case, the
desorption_XXX.pos
files or their mesh plot equivalents can
be taken as profile for the subsequent DSMC simulation. However the
assumption that the local sputtering rate is proportional to the ion
flux is a good starting approximation in most cases.
3.3.1.3 Vapor pressure source depending on surface temperature
In some cases, a source surface might have a temperature profile. This is especially relevant in connection with imported wall temperature distributions. In case of a pressure source - e.g. for an evaporation surface - the vapor pressure is temperature dependent. Most temperature-dependent vapor-pressure curves can be fitted with a simple exponential expression (with the temperature \(T\) given in Kelvin):
\[ p(T) = exp(-a/T + b) \](3.1)
The syntax of the temperature-dependent pressure source is:
"species", a, b); add_vapor_source(
The parameters a and b are the same as in Eq. (3.1) and are material dependent. For
Aluminum, suitable values are a=36070
and
b=24.469
. Thus, a temperature-dependent Al evaporation
source can be defined by:
"Al", 36070, 24.469); add_vapor_source(
3.3.2 Particle emission characteristics
Particles are emitted from walls for two possible reasons. Either a Particle source (section (sec:prep_particle_sources?)) is attached to the wall or a reaction involving reaction products takes place.
In both cases, the default behaviour is to emit particles with a Maxwellian velocity according to the given wall temperature and a \(\cos(\theta)\) like angular distribution. A Maxwellian distribution in 3D space is characterized by following distribution function in the velocity \(v\)
\[ f(v)dv = \sqrt{\frac{2 m^3}{\pi k^3T^3}} v^2 \exp\left(-\frac{mv^2}{2kT}\right)\](3.2)
where \(T\) is the temperature, \(k\) the Boltzmann constant, and \(m\) the molecular mass. When sitting at a wall surface, the velocity distribution function has to be multplied with the particle velocity \(v_z\) normal to the surface, since the arrival of fast particles is then statistically emphasized. In the software implementation, the particle velocities of diffusely reflected or generated particles with Maxwellian distribution are generated as follows in cylindric coordinates \((r,\phi, z)\) with the \(z\) coordinate aligned parallel to the surface normal:
\[\begin{aligned} v_z &= \sqrt{-\frac{2kT}{m}\ln(R\#)}\nonumber\\ v_r &= \sqrt{-\frac{2kT}{m}\ln(R\#)}\nonumber\\ \phi&= 2\pi R\# \\ \vec{v}_\textrm{Emitted} & = v_z \hat{n} + v_r\cos(\phi)\hat{t_1} + v_r\sin(\phi)\hat{t_2},\nonumber \end{aligned}\](3.3)
with \(R\#\) being a random number between \([0, 1[\) and \(\hat{n}, \hat{t_1}, \hat{t_2}\) being the surface normal and normalized tangential vectors. If this algorithm is performed for reflected particles in a closed gas volume, the gas will be everywhere in thermal equilibrium with the wall and will have a Maxwellian distribution according to the wall temperature.
It is possible to modify the behaviour of generated particles by supplying an additional command just after the last wall command involving reaction products (either after the last source or reaction).
3.3.2.1 Maxwellian distribution with alternative temperature
If required it is possible to emit particles with Maxwellian
distribution with a different temperature than specified in the wall
properties. For this purpose, there is a function
set_emission_maxwell
which takes the desired temperature as
argument:
set_emission_maxwell("species", temperature);
3.3.2.2 Source of sputtered particles
A sputter process results from random ballistic collisions between atoms inside the target material. The distribution of sputtered species is non-thermal. A thorough discussion on that topic is given in the book Sputtering by Particle Bombardment by (Behrisch and Eckstein 2007). The distribution function of sputtered particles has been discussed in (Thompson 1981) yielding following relation:
\[ f(E,\theta) \propto \frac{\cos(\theta)}{E^{2-2m}\left(1+U_b/E\right)^{3-2m}}\](3.4)
Here, \(m\) is a parameter
describing the interatomic potential between target atoms. Assumption of
the hard-sphere approximation leads to \(m
\rightarrow 0\). The software implementation uses this
simplification within the function set_emission_thompson
together with an angular distribution function \(f_\alpha(\theta)\), which depends on a
parameter \(\alpha\):
\[f(E,\theta) \propto \frac{E}{\left(E+U_b\right)^3}\times f_\alpha(\theta)\](3.5) \[f_{\alpha}(\theta) = \left\{ \begin{array}{ll} \cos^{\alpha}(\theta); & \alpha \ge 0\\ \cos(\theta) \left(1+\alpha\cos^2(\theta)\right); & \alpha < 0 \end{array} \right.\](3.6)
The angular distribution for negative values of \(\alpha\) is an empirical formula for off-axis sputtering characteristics taken from (Yamamura, Takiguchi, and Ishida 1991). It could be relevant for polycrystalline target materials and in case of low ion energies (Wehner and Rosenberg 1960). For performing ballistic simulation of the sputter process in targets, there is a free software called SRIM, which can produce sputter yields, velocity and angle distribution of sputtered particles as well as implantation profiles for arbitrary target compositions and ion impact. The software implementation includes both formula for the angular distribution function, which are selected according to the parameter \(\alpha\).
As can be seen in the following graph (Pflug et al. 2014), the distribution of sputtered particles decays much slower with energy than e.g. a Maxwellian distribution with the same peak energy (The peak energy in case of a sputter distribution is located at \(E_\textrm{peak} = U_b/2\)).
One conceptual problem of the above distribution function by Thompson is that there is no upper limitation regarding the kinetic energy of sputtered species. Generation of particles with arbitrarily high kinetic energy is problematic since they potentially violate numerical constraints with respect to time step and cell spacing.
A practical solution is based on the maximum fraction \(\lambda\) of energy which can be transferred from an impinging ion with mass \(m_i\) to a target atom with mass \(m_t\) by perpendicular collision[^footnote_thompson_2],
\[\lambda = \frac{4 m_i m_t}{\left(m_i+m_t\right)^2}\](3.7)
With \(E_i\) as the energy of impinging ions it is reasonable to assume that the energy of sputtered atoms can be no higher than \(\lambda\times E_i\). Thus, in the DSMC / PICMC software implementation, \(\lambda\times E_i\) is used as upper limit of the kinetic energy of sputtered particles. The accordant function for the Thompson distribution is
set_emission_thompson("species", Ub, alpha, E_ion, m_ion);
The parameters are as follows:
"species"
--> the name of the sputtered speciesUb
--> The binding energyalpha
--> The parameter $\alpha$ determining the angular distributionE_ion
--> The kinetic energy of impinging ionsm_ion
--> The relative molecular mass of impinging ions
The latter two parameters are used to compute the above mentioned recoil factor \(\lambda\) from Eq. (3.7). The simplified Thomson distribution can be analytically integrated, thus in the practical implementation the energy is taken via
\[E = \frac{U_b}{1-\sqrt{R\#}} - U_b\](3.8)
Again, \(R\#\) is a random number within \([0,1[\). The emission angle is created via
\[\theta = \left\{\begin{array}{ll} \arccos\left(\left(1-R\#\right)^{\frac{1}{\alpha+1}}\right); & \alpha \ge 0\\ \arccos\left(\sqrt{\frac{\sqrt{1+\alpha(2+\alpha)(1-R\#)}-1}{\alpha}}\right); & \alpha < 0 \end{array}\right.\](3.9)
If the random number yields \(E > \lambda E_i\) then the value is dropped and the calculation is repeated for another random number \(R\#\).
Note: In former versions (before 2.4.2.8) the Thompson distribution function was generated via
set_emission_sputter("species", Ub, alpha);
Here, the cut-off energy was internally hard-wired as \(E_\textrm{cutoff} = 100\times U_b\). This
function still works, but we recommend using the newer function
set_emission_thompson
instead, where the cut-off energy can
be freely specified. Especially in case of sputtered species deposited
onto a substrate it turned out that unrealistically high values of the
cut-off energy can lead to significant deviations in their mean
energy.
3.3.2.3 Uniform energy distribution within a given interval
For a uniform distribution within an energy interval between E0…E1, the following function can be used:
set_emission_energy("species", E0, E1, alpha);
The angular distribution as a function of the parameter $\alpha$ is the same as in case of sputtered particles (see previous section).
Example: Niobium sputter source
# Constant sputter rate equivalent to 50 sccm particle flux
"Nb", 50, "sccm");
add_source(
# Sputter emission with Ub = 7.39 eV and cosine index 1.5
"Nb", 7.39, 1.5); set_emission_sputter(
3.3.2.4 Particle emission distribution by user defined histogram
If the built-in particle emission profiles are not sufficient, there is also the possibility of implementing a user-defined distribution function via histogram data files. The histogram data files must have the same format as the files resulting from sampling energy and angular distribution, i.e. four columns comprising
- Energy [eV]
- Theta [°]
- Phi [°]
- Scalar intensity
There are the following four options:
- Energy only distribution function
set_emission_histogram_E("species", alpha, hist_filename);
Here, only the first and fourth column of the histogram file (energy and intensity) will be taken into account. For the angular distribution function, the parameteralpha
has the same meaning as shown above (see section (sec:prep_sputter_source?)). - Angular only distribution function
set_emission_histogram_A("species", temperature, hist_filename, ex, ey, ez);
Here, the first column of the histogram file is ignored; relevant are columns 2-4 (theta and phi angle as well as intensity). The angles are to be given in degree. Additionally, a unit vectorex, ey, ez
is to be specified, this vector defines the direction, where the azimuth angle is zero. - Separated energy and angular distribution
functions
set_emission_histogram_EA("species", hist_E_filename, hist_A_filename, ex, ey, ez);
Here, energy and angular distribution function are both to be specified and treated independently. - Correlated energy and angular distribution
function
set_emission_histogram_Corr("species", hist_filename, ex, ey, ez);
This function uses only one histogram file, where energy and angular columns are both included, i.e. energy and angular distributions are correlated.
3.3.2.5 Particle emission distribution by user defined functions
Instead of providing emission distribution functions as histogram files, they can be also applied as analytic formula. There are the following options:
- Energy distribution function
set_emission_function_E("species", alpha, eMax, ne, formula);
The energy distribution function for the emitted"species"
is defined on an energy interval0...eMax
withne
being the number of slots. The energy unit used to specify the range is eV. The parameteralpha
specifies the angular emission profile as specified in section (sec:prep_sputter_source?). The analytic function is specified via parameterformula
, which can contain an analytical formula withE
being the energy in eV. - Angular distribution function
set_emission_function_A("species", T0, nTheta, nPhi, formula, ex, ey, ez);
This specifies an angular distribution function while assuming an Maxwellian energy distribution function according to the temperatureT0
. The resolution of the angular distribution function is defined by the number of slots,nTheta
for the polar angle andnPhi
for the azimuth angle. The analytical function in parameterformula
may contain the variablesTHETA
(range: 0-90° in degree),theta
(range: \(0\ldots\pi\)),PHI
(range: 0-360° in degree) orphi
(range: \(0\ldots 2\pi\)). The parametersex, ey, ez
represent a vector which defines the direction where \(\phi=0\). - Independent energy and angular distribution
functions
set_emission_function_EA("species", eMax, ne, formula_E, nTheta, nPhi,
formula_theta_phi, ex, ey, ez);
This function - as a combination of the two previous functins - allows to set independent energy and angular distributions. The energy distribution function for the emitted"species"
is defined on an energy interval0...eMax
withne
being the number of slots. The energy unit used to specify the range is eV, and the analytical formula as a function ofE
is specified via parameterformula_E
. The resolution of the angular distribution function is defined by the number of slots,nTheta
for the polar angle andnPhi
for the azimuth angle. The analytical function parameterformula_theta_phi
may contain the variablesTHETA
(range: 0-90° in degree),theta
(range: \(0\ldots\pi\)),PHI
(range: 0-360° in degree) orphi
(range: \(0\ldots 2\pi\)). The parametersex, ey, ez
represent a vector which defines the direction where \(\phi=0\). - Correlated energy and angular distribution
function
set_emission_function_Corr("species", eMax, ne, nTheta, nPhi,
formula, ex, ey, ez);
This function allows to specify a correlated energy and angular distribution function. The energy distribution function for the emitted"species"
is defined on an energy interval0...eMax
withne
being the number of slots and the energy unit in eV. The resolution of the angular distribution function is defined by the number of slots,nTheta
for the polar angle andnPhi
for the azimuth angle. The distribution function specified informula
can contain all variablesE, THETA, PHI, theta, phi
as specified above.
3.3.2.6 Specifying energy loss functions
In case of e.g. reflected neutrals from ion impact or reflected high energetic electrons, where a certain energy loss occurred in the material, the energy distribution of the reflected species is not given as a function of absolute energy. Instead, there is a distribution function for either the absolute or the relative energy loss. Such cases can be specially treated:
- Relative energy loss function
set_energy_loss_rel("species", formula);
A relative loss function occurs e.g. for fast reflected neutrals resulting from ion impact on a target. Here, the ratio between impact and emitted energy depends e.g. on a mass ration between ion and target atom and thus, the loss energy distribution is defined on a relative scaleE=0...1
. This function uses a resolution of 1000 slots of the relative energy scale by default. The parameterformula
may depend on the variable E, which - in this case - is not the absolute energy but a relative one (E=0…1), where E=1 corresponds to the impact energy. - Absolute energy loss function
set_energy_loss_abs("species", eMax, ne, formula);
This realizes an absolute loss function. One scenario may be a high energetic electron impinging on a surface thereby inducing some Auger excitation or other energy loss mechanism in the material which would substract an absolute loss energy from the electron. In this case, the energy range is E=0...eMax with the unit in eV, and the number of slots is specified in thenE
parameter.
In these energy loss functions, the direction of the reflected particle is currently set specularly with respect to the impinging particle (even if e.g. the species changed from ion to neutral). In future versions this might be modified e.g. by specifying an angular cone for the reflected particle.
Example: In plasma simulations, the creation of fast reflected neutrals by ion impact can be realized as follows:
"Arplus", 1, 1, ["Ar", "e"], [1, 0.1]);
add_plain_reaction("e", 1.0, 10, 100, exp(-((E-5)^2)/2));
set_emission_function_E("Ar", E>0.35); set_energy_loss_rel(
In this example, an Arplus
ion impinging onto a surface
results in an electron with a secondary electron yield of 0.1 (10%) and
a neutral Ar atom3 with a yield of 100%. From the
reflected neutral (Ar) the relative loss energy distribution is set to
E>0.35
. In the relative scale E=0...1 this evaluates to
1 of E>0.35 and 0 if E<=0.35. It means that the energy of the
reflected Ar is reduced by 35% or more in comparison with the impact
energy of the ion. In other words: The energy loss is equally distrbuted
between 35% and 100% (The energy distribution of the secondary electron
is set as Gaussian function centered around 5 eV, but this is not
important, here).
If the neutral density of Ar is very high with respect to ions and electrons, it might make sense to define a special species such as
ArFast
in order to distinguish the fast reflected neutrals from the background gas↩︎
3.3.3 Wall temperature distribution
A non-trivial temperature distribution on a wall is especially used in combination with a vapor pressure dependent particle source in order to get a more realistic behavior of e.g. large evaporation sources.
In order to define a temperature distribution rather than a single fixed temperature, the following command has to be used:
"temperature_distribution.txt"); add_temperature(
The temperature distribution file format is currently according to Comsol-generated temperature output files. The format is as follows:
- First line: Title (will be ignored)
- Next lines: Seven columns of numbers separated by TAB or whitespace
with following
meaning:
<Facet> <Point> <X> <Y> <Z> <Element> <Temperature [K]>
Only the (X, Y, Z) coordinates and the temperature will be read in, the other columns will be ignored.
The temperature can be defined at arbitrary points within the simulation volume, there is no specific ordering of the points required. Upon initialization, for each mesh element the nearest point of the temperature distribution is chosen and the respective temperature is put into the mesh element.
3.3.4 Plain reactions
A plain reaction can be particle absorption or particle transformation with a given contant sticking coefficient or reaction probability. There is no wall state or surface coverage involved. Reactions which consider the actual surface coverage with different surface materials are described under surface chemistry reactions below. Possible plain reactions are listed in the following:
3.3.4.1 Simple absorption with sticking coefficient
The simplest type of surface reaction is the absorption of an arriving species based on a constant absorption probability or sticking coefficient of a given species:
"species", sticking_coefficient); add_absorption(
Example:
# Define a pumping surface for Ar and H2
"Ar", 0.2);
add_absorption("H2", 0.05); add_absorption(
3.3.4.2 Specular reflection
While the default behaviour of a species impinging onto a surface is diffuse reflection, it is also possible to specify a specular reflection with a given probability via
"species", probability); add_specular_reflection(
In most cases, specular reflection is not going to happen in real; however, this functionality is useful for defining symmetry planes.
3.3.4.3 Plain reaction with sticking coefficient and reaction products
This more generalized syntax allows to specify particle absorption in combination with reaction products. The syntax and parameters are as follows.
"species", flag, probability,
add_plain_reaction("rp1", "rp2", ...], [n1, n2, ...]); [
- “species”: Incoming gas species such as
"Ar"
or"H2"
- flag: Can be 0 or 1. A value of flag==1 means that the incoming species is absorbed, if flag==0 it is reflected at the surface.
- probability: A value between [0..1] specifying the reaction probability.
- [“rp1”, “rp2”, ..]: A comma-separated list of
reaction products (use
[]
, if no reaction products are involved) - [n1, n2, …]: The respective yields of the reaction products
Example 1: SiH4 -> Si (film growth) + 2 H2 (reaction products given back to the gas volume) with a sticking coefficient of 50%
"SiH4", 1, 0.5, ["H2"], [2]); add_plain_reaction(
Example 2: Secondary electron generation with secondary electron coefficient \(\gamma=0.1\) by ion impact \(Ar^+ \rightarrow Ar + \gamma e^-\)
"Arplus", 1, 1, ["Ar", "e"], [1, 0.1]); add_plain_reaction(
The emission characteristics of reaction products is by default Maxwellian with a \(\cos(\theta)\) like angular distribution. In order to change this behaviour, the same commands for specifying the emission characteristics as in the particle sources can be used.
Example 3: Sputtering with Ar+
"Arplus", 1, 1, ["Ar", "e", "Nb", "Ominus"],
add_plain_reaction(1, 0.1, 5, 0.04]);
[
# Electrons are perpendicularly emitted with energies between 0..10 eV:
"e", 0, 10, 100);
set_emission_energy(
# Nb is sputtered with Ub=7.39 eV and alpha=1.5
# As incident ions, Ar+ with an energy of 300 eV are assumed
"Nb", 7.39, 1.5, 300, 40);
set_emission_thompson(
# Set sputter energy distribution also for Ominus
"Ominus", 4.5, 1.5, 400, 40); set_emission_thompson(
3.3.5 Secondary Electron Emission Yield
According to Zalm and Beckers (1985), there ary two mechanisms for electron ejection upon ion bombardment:
- Potential Emission: If the ion neutralization energy exceeds twice the electron work function of the material, electron emission is possible. The secondary electron emission yield resulting from this mechanism is energy dependent and applies for rather low ion incident energies up to a few 100 eV.
- Kinetic Emission: At higher energies, electron emission by direct ionization of metal atoms by the ion projectile and/or by energetic recoils becomes important. This mechanism becomes relevant for ion incident energies beyond 1 keV.
Given the relevant energy range, only the first mechanism seems relevant for magnetron sputtering. The secondary electron emission coefficient for potential emission can be calculated via Eqn. (3.10).
\[\gamma_\textrm{PEE}\approx 0.2\times \frac{0.8 E_i - 2\phi}{\epsilon_i}\](3.10)
- \(E_i\) = Ionization energy of the ion (= 15.8 eV for Ar+)
- \(\phi\) = Electron work function of the metal
- \(\epsilon_i\) = Fermi energy of the electrons within the metal
In the following, representative numerical values are given. Most of the values are taken from the following sources:
- Table of fermi energies from http://hyperphysics.phy-astr.gsu.edu/hbase/tables/fermi.html#c1 from the Hyperphysics project (University of Georgia)
- Wikipedia article about work function
Metal | Work function [eV] | Fermi energy [eV] | ISEE for Ar+ (15.8 eV) | ISEE for O2+ (12.06 eV) |
---|---|---|---|---|
Ag | 4.63 | 5.49 | 0.123 | 0.014 |
Al | 4.164 | 11.7 | 0.073 | 0.023 |
Cu | 4.53-5.10 | 7.00 | 0.070-0.1022 | 0.0 - 0.017 |
Ti | 4.33 | 4.556 | 0.175 | 0.043 |
average value↩︎
3.3.6 Energy and angular dependency of reactions and particle yields
3.3.6.1 Energy dependent reaction probability
If reactions have an energy-dependent reaction probability, this can be defined via the function
; set_probability_function(E0, E1, nE, function)
This function is to be put just after the last reaction definition, and the parameters are as follows:
- E0, E1: Defines the energy interval [E0, E1]; the unit is eV.
- nE: The number of sub-intervals within [E0, E1];
- function: Functional expression, where the energy can be used as variable E
If the actual particle energy E is outside of the [E0, E1] interval, the probability values at E0, E1 will be taken for E<E0, E>E1, respectively.
Example: In McRae and Caldwell (1976), a detailed measurement of the electron reflection behaviour at Copper surfaces is shown in the following graph.
As can be seen, there is an elastic and an inelastic reflection probability curve; both curves can be approximated in first order by a linear function. In order to use these behaviour in PIC-MC simulations, the following plasma-wall interaction definition would be appropriate:
"Arplus", 1, 1, ["Ar", "e"], [1, 0.1]);
add_plain_reaction("e", 0, 10, 100);
set_emission_energy(
"e", 1.0);
add_specular_reflection(0, 5, 20, 0.45*(1-E/5));
set_probability_function("e", 1.0);
add_absorption(0, 22, 100, 1-(0.03+0.14*E/22)); set_probability_function(
The upper part of the code defines the emission of secondary
electrons upon impact of positive ions. The reflection behaviour of
low-energy electrons is defined in the lower four lines. First, a
specular reflection is added with 100% probability. Afterwards, the
energy-dependent probability function is applied. The resulting reaction
probability will be the probability given in the
add_specular_reflection
function multiplied with
the probability function (see also blue line in Fig. 6) given in the
next command.
Since inelastic reflection is the default behaviour of all surfaces
unless other reactions are specified, there is no
set_inelastic_reflection
command implemented. Instead the
inverse process, i. e. the electron absorption at the wall is specified.
Consequently, the probability function of the absorption is the inverse
probability of the inelastic reflection probability (shown as red line
in Fig. 6).
3.3.6.2 Energy dependent yield
If we have an energy-dependent yield of reaction products, it is better to use a yield function instead of the reaction probability. Its syntax is
"species", E0, E1, nE, function); set_yield_function(
The parameters are as follows:
species
: Name of reaction product, whereof the yield energy dependency should be specifiedE0, E1
: Energy interval of interestnE
: Number of points within energy intervalfunction
: Arithmetic expression, where the variableE
can be used for energy
The yield function will be multiplied to the yield given in the reaction product vector. All energy values are to be specified in (eV).
An example is the sputtering yield of Ti by Ar+ impact, whereof an empirical yield formula can be constructed from the data in (Ranjan et al. 2001) as follows:
\[Y(E) = 0.01085 (E/(1 eV)-118)^{2/3} (E \ge 118\textrm{ (eV)})\](3.11)
This case can be represented in the following way:
"Arplus", 1, 1, ["Ar", "e", "Ti"],
add_plain_reaction(1, 0.1, 1]);
["Ti", 4.89, 1.0, 400, 40);
set_emission_thompson("Ti", 0, 1000, 1000,
set_yield_function(>118) ? 0.01085*(E-118)^(2/3) ! 0); (E
It has to be noted that the yield function only affects the yield for
the species Ti, while the yields of Ar and e are unaffected. In
contrast, set_probability_function
would affect the
probability of the entire reaction by a multiplicative probability
function; in the current scenario, this would be of no use.
3.3.6.3 Energy and angular dependent yield
In some cases, e.g. in sputtering processes, the number of emitted particles also depends on the angle of the impinging ion. In such cases, the yield of reaction products depends on both, the impinging particle energy and its angle. In such cases, the following function can be used to describe the energy and angular yield dependency:
"species", E0, E1, nE, nTheta, function); set_yield_function_2D(
The parameters are as follows:
species
: Name of reaction product, whereof the yield energy dependency should be specifiedE0, E1
: Energy interval of interestnE
: Number of points within energy intervalnTheta
: Number of points for interval of polar angle \(\theta\)function
: Arithmetic expression, where the variablesE
,THETA
can be used for the energy and polar angle, respectively. The energy unit is (eV), the angular unit is radian in the range \([0,\ldots,\pi/2[\).
A simplified interface for typical cases is
"species", function); set_yield(
Here, the energy range is predetermined to \([0,\ldots,1000]\) eV and the angular range is divided into 20 intervals. These settings should be appropriate e.g. for most sputtering processes.
Examples for energy-dependent sputter yields can be found in literature, e.g. in (Behrisch and Eckstein 2007) the fitting formula of Eq. (3.12) is proposed.
\[Y(E) = q \frac{0.5 \ln(1+1.2288 \epsilon)}{\epsilon+0.1728\sqrt{\epsilon}+0.008\epsilon^{0.1504}}\times \frac{\left(E_0/E_{th}-1\right)^\mu}{\lambda+\left(E_0/E_th-1\right)^\mu}\](3.12)
Fur further explanation please refer to chapter 3.2 in Behrisch and Eckstein (2007). An example curve can be generated via the following script:
float qq = 4.8957;
float f_eps = 8.56428*10^4;
float E_th = 25.019;
float mu = 1.8291;
float lambda = 0.3152;
float E = 200;
float sigma -> (E <= E_th) ? 0 !
/2 * ln(1+1.2288*E/f_eps) /
qq/f_eps+0.1728*sqrt(E/f_eps)+0.008*(E/f_eps)^(0.1504))*
(E/E_th-1)^mu/(lambda+(E/E_th-1)^mu);
(E
for(E=0; E<=1000; E=E+10) out "$(E) $(sigma)\n";
The parameters at the beginning are chosen in accordance to the species involved, in the above example it is sputtering of Ti by Ar+. The script can then be executed with:
rvm sputter_yield.r
In order to integrate such curve into a simulation case, it is
recommended to include a separate block into the parameter file
immediately before block BORDER_TYPES { ...
:
block wall_reaction: {float qq=4.8957, f_eps = 8.56428e4, E_th = 25.019,
=1.8291, lambda = 0.3152;
mu
"Plasma-wall model with Ar+ sputtering on Ti, SEY=8%");
show_reaction_message("Arplus", 1, 1, ["Ar", "e", "Ti"], [1, 0.08, 1]);
add_plain_reaction("e", 0, 10, 100);
set_emission_energy("Ti", 4.89, 1.0, 300, 40);
set_emission_thompson("Ti", 0, 1000, 1000,
set_yield_function(<= E_th) ? 0 !
(E /2 * ln(1+1.2288*E/f_eps) /
qq/f_eps+0.1728*sqrt(E/f_eps)+0.008*(E/f_eps)^(0.1504))*
(E/E_th-1)^mu/(lambda+(E/E_th-1)^mu)
(E;
)
"e", 1);
add_absorption(; # end of block wall_reaction }
This block includes sputtering of Ar+ on Ti with a secondary electron yield of 8%. The sputtering yield for Ti is first set to 100% but later multiplied with the yield function below. In the respective physical surface definitions, this set of plasma-wall reaction can be applied as follows:
= {
Border Target = 1;
icodec type = "wall";
= PAR.T0;
T = "-VP";
vf ; };
reactions: { PAR.wall_reaction; }
3.3.7 Surface chemistry reactions
With plain reactions (section (sec:prep_plain_reactions?)), particle absorptions and transformations are defined without considering the state of the surface. A more advanced approach allows to define similar reactions in dependency of the actual surface material coverage. Fig. 3.3 shows an example of a surface coated with two different material components, which is exposed to the gas and/or plasma.
According to this representation, the advanced surface chemistry model considers three different regions:
- The gas phase and/or plasma
- The first atomic layer of the surface
- The deeper atomic layers which are in total representing the deposited layer material.
As already indicated, the surface layer and the deposited layer
consists of multiple material compounds. A reasonable reactive model
should comprise at least two different surface materials e. g.
"Al"
as metallic aluminum and "AlOx"
as
metal-oxide in a reactive deposition model.
3.3.7.1 Specification of wall materials and initial coverages
If we stick to the reactive AlOx deposition model, the first step is to declare two different names for the metal and metal-oxide:
add_material("Al", 1e19);
add_material("AlOx", 1e19);
set_initial_coverage("AlOx", 0.5);
The involved commands are
- Declare material name with bond density
add_material("material_name", bond_density);
- Declare initial surface coverage of a material
set_initial_coverage("material_name", initial_coverage);
The bond_density parameter represents the surface density of bond sites of the material in (1/m2). For realistic molecular distances, the bond density typically is in the 1019 (1/m2) range. However it is possible to chose a smaller value in the simulation (e. g. 1017) in order to speed things up. If the wall is in equilibrium with the gas/plasma, the actual bond density has no influence on the result - it only influences the time required to reach the equilibrium state.
Note: Different bond density values for different materials are currently not yet supported and lead to undefined behaviour.
In order to get the deposition in the right unit you need to calculate the bond density depending on your material. The example calculation for AlOx is the following:
\[\begin{aligned} \rho_{Al_2O_3} & = 3.94 \textrm{ g cm}^{-3}\\ m_{Al_2O_3} & = 102\textrm{ u} = 1.7\times 10^{-22}\textrm{ g}\\ \rho_{Al_2O_3}^{'} & = \rho / m = 2.3\times 10^{22}\textrm{ cm}^{-3} = 2.3\times 10^{28}\textrm{ m}^{-3}\\ \rho_{Al_2O_3}^{''} & = {\rho^{'}}^{2/3} = 8\times 10^{18}\textrm{ m}^{-2}\\ \rho_{AlOx}^{''} & = 2\times\rho_{Al_2O_3}^{''} = 1.6\times 10^{19}\textrm{ m}^{-2} \end{aligned}\]
In the example given above it is sufficient to specify the initial coverage of only one material, e. g. AlOx. The coverage of Al will be automatically adjusted in a way that the sum of all coverages is 1.0. This works also for more than two materials.
Example:
"Ti", 1e19);
add_material("TiO", 1e19);
add_material("TiO2", 1e19);
add_material("TiO2", 0.9); set_initial_coverage(
Here, the surface consists by 90% of "TiO2"
(i. e. it is
almost fully oxidized). The remaining 10% of the surface coverage is
equally distributed amongst "TiO"
and "Ti"
. If
we write
"Ti", 1e19);
add_material("TiO", 1e19);
add_material("TiO2", 1e19);
add_material("TiO2", 0.9);
set_initial_coverage("TiO", 0.1); set_initial_coverage(
then the initial coverage of "Ti"
will be zero.
3.3.7.2 Surface reaction involving no deposition
The syntax for a surface reaction withou deposition - such as a surface oxidation - is shown in the following.
"species", flag, amount, probability,
add_surface_reaction("material_before", "material_after",
"rp1", "rp2", ...], [n1, n2, ...]); [
The parameters are
- species: String specifying the gas species
- flag: Specifies, if gas particle is absorbed (flag==1) or not (flag==0)
- amount: Number of gas particles required to accomplish one reaction (can be non-integer)
- probability: The reaction probability
- material_before, material_after: Strings specifying the required initial surface material and resulting surface material.
- [“rp1”, “rp2”, …], [n1, n2, …]: Reaction products
and their amounts. As always their emission characteristics is
Maxwellian by default and can be modified via
set_emission_sputter, set_emission_energy
etc.
Still sticking to the reactive AlOx example, the oxidation of Aluminum can be described by Al + 0.75 O2->AlOx. The number 0.75 comes from the chemical formula Al2O3 of aluminum oxide 5. Translated to the command syntax and assuming a reaction probability of 50%, this yields
"O2", 1, 0.75, 0.5, "Al", "AlOx", [], []); add_surface_reaction(
i. e. “AlOx” stands for a “half Al2O3 molecule”↩︎
3.3.7.3 Surface reaction involving deposition
While the surface oxidation of Al described above leads to a change in the surface material coverage, it does not increase the deposited film thickness. In contrast, if metallic Al is absorbed on the surface this leads to film growth. For that purpose, a modified syntax is required:
"species", amount, probability,
add_surface_deposition("material_before", "material_after", "material_deposited",
"rp1", ...], [n1, ...]); amount_deposited, [
Here, an additional parameter material_deposited
describes the material component which contributes to the deposition
zone. With the parameter amount_deposited the amount of
surface sites per reaction can be controlled. There is no
flag
for the incoming gas species, since it is assumed that
for a deposition process it will be always absorbed. Thus, the complete
reactive AlOx example would look like follows (for Al with a deposition
probability of 100%):
"O2", 1, 0.75, 0.5, "Al", "AlOx", [], []);
add_surface_reaction("Al", 1, 1.0, "Al", "Al", "Al", 1, [], []);
add_surface_deposition("Al", 1, 1.0, "AlOx", "Al", "AlOx", 1, [], []); add_surface_deposition(
Please note that surface oxidation by "O2"
only works if
there is a non-zero metal fraction of "Al"
present at the
surface. "Al"
deposition works for both possible surface
materials.
3.3.7.4 Surface cover deposition
Many deposition reactions such as deposition of sputtered metal work equally on all possible surface materials. In all of these cases, the deposited metal “covers” the actual surface layer component and replaces it by itself. The surface layer component will then contribute to the deposited film. A visualization of this process is given in Fig 3.4.
For this cover deposition, a special command can be used:
"species", amount, probability,
add_cover_deposition("deposition_material",
"rp1", "rp2", ...], [n1, n2, ...]); [
Here, the deposition_material parameter specifies, which material is deposited on top of all possible surface materials. In the reactive AlOx example, the following definitions are equivalent:
"Al", 1, 1.0, "Al", "Al", "Al", 1, [], []);
add_surface_deposition("Al", 1, 1.0, "AlOx", "Al", "AlOx", 1, [], []); add_surface_deposition(
… and …
"Al", 1, 1.0, "Al", [], []); add_cover_deposition(
3.3.7.5 Implantation
A third deposition mechanism performs deposition by implantation, i. e. without modifying the state of the top surface layer:
"species", amount, probability,
add_implantation("deposition_material",
"rp1", "rp2", ...], [n1, n2, ...]); [
Here, the deposited_material is implanted into the layer through the top surface layer and without altering the surface coverage configuration. A visualization of such process in given in Fig. 3.5.
The accordant command for introducing Ar implantation by fast Ar+ bombardment with 20% probability is
"Arplus", 1, 0.2, "Ar", ["e"], [0.05]);
add_implantation("e", 0, 10, 1.0); set_emission_energy(
Here, additionally a low-energy secondary electron (E=0..10 eV) can be emitted with 5% probability during such process.
3.3.7.6 Example for a surface chemistry model for reactive ZnO:Al deposition
In this example, the reactive deposition of doped ZnO:Al layers is analyzed (Pflug et al. 2015). Especially the doping efficiency of the Al dopant is investigated. For this purpose, a simplified DSMC reactor model consisting of two Zn:Al sputter sources, an Ar gas inlet, an O2 gas inlet as well as a substrate is considered (see Fig. 3.6).
For the inclusion of Al into the ZnO, the following hypothetical model is constructed (see Fig. 3.7):
- On the one hand, metallic Zn coated on the substrate has a low binding energy (in fact, metallic Zn has a high vapor pressure). Thus, it should be rather easy for an incoming Al atom to replace one Zn atom on the surface thereby creating a Zn:Al mixed site.
- We assume that oxidation of a Zn:Al mixed site leads to a ZnO:AlO site, where the Al atom can act as dopant
- If the substrate is covered by ZnO on the other hand, the binding energy is rather high. Thus, an incoming Al atom is not able to replace a Zn atom and is rather being deposited as a separate Al site.
- The oxidation of separate Al sites leads to formation of separated, insulating AlOx clusters, which do not contribute to the doping process.
With four gas species "Ar", "O2", "Zn", "Al"
the above
described growth model can be implemented via the wall reaction model as
shown in the following:
# Initialize six possible surface material compounds:
"Zn2", 2e17);
add_material("Al2", 2e17);
add_material("Zn2O2", 2e17);
add_material("ZnAl", 2e17);
add_material("ZnOAlO", 2e17);
add_material("Al2O3", 2e17);
add_material("Zn2", 0.5);
set_initial_coverage("Zn2O2", 0.5);
set_initial_coverage(
# Oxidation of Zn (gettering coefficient 50%)
"O2", 1, 1, 0.5, "Zn2", "Zn2O2", [], []);
add_surface_reaction(
# Exchange reaction Al (gas) + Zn2 (solid) --> ZnAl (solid) + Zn (gas)
"Al", 1, 1, 1.0, "Zn2", "ZnAl", ["Zn"], [1]);
add_surface_reaction(
# Exchange reaction Zn (gas) + Al2 (solid) --> ZnAl (solid) + Al (gas)
"Zn", 1, 1, 1.0, "Al2", "ZnAl", ["Al"], [1]);
add_surface_reaction(
# This is the insulating species (gettering coefficient 70%)
"O2", 1, 1.5, 0.7, "Al2", "Al2O3", [], []);
add_surface_reaction(
# This is the doped oxide species (gettering coefficient 70%)
"O2", 1, 1, 0.7, "ZnAl", "ZnOAlO", [], []);
add_surface_reaction(
# Film growth by Zn or Al covering deposition
"Zn", 2, 1, "Zn2", [], []);
add_cover_deposition("Al", 2, 1, "Al2", [], []); add_cover_deposition(
3.3.8 Particle sources depending on surface state
Particle sources may change their behavior depending on their surface coverage. Two different options are currently implemented as shown in the following.
3.3.8.1 Sputtering sources with given ion flux
A sputtering source with a given ion flux is given by the command
"material", ion_flux,
add_surface_emission("rp_1", "rp_2", ...], [yield_1, yield_2, ...]); [
Parameters are as in the following:
- material: Material phase in the surface layer. For different surface materials different sputtering processes can be defined.
- ion_flux: The effective ion flux is given in sccm.
- [“rp_1”, “rp_2”, …]: list of gaseous reaction products
- [yield_1, yield_2, …]: list of partial yields of the gaseous reaction products
The sputtering yield of a gasous reaction product is the product of the reaction probability and its partial yield. As an example, the surface chemistry and sputtering source for the reactive TiOx process is given:
# Specification of surface material phases and initial coverage:
"Ti_metallic", 9e18);
add_material("TiO2", 9e18);
add_material("TiO2", 0.9);
set_initial_coverage(
# Surface reactions:
"O2", 1, 1, 1.0, "Ti_metallic", "TiO2", [], []);
add_surface_reaction("Ti", 1, 1, "Ti_metallic", [], []);
add_cover_deposition(
# Sputtering source:
"Ti_metallic", ion_flux_sccm, ["Ti"], [0.5]);
add_surface_emission("Ti", 4.89, 1.0, 400, 40);
set_emission_thompson("TiO2", ion_flux_sccm, ["Ti", "O2"], [0.05, 0.05]);
add_surface_emission("Ti", 6.0, 1.0, 400, 40);
set_emission_thompson("O2", 6.0, 1.0, 400, 40); set_emission_thompson(
In the above example, sputtering of metallic Ti and oxidized TiO2 is handled separately. The sputtering yield of TiO2 is by factor of 10 lower compared to metallic Ti. The energy distributions of the sputtered gaseous species are to be specified afterwards for each case.
Note: When sputtering the surface layer, it is being replaced by the material beneath the surface layer:
- If there is deposition on the sputtering surface, the replaced surface fractions are according to the stoichiometry of the material in the deposition layer.
- If there is no deposited material beneath the surface layer, the replacement material will be the material which is firstly defined in the deposition chemistry (i.e. Ti_metallic in the above example).
3.3.8.2 Thermal desorption of coated material
If surfaces are coated with materials with high vapour pressure, there is the possibility of thermal desorption of that material. For this purpose, a desorption source is implemented. It can be declared via the syntax
"species", pressure, "material", amount); add_desorption(
The parameters are as follows:
- species: The species, which is to be emitted from the wall into the gas phase
- pressure: The vapor pressure in Pa. The vapor pressure generally depends on the wall temperature. For many materials, the vapor pressure curve as a function of temperature is available in literature (Alcock, Itkin, and Horrigan 1984).
- material: The associated wall material.
- amount: The number of gas molecules needed to form a bond site of the wall material
If the surface material does not completely desorb but leaves behind some remainder, modified command is available:
"species", pressure, "material",
add_desorption_r("remainder", amount_remainder); amount_gas_species,
Here, we have the following parameters:
- species: The species, which is to be emitted from the wall into the gas phase
- pressure: The vapor pressure in Pa.
- material: The associated wall material.
- amount_gas_species: The number of gas molecules needed to form a bond site of the wall material.
- remainder: The wall material which is left behind by the desorption process.
- amount_remainder: The number of wall sites of the remaining material created by the desorption process.
Example: If we have a metallic ZnAl
mixed site and
assume that only Zn can desorp and leave behind a half Al2
site, the command would look like follows:
add_desorption_r("Zn", vapor_pressure, "ZnAl", 1, "Al2", 0.5);
3.3.9 Electric boundary conditions in plasma simulation
In PIC-MC plasma simulations, mesh objects act as electrodes which are either conductive or dielectric (= insulating). Conductive electrodes can be either put on a fixed potential, they can be floating or they can have a built-in potential relative to another electrode. This behaviour can be specified by the parameters epsr, vf, vf_coupling as summarized in the following table.
Note 1: Electrodes need to be closed 3D objects in the mesh geometry. If you need particle sources which are part of an electrode, this is currently not supported (in DSMC simulation, it is possible to have source surfaces which are only part of a complete 3D object). A workaround is to use membranes as particle sources, since membranes do not act as electrodes in plasma simulation.
Case | epsr | vf | vf_coupling |
---|---|---|---|
Dielectric domain (insulator) | |||
Conductive floating potential | |||
Fixed voltage | |||
Voltage with self bias | |||
Relative voltage |
A couple of pre-defined parameters and functions can be used in the voltage function string vf. RVM comes with a set of mathematical functions like sin, cos, atan,...,etc. Additionally the keywords TIME, VP and PI can be used within in the mathematical expression:
- TIME - The current simulation time, i.e. time step x current iteration.
- PI - You guessed it, pi (3.14159265).
- VP - Internally controlled voltage to meet aimed
power dissipation
PSOLL
, which could be a time-dependent function or absolute an value.
The use of the electric boundary conditions in typical scenarios is shown in the following pages within three examples.
Example 1: System of three walls,
Target
, Chamber
and dielectric
Substrate
block BORDER_TYPES: {
Border Target: {= 1;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1, 1, ["Ar", "e"],
add_plain_reaction(1, PAR.SECONDARY_ELECTRON_YIELD]);
["e", 0, 5, 1);
set_emission_energy("e", 0.5); # 50% electron reflection
add_absorption(;
}= "-VP"; # Negative voltage amplitude for DC operation
vf ;
}
Border Chamber: {= 2;
icodec type = "wall";
= PAR.T0;
T
reactions: {# We neglect secondary electrons at chamber and substrate surface
"Arplus", 1);
add_absorption("e", 0.5);
add_absorption(;
}= "0"; # Chamber wall grounded and on anode potential
vf ;
}
Border Substrate: {= 3;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1);
add_absorption("e", 0.5);
add_absorption(;
}# Dielectric constant of glass
= 6.0;
epsr
# vf must be commented out or deleted for a dielectric material.
# vf = "";
;
}; }
Example 2: The same system with floating conductive
Substrate
and with radio-frequency sputtering
block BORDER_TYPES: {
Border Target: {= 1;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1, 1, ["Ar", "e"],
add_plain_reaction(1, PAR.SECONDARY_ELECTRON_YIELD]);
["e", 0, 5, 1);
set_emission_energy("e", 0.5); # 50% electron reflection
add_absorption(;
}# RF (13.56 MHz) voltage
= "VP*cos(2*PI*13.56e6*TIME)";
vf
# Indicates that this electrode has a self-bias
= "Target";
vf_coupling ;
}
Border Chamber: {= 2;
icodec type = "wall";
= PAR.T0;
T
reactions: {# We neglect secondary electrons at chamber and substrate surface
"Arplus", 1);
add_absorption("e", 0.5);
add_absorption(;
}= "0"; # Chamber wall grounded and on anode potential
vf ;
}
Border Substrate: {= 3;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1);
add_absorption("e", 0.5);
add_absorption(;
}# Both, epsr and vf, must be commented out or
# deleted for a floating conductor
;
}; }
Example 3: Two targets Target_1
,
Target_2
acting as bipolar electrodes with 100 kHZ
block BORDER_TYPES: {# floating conductor, i.e. no vf, epsr, vf_coupling!
Border Target_1: { = 1;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1, 1, ["Ar", "e"],
add_plain_reaction(1, PAR.SECONDARY_ELECTRON_YIELD]);
["e", 0, 5, 1);
set_emission_energy("e", 0.5); # 50% electron reflection
add_absorption(;
};
}
Border Target_2: {= 4;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1, 1, ["Ar", "e"],
add_plain_reaction(1, PAR.SECONDARY_ELECTRON_YIELD]);
["e", 0, 5, 1);
set_emission_energy("e", 0.5); # 50% electron reflection
add_absorption(;
}
= "VP*cos(2*PI*100e3*TIME)"; # HF voltage signal
vf = "Target_1"; # Counter electrode
vf_coupling ;
}
Border Chamber: {= 2;
icodec type = "wall";
= PAR.T0;
T
reactions: {# We neglect secondary electrons at chamber and substrate surface
"Arplus", 1);
add_absorption("e", 0.5);
add_absorption(;
}= "0"; # Chamber wall grounded and on anode potential
vf ;
}
# floating conductor, i.e. no vf, epsr, vf_coupling!
Border Substrate: { = 3;
icodec type = "wall";
= PAR.T0;
T
reactions: {"Arplus", 1);
add_absorption("e", 0.5);
add_absorption(;
};
}; }
3.3.10 Sampling of energy and angular distribution
Each particle hitting a surface can be recorded within an energy or angular histogram vector. This functionality is applicable for walls as well as for membranes.
All histograms are taken per physical surface. Important: For membranes, the histogram is only taken for particles hitting the side, where the normal vector points out. This is useful if e. g. multiple histograms shall be taken for a large physical surface at different areas: In this case it is possible to use several transparent membranes placed close to the surface at the desired locations. Since particles hitting the surface can be diffusely reflected, it would be misleading if the reflected particles are also sampled by the membranes.
The involved commands for generating histograms must be written within the wall description blocks (see begin of this chapter (sec:prep_wall_model?)) and are listed in the following.
3.3.10.1 Energy histogram
The following command specifies a histogram for the electron energy distribution function, where the angular distribution is considered as isotropic.
"species", E0, E1, nE); add_energy_histogram(
Parameters are:
- species: The gas species which shall be recorded
- E0, E1: Energy interval of interest
- nE: Number of histogram points within \([E_0, \ldots E_1]\)
3.3.10.2 Angular histogram
The following command specifies a histogram for the angular distribution function only, i.e. not considering the energy distribution function.
"species", nTheta, nPhi, vx, vy, vz); add_angular_histogram(
Parameters are:
- species: The gas species which shall be recorded
- nTheta: The number of polar angle intervals (\(\theta\in [0,90]\))
- nPhi: The number of azimuth angle intervals (\(\phi\in [0,360]\))
- vx, vy, vz: A vector defining the direction where the azimuthal angle \(\phi\) shall be defined as zero6
This is mandatory, since otherwise the tangential vectors needed to compute the azimuthal angle are undefined↩︎
3.3.10.3 Combined histogram
It is possible to use the above commands for energy and angular histogram, separately, which would yield two statistically independent distribution functions for energy and angle. Since energy and angular distribution can be correlated, it is also possible to generate a combined energy and angular distribution.
"species", nTheta, nPhi, E0, E1, nE, vx, vy, vz); add_histogram(
The parameters have the same meaning as in the single functions
described above. In fact, this function is always internally called
(also by add_energy_histogram
and
add_angular_histogram
with a reduced parameter set). For a
combined histogram please take care of the total number of histogram
points (nThetanPhinE): If that number is very large, a very
long time averaging interval will be needed to obtain useful
statistics.
The resulting files in the output directory have the filenames
histogram_<number>_<Surface>_<Species>_<Timestamp>.txt
,
e. g. histogram_1_Substrate_Ti_60.00ms.txt
7.
The output format is just four columns with numbers:
- Energy [eV]
- Theta [°]
- Phi [°]
- Sampled histogram intensity
When making polar contour plots of the angular distribution, remember to adjust the intensity:
/ sin(theta*pi/180) Intensity
The reason for this is the integration in spherical coordinates, where the differential element is: \(\sin(\theta)d\theta d\phi\).
The 'number' is required since different histogram types are possible for the same species and surface, which would lead to the same filename otherwise↩︎
3.3.10.4 Histogram array
It is possible to divide a physical surface into an array of histograms. This only works for single plane surfaces by using the following command:
"species", nTheta, nPhi,
add_histogram_array(
E0, E1, nE, nX, nY, ; x1, y1, z1, x2, y2, z2, x3, y3, z3)
Parameters are:
- species: The gas species which shall be recorded
- nTheta: The number of polar angle intervals (\(\theta\in [0,90]\))
- nPhi: The number of azimuth angle intervals (\(\phi\in [0,360]\)))
- E0, E1: Energy interval of interest
- nE: Number of histogram points within \([E_0, \ldots E_1]\)
- nX, nY: Number of histograms in x- and y-direction
- x1, y1, z1: First anchor point P1 of the histogram plane
- x2, y2, z2: Seconds anchor point P2, defines together with P1 the x-direction
- x3, y3, z3: Third anchor point P3, defines together with P1 the y-direction
The point coordinates should be given in mesh units. In the resulting file instead of a single intensity column, there are $n_X n_Y$ columns with the order \(I_{00}, I_{10}, I_{20}, \ldots I_{n_X-1\,nY-1}\). If \(i_x, i_y\) are the indices of the X and Y partition and \(i_c\) is the column number, the conversion rules are
\[\begin{aligned} i_c & = i_x + n_X i_y \in [0,\ldots \left(n_X n_Y\right)-1]\nonumber\\ i_x & = i_c\, \textrm{mod}\, n_X \in [0,\ldots n_X-1] \nonumber \\ i_y & = \lfloor i_c/n_X\rfloor \in [0,\ldots n_Y-1] \nonumber \end{aligned}\]
Warning: Please take care not to use too many histogram slots / histogram segments as this could easily lead to memory overflow. If a simulation run with large histogram arrays is crashing on startup, please check the memory consumption on the compute nodes and consider using a fewer number of slots / histogram segments.
Besides the general function, there are also an energy
(add_energy_histogram_array
) and angular
(add_angular_histogram_array
) only function. Their
parameters are a subsection of the more general command above, the
syntax is as follows:
add_energy_histogram_array(species, E0, E1, nE, nx, ny, ;
x1, y1, z1, x2, y2, z2, x3, y3, z3)
add_angular_histogram_array(species, nTheta, nPhi, nx, ny, ; x1, y1, z1, x2, y2, z2, x3, y3, z3)
3.4 Species list
The list of species is included in
rvmscripts/species_definition.r
below your picmc
installation directory. In this file, each species is defined in one
lines and takes two parameters, the relative atomic mass and the charge
in units of the elemental electric charge \(e
\simeq 1.6022\times 10^{-19}\) As. The entries for
Ar
and Arplus
e.g. are written as follows:
Record Ar = GenSPEC + { mr = 39.948; charge = 0.0; };
Record Arplus = GenSPEC + { mr = 39.948; charge = +1.0; };
If additional species are needed, which are not included in the predefined species list below, they can be created as follows:
- Copy the file
.../rvmscripts/species_definition.r
into the local directory, where also the*.par
file etc. reside, and name it e.g.my_species_definition.r
- Add the required species into that file
- Refer to this file from inside the
*.par
file as shown in section (sec:par_species_cross_sections?). - Usually, it will then be also necessary to extend the list of available cross sections.
The file rvmscripts/species.r
contains some routines to
load the chosen species into the actual simulation run and treat them
differently according to their charge, weight etc. - this file usually
shouldn’t be modified.
All names of the predefined species are listed in the following.
3.4.1 Electrons
- e
3.4.2 Period 1
- H, Hplus, Hminus
- H2, H2plus
- H3, H3plus
- He, Heplus
3.4.3 Period 2
- N2, N2plus
- O, Oplus, Ominus
- O2, O2ex, O2plus, O2minus
- Ne, Neplus
3.4.4 Period 3
- Na, Naplus, Naplusplus
- Mg, Mgplus, Mgplusplus
- Al, Alplus, Alplusplus
- Si, Siplus, Siplusplus
- P, Pplus, Pplusplus
- S, Splus, Splusplus
- Cl, Clplus, Clplusplus
- Ar, Arplus
3.4.5 Period 4
- K, Kplus, Kplusplus
- Ca, Caplus, Caplusplus
- Sc, Scplus, Scplusplus
- Ti, Tiplus, Tiplusplus
- V, Vplus, Vplusplus
- Cr, Crplus, Crplusplus
- Mn, Mnplus, Mnplusplus
- Fe, Feplus, Feplusplus
- Co, Coplus, Coplusplus
- Ni, Niplus, Niplusplus
- Cu, Cuplus, Cuplusplus
- Zn, Znplus, Znplusplus
- Ga, Gaplus, Gaplusplus
- Ge, Geplus, Geplusplus
- As, Asplus, Asplusplus
- Se, Seplus, Seplusplus
- Kr, Krplus
3.4.6 Period 5
- Rb
- Sr
- Y
- Zr
- Nb
- Mo
- Tc
- Ru
- Rh
- Pd
- Ag
- Cd
- In
- Sn
- Sb
- Te
- Xe, Xeplus
3.4.7 Period 6
- Ta
- W
3.4.8 Anorganic compounds
- NH3, NH3ex
- SiH2, SiH3, SiH4, SiH3plus, SiH3minus
- Si2H4plus, Si2H5minus, Si2H5, Si2H6
- Si3H8
- Si4H10
- ZnO
3.4.9 Organic compounds
- HMDSO
- Alq3
3.4.10 Excitated species
- Arex