-
Notifications
You must be signed in to change notification settings - Fork 16
Benchmarks
This page will serve to collect the results of post-release benchmarks of RustBCA. These include comparisons to other codes, comparisons to (semi-)empirical formulas, and comparisons to experimental data where available. Benchmarks can be requested using the [benchmark] flag when creating a new issue.
This is a straightforward comparison to experimental values originally used to benchmark TRIM.SP (the precursor to TRIDYN). For this comparison, the ergonomic python functions were used, with one modification. The electronic stopping mode was changed from LOW_ENERGY_NONLOCAL (Lindhard-Scharff) to LOW_ENERGY_EQUIPARTITION (50% Lindhard-Scharff + 50% Oen-Robinson). Bulk binding energy was set to 3.0 eV to match the TRIM.SP results, and the surface binding energy was set to 8.68. Agreement w.r.t. energy is very good, but RustBCA calculates slightly sputtering yields (~10%) at non-normal incidence compared to TRIM.SP results from 2; however, they do not report Es or Eb in that paper, so it is possible that the original results could be recovered by reducing Eb, or by using isotropic surface binding, etc.
Figure 1: W on W self-sputtering w.r.t. energy.
Figure 2: W on W self-sputtering w.r.t. angle. These values had reported error bars of approximately 10%.
Hydrogen on Nickel compared to EAM and Experiment: Default Settings and Realistic Interatomic Potentials
See examples/benchmark_eam.py. EAM and Experimental data from https://doi.org/10.1016/0022-3115(84)90433-1.
This shows that previous assumptions about the energy regime of validity of BCA codes may not be accurate for all quantities. In particular, reflection coefficients from TRIM were inaccurate below 10s of eV; this seems to have been implicitly extended to all BCA codes in the literature. However, RustBCA has qualitatively good results for reflection at energies significantly lower than 10s of eV.
Using the default settings, RustBCA performs well when compared to both experimental data at higher energies and an EAM model at much lower energies. Modification of the default settings, such as using a realistic interaction potential, or changing the weak collision order, is likely to improve the results further.
See this example for the script to run the Morse potential simulations for the above figure.
By introducing the Morse potential for H-Ni (D=0.3431 eV, r0=2.782 A, alpha=1.419 1/A) and increasing the surface binding energy for H to the literature value for H on Ni surfaces of 2.5 eV (from the default assumption of 1.5 eV), and choosing a nonlocal electronic stopping model with an appropriate correction applied (ck=1.09), the results at low energy can be significantly improved (note that the latter two changes were also applied for the Kr-C case in the figure above). However, since the high-energy (that is, small-r) behavior of the Morse potential does not approach the correct value (that is, a screened coulomb-like potential) the accuracy decreases significantly above about 200 eV. It is likely that the accuracy can be further improved with a better interaction potential.
This potential combines with sigmoidal interpolation the Kr-C potential for short-range forces and the Morse potential for the attractive portion to reproduce reflection coefficients from 0.1 eV to 10 keV; the interpolation parameters are k=7.0 1/A (interpolation width) and x0=0.75 A (interpolation transition point). Note that I've reduced the surface binding energy to 1.5 eV, the default value - in the case of an attractive-repulsive potential, it's not actually clear what value the surface binding energy should take - since it should include the contribution of all surface atoms except for the one most recently collided with. In the literature, Es is often used as a fitting parameter for sputtering data, so using it as one here is not uncalled for, but it would be nice to have a theoretically sound value to make the values more convincing.
This paper shows a plot with data extracted from an AC∀T paper that they use to suggest that BCA codes do not produce accurate sputtering yields compared to MD codes:
"We see that our results are considerably lower than the ones obtained using BCA... BCA is heavily influenced by the parameterization used for the particular case, and at low energies BCA has been seen to overestimate the results... "
However, if they had used another BCA, such as SDTrimSP or RustBCA, they would have had markedly better agreement:
I used the literature value for tungsten's bulk binding energy, 3.0 eV, the values in materials.py for everything else, and 100,000 ion trajectories using the Python bindings on the development branch (at time of writing). To recreate the RustBCA results:
from libRustBCA.pybca import *
from scripts.materials import *
import numpy as np
tungsten['Eb'] = 3.0
energies = np.logspace(2, 3, 100)
y = [sputtering_yield(argon, tungsten, energy, 0.0, 100000) for energy in energies]
plt.plot(energies, y)
plt.show()
MD paper: https://doi.org/10.1016/j.commatsci.2022.111876
AC∀T paper: https://doi.org/10.15748/jasse.3.165