updateAllDefectsAndTransitions

updateAllDefectsAndTransitions(defect_lists=None, transition_path_lists=None, processes_per_defect=None, processes_per_path=None)

User command that takes the list of defects and paths and updates them all while maximizing parallel calculations.

Parameters:

Notes

In a single SMW input script, there could be

  1. multiple charge states in a defect.

  2. multiple defects in a defect list.

  3. multiple defect lists.

By default, processes_per_defect=None, all available processes defined in a SMW run script will be assigned to a single defect without parallelization. Thus, each task in a defect will be run with all available processes in serial.

SMW provides full level of parallelization in Defect/NEB calculations.

Note

For optimal parallelization setting, (processes_per_defect-1) ( # of charge states ) should be an integer.

Parallelization of different charge states in a defect

Case 1

charge_states = [0]
vacancies=VacancyList(
        HfO2,
        charge_states=charge_states,processes_per_defect=13
    ).filterByLatticeSpecies(Oxygen)

If a single charge state is defined in a defect list, all 13 processes will be assigned to each task in a single defect and all tasks in a defect will be run in serial.

Case 2

charge_states = [0,1]
vacancies=VacancyList(
        HfO2,
        charge_states=charge_states,processes_per_defect=17
    ).filterByLatticeSpecies(Oxygen)

If there are multiple charge states in a defect list, tasks will be parallelized by the number of charge states: (processes_per_defect-1) / ( # of charge states ) = (17-1)/2 = 8 . Thus,8 processes will be assigned to each task and two tasks will be run in parallel.

Parallelization of Defects

Multi-defect calculations can be parallelized by processes_per_defect keyword either in defect lists ( DefectClusterList, DefectPairList, InterstitialList, SplitInterstitialList, SubstitutionalList, VacancyList) or updateAllDefectsAndTransitions function.

Case 3

Defect definition in SMW input script :

charge_states=[0]
vacancies=VacancyList(
        HfO2,
        charge_states=charge_states,processes_per_defect=8
    ).filterByWyckoffIndex([0,53])

MPI setting in smw run script setting (Define total number of processes for SMW run script):

mpirun -np 16  atkpython smw_input.py.

Defect calculations will be parallelized by (total number of processes in smw run script ) / (processe_per_defect). Thus, 16/8 = 2 defects will be run in parallel.

Case 4

Defect definition in smw input script :

charge_states=[0]
Hf_vac=VacancyList(HfO2,charge_states=charge_states).filterByWyckoffIndex(0)
O_vac=VacancyList(HfO2, charge_states=charge_statee).filterByWyckoffIndex(53)

vaclist=[Hf_vac,O_vac]
updateAllDefectsAndTransitions(defect_lists=vaclist, processes_per_defect=8)

MPI setting in smw run script (Define total number of processes in SMW input script):

mpirun -np 16  atkpython smw_input.py

In this last case, there are two defect lists and each of them has a single defect. In order to parallelize defects over multiple defect lists, it is required to make a super defect lists (a list of defect lists) and update it in updateAllDefectsAndTransitions class. Otherwise, the defect lists will be run in serial.

If different values are assigned to processes_per_defect in the defect list and updateAllDefectsAndTransitions, SMW will select the value in updateAllDefectsAndTransitions.