# Band structure tutorial

## Requirements

• nanotools

• RESCU+

### Pseudopotentials

I will need the following pseudopotentials.

• Ga_AtomicData.mat

• As_AtomicData.mat

Let’s copy them from the pseudo database to the current working directory and export RESCUPLUS_PSEUDO=\$PWD.

## Briefing

In this tutorial, I show how to calculate the band structure of the GaAs crystal.

## Setup

Create the Python script etot.py with the following content (see the tutorial on TotalEnergy)

from nanotools import Atoms, Cell, System, TotalEnergy
a = 2.818
cell = Cell(avec=[[0.,a,a],[a,0.,a],[a,a,0.]], resolution=0.12)
fxyz = [[0.00,0.00,0.00],[0.25,0.25,0.25]]
atoms = Atoms(fractional_positions=fxyz, formula="GaAs")
sys = System(cell=cell, atoms=atoms)
calc = TotalEnergy(sys)
calc.solve()

and bs.py

from nanotools.bandstructure import BandStructure as BS
calc = BS.from_totalenergy("nano_scf_out.json")
calc.solve()
fig = calc.plot_bs(filename="gaas_bs.png") # plot results

## Explanations

Here is a high level view of the calculation workflow:

1. Initialize the BS calculator from a ground state calculation (TotalEnergy).

2. Perform a band structure calculation (non-self-consistently).

3. Use the BS calculator’s method to plot the band structure.

### Initialize the BS calculator

Upon completing the total energy calculation, the results are saved in nano_scf_out.json. I will initialize a BS calculator using the class method from_totalenergy.

calc = BS.from_totalenergy("nano_scf_out.json")

The method from_totalenergy will copy the system information and initialize the BS calculator. The k-point path is automatically generated from the cell shape. It can be changed using the system.set_kpoint_path method, for example

calc.system.set_kpoint_path(special_points=["L","G","X"])

### Band structure calculation

RESCU+’s solvers are invoked calling the solve method

calc.solve()

The method writes all parameters to a JSON file, then calls the relevant (Fortran) program, then loads the data back into the calculator. The output of rescuplus goes to nano_bs_out.h5 and nano_bs_out.json. Important data is stored in

• calc.energy.eigenvalues, the Kohn-Sham eigenvalues.

• calc.system.kpoint.bvec, the reciprocal lattice vectors.

• calc.system.kpoint.fractional_coordinates, the k-point (fractional) coordinates.

### Plot the band structure

I use the plot_bs method to plot the band structure.

fig = calc.plot_bs(filename="gaas_bs.png") # plot results

plot_bs is a function that returns a Pyplot figure handle. You can use the handle to modify the figure or save it to a file. You should see something similar to