Edit the simulation parameters of data_acquisition.py to suit your task (see explanations below). After adjusting the parameters, run the script and preview the slabs in the *_preview.db-file. Subsequently, the simulations are submitted by running the script from the terminal with the "submit" argument (e.g. "python3 data_acquisition.py submit").
A *_slab.db-file with relaxed slabs will be created as the slab optimizations finish and subsequently *_site_adsorbate.db-files are created for each site adsorbate combination. Once calculations have edit join_dbs.py to suit the including combinations and run from the terminal with the project_name as argument (e.g. "python3 join_dbs project_name"). This will result in a joined ASE database which is subsequently used in feature construction.
Choosing a project name that will function as a prefix for all files.
project_name = 'agirpdptru'
A range of unique slabs with individual slabIds will be generated. This includes both the start_id and end_id.
start_id = 0
end_id = 2
Desired surface facet. Choose from ['fcc100','fcc110','fcc111','bcc100','bcc110','bcc111','hcp0001']
facet = 'fcc111'
Number of atoms in the lateral dimensions and number of layers -> NB! Minimum 2 atoms in each lateral dimension.
size = (3,3,5)
List of surface elements. Lattice parameters will be loaded from dict in hea_aux.py
elements = ['Ag','Ir','Pd','Pt','Ru']
Lattice constant for each slab. Choose from:
- 'mean' = Slab lattices will be determined by the composition weighted mean lattice parameters.
- 'surface_adjusted' = In addition to 'mean' the lateral dimensions will be scaled to the weighted mean lattice parameter of the atoms constituting the surface -> See https://doi.org/10.1007/s12274-021-3544-3
lattice = 'surface_adjusted'
Alloy composition sampled. Choose from:
- 'dirichlet' = Uniform random sampling of the composition space. Each slab has new set of probabilities for each element.
- list of fractions summing to 1 = Each slab is generated from the same set of probabilities e.g. [0.2,0.3,0.1,0.05,0.35] for 20%, 30%, 10%, 5% and 35% of the elements, respectively.
comp_sampling = 'dirichlet'
Vacuum layer added above and below slab (measured from the surface) in angstrom.
vacuum = 10
Number of bottom layers to fix during geometry optimizations.
fix_bottom = 2
Fraction the relaxed slab are allowed to have distorted e.g. if distort_limit = 1.1 the slab are allowed a 10% increase in height. If it exceeds the limit after relaxation an error will be raised which causes the adsorbate jobs not to commence.
distort_limit = None #
Adsorbates. Slab will first be optimized and subsequently each adsorbate will be placed and optimized on the slab. Choose from ['OH','O','H']
adsorbates = ['OH','O']
Corresponding sites on which to place adsorbates. Choose from ['ontop','bridge','shortbridge','longbridge','hollow','fcc','hcp']
sites = ['ontop','fcc']
Initial bond lengths of the adsorbates in angstrom.
init_bonds = [2.0,1.3]
Adsorbates to add sequentially to a single slab e.g. a combination of 'OH', 'ontop' and ads_per_slab = 2 will relax OH on two different ontop sites (position 0 and 1) resulting in two adsorbate calculations on the same 'parent-slab', thus greatly reducing computational load. NB! If multiple_adsId is not None this is not used.
ads_per_slab = 9
Used to adsorb multiple adsorbates on the same slab. Manually specify the combinations of adsorbate ids e.g. a combination of 'OH', 'ontop' and multiple_adsId = [[0,1],[0,2]] will give a slab with OH on ontop sites 0 and 1 and another simulation of OH on ontop sites 0 and 2.
multiple_adsId = None
GPAW calculation parameters in order:
- Exchange-correlation functional to be used.
- Plane wave energy cutoff in eV
- Monkhorst-Pack k-point grid
- Force threshhold for optimization in eV/angstrom
GPAW_kwargs = {'xc':'RPBE',
'ecut':400,
'kpts':(4,4,1),
'max_force':0.1}
SLURM scheduling parameters in order:
- Partition name
- Number of nodes allowed for parallelization
- Number of allocated CPUs
- Enable multithreading
- Amount of memory allocated per CPU
- Node types included.
- Set Nice-factor to directly down-prioritize jobs if needed
- Exclude faulty nodes if necessary
SLURM_kwargs = {'partition': 'katla_short',
'nodes': '1-2',
'ntasks': 16,
'ntasks_per_core': 2,
'mem_per_cpu': '2G',
'constraint': '[v1|v2|v3|v4]',
'nice': 0,
'exclude': None}