Hybrid NEP+ILP potential
The hybrid NEP + ILP potential in GPUMD combines the neuroevolution potential (NEP), [Fan2022b] (NEP3), and [Song2024] (NEP4), for intralyer interactions and the interlayer potential (ILP) [Ouyang2018] [Ouyang2020] for interlayer interactions to simulate van der Waals materials. Now this hybrid potential supports to simulate homo- and heterostructures based on graphene, \(h\)-BN and transition metal dichalcogenides (TMDs) layered materials.
Potential form
The site potential of ILP can be written as:
The function \(\mathrm{Tap}(r_{ij})\) is a cutoff function and takes the following form in the intermediate region:
The repulsive term and the attractive term take the following forms:
where \(\boldsymbol n_i\) and \(\boldsymbol n_j\) are normal vectors of atom \(i\) and \(j\), \(\rho_{ij}\) and \(\rho_{ji}\) are the lateral interatomic distance, which can be expressed as:
Other variables are all fitting parameters.
The site potential of NEP can be written as:
More details of NEP potential are in Neuroevolution potential. Note that in hybrid NEP + ILP potential, the NEP potential will just compute the intralayer interactions.
File format
This hybrid potential requires 3 kinds of files: one for ILP potential,
one for NEP potential and the other for mapping NEP potential to groups in model file.
We have adopted the ILP file format that similar but not identical to that used by lammps.
The NEP potential file is not required to modify, while to make the ILP and NEP potentials identify the layers, it’s required to set some groups
in model.xyz
file.
In run.in
file, the potential
setting is as:
potential <ilp file> <nep map file>
where ilp file
and nep map file
are the filenames of
the ILP potential file and NEP mapping file.
ilp file
is similar to other empirical potential files in GPUMD.
But in addition, ILP uses different group_ids
to identify the different layers, so
you need to add two group_methods
in ilp file
:
nep_ilp <number of atom types> <list of elements>
<group_method for layers> <group_method for sublayers>
beta alpha delta epsilon C d sR reff C6 S rcut1 rcut2
...
nep_ilp
is the name of this hybrid potential.number of atom types
is the number of atom types defined in themodel.xyz
.list of element
is a list of all the elements in the potential (can be in any order).group_method for layers
is thegroup_method
set inmodel.xyz
to identify different layers. For example, monolayer graphene and monolayer \(\mathrm{MoS}_2\) are both single layer so for the atoms in each layer thegroup_id
ofgroup_method for layers
are the same.group_method for sublayers
is used to identify the different sublayers. For example, monolayer graphene contains one sublayer while monolayer \(\mathrm{MoS}_2\) contains three sublayers, one Mo sublayer and two S sublayers. For the atoms in each sublayer thegroup_id
ofgroup_method for sublayers
are the same.The last line(s) is(are) parameters of ILP.
rcut1
is used for calculating the normal vectors andrcut2
is the cutoff of ILP, usually 16Å.
nep_map_file
can map one or more NEP potential files to
different layers. The setting is as:
<group_method for layers> <number of NEP files> <list of NEP files>
<number of groups>
<NEP_id for group_0>
<NEP_id for group_1>
...
group_method for layers
is the same as the setting inilp file
.number of NEP files
is the number of NEP files used in your simulation.list of NEP files
is a list of all the NEP filenames. Note that the first file will be identified asNEP_0
and thenNEP_1
and so on.number of groups
is the number of groups ingroup_method for layers
.The last
number of groups
lines map the NEP to each group. IfNEP_id for group_0
is set to 0, the intralayer interactions between atoms withingroup_id
0 are computed by the first NEP file (NEP_0
) inlist of NEP files
. If set to 1, then computed by the second NEP file (NEP_1
) and so on.
Examples
Example 1: bilayer graphene
Assume your have three files: ILP potential file (C.ilp
),
NEP potential file (C.nep
) and NEP mapping file (map.nep
). The potential
setting in run.in
file is as:
potential C.ilp map.nep
Assume that the first line in C.nep
is:
nep3 1 C
and group_method
0 is used to identify the different layers. Then C.ilp
is required to set as:
nep_ilp 1 C
0 0
beta_CC alpha_CC delta_CC epsilon_CC C_CC d_CC sR_CC reff_CC C6_CC S_CC rcut1_CC rcut2_CC
The first 0 in the second line represents ILP potential uses group_method
0 to identify different
layers. The second 0 represents group_method
0 is used to identify the sublayers. For
the system with only graphene and \(h\)-BN, just set it the same as the previous number.
Then, map.nep
file required to set as:
0 1 C.nep
2
0
0
The first 0 in the first line represents NEP potential uses group_method
0 to identify different
layers.
The next 1 represents there is just one NEP potential file. The number in the second
line represents there are two groups in the group_method
0.
The last two lines represent the group_0
and group_1
in group_method
0 will use
C.nep
potential file (NEP_0
).
Example 2: bilayer \(h\)-BN / \(\mathrm{MoS}_2\)
Assume your have four files: ILP potential file (BNMoS.ilp
),
NEP potential files (BN.nep
, MoS.nep
) and NEP mapping file (map.nep
).
The potential setting in run.in
file is as:
potential BNMoS.ilp map.nep
Assume the first line in BN.nep
is:
nep4 2 B N
and in MoS.nep
is:
nep4 2 Mo S
We also assume the group_method
0 is used to identify the different layers and
group_method
1 is used to identify the different sublayers for ILP. In group_method
1,
atoms in the sublayers of Mo and S should be set as the different
group_id
. Then BNMoS.ilp
is required to set as:
nep_ilp 4 B N Mo S
0 1
beta_BB alpha_BB delta_BB epsilon_BB C_BB d_BB sR_BB reff_BB C6_BB S_BB rcut1_BB rcut2_BB
beta_BN alpha_BN delta_BN epsilon_BN C_BN d_BN sR_BN reff_BN C6_BN S_BN rcut1_BN rcut2_BN
beta_BMo alpha_BMo delta_BMo epsilon_BMo C_BMo d_BMo sR_BMo reff_BMo C6_BMo S_BMo rcut1_BMo rcut2_BMo
beta_BS alpha_BS delta_BS epsilon_BS C_BS d_BS sR_BS reff_BS C6_BS S_BS rcut1_BS rcut2_BS
...
beta_SS alpha_SS delta_SS epsilon_SS C_SS d_SS sR_SS reff_SS C6_SS S_SS rcut1_SS rcut2_SS
Assume group_id
of \(\mathrm{MoS}_2\) is 0 and of \(h\)-BN is 1.
Then map.nep
file is set as:
0 2 BN.nep MoS.nep
2
1
0
The 1 in the third line means group_0
(\(\mathrm{MoS}_2\)) uses MoS.nep
potential file (NEP_1
)
and the last 0 means group_1
(\(h\)-BN) uses BN.nep
potential file (NEP_0
).