8.4. The Ingredients section¶
The $ingredients
section contains a section for global ingredient keywords and then a section for each ingredient type.
Each ingredient type in the recipe should have a subsection denoted by begin <ingredient type>
.
Example $ingredients
section:
$ingredients
begin ingredients_global
keyword1 k1value1
end
begin ingredient_type1
keyword1 k1value2
keyword2 k2value1
end
begin ingredient_type2
keyword2 k2value2
end
$end
Program-specific keywords such as VASP INCAR keywords are included in these sections. All other keywords are prefaced with mast_
.
If there are no changes from the ingredients_global section, just add an empty subsection for that ingredient type:
begin ingredient_type
end
For a specific ingredient type, if a keyword is not specified in that ingredient type’s subsection but is specified in the ingredients_global subsection, then, the value for that keyword will be taken from ingredients_global.
- In the example above,
ingredient_type2
would inheritkeyword1 k1value1
from ingredients_global.
8.4.1. Program-specific keywords¶
VASP keywords such as IBRION
, ISIF
, LCHARG
, LWAVE
, and so on, can be specified under each ingredient type in the $ingredients
section of the input file.
Such program-specific keywords are only allowed if they are listed in the program-specific file located in the <MAST installation directory>/MAST/ingredients/programkeys/
folder, for example, <MAST installation directory>/MAST/ingredients/programkeys/vasp_allowed_keywords.py
.
These program-specific keywords will be turned into uppercase keywords. The values will not change case, and should be given in the case required by the program. For example, lwave False
will be translated into LWAVE False
in the VASP INCAR file.
One exception for VASP keywords is the IMAGES
keyword, which signals a nudged elastic band run, and should instead be set in the $neb
section of the input file.
For VASP ingredients, please include
lcharg False
lwave False
in your ingredient global keywords in order to avoid writing the large VASP files CHGCAR and WAVECAR, unless you really need these files.
8.4.2. Special MAST keywords¶
Any keyword that starts with mast_
is considered a special keyword utilized by MAST and will not be written into the VASP INCAR file or any custom input file.
8.4.2.1. Submission script keywords¶
The following queue submission keywords are platform-dependent and are used along to create the submission script (see Installation).
mast_exec: The command used in the submission script to execute the program. Note that this is a specific command rather than the class of program, given in mast_program
, and it should include any MPI commands.
mast_exec //opt/mpiexec/bin/mpiexec ~/bin/vasp_5.2
mast_nodes: The number of nodes requested.
mast_ppn: The number of processors per node requested.
mast_queue: The queue requested.
mast_walltime: The walltime requested, in whole number of hours
mast_memory: The memory per processor requested.
8.4.2.2. MAST control flow keywords¶
mast_program: Specify which program to run (vasp
, vasp_neb
, or None
for a generic program, are currently supported)
mast_program vasp
- This keyword must be in lowercase
mast_frozen_seconds: A number of seconds before a job is considered frozen, if its output file has not been updated within this amount of time. If not set, 21000 seconds is used.
mast_auto_correct: Specify whether mast should automatically correct errors.
- The default is True, so if this keyword is set to True, or if this keyword is not specified at all, then MAST will attempt to find errors, automatically correct the errors, and resubmit the ingredient.
- If set to False, MAST will attempt to find errors, then write them into a
MAST_ERROR
file in the recipe folder, logging both the error-containing ingredient and the nature of the error, but not taking any corrective actions. The recipe will be skipped in all subsequent MAST runs until theMAST_ERROR
file is manually deleted by the user.
8.4.2.3. VASP-specific keywords¶
mast_kpoints: Specify k-point instructions in the form of kpoints along lattice vectors a, b, and c, and then a designation M for Monkhorst-Pack or G for Gamma-centered.
mast_kpoints = 3x3x3 G
- Either this keyword or
mast_kpoint_density
is required for VASP calculations.
mast_kpoint_density: A number for the desired kpoint mesh density.
- Only works with
mast_write_method
ofwrite_singlerun_automesh
- Either this keyword or
mast_kpoints
is required for VASP calculations.
mast_pp_setup: Specify which pseudopotential goes to which element:
mast_pp_setup La=La Mn=Mn_pv O=O_s
mast_xc: Specify an exchange correlation functional; for VASP, follow the conventions of pymatgen (e.g. pw91, pbe)
- This keyword is required for VASP calculations.
mast_multiplyencut: Specify a number with which to multiply the maximum ENCUT value of the pseudopotentials. Volume relaxations in VASP often take 1.5; otherwise 1.25 is sufficient.
- Default is 1.5
- If
encut
is given as a program keyword, then that value will be used andmast_multiplyencut
should have no effect
mast_setmagmom: Specify a string to use for setting the initial magnetic moment. A short string will result in multipliers. For example, mast_setmagmom 1 5 1
will produce 2*1 2*5 8*1
for a 12-atom unit cell with 2A, 2B, and 8C atoms. A string of the number of atoms in the POSCAR
file will be printed as entered, for example, mast_setmagmom 1 -1 1 -1 1 -1 1 -1
.
mast_charge: Specify the charge on the system (total system)
- -1 charge means the ADDITION of one electron. For example, O2- has two more electrons than O neutral.
- A positive charge is the REMOVAL of electrons. For example, Na+ with a +1 charge has one FEWER electron than Na neutral.
mast_coordinates: For a non-NEB calculation, allows you to specify a single POSCAR-type of CIF structure file which corresponds to the relaxed fractional coordinates at which you would like to start this ingredient. ONLY the coordinates are used. The lattice parameters and elements are given by the $structure section of the input file. The coordinates must be fractional coordinates.
mast_coordinates POSCAR_initialize
For an NEB calculation, use a comma-delimited list of poscar files corresponding to the correct number of images. Put no spaces between the file names. Example for an NEB with 3 intermediate images:
mast_coordinates POSCAR_im1,POSCAR_im2,POSCAR_im3
The structure files must be found in the directory from which the input file is being submitted when initially inputting the input file (e.g. the directory you are in when you run
mast -i test.inp
); once theinput.inp
file is created in the recipe directory, it will store a full path back to these poscar-type files.This keyword cannot be used with programs other than VASP, cartesian coordinates, and special ingredients like inducedefect-type ingredients, whose write or run methods are different.
8.4.2.4. Structure manipulation keywords¶
mast_strain: Specify three numbers for multiplying the lattice parameters a, b, and c. Only works with mast_run_method
of run_strain
mast_strain 1.01 1.03 0.98
This example will stretch the lattice along lattice vector a by 1%, stretch the lattice along lattice vector b by 3%, and compress the lattice along lattice vector c by 2%
8.4.2.5. mast_xxx_method keywords¶
The following keywords have individual sections:
mast_write_method: Specifies what the ingredient should write out before running (e.g., create the INCAR)
mast_ready_method: Specifies how MAST can tell if the ingredient is ready to run (often, in addition to writing its own files, an ingredient must also wait for data from its parent ingredient(s)).
mast_run_method: Specifies what MAST should do to run the ingredient (e.g. submit a submission script to a queue, or perform some other action)
mast_complete_method: Specifies how MAST can tell if the ingredient is considered complete
mast_update_children_method: Specifies what information an ingredient passes on to its children, and how it does so.
Specific available values for each keyword are given in the accompanying sections, and require no arguments, e.g.:
mast_write_method write_singlerun
They depend on having an appropriate program set in mast_program
.
However, you may choose to specify arguments where available, e.g.:
mast_complete_method file_has_string myoutput "End of Execution"
You may also choose to specify multiple methods. These methods will be performed in the order listed. For mast_ready_method
or mast_complete_method
, all methods listed must return True in order for the ingredient to be considered ready or complete, respectively.
Use a semicolon to separate out the methods:
mast_complete_method file_has_string myoutput "End of Execution"; file_exists Parsed_Structures
In the example above, the file “myoutput” must exist and contain the phrase “End of Execution”, and the file “Parsed_Structures” must exist, in order for the ingredient to be considered complete.
Update-children methods will always get the child name appended as the end of the argument string. For example,
mast_update_children_method copy_file EndStructure BeginStructure
will copy the file EndStructure of the parent ingredient folder to a new file BeginStructure in the child ingredient folder. There is no separate argument denoting the child ingredient.
All arguments are passed as strings. Arguments in quotation marks are kept together.
Some common open-ended methods are:
file_exists <filename>
file_has_string <filename> <string>
copy_file <filename> <copy_to_filename>
softlink_file <filename> <softlink_to_filename>
copy_fullpath_file <full path file name> <copy_to_filename>: This method is for copying some system file like //home/user/some_template, not an ingredient-specific file
write_ingred_input_file <filename> <allowed file> <uppercase keywords> <delimiter>: The allowed file specifies an allowed keywords file name in
<MAST installation directory>/MAST/ingredients/programkeys
.Use “all” to put any non-mast keywords into the input file.
Use 1 to uppercase all keywords, or 0 to leave them as entered.
Leave off the delimiter argument in order to use a single space.
Examples:
write_ingred_input_file input.txt all 0 = write_ingred_input_file input.txt phon_allowed_keys.py 1
no_setup: Does nothing. Useful when you want to specifically specify doing nothing.
no_update: Does nothing (but, does accept the child name it is given). Useful when you want to specify doing nothing for a child update step.
run_command: <command string, including all arguments>: This method allows you to run a python script.
The python script may take in only string-based arguments
Please stick to common text characters.
Example:
mast_run_method run_command "//home/user/myscripts/my_custom_parsing.py 25 0.01"
In the example above, the numbers 25 and 0.01 will actually be passed into sys.argv as a string.
This method is intended to allow you to run short custom scripts of your own creation, particularly for
mast_write_method
when setting up your ingredient.- For long or complex execution steps where you want the output tracked separately, do not use this method. Instead, do the following in order to get your script submitted to the queue:
# Use
write_submit_script
in yourmast_write_method
, along with any other write methods # Usemast_run_method run_singlerun
# Put your script in themast_exec
keyword
8.4.2.6. mast_write_method keyword values¶
write_singlerun
- Write files for a single generic run.
- Programs supported: vasp
write_singlerun_automesh
- Write files for a single generic run.
- Programs supported: vasp
- Requires the
mast_kpoint_density
ingredient keyword
write_neb
- Write an NEB ingredient. This method writes interpolated images to the appropriate folders, creating 00/01/.../0N directories and uses linear interpolation between images.
- Programs supported: vasp
write_pathfinder_neb
Write an NEB ingredient using a charge-density-based pathfinding method.
Programs supported: vasp
This method takes the argument of an ingredient name for the ingredient from which to take the charge density.
- The ingredient name must be fully specified, e.g. no <S>, <N>, etc. tags.
- The ingredient must have a CHGCAR file written. A gamma-point calculation is sufficient for this purpose.
- The ingredient should have both endpoints removed. For example, for vacancy migration, the ingredient should have neither a vacancy at the initial position, nor a vacancy at the final position. However, it should have all other non-migrating defects that are common to both the initial and final state.
This method also takes a second argument as a number of additional sites from the bottom of the sorted POSCAR for which to find the path, if the moving atoms(s) are not interstitials; e.g. a vacancy-mediated moving atom must be sorted to the end, and the second argument would therefore be 1.
This method only works with
use_structure_index True
in the$structure
section of the input file.
write_neb_subfolders
- Write static runs for an NEB, starting from a previous NEB, into image subfolders 01 to 0(N-1).
- Programs supported: vasp
write_phonon_single
- Write files for a phonon run.
- Programs supported: vasp
write_phonon_multiple
- Write a phonon run, where the frequency calculation for each atom and each direction is a separate run, using selective dynamics. CHGCAR and WAVECAR must have been given to the ingredient previously; these files will be softlinked into each subfolder.
- Programs supported: vasp
8.4.2.7. mast_ready_method keyword values¶
ready_singlerun
- Checks that a single run is ready to run
- Programs supported: vasp (either NEB or regular VASP run), phon
ready_defect
- Checks that the ingredient has a structure file
- Programs supported: vasp
ready_neb_subfolders
- Checks that each 01/.../0(N-1) subfolder is ready to run as its own separate calculation, following the ready_singlerun criteria for each folder
- This method is used for NEB static calculations rather than NEB calculations themselves.
ready_subfolders
* Checks that each subfolder is ready to run, following the ready_singlerun criteria.
* Generic
* This method is used for calculations whose write method includes subfolders, and where each subfolder is a calculation, as in write_phonon_multiple
.
8.4.2.8. mast_run_method keyword values¶
run_defect
- Create a defect in the structure; not submitted to queue
- Generic
- Requires the
$defects
section in the input file (see The Defects section).
run_singlerun
- Submit a run to the queue.
- Generic
run_neb_subfolders
- Run each 01/.../0(N-1) subfolder as run_singlerun
- Generic
run_subfolders
- Run each subfolder as run_singlerun
- Generic
run_strain
- Strain the structure; not submitted to queue
- Generic
- Requires the
mast_strain
ingredient keyword
run_scale
- Scale the structure (e.g. a 2-atom unit cell scaled by 2 becomes a 16-atom supercell)
- Requires the
$scaling
subsection in the input file (see The Structure section). - Must not be run on the starting ingredient.
8.4.2.9. mast_complete_method keyword values¶
complete_singlerun
Check if run is complete
Programs supported: vasp
Note that for VASP, the phrase
reached required accuracy
is checked for, as well as aUser time
in seconds. The exceptions are:- NSW of 0, NSW of -1, or NSW not specified in the ingredients section keywords is taken as a static calculation, and .EDIFF is reached. is checked instead of .reached required accuracy.
- IBRION of -1 is taken as a static calculation, and .EDIFF is reached. is checked instead of .reached required accuracy.
- IBRION of 0 is taken as an MD calculation, and only user time is checked
- IBRION of 5, 6, 7, or 8 is taken as a phonon calculation, and only user time is checked
complete_neb_subfolders
- Check if all NEB subfolders 01/.../0(N-1) are complete, according to complete_singlerun criteria.
- This method is not for checking the completion of NEBs! An NEB ingredient should have
mast_program vasp_neb
andmast_complete_method complete_singlerun
. - An NEB static calculation, or a static calculation for each image, would use this keyword as
mast_complete_method complete_neb_subfolders
but havemast_program vasp
instead of vasp_neb.
complete_subfolders
- Check if all subfolders are complete, according to complete_singlerun criteria.
- Generic
complete_structure
- Check if run has an output structure file written
- Programs supported: vasp (looks for CONTCAR)
8.4.2.10. mast_update_children_method keyword values¶
give_structure
- Forward the relaxed structure
- Programs supported: vasp (CONTCAR to POSCAR)
give_structure_and_energy_to_neb
- Forward the relaxed structure and energy files
- Programs supported: vasp (CONTCAR to POSCAR, and copy over OSZICAR)
give_neb_structures_to_neb
- Give NEB output images structures as the starting point image input structures in another NEB
- Programs supported: vasp (01/.../0(N-1) CONTCAR files will be the child NEB ingredient.s starting 01/.../0(N-1) POSCAR files.
give_saddle_structure
- Forward the highest-energy structure of all subfolder structures
- Programs supported: vasp
8.4.2.11. Example Ingredients section¶
Here is an example ingredients section:
$ingredients
begin ingredients_global
mast_program vasp
mast_nodes 1
mast_multiplyencut 1.5
mast_ppn 1
mast_queue default
mast_exec mpiexec //home/mayeshiba/bin/vasp.5.3.3_vtst_static
mast_kpoints 2x2x2 M
mast_xc PW91
isif 2
ibrion 2
nsw 191
ismear 1
sigma 0.2
lwave False
lcharg False
prec Accurate
mast_program vasp
mast_write_method write_singlerun
mast_ready_method ready_singlerun
mast_run_method run_singlerun
mast_complete_method complete_singlerun
mast_update_children_method give_structure
end
begin volrelax_to_singlerun
isif 3
end
begin singlerun_to_phonon
ibrion -1
nsw 0
mast_update_children_method give_structure_and_restart_files
mast_multiplyencut 1.25
lwave True
lcharge True
end
begin inducedefect
mast_write_method no_setup
mast_ready_method ready_defect
mast_run_method run_defect
mast_complete_method complete_structure
end
begin singlerun_vac1
mast_coordinates POSCAR_vac1
end
begin singlerun_vac2
mast_coordinates POSCAR_vac2
end
begin singlerun_to_neb
ibrion -1
nsw 0
mast_update_children_method give_structure_and_energy_to_neb
lwave True
lcharge True
end
begin neb_to_neb_vac1-vac2
mast_coordinates POSCAR_nebim1,POSCAR_nebim2,POSCAR_nebim3
mast_write_method write_neb
mast_update_children_method give_neb_structures_to_neb
mast_nodes 3
mast_kpoints 1x1x1 G
ibrion 1
potim 0.5
images 3
lclimb True
spring -5
end
begin neb_to_neb_vac1-vac3
mast_coordinates POSCAR_nebim1_set2,POSCAR_nebim2_set2,POSCAR_nebim3_set2
mast_write_method write_neb
mast_update_children_method give_neb_structures_to_neb
mast_nodes 3
mast_kpoints 1x1x1 G
ibrion 1
potim 0.5
images 3
lclimb True
spring -5
end
begin neb_to_nebstat
mast_write_method write_neb
mast_update_children_method give_neb_structures_to_neb
mast_nodes 3
ibrion 1
potim 0.5
images 3
lclimb True
spring -5
end
begin nebstat_to_nebphonon
ibrion -1
nsw 0
mast_write_method write_neb_subfolders
mast_ready_method ready_neb_subfolders
mast_run_method run_neb_subfolders
mast_complete_method complete_neb_subfolders
mast_update_children_method give_saddle_structure
end
begin phonon_to_phononparse
mast_write_method write_phonon_multiple
mast_ready_method ready_subfolders
mast_run_method run_subfolders
mast_complete_method complete_subfolders
mast_update_children_method give_phonon_multiple_forces_and_displacements
ibrion 5
nfree 2
potim 0.01
istart 1
icharg 1
end
$end