From 5045e92b38e5b240fe26f394f587bbd77be14661 Mon Sep 17 00:00:00 2001 From: Lars Pastewka Date: Sun, 28 Jan 2024 11:49:15 +0100 Subject: [PATCH] DOC: Typos, reference fixes --- paper/paper.bib | 16 ++++++++++------ paper/paper.md | 22 +++++++++++----------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/paper/paper.bib b/paper/paper.bib index dcc484ce..e50b6dce 100644 --- a/paper/paper.bib +++ b/paper/paper.bib @@ -106,7 +106,7 @@ @article{Grigorev2020 author = {Grigorev, Petr and Swinburne, Thomas D. and Kermode, James R.}, journal = {Phys. Rev. Mater.}, volume = {4}, - issue = {2}, + number = {2}, pages = {023601}, numpages = {10}, year = {2020}, @@ -133,7 +133,6 @@ @article{Pastewka2010 month = jan, publisher = {Springer Science and Business Media {LLC}}, volume = {39}, - number = {1}, pages = {49--61}, author = {Lars Pastewka and Stefan Moser and Michael Moseler}, title = {Atomistic Insights into the Running-in, Lubrication, and Failure of Hydrogenated Diamond-Like Carbon Coatings}, @@ -242,6 +241,7 @@ @ARTICLE{Sinclair1975 author = "Sinclair, J E", journal = "Philos. Mag.", volume = 31, + number = {3}, pages = "647--671", year = 1975, issn = "1478-6435", @@ -311,7 +311,6 @@ @article{Seidl2021 month = jan, journal = {Tribol. Lett.}, volume = {69}, - number = {1}, pages = {22}, issn = {1573-2711}, doi = {10.1007/s11249-020-01395-6} @@ -367,6 +366,7 @@ @ARTICLE{Mayrhofer2016 Stevens, Paul A. and Moseler, Michael", journal = "J. Am. Chem. Soc.", volume = 138, + number = {12}, pages = "4018-4028", year = 2016, doi = "10.1021/jacs.5b04073" @@ -378,6 +378,7 @@ @ARTICLE{Falk2020 author = "Falk, Kerstin and Savio, Daniele and Moseler, Michael", journal = "Phys. Rev. Lett.", volume = 124, + number = {10}, pages = "105501", year = 2020, doi = "10.1103/PhysRevLett.124.105501" @@ -390,6 +391,7 @@ @ARTICLE{Reichenbach2020 Kuwahara, Takuya and Moseler, Michael and Moras, Gianpietro", journal = "ACS Appl. Mater. Interf.", volume = 12, + number = {7}, pages = "8805-8816", year = 2020, doi = "10.1021/acsami.9b18019" @@ -476,7 +478,7 @@ @ARTICLE{Miller2009 } @ARTICLE{Anciaux2018, - title = "The {Coupled Atomistic/Discrete-Dislocation} method in 3d part I: + title = "The Coupled Atomistic/Discrete-Dislocation method in 3d part {I}: Concept and algorithms", author = "Anciaux, G and Junge, T and Hodapp, M and Cho, J and Molinari, J-F and Curtin, W A", @@ -519,6 +521,7 @@ @ARTICLE{Pastewka2012 author = "Pastewka, Lars and Sharp, Tristan A and Robbins, Mark O", journal = "Phys. Rev. B", volume = 86, + number = {7}, pages = "075459", year = 2012, doi = "10.1103/PhysRevB.86.075459" @@ -542,6 +545,7 @@ @ARTICLE{Jana2019 author = "Jana, Richard and Pastewka, Lars", journal = "J. Phys. Mater.", volume = 2, + number = {4}, pages = "045006", month = jul, year = 2019, @@ -659,7 +663,7 @@ @ARTICLE{Peguiron2016-wf @ARTICLE{Moras2018-lm, title = "Shear melting of silicon and diamond and the disappearance of the polyamorphic transition under shear", - author = "Moras, Gianpietro and Klemenz, Andreas and Reichenbach, Thomas and + author = "Moras, G. and Klemenz, Andreas and Reichenbach, Thomas and Gola, Adrien and Uetsuka, Hiroshi and Moseler, Michael and Pastewka, Lars", journal = "Phys. Rev. Mater.", @@ -813,7 +817,7 @@ @article{Daw1984 author = {Daw, Murray S. and Baskes, Michael I.}, journal = {Phys. Rev. B}, volume = {29}, - issue = {12}, + number = {12}, pages = {6443-6453}, numpages = {0}, year = {1984}, diff --git a/paper/paper.md b/paper/paper.md index d2c7330d..14deaab8 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -81,9 +81,9 @@ affiliations: index: 4 - name: Fraunhofer IWM, MikroTribologie Centrum µTC, Wöhlerstraße 11, 79108, Freiburg, Germany index: 5 - - name: Department of Materials, Imperial College London, London SW7 2AZ, UK + - name: Department of Materials, Imperial College London, London SW7 2AZ, United Kingdom index: 6 - - name: Fritz Haber Institute of the Max Planck Society, Faradayweg 4-6, D-14195, Berlin, Germany + - name: Fritz Haber Institute of the Max Planck Society, Faradayweg 4-6, D-14195 Berlin, Germany index: 7 - name: Cluster of Excellence livMatS, Freiburg Center for Interactive Materials and Bioinspired Technologies, University of Freiburg, Georges-Köhler-Allee 105, 79110, Freiburg, Germany index: 8 @@ -101,21 +101,21 @@ Behaviour of materials is governed by physical phenomena that occur at an extrem The Python package `matscipy` contains a set of tools for researchers using atomic-scale models in materials science. In atomic-scale modelling, the primary numerical object is a discrete point in three-dimensional space that represents the position of an individual atom. Simulations are often dynamical, where configurations change over time and each atom carries a velocity. Complexity emerges from the interactions of many atoms, and numerical tools are required for generating initial atomic configurations and for analyzing output of such dynamical simulations, most commonly to connect local geometric arrangements of atoms to physical processes. An example, described in more detail below, is the detection of the tip of a crack that moves through a solid body. -We never see individual atoms at macroscopic scales. To understand the behaviour of everyday objects, atomic-scale information needs to be transferred to the continuum scale. This is the primary objective of multi-scale modelling. `matscipy` focuses on atomic representations of materials, but implements tools for connecting to continuum descriptions in mechanics and transport theory. Each of the application domains described in the following therefore relies on the computation of continuum fields, that is realized through analytic or numerical solutions. +We never see individual atoms at macroscopic scales. To understand the behaviour of everyday objects, atomic-scale information needs to be transferred to the continuum scale. This is the primary objective of multi-scale modelling. `matscipy` focuses on atomic representations of materials, but implements tools for connecting to continuum descriptions in mechanics and transport theory. Each of the application domains described in the following therefore relies on the computation of continuum fields, that is realised through analytic or numerical solutions. -There is no other package that we are aware of, which fills the particular niche of the application domains in the next section. The package addresses the boundary between atomic-scale and continuum modelling in materials with particular emphasis on plasticity, fracture and tribology. The `atomman` atomistic manipulation toolkit [@AtomMan] and the `atomsk` package [@Hirel2015-ts] have some overlapping objectives but are restricted to a narrower class of materials systems, principally point defects, stacking faults and dislocations. We target interoperability with the widely used Atomic Simulation Environment (ASE) [@Larsen2017], which offers great flexibility by providing a Python interface to tens of simulation codes implementing different physical models. While ASE's policy is to remain pure Python, we augment some of ASE's functionality with more efficient implementations in C, such as the computation of the neighbour list. Large scale molecular dynamics (MD) simulations are most efficiently performed with optimized codes such as LAMMPS [@Thompson2022], with `matscipy`'s main contribution being to setup input structures and to post-process output trajectories. +There is no other package that we are aware of, which fills the particular niche of the application domains in the next section. The package addresses the boundary between atomic-scale and continuum modelling in materials with particular emphasis on plasticity, fracture and tribology. The `atomman` atomistic manipulation toolkit [@AtomMan] and the `atomsk` package [@Hirel2015-ts] have some overlapping objectives but are restricted to a narrower class of materials systems, principally point defects, stacking faults and dislocations. We target interoperability with the widely used Atomic Simulation Environment (ASE) [@Larsen2017], which offers great flexibility by providing a Python interface to tens of simulation codes implementing different physical models. While ASE's policy is to remain pure Python, we augment some of ASE's functionality with more efficient implementations in C, such as the computation of the neighbour list. Large scale molecular dynamics (MD) simulations are most efficiently performed with optimised codes such as LAMMPS [@Thompson2022], with `matscipy`'s main contribution being to set up input structures and to post-process output trajectories. -The central class in ASE is the `Atoms` class, which is a container that stores atomic positions, velocities and other properties. `Calculator`s describe relationships between atoms, and are used for example to compute energies and forces, and can be attached to `Atoms` objects. All other `matscipy` functionality is implemented as functions acting on `Atoms` objects. This is comparable to the design of `numpy` [@Harris2020-it] or `scipy` [@Virtanen2020-tq], that are collections of mathematical functions operating on core `array` container objects. In our experience, separating code into functions and containers lowers the barrier to entry for new users and eases testability of the underyling code base. +The central class in ASE is the `Atoms` class, which is a container that stores atomic positions, velocities and other properties. `Calculator`s describe relationships between atoms, and are used for example to compute energies and forces, and can be attached to `Atoms` objects. All other `matscipy` functionality is implemented as functions acting on `Atoms` objects. This is comparable to the design of `numpy` [@Harris2020-it] or `scipy` [@Virtanen2020-tq], that are collections of mathematical functions operating on core `array` container objects. In our experience, separating code into functions and containers lowers the barrier to entry for new users and eases testability of the underlying code base. -`matscipy` is a toolbox that enables multi-scale coupling, but it is not a toolbox for actually carrying out two-way coupled calculations. Its target is the construction of atomic domains from continuum information and the extraction of continuum fields from atomic structures. Other packages exist that take care of the actual, two-way coupling. In contrast to `matscipy`, those have a primary focus on handling discretized continuum fields, typically in the form of finite-element meshes, and interpolating nodal or element values between atomic-scale and continuum descriptions. `matscipy` itself has no provisions for handling discrete continuum data, but does implement analytic expressions for continuum fields. +`matscipy` is a toolbox that enables multi-scale coupling, but it is not a toolbox for actually carrying out two-way coupled calculations. Its target is the construction of atomic domains from continuum information and the extraction of continuum fields from atomic structures. Other packages exist that take care of the actual, two-way coupling. In contrast to `matscipy`, those have a primary focus on handling discretised continuum fields, typically in the form of finite-element meshes, and interpolating nodal or element values between atomic-scale and continuum descriptions. `matscipy` itself has no provisions for handling discrete continuum data, but does implement analytic expressions for continuum fields. -Example implementations of two-way coupling codes are the open-source code `libmultiscale` [@Anciaux2007;@Anciaux2018] that explicitly targets atomistic-continuum coupling, or the generic coupling libraries `preCICE` [@preCICEv2] or `MpCCI` [@Dehning2014]. Another two-way coupling code is `MultiBench` [@Miller2009], that was specifically designed for benchmarking a wide range of two-way atomistic-continuum coupling schemes. Futhermore, there are specialized multiscale coupling code, such as Green's function molecular dynamics (`GFMD`) [@Campana2006;@Pastewka2012] which targets two-way coupling in contact mechanics and friction simulations. All of these packages have only limited capabilities for constructing atomistic domains. `matscipy` could be combined with these packages for two-way coupled simulation of plasticity, fracture or frictional processes. +Example implementations of two-way coupling codes are the open-source code `libmultiscale` [@Anciaux2007;@Anciaux2018] that explicitly targets atomistic-continuum coupling, or the generic coupling libraries `preCICE` [@preCICEv2] or `MpCCI` [@Dehning2014]. Another two-way coupling code is `MultiBench` [@Miller2009], that was specifically designed for benchmarking a wide range of two-way atomistic-continuum coupling schemes. Futhermore, there are specialised multiscale coupling code, such as Green's function molecular dynamics (`GFMD`) [@Campana2006;@Pastewka2012] which targets two-way coupling in contact mechanics and friction simulations. All of these packages have only limited capabilities for constructing atomistic domains. `matscipy` could be combined with these packages for two-way coupled simulation of plasticity, fracture or frictional processes. # Application domains Within materials science, the package has different application domains: -- **Elasticity.** Solids respond to small external loads through a reversible elastic response. The strength of the response is characterized by the elastic moduli. `matscipy.elasticity` implements functions for computing elastic moduli from small deformation that consider potential symmetries of the underlying atomic system, in particular for crystals. The implementation also includes estimates of uncertainty on elastic moduli - either from a least-squares error, or from a Bayesian treatment if stress uncertainty is supplied. `matscipy` also implements analytic calculation of elastic moduli for some interatomic potentials, described in more detail below. The computation of elastic moduli is a prerequisite for multi-scale modelling of materials, as they are the most basic parameters of continuum material models. `matscipy` was used to study finite-pressure elastic constants and structural stability in crystals [@Griesser2023crystal] and glasses [@Griesser2023glass]. +- **Elasticity.** Solids respond to small external loads through a reversible elastic response. The strength of the response is characterised by the elastic moduli. `matscipy.elasticity` implements functions for computing elastic moduli from small deformation that consider potential symmetries of the underlying atomic system, in particular for crystals. The implementation also includes estimates of uncertainty on elastic moduli - either from a least-squares error, or from a Bayesian treatment if stress uncertainty is supplied. `matscipy` also implements analytic calculation of elastic moduli for some interatomic potentials, described in more detail below. The computation of elastic moduli is a prerequisite for multi-scale modelling of materials, as they are the most basic parameters of continuum material models. `matscipy` was used to study finite-pressure elastic constants and structural stability in crystals [@Griesser2023crystal] and glasses [@Griesser2023glass]. - **Plasticity.** For large loads, solids can respond with irreversible deformation. One form of irreversibility is plasticity, that is carried by extended defects, the dislocations, in crystals. The module `matscipy.dislocation` implements tools for studying structure and movement of dislocations. Construction and analysis of model atomic systems is implemented for compact and dissociated screw, as well as edge dislocations in cubic crystals. The implementation supports ideal straight as well as kinked dislocations. Some of the dislocation functionality requires the `atomman` and/or `OVITO` packages as optional dependencies [@AtomMan;@Stukowski2009]. The toolkit can be applied to a wide range of single- and multi-component ordered systems, and could be used as an initial starting point for modelling dislocations in systems with chemical disorder. The module was employed in a study of interaction of impurities with screw dislocations in tungsten [@Grigorev2020;@Grigorev2023]. @@ -140,11 +140,11 @@ As well as these domain-specific tools, `matscipy` contains general utility func ![Execution time of the computation of the neighbour list in ASE and Matscipy. These results were obtained on a single core of an Intel i7-1260P processor on the ASE master branch (git hash 52a8e783).\label{fig:nl_time}](nl_time.svg) -- **Atomic strain.** Continuum mechanics is formulated in terms of strains, which characterizes the fractional shape changes of small volumes. Strains are typically only well defined if averaged over sufficiently large volumes, and extracting strain fields from atomic-scale calculations is notoriously difficult. `matscipy` implements calculations of strain by observing changes in local atomic neighbourhoods across trajectories. It fits a per-atom displacement gradient that minimizes the error in displacement between two configurations as described by @Falk1998. The error resulting from this fit quantifies the non-affine contribution ot the overall displacement and is known as $D^2_\text{min}$. We used this analysis to quantify local strain in the deformation of crystals [@Gola2019;@Gola2020] and glasses [@Jana2019]. +- **Atomic strain.** Continuum mechanics is formulated in terms of strains, which characterises the fractional shape changes of small volumes. Strains are typically only well-defined if averaged over sufficiently large volumes, and extracting strain fields from atomic-scale calculations is notoriously difficult. `matscipy` implements calculations of strain by observing changes in local atomic neighbourhoods across trajectories. It fits a per-atom displacement gradient that minimises the error in displacement between two configurations as described by @Falk1998. The error resulting from this fit quantifies the non-affine contribution ot the overall displacement and is known as $D^2_\text{min}$. We used this analysis to quantify local strain in the deformation of crystals [@Gola2019;@Gola2020] and glasses [@Jana2019]. -- **Radial, spatial and angular correlation functions.** Topological order in atomic-scale systems is often characterized by statistical measures of the local atomic environment. The simplest one is the pair-distribution or radial-distribution function, that gives the probability $g_2(r)$ of finding an atom at distance $r$. For three atoms, we can define a probability of finding a specific angle, yielding the angular correlation functions. `matscipy` has utility function for computing these correlation functions to large distances, including the correlation of arbitrary additional per-atom properties such as per-atom strains. +- **Radial, spatial and angular correlation functions.** Topological order in atomic-scale systems is often characterised by statistical measures of the local atomic environment. The simplest one is the pair-distribution or radial-distribution function, that gives the probability $g_2(r)$ of finding an atom at distance $r$. For three atoms, we can define a probability of finding a specific angle, yielding the angular correlation functions. `matscipy` has utility function for computing these correlation functions to large distances, including the correlation of arbitrary additional per-atom properties such as per-atom strains. -- **Ring analysis.** Topological order in network glasses can be characterized by statistics of shortest-path rings [@Franzblau1991]. `matscipy` implements calculations of these rings using a backtracking algorithm in C. We regularly use `matscipy` to charactize shortest-path rings in amorphous carbon [@Pastewka2008;@Jana2019]. +- **Ring analysis.** Topological order in network glasses can be characterised by statistics of shortest-path rings [@Franzblau1991]. `matscipy` implements calculations of these rings using a backtracking algorithm in C. We regularly use `matscipy` to characterise shortest-path rings in amorphous carbon [@Pastewka2008;@Jana2019]. - **Topology building for non-reactive MD simulations.** Non-reactive force fields for MD simulations consist of non-bonded and bonded interaction terms [@Jorgensen1996]. The latter require an explicit specification of the interatomic bonding topology, i.e. which atoms are involved in bond, angle and dihedral interactions. `matscipy` provides efficient tools to generate this topology for an atomic structure based on matscipy’s neighbour list, and then assign the relevant force field parameters to each interaction term. Input and output routines for reading and writing the corresponding control files for LAMMPS [@Thompson2022] are also available. We used this functionality in various studies on tribology, wetting and nanoscale rheology [@Mayrhofer2016;@Falk2020;@Reichenbach2020;@vonGoeldel2021;@Falk2022]