Skip to content

A Python program for calculating the surface SHG yield for semiconductors.

License

Notifications You must be signed in to change notification settings

roguephysicist/SHGYield

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SHG Yield for Semiconductor Surfaces

status DOI License PyPI

SHGYield is a python program for calculating the surface second-harmonic generation (SSHG) yield (in reflectance) for semiconductor surfaces.

Introduction

SSHG is an effective, nondestructive, and noninvasive probe for studying surface and interface properties, and even for characterizing buried interfaces and nanostructures. The high surface sensitivity of SSHG spectroscopy is due to the fact that within the dipole approximation, the bulk SHG response in centrosymmetric materials is identically zero. The SHG process can occur only at the surface where the inversion symmetry is broken.

This program has several potential applications and uses:

  • determining and analyzing the physical origin of SSHG spectra
  • predicting and characterizing the radiated SSHG for interesting new materials
  • characterizing thin films based on measured SH spectra
  • allowing the experimenter to calculate and analyze the SSHG yield to optimize experiments

For example, the figure below is an overview of the angular dependence of the reflected SHG Yield from the Si(111)(1x1)H surface. Experimentalists will find this very useful, as they can plan the experiment accordingly in order to optimize the output signal strength and polarization.

An overview of the angular dependence of the SHG Yield for the Si(111)(1x1)H surface

References

The complete theory is derived step-by-step in Phys. Rev. B 94, 115314 (2016). This software has been developed and used in the following publications:

Installation

SHGYield has been tested with Python 2 and 3, and Anaconda Python 4+ on both macOS and Linux. It should work on any system (including Windows) with the required Python packages installed.

Python requirements: sys, yaml, numpy, scipy

Usage: python shgyield.py <input.yml>

You can find a very complete input file inside the example directory.

Example and tutorial

An example case using the Si(111)(1x1):H surface is included in the example directory. It includes a very complete input file, all the components of the susceptibility tensor, and some reference data with relevant plots.

Also included is a Jupyter notebook with a brief but thorough tutorial that explains some the of the theory and how the equations are coded. This tutorial walks the user through the battery of calculations required for the SSHG yield for this surface.

Testing

A test script is included in the tests directory, and can be run automatically with pytests. Read the README.md file in that directory for details.

Theory

SHGYield.py produces the SHG radiation (in reflectance) produced from a semiconductor surface. It requires the susceptibility tensors that can be calculated as explained below. The theory is developed considering a reflectance model with three distinct regions that allows the user to readily simulate the SHG response of thin-films over bulk substrates, or of any crystalline surface with any symmetry considerations.

In order to calculate the SHG yield, you must first calculate the linear and nonlinear susceptibility tensor (χ(−2ω; ω, ω), χ for short) for the material of interest. The theory surrounding this problem is still being developed, and there are many ways to go about it. We leave it to the reader to find the best method for their particular problem. As an example, we use ABINIT to calculate the electron density/wavefunction/energies and then TINIBA to calculate the relevant matrix elements and the χ tensor components. The exact method that we use is derived in full detail in Phys. Rev. B 91, 075302 (2015). The program does NOT care how you have produced the susceptibility tensors; you can use different frameworks (such as MBPT, DFT-LDA, TDDFT, etc.) for producing the linear and nonlinear susceptibility tensors.

The nonlinear susceptibility tensor, χ(−2ω; ω, ω)

χ determines the nonlinear polarizability of a material and is responsible for second-harmonic generation. This relationship is expressed as

where a, b, and c are crystallographic directions that depend on how you orient your crystalline structure. We can see that a material can produce a polarization response in direction a from two incident fields (E) in directions b and c, by means of χabc.

χ is a third-rank tensor, and thus has 27 possible components (unique combinations of a, b, and c; for instance, aaa, aab, and so on.). Second-harmonic generation implies that the incoming fields are identical (two photons of equal energy in, one photon of double-energy out) so it is also implied that

for this particular phenomenon. This reduces 9 of the possible combinations, reducing to 18 unique components. It is very convenient to express the crystallographic directions in terms of x, y, and z; therefore, we can express χ with all 18 components as

Symmetry relations are very important for determining χ. A given crystal symmetry can greatly reduce the complexity of the problem by eliminating many of the components. For instance, for the (001) face of cubic crystals, we have that

which has only 3 independent components. There are many articles and books with tables and extensive discussion that describe the form that this tensor should have for a given symmetry.

The linear susceptibility tensor

The case for χab(ω) is considerable simpler. χab(ω) is directly related to the dielectric function of the material

which is directly related to the index of refraction as

The χab(ω) spectra should obviously have non-zero regions; otherwise, the problem is not very interesting.

Calculating the electronic properties of semiconductors

In general, there are several ab initio formalisms that can be used to obtain the electron density/wavefunction/energies of crystalline semiconductor materials. The most common are:

  • all-electron methods (older, declining in popularity)
  • density functional theory with the local-density approximation (DFT-LDA) (solid workhorse with known problems)
  • time-dependent density functional theory (TDDFT) (good for optical responses, but hard to implement)
  • many-body perturbation theory (MBPT) (state-of-the-art, but extreme computational expense)

Each of these has their pros and cons that mainly relate to accuracy vs. difficulty of the theory vs. computer resources. There are many free and open-source codes available for download that are under active development by thousands of researchers and groups.

Calculating the susceptibility tensors and optical properties

Once the initial electronic properties of the material are determined, we can then proceed to calculate the optical properties that include the linear and nonlinear responses. In general, nonlinear optics is now pretty well understood within the DFT-LDA (see references within Phys. Rev. B 91, 075302 (2015)) and the TDDFT frameworks. MBPT is currently (AFAIK) still at the linear optics level, but has the highest level of accuracy available. Of course, you can combine different methods to exploit the strengths that each has to offer.

The code that we use is called TINIBA; however, we have not yet created an official release for production use. That said, we are an active research group that uses this software every day to produce high-quality scientific work, and are constantly improving and adding features to it. Publishing TINIBA is definitely a long-term goal that we have.

There are, however, some codes available, such as RT-SIESTA which works with TDDFT, and even ABINIT has built-in utilities for calculating the susceptibility tensors.

License

Copyright 2017 Sean M. Anderson and Bernardo S. Mendoza.

SHGYield is free software made available under the BSD-3-Clause License. For details please see the LICENSE file.