zbl-potential in ion-bombardement-simulation

Hi,
I am working with LAMMPS to simulate the ion bombardement of Silicon(target) with one Argon particle(projectile). My first calculations have used lennard-jones-potential to describe the interaction of Argon with Silicon. So my part of the input-file, which sets the force-fields looks like:

         …
  pair_style hybrid lj/cut 5.0 tersoff/zbl tersoff/zbl
  pair_coeff * * tersoff/zbl 1 SiC.tersoff.zbl Si NULL
  pair_coeff * * tersoff/zbl 2 SiC.tersoff.zbl NULL C
  pair_coeff 1 2 lj/cut 0.01 3.4
    …

However, the calculated sputtering yields are to high(I have 16, literature says 1-2). To describe the interaction of Argon with Silicon in a more realistic way, I want to use the zbl-potential, which seems to be predestinated for my problem.
My problem is that the LAMMPS-zbl-instruction says that one have to define atomic numbers Z for all atom pairs I,J. On the other hand the instruction says that Z can not be defined for two different atom types. Therefore the lists of atom types I and atom types J must match.
My state of things concerning the pair_coeff command is that I need to say LAMMPS that atom_type 1(silicon) have to interact with atom 2(argon) via the zbl-potenzial, so in my case I would write:

         …
  pair_style hybrid zbl 5.0 7.0 tersoff/zbl tersoff/zbl
  pair_coeff * * tersoff/zbl 1 SiC.tersoff.zbl Si NULL
  pair_coeff * * tersoff/zbl 2 SiC.tersoff.zbl NULL C
  pair_coeff 1 2 zbl ???
  …

I hope, that one can help me to fullfill the last line to set the interaction for Silicon and Argon as a zbl-interaction.

Best regards
Pawel

I agree that this is a little confusing. The documentation currently says:

"Although Z must be defined for all atom type pairs I,J, it is only
stored for individual atom types, i.e. when I = J."

Perhaps a better way to say it would be:

"Although every pair of I, J types must be initialized with a
pair_coeff command, the value of Z is only stored for individual atom
types, i.e. when I = J. This is easily accomplished using 'pair_coeff
* * zbl 0.0' followed by ntypes pair_coeff commands for the individual
atom types."

Aidan

So what does that mean in the context of Pawel’s model
with pair hybrid? He appears to want one tersoff/zbl for
type 1 atoms (Si), another tersoff/zbl for type 2 ©,
then what does he assign for 1/2 interactions? Does
plain zbl work in a “mixing” sense, or is that overwriting
something for the 1/1 or 2/2 interactions with tersoff/zbl?

Does he heed to create a tersoff/zbl file for Si-C and
just use that as a single pair style for the whole system?

Steve

hi,
@Steve

I thought that my approach would work in an overwriting sense
If LAMMPS work additionally, one could do:

    pair_style hybrid zbl 5.0 7.0 tersoff tersoff
    pair_coeff * * zbl 0.0
    pair_coeff 1 1 zbl 14
    pair_coeff 2 2 zbl 18
    pair_coeff * * tersoff 1 SiC.tersoff.zbl Si NULL
    pair_coeff * * tersoff 2 SiC.tersoff.zbl NULL C

If LAMMPS work in an overwriting sense, then my approach of the last e-mail should work:

   pair_style hybrid zbl 5.0 7.0 tersoff/zbl tersoff/zbl
   pair_coeff * * zbl 0.0
   pair_coeff 1 1 zbl 14
   pair_coeff 2 2 zbl 18
   pair_coeff * * tersoff/zbl 1 SiC.tersoff.zbl Si NULL
   pair_coeff * * tersoff/zbl 2 SiC.tersoff.zbl NULL C

My state of things is that LAMMPS work in a overwriting sense, so I have understood the Documentation-3.commands-3.1.LAMMPS-input-script. But as Aidan have told one could think, LAMMPS work in an additional way. So, how does LAMMPS works ??

best regards
Pawel

Pawel - the way you first proposed this model is the best way to do it:

pair_style hybrid zbl 5.0 7.0 tersoff/zbl tersoff/zbl
pair_coeff * * tersoff/zbl 1 SiC.tersoff.zbl Si NULL
pair_coeff * * tersoff/zbl 2 SiC.tersoff.zbl NULL C
pair_coeff 1 2 zbl ???

just like you did it for LJ instead of ZBL.

It doesn’t work now b/c pair_style zbl does it’s mixing

in a non-standard manner, requiring the user to define

the I != J coeffs, but ignores them. Aidan is going to

change zbl so that it formally does mixing using sqrt(Zi Zj)

as the default (but only if you have defined Zi and Zj as

the coeffs for 1/1 and 2/2.

So in your example above you simply need to explicitly define

??? as that value, just as you would for LJ and the sigma, epsilon

for 1/2 interactions.

Steve

I just checked in code (attached) and updated doc page to do this.
With the new code, you can do:

pair_style hybrid zbl 5.0 7.0 tersoff/zbl tersoff/zbl
        pair_coeff * * tersoff/zbl 1 SiC.tersoff.zbl Si NULL
        pair_coeff * * tersoff/zbl 2 SiC.tersoff.zbl NULL C
        pair_coeff 1 2 zbl Z_Si Z_C

and get the desired behavior. Note that now two coefficients are
required and all pairs that are not specified have no ZBL interaction.
  For a stand-alone ZBL potential (no hybrid/overlay) the mixing rule
applies as before, so only I==I pair_coeff commands are needed.

pair_zbl.cpp (11.5 KB)

pair_zbl.h (2.15 KB)

This new code will break all existing scripts using pair_style zbl.

Dear Aidan,

many thanks for the new zbl-code. There was a little bug in function init_style, I think that "neighbor->request(this,instance_me);" should be
neighbor->request(this); ??

After compiling LAMMPS, I started 169 ion-bombardemt-simulations (with different impact points) and until now LAMMPS seems to do what I want.

Thank you Aidan for doing my work, this will guarantee you an entry in my PHD-acknowlegdement in a few years :smiley:

best regards
Pawel

The correct form is:

neighbor->request(this,instance_me);

This allows multiple instances of the same pair style to be created,
each with its own neighbor list.

Aidan