It seems to be converged. I don't think you will ever get the exact asymptotic behaviour but I assume the criteria for convergence is around 1 meV in total energy per 1 eV in ENCUT. I plotted the convergence with respect to ENCUT from your data and obtained this following plot. Personally, I would choose 900 eV or 1000 eV as the converged ENCUT. I think after 1300-1400 eV, the accuracy doesn't improve due to diminishing returns or the numerical error gets much larger. But this is typical for any set of pseudopotentials. There is some high energy cutoff after which the accuracy doesn't improve and instead gets worse.

The python code I used is:
import matplotlib.pyplot as plt cutoffs = [] convergence_values = [] with open('data.txt', 'r') as file: lines = file.readlines() for i in range(1, len(lines)): prev_cutoff, prev_energy = map(float, lines[i-1].split()) cutoff, energy = map(float, lines[i].split()) convergence = abs((energy - prev_energy) / (cutoff - prev_cutoff)) * 1000 cutoffs.append(cutoff) convergence_values.append(convergence) plt.plot(cutoffs, convergence_values, marker='o', markersize=10, markerfacecolor='blue', linestyle=':', linewidth=2, color='black') plt.xlabel('ENCUT (eV)', fontsize=20) plt.ylabel(r'$\Delta E\,$ (meV)', fontsize=20) plt.title('Kinetic energy cutoff convergence test', fontsize=20) plt.xticks(fontsize=12) plt.yticks(fontsize=12) plt.grid(False) plt.show()