Last Modified 17 December 1999

The ``Static'' Tight-Binding Program: Example IV

In this example we use the tight-binding program static to determine the elastic constant C11-C12 of fcc copper, using static to determine the energy as a function of strain and then using gnuplot's fitting program to determine the elastic constant. By extension this method can be used to determine the elastic constants of other cubic materials.

For more information about the construction of the input to the static program see e.g., Example 1 and the other examples. For more information about the calculation of elastic constants from total-energy information, see the paper ``First-principles calculation of Elastic Properties'', in Intermetallic Compounds: Vol. 1, Principles, J. H. Westbrook and R. L. Fleischer, eds. (Wiley, London: 1994).


As usual, we can obtain the tight-binding parameters for copper from the tight-binding periodic table under ``Cu''. Save these parameters in a working directory as cu_par.

Determining the spacegroup file for this lattice is somewhat more involved than usual. For now, take my word for it that the space group is a body-centered orthorhombic lattice, and the space group is Fmmm (#69 in the International Crystallographic Tables). It is fairly easy to construct this space group, but I've made a copy for you here. Save it in your working directory under the name spcgrp. At some point we'll add this space group to the Crystal Lattice Structure (http://web.archive.org/web/20111231202250/http://cst-www.nrl.navy.mil/lattice/index.html) page.

Again, you can generate your own k-points, but I've provided a set called fcccp.08. This set is used to find C11-C12 (hence the "cp", for C') of the fcc lattice, and is equivalent to the fcc.08 mesh of Example I when there is no strain on the lattice.


Once again, take this copy of the SKIN (Slater-Koster INput) file, and save it in your working directory under the name SKIN. Let's examine this file.

The first few lines of the file should be familiar from previous examples:

Mode=3               Calculate E Only
0.002  0.500         (T_{Fermi}, Eigenvalue cutoff for P calculation)
cu_par

The first structure we'll calculate is the one with zero strain, i.e., the undistorted face-centered cubic lattice. This part of the SKIN file looks like this:

FCC Copper -- Orthorhombic Strain for C_{11}-C_{12}
 e1^2= 0.0000        (20 character label for SKENG)
 0.00                (Electrons in addition to nominal Cu charge (=11/atom))
 1                   (fcc lattice, read in cubic lattice constant a)
 6.822               (lattice constant in Bohr)
 0                   (No additional strains applied)
 1                   (Atoms in the unit cell)
 4 4 4               (Neighbor search cutoff indices)
F                    (Logical variable -- no internal displacements)
 1  0.000  0.000  0.000  0 0 0   (Position of atom in Lattice coordinates)
NEWSYM=T             (Generate new set of k-points)
LATTIC=1             (Lattice type / Next is spacegroup file name:)
spcgrp
ILAT=F               (Space group file in Cartesian Coordinates)
-1313                (Read k-points from a file/ Next is file name:)
fcccp.08

You should be able to recognize all of the parts to from previous examples. The only differences from a regular fcc calculation are the space group file, which is Fmmm rather than Fm(-3)m, and the k-point mesh. However, since there is no strain on the lattice, this should produce an identical total energy. You can check this by using the Fm(-3)m space group file and cubic fcc.08 k-point mesh in place of this spcgrp and fcccp.08.

The remaining parts of the calculation concern an fcc lattice under strain. Consider the next calculation in the SKIN file:

FCC Copper -- Orthorhombic Strain for C_{11}-C_{12}
 e1^2= 0.0001        (20 character label for SKENG)
 0.00                (Electrons in addition to nominal Cu charge (=11/atom))
 1                   (fcc lattice, read in cubic lattice constant a)
 6.822               (lattice constant in Bohr)
-2                   (Strain option -2:  Read in e1^2, e2=-e1, e3 conserves V)
0.0001               (e1^2)
 1                   (Atoms in the unit cell)
 4 4 4               (Neighbor search cutoff indices)
F                    (Logical variable -- no internal displacements)
 1  0.000  0.000  0.000  0 0 0   (Position of atom in Lattice coordinates)
NEWSYM=F             (Generate new set of k-points)

The label tells us that the value of the strain parameter e1 is 0.01 for this calculation, a rather small strain. Note that the program starts by constructing an fcc lattice with a lattice constant of 6.822 Bohr, the experimental equilibrium lattice constant for Copper. However, the lattice is then strained. The strain choice, -2, is made from the strain type section of the subroutine setlat.f. From the strain table we see that option -2 is a volume-conserving strain with the energy/strain relationship

E(e1) = E0 + ½ V (C11 + C22 - 2 C12) e12 + O[e14]  . (1)

Since this is a cubic lattice, we have C11=C22, so this reduces to

E(e1) = E0 + V (C11 - C12) e12 + O[e14]  . (2)

For a cubic lattice it is easy to show that E(-x) = E(x), so the program asks us to input x2 = e12. For lattices which do not have this symmetry property, see option 21 in the strain table.

Note that the atom remains at the origin for all strains. This is a consequence of the fact that there is only one atom in the unit cell and so we can always assume that it is at the origin. This assumes that there is no Jahn-Teller type distortion of the lattice. If such a distortion exists this calculation will only be an upper bound to the true elastic constant.

The remainder of the calculation proceeds in the usual way, as we calculate the energy as a function of e12. The choice of range of e12 is rather an art form. If e12 is too small, then because of the numerical integration and roundoff errors the energy E(e1) may actually be less than E(0), even though an exact calculation would show a positive energy. For this reason I usually take |e1| > 0.01. The upper bound depends on the behavior of the higher order elastic constants. As seen from (2), plotting E versus e12 should give a straight line plot for small strains. If the strain is too large it will be impossible to determine the slope at the origin, V(C11 - C12), properly. For metallic systems I've found that reliable elastic constants can be obtained if we keep |e1| < 0.10. The lattices in this SKIN file span this range.


Now go to the output discussion to see what will happen.

Look at other examples.

Get other parameters from the Tight-binding periodic table.


static Home Page   Introduction   About Version 1.11   Installation   List of Files   Usage   Input Files   Output Files   Trouble Shooting   Appendix

Return to the static Reference Manual.