How to calculate elastic constants with SIESTA ? (This is taken from a blog : (http://dft-blog.natanzon.eu/2008/03/how-to-calculate-elastic-constants-with.html)) SIESTA calculates stress tensor and you know stress/strain relationship from the textbooks. You have to relax your system properly to have your stress tensor be close to zero. Then manually deform lattice vectors in selected directions and obtain the value of stress. For example, if you want to calculate C11, you have to deform lattice vector a (I suppose it is (a,0,0)) to a(1+e), where e is your value of strain. Then you make the calculation with relaxing atomic positions but NOT lattice vectors (VariableCell false) and obtain the value of stress tensor _ij and find C11: C11 = 11/e” This gives you the main idea. Here I want to describe this procedure more properly and focus on how to overcome some common problems. Problem 1. Which value of strain to choose? It depends on the material. You have to be sure that you're in the linear regime and Hook's law works, so the smaller the strain the better chance that you'll not be mistaken. BUT! Small values of strain mean less accuracy (I'll explain why), so the value of strain shouldn't be too small. I recommend the value of 0.5% or 1%. You may also (if you want) perform convergence test of elastic constant vs value of strain. To my experience, values in the range of 0.3%--1% give good results. Problem 2. How to choose the components of strain tensor? That's simple. If you want to calculate C11, the strain tensor eij should be e 0 0 0 0 0 0 0 0 Where e is the value of strain (0.01 typically) Such tensor can also be used for computing C12 and C13. For C22 it should be 0 0 0 0 e 0 0 0 0 And the same for C33. As for shear elastic constants (C44, C55 and C66) it has nondiagonal elements. For example for C66 it will be: 0 e 0 0 0 0 0 0 0 Then to calculate elastic constant you have to deform your lattice tensor (containing three lattice vectors) like this: aij = a0ij(1+eij) And then run the calculation with relaxation of atomic positions (VariableCell false). SIESTA gives the values of stress tensor. For example, you want to calculate C66. Only e12 is nonzero, so the expression for 12 will be: 12 = C1212e12 = C66e then C66 = 12/e This is in the ideal case assuming that the initial lattice was fully relaxed and the stress tensor was completely zero for relaxed cell. But it is not the case, yes? Problem 2. I've relaxed the cell but the stress tensor is not zero. Does it influence the results? Yes, but not much. You may improve the results if you provide “zero stress correction”. For example, for C66 elastic constant: C66 = ( 12- 012)/e, Where 0ij is the stress tensor of the relaxed cell. It should be zero but it doesn't. This correction will work only if 012 0 and e
How to calculate elastic constants with SIESTA ? (This is taken from a blog : (http://dft-blog.natanzon.eu/2008/03/how-to-calculate-elastic-constants-with.html)) SIESTA calculates stress tensor and you know stress/strain relationship from the textbooks. You have to relax your system properly to have your stress tensor be close to zero. Then manually deform lattice vectors in selected directions and obtain the value of stress. For example, if you want to calculate C11, you have to deform lattice vector a (I suppose it is (a,0,0)) to a(1+e), where e is your value of strain. Then you make the calculation with relaxing atomic positions but NOT lattice vectors (VariableCell false) and obtain the value of stress tensor _ij and find C11: C11 = 11/e” This gives you the main idea. Here I want to describe this procedure more properly and focus on how to overcome some common problems. Problem 1. Which value of strain to choose? It depends on the material. You have to be sure that you're in the linear regime and Hook's law works, so the smaller the strain the better chance that you'll not be mistaken. BUT! Small values of strain mean less accuracy (I'll explain why), so the value of strain shouldn't be too small. I recommend the value of 0.5% or 1%. You may also (if you want) perform convergence test of elastic constant vs value of strain. To my experience, values in the range of 0.3%--1% give good results. Problem 2. How to choose the components of strain tensor? That's simple. If you want to calculate C11, the strain tensor eij should be e 0 0 0 0 0 0 0 0 Where e is the value of strain (0.01 typically) Such tensor can also be used for computing C12 and C13. For C22 it should be 0 0 0 0 e 0 0 0 0 And the same for C33. As for shear elastic constants (C44, C55 and C66) it has nondiagonal elements. For example for C66 it will be: 0 e 0 0 0 0 0 0 0 Then to calculate elastic constant you have to deform your lattice tensor (containing three lattice vectors) like this: aij = a0ij(1+eij) And then run the calculation with relaxation of atomic positions (VariableCell false). SIESTA gives the values of stress tensor. For example, you want to calculate C66. Only e12 is nonzero, so the expression for 12 will be: 12 = C1212e12 = C66e then C66 = 12/e This is in the ideal case assuming that the initial lattice was fully relaxed and the stress tensor was completely zero for relaxed cell. But it is not the case, yes? Problem 2. I've relaxed the cell but the stress tensor is not zero. Does it influence the results? Yes, but not much. You may improve the results if you provide “zero stress correction”. For example, for C66 elastic constant: C66 = ( 12- 012)/e, Where 0ij is the stress tensor of the relaxed cell. It should be zero but it doesn't. This correction will work only if 012 0 and e