You may prepare initial data for surface systems with VASP by:
dpgen init_surf PARAM [MACHINE]
The MACHINE configure file is optional. If this parameter exists, then the optimization
tasks or MD tasks will be submitted automatically according to MACHINE.json. That is to say, if one only wants to prepare surf-xxx/sys-xxx
folders for the second stage but wants to skip relaxation, dpgen init_surf PARAM
should be used (without MACHINE
).
"stages" and "skip_relax" in PARAM
should be set as:
"stages": [1,2],
"skip_relax": true,
Basically init_surf
can be divided into two parts , denoted as {dargs:argument}stages <init_surf_jdata/stages>
in PARAM
:
- Build specific surface in folder
00.place_ele
- Pertub and scale in folder
01.scale_pert
All stages must be in order.
Generally, init_surf
does not run AIMD but only generates a lot of configurations. Compared with init_bulk
, which runs DFT calculations twice, init_surf does once. Usually, we do init_bulk
, run many rounds of DP-GEN iterations, collect enough data for the bulk system, and do init_surf
after that. At this point, the lattice constant has been determined, and the lattice constant required for the initial configuration of init_surf
can be used directly. These configurations made by init_surf
are prepared for 01.model_devi
. Candidates will do DFT calculation in 02.fp
.
- Generate vacuum layers
According to the source code of pert_scaled, init_surf will generate a series of surface structures with specified separations between the sample layer and its periodic image. There are two ways to specify the interval in generating the vacuum layers: 1) to set the interval value and 2) to set the number of intervals.
You can use {dargs:argument}layer_numb <init_surf_jdata/layer_numb>
(the number of layers of the slab) or {dargs:argument}z_min <init_surf_jdata/z_min>
(the total thickness) to specify the thickness of the atoms below. Then vacuum_*
parameters specify the vacuum layers above. dpgen init_surf
will make a series of structures with the thickness of vacuum layers from {dargs:argument}vacuum_min <init_surf_jdata/vacuum_min>
to {dargs:argument}vacuum_max <init_surf_jdata/vacuum_max>
. The number of vacuum layers is controlled by the parameter {dargs:argument}vacuum_resol <init_surf_jdata/vacuum_resol>
.
The layers will be generated even when the size of {dargs:argument}vacuum_resol <init_surf_jdata/vacuum_resol>
is 1. When the size of {dargs:argument}vacuum_resol <init_surf_jdata/vacuum_resol>
is 2 or it is empty, the whole interval range is divided into the nearby region with denser intervals (head region) and the far-away region with sparser intervals (tail region), which are divided by {dargs:argument}mid_point <init_surf_jdata/mid_point>
.
When the size of {dargs:argument}vacuum_resol <init_surf_jdata/vacuum_resol>
is 2, two elements respectively decide the number of intervals in head region and tail region.
When {dargs:argument}vacuum_resol <init_surf_jdata/vacuum_resol>
is empty, the number of intervals in the head region = vacuum_num * head_ratio. {dargs:argument}vacuum_num <init_surf_jdata/vacuum_numb>
and {dargs:argument}head_ratio <init_surf_jdata/head_ratio>
are both keys in param.json
.
- Attach files in the task path
One can use the machine parameter forward_files
to upload other files besides POSCAR, INCAR, and POTCAR. For example, "vdw_kernal.bindat" for each task.
See the document of task parameters.
Following is an example for PARAM
, which generates data from a typical structure fcc.
{
"stages": [
1,
2
],
"cell_type": "fcc",
"latt": 4.034,
"super_cell": [
2,
2,
2
],
"layer_numb": 3,
"vacuum_max": 9.0,
"vacuum_resol": [
0.5,
1
],
"mid_point": 4.0,
"millers": [
[
1,
0,
0
],
[
1,
1,
0
],
[
1,
1,
1
]
],
"elements": [
"Al"
],
"potcars": [
"....../POTCAR"
],
"relax_incar": "....../INCAR_metal_rlx_low",
"scale": [
1.0
],
"skip_relax": true,
"pert_numb": 2,
"pert_box": 0.03,
"pert_atom": 0.01,
"_comment": "that's all"
}
Another example is from_poscar
method. Here you need to specify the POSCAR file.
{
"stages": [
1,
2
],
"cell_type": "fcc",
"from_poscar": true,
"from_poscar_path": "POSCAR",
"super_cell": [
1,
1,
1
],
"layer_numb": 3,
"vacuum_max": 5.0,
"vacuum_resol": [0.5,2],
"mid_point": 2.0,
"millers": [
[
1,
0,
0
]
],
"elements": [
"Al"
],
"potcars": [
"./POTCAR"
],
"relax_incar" : "INCAR_metal_rlx_low",
"scale": [
1.0
],
"skip_relax": true,
"pert_numb": 5,
"pert_box": 0.03,
"pert_atom": 0.01,
"coll_ndata": 5000,
"_comment": "that's all"
}