Elastic Constants in Al


In this tutorial two of the three independent elastic constants in Al are calculated. Build the input file yourself, or copy the repositories’s ctrl.al.

This tutorial also explains a few features of lmf:

  1. The basis set is tuned.
  2. explains how charged densities are mixed as it proceeds towards self-consistency calculation
  3. shows how to compute shear constants c11c12 and c44 in Al.
  4. Briefly describes commands to create energy bands and density-of-states

Command summary

The tutorial starts under the heading “Tutorial”; you can see a synopsis of the commands by clicking on the box below.

$ mkdir si; cd si                               #create working directory and move into it
$ cp lm/doc/demos/qsgw-si/init.si .             #copy init file     
$ blm init.si --express                         #use blm tool to create actrl and site files
$ cp actrl.si ctrl.si                           #copy actrl to recognised ctrl prefix
$ lmfa ctrl.si                                  #use lmfa to make basp file, atm file and to get gmax
$ cp basp0.si basp.si                           #copy basp0 to recognised basp prefix   
$ vi ctrl.si                                    #set iterations number nit, k mesh nkabc and gmax
$ lmf ctrl.si > out.lmfsc                       #make self-consistent


The input file uses some features of the preprocessor (mainly it uses symbolic variables), so you may wish to go through the standard lmf tutorial,first.

This tutorial explains in more detail the input file, and the workings of the

lmf basis set.

Executables blm, lmfa, and lmf are required and are assumed to be in your path.


This tutorial gives a brief outline as to the commands and procedures required to use the lmf program for users who may have experience with the program already. More detailed instructions can be found in each section should you require them.

Note: All instances of al in the command lines can be replaced with ctrl.al_, depending on what your input file has been named.

1. Building The Input File

It is assumed for the tutorial that the specific categories in the input file are known. The sample input file for Al is provided here.

The input file and all of its categories are properly explained here.

2. Getting Started: Analyzing The Results Of A Band Pass

Use lmchk to verify:

  • The preprocessor works as advertised:

    lmchk al --showp

    For example, the line containing RSMH= should have been turned into

    RSMH=1.8,1.8,1.8    EH=-.1,-.1,-.1
  • Invoke:

    lmchk al

    And verify from the output that the sphere overlap is about 0.6% (a safe number) and that sum-of-sphere volumes equals about 75% of the total cell volume.

Use lmfa to generate densitites for the free atom. Atomic densities will be overlapped to make a first trial density for the solid (Mattheis construction).

    lmfa al

Invoke lmf in a non self-consistent mode:

    lmf al -vhf=1

3. Optimizing The Basis Set

  • One can optimize RSMH efficiently with:

    lmf al –optbas

    You can take the result of the optimized calculation (saved in basp2.ext) and copy them to your input file. Or, you can have lmf automatically read these parameters from file basp; tokens in HAM_AUTOBAS control what lmf reads from this file, and what lmfa writes to it.

  • We might consider the effect of enlarging the basis, which as we noted we can do from the commmand line with -vbigbas=1. Do this:

    lmf al -vbigbas=1 -vhf=1

Read more about basis sets here.

4. Self-consistent LDA calculation

A fully self-consistent full-potential calculation can be preformed by invoking:

    lmf al > out

Now the output density is generated. With the output density, the HKS energy functional can be evaluated. Also the log derivative parameters P are floated to the band centers-of-gravity. How the P’s are floated is prescribed by tokens IDMOD.

A new density is constructed as follows:

  • The output density is screened using the model Lindhard function, provided the Lindhard parameter ELIND is nonzero:

    nout=nin+eps1(noutnin)n_{out}^* = n_{in} + eps^{-1} (n_{out}-n_{in})
  • An estimate for the self-consistent density is made by mixing nin and nout* using some mixing scheme.

  • The resultant density is saved in rst.ext, unless you specify otherwise using –rs=.

  • At the end of the iteration, the total energies are printed and checks are made whether self-consistency is achieved to tolerances specified by ITER_CONV and ITER_CONVC. The RMS DQ generated at the mixing step is the measure compared against tolerance CONVC; the change in energy from one iteration to the next is tested against tolerance CONV. Both tolerances must be satisfied, unless you set CONV=0 or CONVC=0 (0 tolerance tells lmf not to test that parameter).

Look at this page for LDA calculations.

5. Shear constants

This section shows how to calculate two of the three independent shear constants in Al. We first calculate c11c12, which we will do by computing the total energy at different lattice distortions, and fitting the curvature of the total energy. The tetragonal distortion is conveniently generated using the line

    SHEAR=0 0 1 1+dist

which distorts the lattice in a way that conserves volume to all orders (this is useful because it tends to be less error-prone). The direction of distortion is set by the first three parameters; the lattice will be sheared along (001).

The first difficulty is that our specification of the FT mesh using token GMAX may cause the program to switch meshes for as parameter dist changes. This is a bad idea, since we want to resolve very small energy differences. So, the first step is to comment out the line with GMAX=gmax in the input and use instead:

    FTMESH=10 10 10

The second difficulty is that the shear constants in Al are difficult to converge, because they require many k-points. The following steps are written in ‘tcsh’ and compute the self-consistent total energy parameterically as a function of ‘dist’:

       rm -f out save.al
       foreach x ( -0.04 -0.03 -0.02 -0.01 0 0.01 0.02 0.03 0.04)
           rm -f mixm.al wkp.al
           lmf al -vdist=$x -vnk=24 --pr20,20 >>out

Note that the mixing file eigenvalue weights file (mixm.al and wkp.al) are deleted for each new shear calculation. File save.al contains total energies ehf for 9 values of dist using 24 divisions of k-points. (To properly converge the calculation use nk=32 or even nk=40.)

Extracting ehf and ehk parametrically as a function of dist is very easy with the vextract tool:

    cat save.al | startup/vextract c dist ehf > dat

The key ‘c’ tells vextract that you want lines beginning only with ‘c’: these lines correspond to band passes when self-consistency was reached. You can use any regular expression for the key. You can ask vextract to extract any quantity associated with a variable in the file.

A trigonal shear will yield c44. To compute it, replace the SHEAR token with:

    SHEAR=1 1 1 1+dist

Both of these elastic constants depend on the fitting procedure with an uncertainty of about 5%. A careful calculation would use more points dist and increase nk. The final shear constant, the bulk modulus, you can calculate by varying the lattice constant. We do not do it here, but if you do this, you are advised to use token STRUC_DALAT, rather than change ALAT (see the following note).

6. Other things to read and do

You can generate and plot the energy bands using lmf. It proceeds in the same way as in the ASA tutorial. Generate the band file this way:

    cp startup/syml.fcc ./syml.al
    lmf al --band:fn=syml

The generation of the core-level spectroscopy, Mulliken analysis or density-of-states is done first by invoking lmf with the appropriate command-line switch, followed by lmdos. The lmdos step is illustrated (including a way to plot results) in the ASA tutorial.

To compute the density of states, see this tutorial. To compute core-level EELS spectra or Mulliken analysis in Fe, try running

    fp/test/test.fp fe 2

To compute total or partial DOS in hcp Co, try running

    fp/test/test.fp co 2

Edit This Page