fix atom/swap: simulating vacancy migration and coalesence

Hi,

I am trying to simulate the movement and clustering of vacancies in a bulk. I create my block, remove some atoms, and then strain. The goal is to then watch the many microvacancies cluster into a larger vacancy as per the paper referenced below. The paper attached used a GCMC swap with metropolis criteria, which appears to be the command fix/atom swap, to swap lattice atoms with vacancies. However, I am not able to get this to work. The command requires 2 atom types, one being the bulk atom. However, as far as I know the second atom cannot be a vacancy.

Is there any way to use this command (or some other command), to allow for vacancy migration during straining? It is tough to visualize as well as seeing the vacancies is difficult.

Paper: https://pubs.rsc.org/en/content/articlelanding/2016/cp/c5cp06108c#!divAbstract

Thanks!

Hi,
I am trying to simulate the movement and clustering of vacancies in a bulk. I create my block, remove some atoms, and then strain. The goal is to then watch the many microvacancies cluster into a larger vacancy as per the paper referenced below. The paper attached used a GCMC swap with metropolis criteria, which appears to be the command fix/atom swap, to swap lattice atoms with vacancies. However, I am not able to get this to work. The command requires 2 atom types, one being the bulk atom. However, as far as I know the second atom cannot be a vacancy.

Is there any way to use this command (or some other command), to allow for vacancy migration during straining? It is tough to visualize as well as seeing the vacancies is difficult.

I confess I haven't read the paper you referenced, but since nobody
else replied yet,...

No. There is no way to use fix atom/swap with vacancies.

You will have to dream up some kind of particle which behaves like a
vacancy, and somehow keep the particle from drifting away from the
crystal.

1) Perhaps the author is not integrating the equations of motion? In
that case, I imagine you could define a type of particle which simply
exerts no force on it's neighbors at all, and let the system evolve
just using "fix atom/swap" and nothing else. (IE, don't use things
like "fix nvt", or "fix npt")

2) On the other hand, if the particles in the simulation need to be
able to wiggle, then perhaps a particle of the same size which
interacts only sterically (repulsively) with the normal atoms might
also behave in a way that approximates a vacancy. (? As long as you
don't care too much about bulk mechanical properties. Such particles
could definitely make the resulting crystal more stiff than it
otherwise would be.) One way to do that would be to use a
Lennard-Jones interaction and set the cutoff to where the local minima
is located (at sigma*2^(1/6)). Such particles would tend to cluster
together to minimize the their contact with normal atoms (which is
unfavorable compared to contacts between normal atoms). (Since you
are simulating a bulk crystal, I assume you are using periodic
boundary conditions. Otherwise you also have to worry about
preventing particles on the surface from drifting away.)

3) Failing that, you will have to find some way to keep the particles
from drifting away from the vacancy site. Perhaps an external force?

I don't know if this helped at all.

Andrew

(P.S. Hopefully, you realize that when you use "fix atom_swap" in
LAMMPS, you are not necessarily swapping atoms which are located
nearby in space. But this does not matter unless you care about the
dynamics of the system.)

Sorry for the late reply. Thanks for your detailed response. It appears the paper I sent used a ReaxFF implementation not LAMMPS, perhaps that has some other capability.

Is there any other option for me to simulate void coalescence during straining? I can make the voids and strain but it is very difficult to track their movement in Ovito as you can’t really identify them in the large structure.

Thanks

Liam

Sorry for the late reply. Thanks for your detailed response. It appears the paper I sent used a ReaxFF implementation not LAMMPS, perhaps that has some other capability.

That makes a little more sense. I’d be surprised if they were using fix atom/swap.

Is there any other option for me to simulate void coalescence during straining? I can make the voids and strain but it is very difficult to track their movement in Ovito as you can’t really identify them in the large structure.

To clarify, are you having trouble setting up a physically reasonable simulation (of vacancy migration)? Or are you having trouble analyzing the results of such a simulation? These are very different things. (OVITO is a visualization tool, which is a third category. I’m not sure it can generate files telling you where the vacancies are. If I’m wrong, hopefully someone will correct me. Anyway, OVITO makes beautiful pictures and movies.)

I think the first problem (setting up a reasonable simulation) is the more difficult one. But it sounds like you’ve already found some relevamt litterature. Take a look at the kind of force-field they used.

As for analyzing the results, you can check out how to make density maps from within LAMMPS using fix ave/chunk:
https://lammps.sandia.gov/doc/fix_ave_chunk.html

You can also look for atoms with high potential energy (due to missing neighbors) using:
https://lammps.sandia.gov/doc/compute_pe_atom.html

If there are other LAMMPS features I don’t know about which would help, hopefully somebody can suggest them here… (?)

Keep in mind, LAMMPS may or may not come with built in tools to do exactly what you need.

… I myself would write my own program to read the trajectory files find vacancies. I’m guessing that’s probably what they did. (People in this field spend a significant fraction of their time writing scripts to prepare input files and interpret the simulation results for things like this.)
If you write your own script to look for vacancies, you have flexibility to customize what how it decides, for example to hunt for broken bonds, missing neighbors, and add Gaussian blurring/smoothing to the density maps, and hunt for local minima, etc…

Good luck.

Andrew

Thanks Andrew.

I guess my question was two part:

  1. will any potential allow for voids to migrate or are they more or less stuck where you put them. I think reaxff may allow for migration. I hope to strain and see voids combine and new voids form.

  2. How to track? I am quite familiar with ovito for making figures. I did a study on sputtering that was recently published actually and it was awesome for nice images. However not sure if it can do this. I need some way to know if my potential is capturing void migration, meaning I need a way to track them. I am thinking the voronoi feature may be a new option. This makes a mesh to search for voids. May have to get creative to see coalescence.

If anyone has ideas please let me know.

You’ve been a great help Andrew.

Liam

Thanks Andrew.

I guess my question was two part:

1. will any potential allow for voids to migrate or are they more or
less stuck where you put them. I think reaxff may allow for migration.
I hope to strain and see voids combine and new voids form.

Check in the potential article if the vacancy formation energy is
reliable. I yes, your potential will be able to model vacancies
migration. If this information is missing, you have to compute it by
yourself and compare it to other value (DFT for example).

2. How to track? I am quite familiar with ovito for making figures. I
did a study on sputtering that was recently published actually and it
was awesome for nice images. However not sure if it can do this. I
need some way to know if my potential is capturing void migration,
meaning I need a way to track them. I am thinking the voronoi feature
may be a new option. This makes a mesh to search for voids. May have
to get creative to see coalescence.

To track down vacancies, you can use either Ovito or directly the "fix
voronoi" in Lammps. As explained in the documentation, the "occupation"
keyword can be use to locate vacancies.

https://lammps.sandia.gov/doc/compute_voronoi_atom.html

Note that using Ovito with its python interface allows you to perform
analyses more complex than directly in Lammps.

Julien