diff --git a/paper/paper.md b/paper/paper.md index 6f19432..d9e50d0 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -24,7 +24,17 @@ bibliography: paper.bib # Summary -Ion-material interactions are of vital importance in industrial applications, the study and design of nuclear fusion devices, the engineering of survivable spacecraft components, and more. In particular, plasma-material interactions are typically dominated by ion-material interactions, including the phenomena of sputtering, reflection, and implantation. These phenomena are difficult to model analytically, and many such models rely on empirical or semi-empirical formulas, such as the Yamamura sputtering yield formula [@Yamamura1982], or the Thomas reflection coefficient [@Thomas1992]. However, such models are inherently limited, and of little applicability to complex geometry, multi-component surfaces, or for coupling to plasma or material dynamics codes. Since ion-material interactions span a range of energies from sub-eV to GeV and beyond, n-body approaches such as molecular dynamics can be computationally infeasible for many applications where the characteristic ion range exceeds the limits of reasonable molecular dynamics domains. Instead, approximations to the full n-body problem are used; the most common of these is the Binary Collision Approximation (BCA), a set of simplifying assumptions to the full n-body problem. RustBCA is a high-performance, general purpose, ion-material interactions BCA code, built for scientific flexibility and ease of use. RustBCA includes electronic stopping formulations for low energy (up to 25 keV/nucleon) and high energy (up to 1 GeV/nucleon), Kr-C, ZBL, Moliere, and Lenz-Jensen screened coulomb interatomic potentials, Lennard-Jones and Morse attractive-repulsive potentials, the unique capability of using multiple interatomic potentials in a single simulation, choice of Gaussian quadrature and the approximate MAGIC algorithm for determining scattering angles, full trajectory tracking of ions and material atoms, including local nuclear and electronic energy losses, a human- and machine-readable configuration file, and full 6D output of all particles that leave the simulation (via sputtering or reflection). Additionally, RustBCA includes multiple geometry types, including 0D (infinite, homogeneous target), 1D (finite depth, layered target), 2D (triangular mesh based target) and 3D (spherical geometry), with the ability to easily extend to further geometry types using Rust's type generics and trait systems. +Ion-material interactions are of vital importance in industrial applications, the study and design of nuclear fusion devices, the engineering of survivable spacecraft components, and more. In particular, plasma-material interactions are typically dominated by ion-material interactions, including the phenomena of sputtering, reflection, and implantation. These phenomena are difficult to model analytically, and many such models rely on empirical or semi-empirical formulas, such as the Yamamura sputtering yield formula [@Yamamura1982], or the Thomas reflection coefficient [@Thomas1992]. However, such models are inherently limited, and of little applicability to complex geometry, multi-component surfaces, or for coupling to plasma or material dynamics codes. Since ion-material interactions span a range of energies from sub-eV to GeV and beyond, n-body approaches such as molecular dynamics can be computationally infeasible for many applications where the characteristic ion range exceeds the limits of reasonable molecular dynamics domains. Instead, approximations to the full n-body problem are used; the most common of these is the Binary Collision Approximation (BCA), a set of simplifying assumptions to the full n-body problem. RustBCA is a high-performance, general purpose, ion-material interactions BCA code, built for scientific flexibility and ease of use. RustBCA features include: + + - electronic stopping formulations for low energy (up to 25 keV/nucleon) and high energy (up to 1 GeV/nucleon) + - Kr-C, ZBL, Moliere, and Lenz-Jensen screened coulomb interatomic potentials + - Lennard-Jones and Morse attractive-repulsive potentials + - the unique capability of using multiple interatomic potentials in a single simulation + - choice of Gaussian quadrature or the approximate MAGIC algorithm for determining scattering angles + - full trajectory tracking of ions and material atoms, including local nuclear and electronic energy losses + - a human- and machine-readable configuration file + - full 6D output of all particles that leave the simulation (via sputtering or reflection) + - multiple geometry types # Binary Collision Approximation Codes @@ -48,7 +58,9 @@ For detailed summaries of the history and theory of binary collision approximati Ion-material interactions have been historically modeled using analytical and semi-empirical formulas, such as Sigmund's sputtering theory [@Sigmund1987], the Bohdansky formula [@Bohdansky1980; @Bohdansky1984], the Yamamura formula [@Yamamura1982; @Yamamura1983; @Yamamura1984], and the Thomas et al. reflection coefficient [@Thomas1992]. However, for any physical situation beyond the regimes of validity of these formulas (e.g., non-normal angles of incidence), or for complex geometry, or for inhomogeneous composition, straightforward empirical formulas cannot be reliably used. Many BCA codes have been developed to provide computationally efficient solutions to these problems, including SRIM [@Ziegler2010], Tridyn [@Möller1988], F-TRIDYN [@Drobny2017], SDTrimSP [@Mutzke2019] and its derivatives, which are based on the original TRIM [@Biersack1980] code. However, each has limitations that prevent widespread adoption across a broad range of applications. In particular, SRIM, which is free-use but closed-source, suffers from relatively poor computational performance and significant anomalies in sputtered atom angular distributions and light ion sputtering yields [@Shulga2019; @Shulga2018; @Hofsass2014; @Wittmaack2004]. Tridyn and F-TRIDYN, which are not open source, are limited to low ion energy, specific screened-coulomb potentials, mono-angular ion beams, atomically flat and atomically rough surfaces respectively, and are single-threaded. SDTrimSP, although significantly more advanced than the preceding codes, is built on the original TRIM source code and is not open-source. -As far as the authors are aware, there is no widely-used open-source BCA code suitable for simulating plasma-material interactions. Iradina is an open source BCA that has been used for ion-material interactions in a semicondcutor context [@HollandMoritz2017; @Johannes2014], but sputtering yields from iradina have not been shown to agree with direct comparisons to other BCA codes for a wide range of ions, targets, energies, or angles, and reflection coefficients or other key quantities of interest have not yet, to our knowledge, been reported. Additionally, those BCA codes that are available, through licensing agreements or as closed-source software, are not well suited to a wide range of physical problems. Particularly, the direct integration of BCA codes to particle or subsurface dynamics codes, such as those performed using F-TRIDYN for ITER divertor simulations [@Lasa2020], requires costly external wrappers to manage simulations and process output files to perform file-based coupling. RustBCA, as part of the [Plasma Surface Interactions 2 SciDAC Project](https://collab.cels.anl.gov/display/PSIscidac2/Plasma+Surface+Interactions+2) suite of codes, has been developed to fill that gap and expand upon the feature set included in currently available BCA codes. Features unique to RustBCA include the ability to handle attractive-repulsive interatomic potentials, use multiple interatomic potentials in one simulation, handle high-energy incident ions and multiple geometry types, use large file input of incident particles to facilitate coupling to other codes via HDF5, output pre-binned distributions without post-processing of text-based particle lists, and use a human- and machine-readable configuration file. RustBCA has been designed with modern programming techniques, robust error-handling, and multi-threading capability. RustBCA is being developed as both a standalone code and as a library code that may be used to add BCA routines to other high-performance codes to avoid file-based code coupling entirely. Additionally, the TRIM family of codes typically relies on the MAGIC algorithm to approximate the scattering integral with 5 fitting coefficients. RustBCA includes not only an implementation of the MAGIC algorithm, but also Mendenhall-Weller, Gauss-Mehler, and Gauss-Legendre quadrature, the three of which are significantly more accurate than the MAGIC algorithm. We hope that giving users direct access to a user-friendly, flexible, high-performance, open-source BCA will encourage and enable heretofore unexplored research in ion-materials interactions. +As far as the authors are aware, there is no widely-used open-source BCA code suitable for simulating plasma-material interactions. Iradina is an open source BCA that has been used for ion-material interactions in a semicondcutor context [@HollandMoritz2017; @Johannes2014], but sputtering yields from iradina have not been shown to agree with direct comparisons to other BCA codes for a wide range of ions, targets, energies, or angles, and reflection coefficients or other key quantities of interest have not yet, to our knowledge, been reported. Additionally, those BCA codes that are available, through licensing agreements or as closed-source software, are not well suited to a wide range of physical problems. Particularly, the direct integration of BCA codes to particle or subsurface dynamics codes, such as those performed using F-TRIDYN for ITER divertor simulations [@Lasa2020], requires costly external wrappers to manage simulations and process output files to perform file-based coupling. RustBCA, as part of the [Plasma Surface Interactions 2 SciDAC Project](https://collab.cels.anl.gov/display/PSIscidac2/Plasma+Surface+Interactions+2) suite of codes, has been developed to fill that gap and expand upon the feature set included in currently available BCA codes. + +Features unique to RustBCA include the ability to handle attractive-repulsive interatomic potentials, use multiple interatomic potentials in one simulation, handle high-energy incident ions and multiple geometry types, use large file input of incident particles to facilitate coupling to other codes via HDF5, output pre-binned distributions without post-processing of text-based particle lists, and use a human- and machine-readable configuration file. RustBCA has been designed with modern programming techniques, robust error-handling, and multi-threading capability. RustBCA is being developed as both a standalone code and as a library code that may be used to add BCA routines to other high-performance codes to avoid file-based code coupling entirely. Additionally, the TRIM family of codes typically relies on the MAGIC algorithm to approximate the scattering integral with 5 fitting coefficients. RustBCA includes not only an implementation of the MAGIC algorithm, but also Mendenhall-Weller, Gauss-Mehler, and Gauss-Legendre quadrature, the three of which are significantly more accurate than the MAGIC algorithm. We hope that giving users direct access to a user-friendly, flexible, high-performance, open-source BCA will encourage and enable heretofore unexplored research in ion-materials interactions. ![Figure showing sputtering yields of silicon from SRIM, RustBCA, F-TRIDYN, Yamamura's formula for Q=0.33-0.99, and a smooth analytical fit to experimental data by Wittmaack [@Wittmaack2004], for an incident energy of 1 keV and for many different projectiles.](corrected_yields.png) @@ -58,17 +70,21 @@ Quantities of interest from RustBCA, including sputtering yields, have been benc RustBCA includes multiple example input files, under the examples/ folder on the directory, as well as discussion of each on the RustBCA github wiki page. Three examples will be summarized here. +## Example 1: Layered Targets + First, an example of 2 keV helium ions at normal incidence on a layered titanium dioxide, aluminum, and silicon target can be run in 2D with: `cargo run --release examples/layered_target.toml` - + The same example using the 1D layered geometry can be run with: - + `cargo run --release 1D examples/layered_target_1D.toml` ![Helium implantation depth distributions at 2 keV in a layered TiO2-Al-Si target.](layered_target.png) - The depth distribution, compared to F-TRIDYN, clearly shows the effect of layer composition and sharp interfaces on the combined nuclear and electronic stopping of helium. + The depth distribution, compared to F-TRIDYN[@Drobny2017], clearly shows the effect of layer composition and sharp interfaces on the combined nuclear and electronic stopping of helium. + +## Example 2: 2D Geometry Second, as an example of the capability of RustBCA to handle 2D geometry, the trajectories of 1 keV hydrogen on a circular cross-section of boron-nitride can be simulated. @@ -76,6 +92,8 @@ First, an example of 2 keV helium ions at normal incidence on a layered titanium ![Trajectories of hydrogen and mobile boron and nitrogen resulting from 10 1 keV hydrogen ions impacting on a circular cross-section boron-nitride target.](H_B_N.png) +## Example 3: Spherical geometry + Third, the 2D boron nitride example can be run as a spherical boron nitride dust grain, by running the following command: `cargo run --release SPHERE examples/boron_nitride_sphere.toml`