next up previous contents
Next: 4.13 what='mur_lc' Up: 4 Input variables Previous: 4.11 what='scf_disp'   Contents

4.12 what='scf_elastic_constants'

With this option the code calculates the elastic constants of the solid at the geometry given as input to pw.x. There are three different algorithms that at convergence should give the same results. In two of them, depending on the Laue class, the code calculates the nonzero components of the stress tensor for a set of strains and obtains the elastic constants from the numerical first derivative of the stress with respect to strain. The two algorithms standard and advanced differ only in the choice of the unit cell. In the standard method the code applies the strain to the primitive vectors of the unstrained solid and uses ibrav=0 and the strained vectors to compute the stress tensor. The advanced method, available only for selected Bravais lattices, try to optimize the calculation by choosing strains for which the number of needed k-points is reduced. Moreover it identifies the Bravais lattice of the strained solid and recalculates the primitive vectors with the conventions of QUANTUM ESPRESSO. When available this should be the most efficient method. The third algorithm is called energy. Using the energy algorithm the elastic constants are calculated from the quadratic fit of the total energy as a function of strain without computing stress. This option is available only for selected lattices and usually requires more independent strains. It can be used when stress calculation is not implemented in QUANTUM ESPRESSO.
For all methods the number of strains is ngeo_strain for each independent strain. For each strain, the code relaxes the ions to their equilibrium positions if frozen_ions=.FALSE. or keeps them in the strained positions if frozen_ions=.TRUE.. Note that elastic constant calculations with frozen_ions=.FALSE. might require smaller force convergence threshold than standard calculations. The default value of forc_conv_thr must be changed in the pw.x input. At finite pressure all methods give the elastic constants that relate linearly stress and strain.
The input variables that control this option are:
frozen_ions: if .TRUE. the elastic constants are calculated 
             keeping the ions frozen in the strained positions. 
             Default: logical .FALSE.
ngeo_strain: the number of strained configurations used to calculate each
             derivative. 
             Default: integer 4 ('standard' and 'advanced'), 6 ('energy')
elastic_algorithm: 'standard', 'advanced', or 'energy'. See discussion above.
             Default: character 'standard' 
delta_epsilon: the interval of strain values between two geometries.
             To avoid a zero strain geometry that might have a
             different symmetry ngeo_strain must be even.
             Default: real 0.005
epsilon_0:   a minimum strain. For small strains the ionic relaxation 
             routine requires a very small threshold to give the correct 
             internal relaxations and sometimes fail to converge. In this 
             case you can increase delta_epsilon, but if delta_epsilon 
             becomes too large you can reach the nonlinear regime. In 
             this case you can use a small delta_epsilon and a minimum 
             strain. (To be used only for difficult systems).
             Default: real 0.0
poly_degree: degree of the polynomial used to interpolate stress or energy.
             ngeo_strain must be larger than poly_degree+1
             Default: 3 ('standard', 'advanced', 2 if ngeo_strain < 6), 
                      4 ('energy', 3 if ngeo_strain < 6).
fl_el_cons:  the name of the file that contains the elastic constants
             Default: character(len=*) 'output_el_con.dat'
The three algorithms are equivalent only at convergence both with k-point sampling and with the kinetic-energy cut-off, but large differences between the elastic constants obtained with the standard and advanced algorithms might point to insufficient k-point sampling. Large differences between the elastic constants obtained with the energy algorithm with respect to the other two might point to insufficient kinetic-energy cut-off.
Number of tasks for this option: ngeo_strain times the number of independent strains.

Using the elastic constants tensor the code can calculate and print a few auxiliary quantities: the bulk modulus, the poly-crystalline averages of the Young modulus, of the shear modulus, and of the Poisson ratio. Both the Voigt and the Reuss averages are printed together with the Hill average. The Voigt-Reuss-Hill average of the shear modulus and of the bulk modulus are used to compute average sound velocities. The average of the Poisson ratio and the bulk modulus allow the estimation of the Debye temperature. The Debye temperature is calculated also with the exact formula evaluating the average sound velocity from the angular average of the sound velocities calculated for each propagation direction solving the Christoffel wave equation. The exact Debye temperature is used within the Debye model to calculate the Debye's vibrational energy, free energy, entropy, and constant strain heat capacity. These quantities are plotted in a postscript file as a function of temperature.


next up previous contents
Next: 4.13 what='mur_lc' Up: 4 Input variables Previous: 4.11 what='scf_disp'   Contents
2019-04-16