Third-order force constants exactly null

Dear all,
I run a simulation at 10K with a 5x5x5 supercell of bcc Si (250 atoms). I then calculate the 2nd and 3rd order force constants (IFC2, IFC3). I use the IFC2 with phonopy to calculate the phonon dispersion and this latter overlaps with the one obtained with phonopy and finite displacements. However, the IFC3 are all exactly null. Do you have any hint on why this is happening? Even if the cutoffs were wrong or the number of snapshots were not enough, I would not expect that all the elements of the IFC3 tensor are exactly null. The structure files and the python scripts that I use to calculate the IFC2 and IFC3 are in the archive at this link (I can’t attach files here)

https://drive.google.com/file/d/1U7pfx03ESypoBWrudBCIOE7KMwVS7SIT/view?usp=sharing

The displacements and the forces contained in the ndhiPhive_dispfor.xyz file are in Ang and eV/Ang; atomic positions in the other xyz files are in Ang. Still, I don’t think it is an issue with the units because the band dispersion is correct.

Thanks a lot in advance for your kind help

Antonio

What do you mean they are exactly null?
I ran you script (not with all training structures, and slightly shorter cutoffs to make it go faster) and I got nonzero fc3, from e.g. `print(fcs[(0,0,0)]). What is the printout from your optimizer? Any warnings when fitting?

One thing to note is that your displacements are on aveage 0.005Å which is very small for extracting third-order FCs, but it shouldnt make all third-order fcs zero.

I ran the script 2_construct_fcp2.py interactively and I saw that the fc3s are not null indeed. Then I realized that, if I read the force constant file hiphive.fcp I get exactly null values. I don’t know why this happens. So, in order to have a correct fc3.hdf5 file with non-null fc3s, after that I obtain the fc3s, I need to write them to fc3.hdf5 immediately, that is, without involving the writing/reading of the .fcp file. Strangely, this does not happen to me when I run the Ni tutorial.

I can’t reproduce your error. Can you supply a script that shows more clearly what goes wrong for you?