Skip to content

brucefan1983/NEP_CPU

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NEP_CPU

What does this repository contain?

  • A standalone C++ implementation (a class called NEP3) of the neuroevolution potential (NEP) as introduced in the GPUMD package (https://github.com/brucefan1983/GPUMD). We stress that there is no external dependence. Even though the class name is NEP3, the implementation works for all versions of NEP.

  • An interface of the NEP3 class to the CPU version of LAMMPS (https://github.com/lammps/lammps). It can be run with MPI.

The standalone C++ implementation of NEP

  • The NEP3 C++ class is defined in the following three files:

    • src/nep.h
    • src/nep.cpp
    • src/dftd3para.h
  • There is an option to use tables to speed up the calculations for the radial functions in NEP. To enable it, one can change line 20 of src/nep.h:

// #define USE_TABLE_FOR_RADIAL_FUNCTIONS

The NEP-LAMMPS interface

Build the NEP-LAMMPS interface

  • step 1: Copy the files in src/ into interface/lammps/USER-NEP/ such that you have the following files in interface/lammps/USER-NEP/:

    • nep.h
    • nep.cpp
    • dftd3para.h
    • pair_NEP.h
    • pair_NEP.cpp
    • install.sh
  • Step 2: Now you can copy the USER-NEP/ folder into YOUR_LAMMPS_PATH/src/ and start to compile LAMMPS in your favorite way. Good luck!

Use the NEP-LAMMPS interface

  • atom_style can be atomic and full

  • units must be metal

  • Specify the pair_style in the following way:

    pair_style nep YOUR_NEP_MODEL_FILE.txt  # YOUR_NEP_MODEL_FILE.txt is your NEP model file (with path)
    pair_coeff * *                          # This format is fixed
  • For multi-element system, the atom types must be carefully set. Take a NEP model NEP_PdCuNiP.txt as an example. In this NEP model file, the first line is nep3 4 Pd Cu Ni P. Then in your LAMMPS input file, you must set

    • Pd atoms to type 1
    • Cu atoms to type 2
    • Ni atoms to type 3
    • P atoms to type 4
  • Some atom types can be missing in the simulated system. For example you can use the above NEP model to simulate a CuNi binary alloy. It is important to make sure to still set Cu atoms to type 2 and Ni atoms to type 3. In this case, atom types 1 and 4 are missing.

  • One can hybrid NEP with other potentials in LAMMPS, for example lj/cut

    pair_style hybrid lj/cut 1.0 nep YOUR_NEP_MODEL_FILE.txt  
    pair_coeff 1*4 1*4 nep YOUR_NEP_MODEL_FILE.txt
    pair_coeff 1*5 5 lj/cut 1.0 1.0

    This will set the interaction of elements of type 1-5 and elements of type 5 to lj/cut, as well as lj/cut/coul/long.

  • If you want to calculate the heat current correctly, use the following command to get the 9-component per-atom virial:

    compute 1 all centroid/stress/atom NULL

Citation

  • If you directly or indirectly use the NEP3 class here, you are suggested to cite the following paper:

  • If you use the LAMMPS interface of the NEP3 class, a proper citation for LAMMPS is also suggested.