Applying strain and calculate properties

Dear Gulp users,

I am looking to apply strain (1% or 2% for example) on my structure and then calculate properties on the strained structure ( elastic constants, frequency etc) to compare them with the similar quantities of the unstrained structure. To achieve that in GULP, I am having some questions and it will be really helpful to get any feedback on those:

  1. What is the best approach to apply strain in GULP? I was thinking to use the “strain” keyword along with the “cstrain” option to define the strain direction and magnitude. Is this the correct way? I am assuming I still need to use “optimize” and “conp” keywords to perform optimization as well?

  2. For the strained structure achieved in section1 (above), is the procedure to obtain the properties ( elastic constants, frequencies etc) same as for the unstrained structure?

  3. Can the calculations of both unstrained and strained structures be achieved in a single GULP script by putting them one after the other?

Many thanks in advance.


Dear Shoieb,

Here are answers to your questions:

  1. If you want to add a pre-defined strain then the only way to do this through the input is, as you say, to add the keyword “strain” and “cstrain” as an option to specify what strains you want to apply. You would still need to optimise the internal coordinates to get the relaxed structure and so you need “opti” and “conv” (NB if you specify a constant pressure relaxation then you will obviously get rid of the strain you applied in the first place unless you have jumped into the basin for a different structure, such as a polymorph or extended defect version of the structure).
  2. Once the structure above is optimised then you can get the properties as per usual based on the infinitesimal strain derivatives with respect to this new structure.
  3. You can include both strained and unstrained structures in the same input file for GULP. For the unstrained structures the values for cstrain will all be zero (which is the default).

Hope that helps,


1 Like

Thank you so much Julian for your kind response, they are really insightful and will be of great help to me. Just to elaborate a bit on the answer to the 2nd question:

  1. Let’s say, the strained structure is optimized as you described, and then to get properties (e.x: elastic constants) which strain derivatives would be more accurate? I know you mentioned infinitesimal strain derivative, but shouldn’t rather the finite strain derivatives be used (“fsprop”) as the structure will be at a “finite strain” state?

  2. If the applied strain is not small (>4% for example), is there any limitation on the method (“cstrain”) for the strain being too large? In other words, is there any recommended maximum limit on the applied strain magnitude on the structure this way to get accurate results?

Thanks again for your help.


No worries - here are the elaborations:

  1. The difference between evaluating with finite strain vs infinitesimal actually has quite a lot of background and we are currently preparing a paper on this topic (which will be Hamad et al…).
    It is important to note that all codes that we are aware of only evaluate the infinitesimal strain derivatives, since are the ones you usually want for properties, and so the finite strain derivatives are a new feature. The latter are important if you want to optimise using finite strain since it leads to consistent forces and Hessians, but since elastic constants are usually measured for an equilibrium situation then the infinitesimal properties are the relevant quantity. Of course in reality there is no reference cell for strains to be taken with respect to, and so the finite strain definition wouldn’t make sense in the lab, though there would also have to be mechanism to apply the strain, such as an external pressure, which is another route that can be used.
  2. There is no formal limit on the finite strain formalism in the sense that it doesn’t truncate the strain terms at a given order as in the infinitesimal approach (which is fine if the strain is close to zero). Any limitation comes from whether it is sensible to apply that amount of strain to a material, especially in a single step. A large value might take you to a region where the system would be in a different structure (i.e. beyond a phase transition) and if the strain had been applied gradually would have passed through slip or other deformation mechanisms. Therefore accuracy, as always, depends on what the users intention was in applying the strain.



Hi Julian,

Thanks again for your kind reply. It looks like I asked questions that require a detailed conversation. Let me see if I got the correct concept:

  1. If the strain is close to zero, we would expect reasonable accuracy by using “infinitesimal strain derivative” with “cstrain”. Is that correct?

2)For applying a large amount of strain( depending on the application), we are better off using “finite strain” and should consider incremental steps. What would be the best way to apply strain in incremental steps using GULP?

Many thanks for the insightful comments.


Hi Shoieb

  1. Accuracy depends on the force field and so is hard to predict. At equilibrium when the strain is zero then the infinitesimal strain is the right formalism to compute the elastic constants.
  2. This depends on what you are looking for. If you want to map the pathway under applied strain then you need to take small steps. If you want to simulate the effect of rapid shock then you can just applied the strain from the start. The application of gradual strain will be discussed in the paper I mentioned and so I’ll let you know when this is available as a pre-print.



Thanks Julian. Please do let me know when the paper is out, I am really curious to know about the procedure of applying finite strain in gradual steps using GULP.