Question about tersoff pair_coeff


My name is Alexander Petkov and I’m a PhD student, who recently started using LAMMPS. I have a question about defining pair coefficients. There’s something I’m missing, but looking through the documentation, I can’t put my finger on what that is…
Say I’m trying to run bulk diamond. I have only 1 atom type.
I can write:
[pair_style tersoff
pair_coeff * * SiC.tersoff C] , where [* *] denotes atom pairs formed between each atomic type with each atomic type. In my case, that should be equivalent to [1 1].
However, writing:
[pair_style tersoff
pair_coeff 1 1 SiC.tersoff C]

gives: [ERROR: Incorrect args for pair coefficients (…/pair_tersoff.cpp:305)] ,which doesn’t make sense to me.
The problem is, that if I want to run a heterostructure of diamond and gallium oxide, or gallium oxide and silicon oxide, I can no longer use [**] notation as I’ll have more atomic types and it would be plain wrong. However, all my attempts to set the coefficients have ended with the aforementioned error message. Similarly, for silicon oxide:
[pair_style tersoff
pair_coeff 1* 2 SiO.tersoff Si O] gives an error (when 1 and 2 are silicon and oxygen atomic types respectively), so do [12 1*2], [1 *2] and all other desperate permutations of syntax.
I don’t understand this. I’m wondering if anyone knows what is the correct way of setting pair coefficients in this case?

I reckon it’d be fine if all relevant interatomic potentials were in one file, so that I could just use [* *]. However, I don’t know if that’s possible. There are no tersoff potentials for gallium oxide (which is a material I am mainly investigating) and conversely the potentials for diamond or silicon oxide seem to all include 3-body interaction. Would all these even be compatible to put in the same file? I doubt it, but if it were possible I wouldn’t even know where to start…

Thanks in advance. I’m looking forward to hearing your thoughts on this.


Alexander Petkov

Tersoff is a manybody potential and thus the pair_coeff * * syntax is required since it uses the pairwise neighbor list also to find and compute interactions between triples of atoms. Therefore an inclusive per-atom-type selection of pairs is required. The other syntax is only available for pairwise additive potentials like lj/cut.

if you need to combine multiple types of potentials, you can use pair style hybrid. please note that this still leaves the task of finding a potential for the cross-interactions and that potential must be pairwise additive. please also keep in mind that this may lead to an inconsistent treatment of interactions, since potentials where bonds and charges are handled explicitly have different behavior and balances between the parameters than potentials without.


B/c Tersoff is a manybody potential you have to use * * for
the types. And if are you are modeling an alloy (or ternary, etc)
you need to create a single potential file that has all
the elements and cross-interactions in it. There is an example
or two of this in the potentials dir. If you are using pair
hybrid to also employ other potentials as part of the system,
you still use * * for Tersoff. But there is syntax allowed with
the NULL keyword to turn off certain elements (types that
it is applied to. See the pair hybrid doc page for details.


I see. Thanks for the help!
So, if I have a layered system, 4 atomic (1 and 2 being Si and O) types and use pair_style hybrid…
writing [pair_coeff * * tersoff SiO.tersoff Si O NULL NULL] would not do anything funny, but just apply the potential to the first 2 atomic types without touching the rest, right?
If so, I think I get it.
Thanks once again,

Alexander Petkov

yes, that’s correct.