Matrix deposition algorithm
Trajectory object
This object controls the trajectory of the substrate. At the same time, it determines the coordinate system of the setup. The trajectory is to be defined within an MPROJECTOR object.
Within the object, an internal coordinate system is used, whereof the axes have the following meaning:
- X axis - This is the radial coordinate pointing from the center of the turntable towards outside (into the direction, where PHI=0°)
- Y axis - This is the tangential coordinate which points into the move coordinate (into the direction, where PHI=90°)
- Z axis - This is the vertical distance from the substrate holder
The external coordinate system of the simulation setup may be different. By definition of appropriate unit vectors in the Trajectory object, the correct orientation of the coordinate system within this module can be chosen.
Script syntax
The definition syntax is as follows:
Trajectory_type="circular";
trajectory: {
PHI_0 = -19; PHI_1 = 19; NPHI = 381;
x0 = -232; y0 = 260; z0 = z_front;
R = 540;
nx = 0; ny = 0; nz = -1;
tx = 1; ty = 0; tz = 0;
};
There are the following input parameters for a “circular” trajectory.
PHI_0, PHI_1= The interval of the turntable rotation.NPHI= Number of turntable rotation stepsx0, y0, z0= The point (x0, y0, z0) corresponds to the center of the turntable in lateral coordinates and to the central point of the substrate in vertical coordinates.R= Radius between center of turntable and center of substratenx, ny, nz= Unit vector pointing from turntable towards the histogram plane. This is parallel to the Z axis mentioned above.tx, ty, tz= Unit vector pointing in radial direction from center to outside; which is identical to the X axis mentioned above.
Relevant C++ routines
Trajectory_UTX::set_plot_position(): Put the substrate into a central position for plottingint Trajectory_UTX::get_nsteps(): Return the number of steps of the move trajectoryTrajectory_UTX::get_coordinates(double &_xt, double &_yt, double &zt, double &PHI_t): Retrieve the current coordinates of substrate center. The anglePHI_tis used for the relative rotation of the substrate with respect to the external coordinate system.Trajectory_UTX::get_origin(double &_x0, double &_y0, double &_z0): Get coordinates of center of turntable. If the turntable is placed within XY plane, the Z coordinate_z0is at the same vertical distance from the turntable as the center surface of the substrate.Trajectory_UTX::set_index(int &_index): Go to the step_indexof the move trajectory. The variable_indexhas to be between 0 andTrajectory_UTX::get_nsteps()-1.
Histogram object
How to provide matrix histogram files
A matrix histogram is an array of iX*iY histograms arranged in a rectangular array. It can be extracted from a DSMC simulation via the histogram array technique. The syntax to use within a reactions: { … } block is
add_histogram_array("species", nTheta, nPhi, E0, E1, nE, nx, ny, x0, y0, z0, x0+dx1, y0+dy1, z0+dz1, x0+dx2, y0+dy2, z0+dz2);
The histogram array is applied on a single rectangular membrane with the following coordinates:
In case of a sputter coater with turntable, please use the following conventions:
- should be the radial coordinate and point from the turntable center towards outside (i.e. the “X” direction mentioned above)
- should be the tangential coordinate which is identical with the “Y” direction mentioned above.
In the GMSH mesh geometry, make sure that the normal vectors from the Matrix mesh point towards the arriving particles.
Example: in the model of the EOSS coater, there is a histogram sampling plane spanning between the coordinates (225, 120, 380) → (525, 400, 380). The turntable is located in XY plane, and its lower Z coordinate is Z0=382. The upper coordinate of the uniformity masks is Z=380; this is identical with the Z coordinate of the histogram membrane. The radial direction is identical to the positive X axis direction, and the tangential direction corresponds to Y. Thus, an appropriate way to define the histogram array would be
add_angular_histogram_array("Ta", 9, 36, 30, 28, 225, 120, 380, 525, 120, 380, 225, 400, 380);
The first two parameters correspond to the number of angular slots for - corresponding to a 10° resolution. The second two parameters (30, 28) are the number of histogram slabs in the first and second direction. With and this corresponds to a spatial resolution of 10 mm in both directions.
During a DSMC simulation, histogram files are produced in the histogram/* subdirectory of the simulation run folder. These histogram files are plain ASCII. Their first three columns consist of (i) energy in eV, (ii) polar angle and (iii) azimuthal angle. The following nx*ny columns consist of the sampled particle counts from all of the histogram slabs. The column number (starting with 0) depends on the indices ix, iy in the following way:
On the other hand, the indices ix, iy can be retrieved from the column number via
The histogram files are generated for each plot snapshot. For better statistics please use the script contained in this ZIP file for time averaging. This is done via following steps:
-
The script should be placed in the same directory as the *.PAR files
-
Create a subdirectory via
mkdir histogram-matrix -
Edit the headlines of the script. You should adjust the time averaging interval as well as specify the species for each of the matrix histograms attached to the sampling membrane:
T0 = 1000; # Time averaging startT1 = 3000; # Time averaging endDT = 50; # Time between two snapshotsTUNIT = "ms"; # Time unit (as written in the filenames)sensor = "Matrix"; # Physical name of matrix membraneEXPORT = "plot"; # use "plot" for use in projector algorithmvar species[] -> ["Ta", "Ta", "Ta"];
In the example, time averaging is performed from 1000 to 3000 ms with a time step of 50 ms between snapshots. There are three different histograms attached to the sampling membrane, each of them samples arriving Tantalum (“Ta”) species.
-
After having adjusted the file
histogram-matrix.r, type the command:rvm -b histogram-matrix.r simcase.par
Internal histogram representation
Within module_mprojector, histograms are represented by the C++ class Histogram. It has the following relevant member functions:
Histogram::alloc(int _ntheta, int _nphi): Allocate memory for internal variabledouble *intensityto store count values for_ntheta*_nhiangle combinationsHistogram::restore(): Fill all intensity entries with 0.Histogram::read_file(char *_fullpath, int *_debugflag=0): Read histogram from single histogram file. This function is deprecated and will be removed.double Histogram::get_intensity(int _itheta, int _iphi): Get counts for_itheta, _iphicombination.Histogram::set_intensity(int _itheta, int _iphi, double _intensity): Set counts for_itheta, _iphicombination.Histogram::add_intensity(int _itheta, int _iphi, double _intensity): Add counts for_itheta, _iphicombination.
In the object MProjector_UTX, histograms are stored in the component Histogram *MProjector_UTX::histograms. In previous versions, single histograms could be read in via many separated histogram slabs, however this method is too cumbersome and has therefore been removed.
In the current version, all histograms are obtained from the single histogram matrix file described above. The corresponding input section in the script file looks like follows:
Hist_NTHETA = 9;
Hist_NPHI = 36;
Hist_DELTAPHI= 90;
Hist_Z = 380;
Hist_X0 = 225; Hist_NX = 30; Hist_DX = 10;
Hist_Y0 = 120; Hist_NY = 28; Hist_DY = 10;
Hist_Filename= "histogram-matrix/$(histlabel)_histogram_3_Matrix_Ta.txt";
The coordinates of the histogram slabs are now passed via the parameters Hist_X0, Hist_NX, Hist_DX, Hist_Y0, Hist_NY, Hist_DY. The coordinates Hist_X0, Hist_Y0 correspond to the lower edge coordinates of the sampling membrane in the GMSH file1. The third coordinate is Hist_Z which represents the vertical position of the histogram plane2.