Running a Wannier90 calculation¶
GaAs wannierization¶
You can check the folder examples/example01 in the source repository
for an actual script (wannier_gaas.py) that you can run.
In this example, two possibilities are provided:
Run a full calculation from scratch QE+Wannier90 (from step 1 to step 5)
Run only the Wannier90 part (step 5 only)
We use the verdi command-line interface (CLI). A
small reminder of some simple commands:
Activate your virtual environment, e.g. with
workon aiidaverdi process list -a -p<N>(to monitor the state of the calculations done in the last<N>days)verdi process show <identifier>(once the calculation is finished: more detailed list of properties, inputs and outputs).
If following strategy (B), you can directly jump to Section 5 of the documentation.
Preliminary¶
We define the starting input structure from the verdi shell and we store it in
the database in the form of a StructureData by typing:
from aiida.plugins import DataFactory
StructureData = DataFactory('structure')
a = 5.68018817933178
structure = StructureData(cell = [[-a/2., 0, a/2.], [0, a/2., a/2.], [-a/2., a/2., 0]])
structure.append_atom(symbols=['Ga'], position=(0., 0., 0.))
structure.append_atom(symbols=['As'], position=(-a/4., a/4., a/4.))
structure.store()
print ( 'Structure stored with pk %d' %structure.pk)
In the example file we also define the kpoints mesh to be used :
KpointsData = DataFactory('array.kpoints')
kpoints = KpointsData()
kpoints.set_kpoints_mesh([2, 2, 2])
and the kpoints path:
kpoint_path = Dict(
dict={
'point_coords': {
'G': [0.0, 0.0, 0.0],
'K': [0.375, 0.375, 0.75],
'L': [0.5, 0.5, 0.5],
'U': [0.625, 0.25, 0.625],
'W': [0.5, 0.25, 0.75],
'X': [0.5, 0.0, 0.5]
},
'path': [('G', 'X'), ('X', 'W'), ('W', 'K'), ('K',
'G'), ('G', 'L'),
('L', 'U'), ('U', 'W'), ('W', 'L'), ('L',
'K'), ('U', 'X')]
}
)
Eventually, we provide the projections in the following format:
from aiida_wannier90.orbitals import generate_projections
projections = generate_projections(
dict(
position_cart=(1, 2, 0.5),
radial=2,
ang_mtm_l_list=2,
ang_mtm_mr_list=5,
spin=None,
#zona=1.1,
zaxis=(0, 1, 0),
xaxis=(0, 0, 1),
spin_axis=None
),
structure=structure
)
In the following, we will use this definition for the codes and the pseudo family to be used:
your pw code –>
<codename_pw>your pw2wannier code –>
<codename_pw2wannier>your wannier code –>
<codename_wannier>your pseudo potentials family –>
<PSEUDO_FAMILY_NAME>
Run your simulation¶
1) Run the SCF¶
We specify the pw code to be used, the PK of the structure, the pseudo family, serial/parallel mode, type of pw calculation and the daemon:
aiida-quantumespresso calculation launch pw -X <codename_pw> --structure=<PK_structure> --pseudo-family=<PSEUDO_FAMILY_NAME> --with-mpi --calculation-mode=scf --daemon
The code prints out on the screen:
Submitted PwCalculation<PK_calculation> to the daemon
and we can check the status of the calculation:
verdi process list -a -p1
verdi process show <PK_calculation_scf>
By typing the latter command we get among the output text:
...
remote_folder <PK_remotedata_scf> RemoteData
...
2) Run the NSCF¶
We specify the pw code to be used, the PK of the structure, the pseudo family, serial/parallel mode, type of pw calculation, the parent folder from the scf step, the mesh of kpoints to be used and the daemon:
aiida-quantumespresso calculation launch pw -X <codename_pw> --structure=<PK_structure> --pseudo-family=<PSEUDO_FAMILY_NAME> --with-mpi --calculation-mode=nscf --parent-folder=<PK_remotedata_scf> --unfolded-kpoints --kpoints-mesh=2 2 2 --daemon
Submission is confirmed by the following message:
Submitted PwCalculation<PK_calculation_nscf> to the daemon
We can check the progress and the outputs with:
verdi process show <PK_calculation_nscf>
we finally get in the output text:
...
remote_folder <PK_remotedata_nscf> RemoteData
...
3) Run the Wannier90 preprocessing¶
We specify only the Wannier code and select the preprocess mode:
verdi run wannier_gaas.py --send <codename_wannier> preprocess
The output tells us the PK of the calculation just submitted:
submitted calculation; calc=Calculation(uuid='uuid_wannier-pp') # ID=<PK_calculation_wannier-pp>
By typing the usual commands we check the status of the calculation
verdi process list -a -p1
verdi process show <PK_calculation_wannier-pp>
and we get among the outputs the PK of the node containing the .nnkp
file:
...
nnkp_file <PK_nnkp_file> SinglefileData
...
4) Run the pw2wannier90 step¶
We specify the pw2wannier code, the PK of the remote data from the NSCF
calculation, the PK of the nnkp_file node, and the options to indicate
we want to run using MPI and via the daemon:
aiida-quantumespresso calculation launch pw2wannier90 -X <codename_pw2wannier> -P <PK_remotedata_nscf> -S <PK_nnkp_file> -i -d
As usual, in the output:
Submitted Pw2wannier90Calculation<PK_calculation_pw2wannier> to the daemon
and by typing verdi process show, we obtain:
...
remote_folder <PK_remotedata_pw2wannier> RemoteData
retrieved <PK_folderdata_pw2wannier> FolderData
...
5) Run the Wannier90 main step¶
We eventually can run the main Wannier90 calculation, where we need to
specify the Wannier code, the mode (main, for the main run) and the
PL of the FolderData containing the .amn and .mmn files.
This FolderData, if following strategy (A), is the one retrieved
from the pw2wannier calculation. If instead you are following strategy
(B), you will need to create this FolderData by running the script
create_local_input_folder.py via
verdi run create_local_input_folder.py
The script will ask you if you want to store the FolderData on a
node. Once you confirm, you will obtain the corresponding PK and the
command to run the following Wannier90 calculation.
The command, in both cases, is the following:
verdi run wannier_gaas.py --send <codename_wannier> main <PK_inputfolder>
where <PK_inputfolder> is either <PK_remotedata_pw2wannier>
(strategy A) or the output of the create_local_input_folder.py
script (strategy B).
Get the PK from the output:
submitted calculation; calc=Calculation(uuid='uuid_wannier-local') # ID=<PK_calculation_wannier_local>
And inspect the status of the job:
verdi process list -a -p1
verdi process show <PK_calculation_wannier_local>
Finally, we can inspect the parsed outputs with:
verdi calcjob res <PK_calculation_wannier_local>
that will output something like:
{
"Omega_D": 0.008611417,
"Omega_I": 4.187080332,
"Omega_OD": 0.484748783,
...
}