I am conducting a relaxation calculation on a mono-layer of MoS2 with a 3x3x1 super-cell, where one Molybdenum (Mo) atom is substituted with a Palladium (Pd) atom defect. However, the calculation is not converging. What could be the possible reasons for the this infinite run time? Will there be any point in waiting further for this calculation to complete? Here are the input and output file

Input file-input.in

output file-output.out

EDIT:I have updated the output file with current running status after @Abdul Muhaymin's answer and it is to noted that now the 'energy error' and 'gradient error' is increasing.

  • $\begingroup$ Did you try a vc-relax run as well? $\endgroup$
    – manju9
    Apr 18 at 9:13
  • $\begingroup$ @manju9 i haven't tried VC relax for this Pd doped structure ,But i have done vc relax on undoped MoS2 structure(i have only replaced one Mo with a Pd in that VC relaxed structure) $\endgroup$ Apr 18 at 9:22
  • 1
    $\begingroup$ Just a thought: make sure your ecutwfc and kpt-grids are converged such that error in forces is less than forc_conv_thr. If not, errors in forces at each geometry step can be bigger than the convergence threshold and it will never converge. This isn't necessarily what is wrong here, but I have had the problem I mention before. Converging total energy isn't necessarily good enough. Cheers! $\endgroup$ Apr 19 at 16:57
  • $\begingroup$ @Tyler Sterling thank you for the guidance. $\endgroup$ Apr 20 at 6:48

2 Answers 2


I agree that the calculation will likely converge eventually and there is likely nothing fundamentally wrong with the calculation itself. However, this is a defect calculation, and it is worthwhile to include a few pointers to the context of complexity of defect calculations.

The introduction of the defect complicates the potential energy surface for the relaxation (as a function of atomic coordinates), and a true ground state may not be immediately found. For the simplest example, if a defect is not iso-electronic to its host, as I think you have here, it will effectively donate extra holes or electrons to the host. These can be either localized into a polaron with lattice distortions, or delocalized. So immediately there are two possible minima for the calculation, and it is far from clear which one is the global ground state.

For another example of defects complicating relaxations, consider Jahn-Teller distortions on a 2D lattice, such as in LiMnO2 or LiNiO2. There will likely be a ground state where the distortions all align - but if the relaxation starts with no distortions, or with randomly initialized directions, it will converge slowly as the potential energy surface will have many local minima and saddle points. It may not find the ground state at all and finish (slowly and painfully) in a local minimum, possibly after having (slowly and painfully) sampled other local minima. Sampling a local minimum can look like what you have: a calculation looks like it has almost converged, but then each iteration starts to have bigger energy differences again.

So how do you make it better?

  • analyze the electronic structure and geometry during relaxation. Does it look like something new is changing?
  • check out more robust routines for finding the ground states of point defects, such as ShakeNBreak and doped. Both of these are python codes that will query DFT engines and will work with your QuantumEspresso.
  • $\begingroup$ your explanation makes sense ,thank you. $\endgroup$ Apr 19 at 9:00

It will stop, hopefully. Since you set a tighter convergence criteria for the forc_conv_thr than the default value, it is just taking more time. If you check the accuracy trend over time, you can notice that the energy is already converged. Now it is trying to converge the force and looks like you need to wait for 3-4 more bfgs steps to get your desired forc_conv_thr = 1.0d-4.

-bash-4.2$ grep 'Energy error' pd-dope-relax.out
     Energy error            =      0.0E+00
     Energy error            =      6.0E-03
     Energy error            =      4.3E-03
     Energy error            =      4.3E-03
     Energy error            =      3.4E-03
     Energy error            =      8.1E-04
     Energy error            =      2.5E-04
     Energy error            =      9.5E-05
     Energy error            =      5.2E-06
     Energy error            =      5.6E-06
     Energy error            =      2.3E-06
     Energy error            =      9.3E-07
     Energy error            =      7.1E-07
     Energy error            =      2.9E-07
     Energy error            =      8.9E-08
-bash-4.2$ grep 'Gradient error' pd-dope-relax.out
     Gradient error          =      2.3E-02
     Gradient error          =      1.9E-02
     Gradient error          =      1.6E-02
     Gradient error          =      1.2E-02
     Gradient error          =      6.1E-03
     Gradient error          =      5.1E-03
     Gradient error          =      2.6E-03
     Gradient error          =      4.9E-04
     Gradient error          =      4.9E-04
     Gradient error          =      3.1E-04
     Gradient error          =      2.9E-04
     Gradient error          =      2.4E-04
     Gradient error          =      1.2E-04
     Gradient error          =      1.4E-04
     Gradient error          =      1.7E-04
  • $\begingroup$ thank you for your response.I will wait hoping the calculation to complete. $\endgroup$ Apr 18 at 9:51
  • $\begingroup$ i have updated the output file with current running status , and it seem that the energy error and gradient error values are increasing now $\endgroup$ Apr 19 at 5:12

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .