1.1. Fat-bands of PtSe2 monolayer

In this tutorial we will show how to use the NanoDCAL code to calculate and plot the fat-bands (projected band structure) of a PtSe2 monolayer, as shown in Fig. 1.1.1.

../../_images/PtSe2.png

Fig. 1.1.1 The crystal structure of the 1 T phase of PtSe2 (side and top views)

Fat-bands, also known as projected band structures, display the orbital character of electronic states along the band structure path. The thickness or color intensity of each band at a given k-point represents the contribution of specific atomic orbitals to that electronic state. This analysis is particularly useful for understanding the nature of electronic states near the Fermi level and identifying the dominant orbital character of valence and conduction bands.

The PtSe2 monolayer crystallizes in the 1T phase with octahedral coordination, where the Pt atom is sandwiched between two Se layers in an eclipsed configuration.

The calculation steps are given as follows:

  1. Build the structure:

    • Generate the PtSe2 monolayer using ASE.

  2. Self-consistent (SCF) calculations:

    • Perform the ground state calculation to obtain the converged electronic density.

  3. Band structure calculations:

    • Calculate the band structure with orbital projections along high-symmetry k-points.

  4. Analysis and visualization:

    • Plot the fat-bands showing the orbital contributions.

1.1.1. Build the structure

Generating the PtSe2 monolayer

The PtSe2 monolayer can be automatically generated using the provided Python script gen_PtSe2.py. To execute this script, the user must install the required Python packages:

  1. ase (Atomic Simulation Environment)

  2. numpy

These packages can be installed using the command below:

pip install ase numpy

Note

It is highly recommended to use an isolated environment, such as a Python virtual environment or a Conda environment, when installing additional Python modules on your system, in order to prevent potential conflicts with dependencies from other projects.

Generate the PtSe2 monolayer cell in CIF (PtSe2.cif) and XYZ (PtSe2.xyz) formats by running:

python gen_PtSe2.py

The structure is constructed using the lattice parameter a = 3.7173 Å and a vacuum region of 20 Å along the z-axis to prevent interactions between periodic images.

1.1.2. SCF calculations

Generating the NanoDCAL input file

Once the PtSe2 monolayer has been set up, the user can generate the NanoDCAL input file using the provided Python script gen_scf_input.py.

Generate the SCF input file (scf.input) by running:

python gen_scf_input.py

scf.input file

%%What quantities should be calculated
calculation.name = scf


%Basic setting
calculation.occupationFunction.temperature = 100
calculation.realspacegrids.E_cutoff = 80 Hartree
calculation.xcFunctional.Type = GGA_PBE96
calculation.k_spacegrids.number = [ 20 20 1 ]'


system.centralCellVectors = [[1.858655     -3.219285      0.000000]' [1.858655      3.219285      0.000000]' [0.000000      0.000000     20.000000]']
system.spinType = NoSpin


%Iteration control
calculation.SCF.monitoredVariableName = {'rhoMatrix','hMatrix','totalEnergy','bandEnergy','gridCharge','orbitalCharge','spinPolar'}
calculation.SCF.convergenceCriteria = {1e-05,1e-05,[],[],[],[],[]}
calculation.SCF.maximumSteps = 80
calculation.SCF.mixMethod = Pulay
calculation.SCF.mixingMode = H
calculation.SCF.startingMode = H
calculation.SCF.donatorObject = NanodcalObject.mat

calculation.SCF.mixRate = 0.0001

%Basic set
system.neutralAtomDataDirectory = ./pseudos
system.atomBlock = 3
AtomType OrbitalType X Y Z
Pt   PBE-DZP   0.0000000      0.0000000     10.0000000
Se   PBE-DZP   1.8586533      1.0730940     11.3117758
Se   PBE-DZP   1.8586533     -1.0730940      8.6882242
end

The simulation parameters are defined by keywords. The most relevant keywords are:

  • calculation.name This input parameter specifies the type of the calculation.

  • calculation.realspacegrids.E_cutoff The energy cutoff for the real space grid in Hartree.

  • calculation.xcFunctional.Type The exchange-correlation functional. Here we use the GGA-PBE functional.

  • calculation.k_spacegrids.number The k-point grid for sampling the Brillouin zone.

  • system.centralCellVectors The lattice vectors defining the unit cell.

  • system.spinType The spin treatment in the calculation. NoSpin means spin-degenerate calculation.

  • calculation.SCF.convergenceCriteria Convergence criteria for density matrix and Hamiltonian matrix.

  • system.neutralAtomDataDirectory Path to the pseudopotential files.

  • system.atomBlock Number of atoms in the unit cell, followed by the atomic positions.

Warning

Before running the calculation, make sure to copy the pseudopotential files (Pt_PBE-DZP.mat and Se_PBE-DZP.mat) from the NanoDCAL database to the ./pseudos directory. To download the pseudopotentials access the Nanoacademic-portal.

Now we are ready to run the SCF calculation. Execute NanoDCAL with the following command:

nanodcal scf.input

After the calculation is finished, the following output files are generated:

  • NanodcalObject.mat: Contains the converged electronic structure data required for subsequent calculations.

  • log.txt: Contains the calculation log with SCF convergence information.

  • TotalEnergy.mat: Contains the total energy and its components.

1.1.3. Band structure calculations

Generating the band structure input file

With the converged SCF solution in NanodcalObject.mat, we can now calculate the band structure with orbital projections. Use the provided Python script gen_bs_input.py to generate the input file.

Generate the band structure input file (bs.input) by running:

python gen_bs_input.py

bs.input file

system.object = NanodcalObject.mat
calculation.name = bandstructure
calculation.bandStructure.symmetryKPoints = {'G', 'K', 'M', 'G'}
calculation.bandStructure.coordinatesOfTheSymmetryKPoints = [0.0000000000 0.0000000000 0.0000000000; 0.3333333333 -0.6666666667 0.0000000000; -0.5000000000 0.0000000000 0.0000000000; 0.0000000000 0.0000000000 0.0000000000]'
calculation.bandStructure.numberOfKPoints = 200
calculation.bandStructure.isProjected = true
calculation.bandStructure.plot = true
calculation.control.xml = true

The keywords specific to band structure calculations are:

  • system.object Path to the converged SCF object file (NanodcalObject.mat).

  • calculation.name Set to bandstructure for band structure calculations.

  • calculation.bandStructure.symmetryKPoints Labels for the high-symmetry k-points along the path.

  • calculation.bandStructure.coordinatesOfTheSymmetryKPoints Fractional coordinates of the high-symmetry k-points. For hexagonal 2D materials, the typical path is \(\Gamma \rightarrow K \rightarrow M \rightarrow \Gamma\).

  • calculation.bandStructure.numberOfKPoints Total number of k-points along the entire path.

  • calculation.bandStructure.isProjected Set to true to calculate orbital projections (fat-bands).

  • calculation.bandStructure.plot Set to true to generate automatic plots.

  • calculation.control.xml Set to true to output data in XML format for post-processing.

Important

The key parameter for fat-bands calculation is calculation.bandStructure.isProjected = true. This enables the calculation of orbital contributions to each band state, which is essential for the fat-bands analysis.

Run the band structure calculation:

nanodcal bs.input

After the calculation is finished, the following output files are generated:

  • BandStructure.mat: Contains the band structure data in MATLAB format.

  • BandStructure.xml: Contains the band structure data in XML format.

1.1.4. Fat-bands analysis

Plotting the fat-bands with ND_projbands

The fat-bands can be visualized using the provided MATLAB script ND_projbands.zip. This is an interactive script that guides you through the process of selecting orbital projections and customizing the plot.

Download and extract the zip file, then copy the script to the working directory containing the BandStructure.mat and NanodcalObject.mat files:

unzip ND_projbands.zip
cp ND_projbands.p /path/to/your/calculation/

Then, run the script in MATLAB:

ND_projbands

Interactive workflow

The script will guide you through the following steps:

Step 1: Atom and orbital summary

First, the script displays a summary of all atoms and their associated orbitals:

================= RAW ATOM SUMMARY =====================

Atom 1: type = Pt, pos = (0.0000, 0.0000, 10.0000), region = C
  Global orbital indices: [1 2 3 4 5 6 7 8 9 10 11 12 13]
  Orbital labels (grouped): {s}{x,y,z}{xy,yz,zx,(xx-yy)/2,(3*z.*z-1)/2/sqrt(3)}

Atom 2: type = Se, pos = (1.8587, 1.0731, 11.3118), region = C
  Global orbital indices: [14 15 16 17 18 19 20 21 22 23 24 25 26]
  Orbital labels (grouped): {s}{x,y,z}{xy,yz,zx,(xx-yy)/2,(3*z.*z-1)/2/sqrt(3)}

Atom 3: type = Se, pos = (1.8587, -1.0731, 8.6882), region = C
  Global orbital indices: [27 28 29 30 31 32 33 34 35 36 37 38 39]
  Orbital labels (grouped): {s}{x,y,z}{xy,yz,zx,(xx-yy)/2,(3*z.*z-1)/2/sqrt(3)}

=========================================================

Total number of orbitals in the central region: 39

Then, a translated orbital list with human-readable labels is shown:

================= TRANSLATED ORBITAL LIST =================
  #glob  atom  type   label_pretty    label_raw
-----------------------------------------------------------
     1      1   Pt     s              s
     2      1   Pt     p_x            x
     3      1   Pt     p_y            y
     4      1   Pt     p_z            z
     5      1   Pt     d_xy           xy
     6      1   Pt     d_yz           yz
     7      1   Pt     d_zx           zx
     8      1   Pt     d_x2-y2        (xx-yy)/2
     9      1   Pt     d_z2           (3*z.*z-1)/2/sqrt(3)
    ...
    14      2   Se     s              s
    15      2   Se     p_x            x
    ...
===========================================================

Step 2: Choose projection mode

Select between fat lines or bubble markers:

Projection mode: (l)ine fat bands or (b)ubble markers? [Enter = l]:
  • Press Enter or type l for fat lines (default)

  • Type b for bubble markers

Step 3: Define projectors

Specify how many orbital groups (projectors) you want to visualize:

How many projectors (orbital groups) do you want to define? 2

Step 4: Configure each projector

For each projector, you will be asked to provide:

--- Projector 1 ---
  Global orbital indices: 1-13
  Color (r,g,b,k,m,c,y) [Enter = k]: r
  Maximum size/line width [Enter = 10.0]: 8
  Legend label (e.g. "Cr (d)") [Enter = auto]: Pt

--- Projector 2 ---
  Global orbital indices: 14-39
  Color (r,g,b,k,m,c,y) [Enter = k]: b
  Maximum size/line width [Enter = 10.0]: 8
  Legend label (e.g. "Cr (d)") [Enter = auto]: Se

Tip

Index format options:

  • Single indices: 4 10 or 4,10

  • Multiple indices: 2 3 5 6 8 9 or 2,3,5,6,8,9

  • Ranges: 2-5 10-12 (expands to 2,3,4,5,10,11,12)

  • Mixed: 1-4 7 10-13

Common projector definitions for PtSe2:

  • Pt (all orbitals): 1-13

  • Se (all orbitals): 14-39

  • Pt d-orbitals only: 5-9

  • Se p-orbitals only: 15-17 28-30

Step 5: Output files

After completing the interactive setup, the script generates the fat-bands plot and saves the following files:

  • BandsProj_spin1.png: High-resolution PNG image

  • BandsProj_spin1.fig: Editable MATLAB figure file

1.1.5. Simulation results

Fat-bands of PtSe2 monolayer

The resulting fat-bands plot shows the orbital character of the electronic states in the PtSe2 monolayer, as shown in Fig. 1.1.2.

../../_images/BandsProj_spin1.png

Fig. 1.1.2 Fat-bands of PtSe2 monolayer along the high-symmetry path \(\Gamma \rightarrow K \rightarrow M \rightarrow \Gamma\). The color/size represents the orbital contributions: Pt orbitals (green and cyan) and Se orbitals (red and blue).

The fat-bands analysis reveals several important features:

  1. Valence band maximum (VBM): Located at the \(\Gamma\) point, the VBM is predominantly composed of Se p orbitals with some hybridization from Pt d orbitals.

  2. Conduction band minimum (CBM): The CBM shows significant Pt d character, particularly the \(d_{z^2}\) orbital contributions [WPL17].

  3. Band gap: PtSe2 exhibits a semiconducting behavior with a band gap of approximately 1.2 eV at the PBE level [ZYS21].

  4. Orbital hybridization: The presence of both Pt and Se character in bands near the Fermi level indicates strong p-d hybridization, which is characteristic of transition metal dichalcogenides (TMDs) [ZZW16].

Tip

The fat-bands analysis can be extended to study:

  • Angular momentum decomposition: Separate contributions from s, p, and d orbitals.

  • Spin-resolved projections: For magnetic systems with spin-orbit coupling.

  • Layer-resolved projections: For multilayer or heterostructure systems.

1.1.6. References

[WPL17]

Y. Wang, L. Li, W. Yao, S. Song, J. T. Sun, J. Pan, X. Ren, C. Li, E. Ober, L. Wang, et al. Monolayer PtSe2, a New Semiconducting Transition-Metal-Dichalcogenide, Epitaxially Grown by Direct Selenization of Pt. Nano Lett. 15, (2015), p. 4013.

[ZYS21]

L. Zhang, T. Yang, M. F. Sahdan, Arramel, W. Xu, K. Xing, Y. P. Feng, W. Zhang, Z. Wang, and A. T. S. Wee. Precise Layer-Dependent Electronic Structure of MBE-Grown PtSe2.. Adv. Electron. Mater. 7, (2021), p. 2100559.

[ZZW16]

Y. Zhao, J. Qiao, Z. Yu, P. Yu, K. Xu, S. P. Lau, W. Zhou, Z. Liu, X. Wang, W. Ji, and Y. Chai. High-Electron-Mobility and Air-Stable 2D Layered PtSe2 FETs. Adv. Mater. 29, (2017), p. 1604230.