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:
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 McRae19761), 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:
add_plain_reaction("Arplus", 1, 1, ["Ar", "e"], [1, 0.1]); set_emission_energy("e", 0, 10, 100); add_specular_reflection("e", 1.0); set_probability_function(0, 5, 20, 0.45*(1-E/5)); add_absorption("e", 1.0); set_probability_function(0, 22, 100, 1-(0.03+0.14*E/22));
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).
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
set_yield_function("species", E0, E1, nE, 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 variable E
can be used for energyThe 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 2) as follows:
For this case, there are now two seemingly equivalent possible definitions:
Yield function | Probability function |
---|---|
add_plain_reaction("Arplus", 1, 1, ["Ar", "e", "Ti"], [1, 0.1, 1.0]); set_emission_sputter("Ti", 4.89, 1.5); set_yield_function("Ti", 0, 1000, 1000, (E>118) ? 0.01085*(E-118)^(2/3) ! 0); | add_plain_reaction("Arplus", 1, 1, ["Ar", "e", "Ti"], [1, 0.1, 1.0]); set_emission_sputter("Ti", 4.89, 1.5); set_probability_function(0, 1000, 1000, (E>118) ? 0.01085*(E-118)^(2/3) ! 0); |
However there are two important differences:
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:
set_yield_function_2D("species", E0, E1, nE, nTheta, 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 intervalnTheta
: Number of points for interval of polar angle function
: Arithmetic expression, where the variables E
, THETA
can be used for the energy and polar angle, respectively. The energy unit is [eV], the angular unit is radian in the range A simplified interface for typical cases is
set_yield("species", function);
Here, the energy range is predetermined to eV and the angular range is divided into 20 intervals. These settings should be appropriate e.g. for most sputtering processes.
An alternative yield function is given in 3). For an example calculaton (Ar ions on Ti) you can use the following script:
float qq = 4.8957; float epsilon = 8.56428*10^4; float E_th = 25.019; float mu = 1.8291; float lambda = 0.3152; float E = 200; out "$(qq/2*ln(1+1.2288*E/epsilon)/(E/epsilon+0.1728*sqrt(E/epsilon)+0.008*(E/epsilon)^(0.1504))* (E/E_th-1)^mu/(lambda+(E/E_th-1)^mu))\n";
The parameter at the beginning have to be set according to the species involved. The script can then be executed with:
rvm sputter_yield.r