Init_surf
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 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 layer_numb
(the number of layers of the slab) or 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 vacuum_min
to vacuum_max
. The number of vacuum layers is controlled by the parameter vacuum_resol
.
The layers will be generated even when the size of vacuum_resol
is 1. When the size of 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 mid_point
.
When the size of vacuum_resol
is 2, two elements respectively decide the number of intervals in head region and tail region.
When vacuum_resol
is empty, the number of intervals in the head region = vacuum_num * head_ratio. vacuum_num
and 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"
}