Moire potential implementation

Hi,

Not a regular LAMMPS user for now, but I was wondering if there is an easy, or not-so easy, way to implement a non-pairwise potential in LAMMPS. The model I have describes accurately the potential felt by one layer deposited on another bilayer.

Its parameters are the interlayer distance as well as the displacement given by x and y coordinates of an atom in the top layer with respect to the bottom layer, thus providing information for any stacking possible stacking configuration encountered in a moire system.

I have looked into the manual as well as existing threads, but I have not found much beyond the implementation of simple pairwise potentials (or simple improvements thereupon).

Any suggestion or reference to existing attempts to do this before I dive into the source code?

Thank you.

Regards,
Nicolas

In LAMMPS lingo, “pair style” is for any
kind of inter-particle interactions, including
many-body. So long as the interactions
are local (as opposed to long-range or global),
you can code it as a pair style.

Steve

Hi,

Not a regular LAMMPS user for now, but I was wondering if there is an
easy, or not-so easy, way to implement a non-pairwise potential in LAMMPS.
The model I have describes accurately the potential felt by one layer
deposited on another bilayer.

Its parameters are the interlayer distance as well as the displacement
given by x and y coordinates of an atom in the top layer with respect to
the bottom layer, thus providing information for any stacking possible
stacking configuration encountered in a moire system.

I have looked into the manual as well as existing threads, but I have not
found much beyond the implementation of simple pairwise potentials (or
simple improvements thereupon).

​you may want to check out this:

​structural biases have also been implemented as fixes, e.g. these:

LAMMPS Molecular Dynamics Simulator

​axel.​

@Steve. Thanks for this clarification.

@Axel, thanks for the references. I may help me to implement by own potential.

Axel, I’ve looked at the Kolmogorov Crespi implementation. It helped me get some better understanding of my rather vague question.

So, to rephrase, my question is if there already exists an implementation where the potential is given based on the relative position of the top 2D layer with respect to the bottom 2D layer (relative position of the top atoms with respect to the substrate)? That would greatly help me implementing my own expression (creating my own .cpp file) without having to understand all the inner workings of LAMMPS.

However, from what I’ve seen in the list of available user contributions, everything is based on the distance (and possibly angle) of two (three) atoms, leading to pairwise interactions.

Regards,
Nicolas

Axel, I've looked at the Kolmogorov Crespi implementation. It helped me
get some better understanding of my rather vague question.

So, to rephrase, my question is if there already exists an implementation
where the potential is given based on the relative position of the top 2D
layer with respect to the bottom 2D layer (relative position of the top
atoms with respect to the substrate)? That would greatly help me
implementing my own expression (creating my own .cpp file) without having
to understand all the inner workings of LAMMPS.

​no, there isn't. as far as i can tell, this pair style and the two fixes i
mentioned are conceptionally the closest​ to what you seem to be after.
there are a number of challenges in your description, e.g. how would you
identify the top/bottom layer, are they dynamic or static?

​you do not have to understand *all* the inner workings, but you need to
study LAMMPS more closely than if you were planning to implement a simple
pairwise additive potential. you also need to get use to considering, that
in LAMMPS ​everything has to be implemented in parallel and that LAMMPS
uses domain decomposition, so that each processor only "owns" a subset of
the system and a "halo" of so-called ghost atoms around it.

i suggest, that before digging into the source, you should write down a
detailed, step-by-step description of how you would want to implement the
interaction you would like to implement (ideally in some simple
pseudo-code) and post it here, to get some suggestions about how to
actually realize this from within LAMMPS.

​axel.​