Brief description of the content of the files in this entry

The zip file ValleyEgineeringPlotData.zip contains the raw data for the plots in the main text of the associated paper, divided into a folder per plot; in each folder, notes on the data are also present describing the formats.

AiiDA database

The attached .aiida file is an AiiDA import that can be imported with AiiDA. It requires AiiDA 1.0 or later.

Importing the data

You first need to import the data in AiiDA. After installing it, you can create a new profile (here and below called ARSENENE, but feel free to change the name). This can be done with:

verdi quicksetup --profile=ARSENENE

You can then import the data in this profile using:

verdi -p ARSENENE import arsenene_EPC.aiida

This will take about 10 minutes on a moderately powerful computer.

Content of the AiiDA database

Once imported, you will find two groups in your ARSENENE profiles (these can be shown using verdi -p ARSENENE group list -A). Each of them contains a BandsData node, as well as many ArrayData nodes containing (numpy) arrays corresponding to the electron-phonon (el-ph) coupling matrix elements used for the mobility calculations. The names of the groups are as follows:

  • export_for_As_paper_equilibrium: el-ph matrix elements for equilibrium arsenene
  • export_for_As_paper_strained: el-ph matrix elements for strained arsenene

Script to collect and plot the data

We also provide a python script (plotting_tool.py) to collect and plot the electron-phonon data in the AiiDA database, for your convenience. This script assumes that you have the data imported in the AiiDA profile and that you run the commands from a verdi shell (i.e., a custom ipython shell with the AiiDA environment and database loaded), that can be launched as follows:

verdi -p ARSENENE shell

Alternatively, you can write a python file and then run in with verdi run in the correct profile:

verdi -p ARSENENE run your_script.py

Note: If you run directly the provided script plotting_tool.py, it will generate a plot for one of the initial states and band indices.

Note that the data collection can take some time, because it involves retrieving data from the AiiDA nodes. Please look at the code for more details.

The different functions in the script can be used as follows:

bands, elphmats = find_bands_and_elphmats_in_group('export_for_As_paper_equilibrium')
# Get data for a given elphmat
kis, q, ijs, g2s, freqs = get_data(elphmat)
# or: plot data for all elphmats at a given initial state k and band index
plot_data(elphmats, kiidx = 0, ijidx=3)

The first function find_bands_and_elphmats_in_group goes through the nodes of a given group and separates the BandsData node (bands) from all other ArrayData nodes with the el-ph coupling matrix elements (elphmats).

The second function get_data reads one elphmat node (i.e., one element of the elphmats list) and returns the data contained in it as arrays. In particular, one elphmat node contains the electron-phonon coupling matrix elements at one given phonon momentum and for all initial states.

The data returned can be used to inspect the data structure, extract some data, and also to chose the appropriate inputs of the next function used to plot the matrix elements (see comments for the plot_data function later on). The return values of the get_data function are:

  • kis: an array containing the momenta of the initial electronic states.

    • shape: number of states*3
    • units: bohr^(-1)
  • q: an array containing the momentum of the phonon involved in scattering.

    • shape: 3
    • units: bohr^(-1)
  • ijs: list of tuples containing the available band-indices combinations for the initial and final states of the scattering event.

  • g2s: array containing the el-ph coupling matrix elements. The first two indices of the array correspond to the initial state and band indices. For a given set of those 2 indices, what is left is an array of the squared el-ph coupling (g^2_{k, k+q}). The size of this array is the number of phonon modes, i.e. 3*number of atoms

    • shape: len(kis) * len(ijs) * (number of phonon modes)
    • units: g^2 in eV^2
  • freqs: same structure as g2s, but containing the phonon frequencies

    • shape: len(kis) * len(ijs) * (number of phonon modes)
    • units: frequency in eV

The last function, plot_data(), generates a plot of the electron-phonon matrix elements for one given initial state and all the calculated phonon momenta. Its inputs are the list elphmats, and the indices of a given initial state and the index (in the ijs array) of the relevant band indices.

By default, we use the first initial state (corresponding to the bottom of the valley) and the last combination of band indices (corresponding to scattering from the conduction band to the conduction band). If instead you want to look at an other initial state, use the get_data function to get the initial states kis and print them, and then choose the appropriate index of the target initial state.