I was using your ATAT package to calculate the force constants with "fitfc" command for a system with 168 atoms, and I did all the process according to the manual. I have only considered the equilibrium case of vol_0 and 26 perturbations were generated. When I came to the fitting step the screen output only shows the following two lines:
Reading…
vol_0
and kept for 24 hours. However when I tested the fitting with primitive cell of Fcc Cu, results came just in seconds, so I was just wondering how long does it normally take for fitting 26 perturbations with 168 atoms each.
Btw, I was using the bash shell for the ATAT package and when I was testing the fitting process with primitive Cu cell, the screen output was like
Reading…
vol_0
p+0.1_6.5_0
Unable to read energy file.
however, I still have the output files for ‘vol_0/fc.out’, ‘vol_0/fitfc.log’, ‘vol_0/svib_ht’ and ‘vol_0/vdos.out’. I have attached them to this thread, could someone please help me checking the format of these files? and also I am concerning about the screen output ‘Unable to read energy file’.
The message "Unable to read energy file" is actually just a warning. It’s just that if there were vol_*/energy files they would be used to calculate the bulk modulus if you used the quasiharmonic approx. Here you have only one volume (harmonic approx) so the only effect would be the shift the free energy by the T=0 energy. Without energy file, the code reports the difference in free energy at T relative to T=0.
Now to your main question. Have recently considerably improved the speed of the fitfc code - please download the "beta version of the latest update". Also, add optimization in the make file. See line
CXXFLAGS=$(PATCHCXXFLAGS)
and change to
CXXFLAGS=$(PATCHCXXFLAGS) -O3
You can also add -DATATUSELAPACK
and the approxiate location of the lapack library on your system. On mine it is:
(please ask your local sys admin!) This is a bit more difficult to get to work but is worth it.
In your example, the code seems stuck at the level of even reading the files, which is unusual…
Perhaps you specified a very large cutoff for -fr=… try reducing it to nearest neighbor as a first try.
If it still gets stuck, send me a tar file of all your file (minus vasp files!!)
Thank you for your reply. That making sense for "Unable to read energy file".
Coming back to the major problem, the nearest nb distance in the system should be 3.03, and my previous setting was
fitfc -nrr -er=6.5 -ns=1 -ms=0 -dr=0.1
after calculated the total energy of the perturbations, I used ‘runstruct_vasp -ex’ commond to get the vasp information. And I guess the function ‘runstruct_vasp -ex’ equals to the ‘extract_vasp’ right?
then I tried the fitting with
fitfc -f -fr=3.1
and got…
Reading…
vol_0
I have also tried to use -fr=0.1, but seems no help. So I attached the .tar file including all outputs except for vasp ones with this reply, hoping that I did not make silly mistakes…
The issue is due to the fact that the cell is very long along one dimension but not the others so my algorithm wastes time enumerating short lattice vectors before getting to the long one. I am working on a new algorithm to fix this… sorry it takes a bit of time.
Ok it’s fixed now. It should be faster as of version 3.16 - see "Beta version of the latest update" on the ATAT web site.
BTW, you will notice a problem completely unrelated to your initial issue:
Your structure is actually mechanically unstable. To find the unstable modes, try:
The directory vol_0/p_uns_*
will contain the unstable mode. You should re-relax this superstructure, find a minimum and then redo your phonon calculations (sorry!) using the new relaxed structure as your starting str.out and str_relax.out. (don’t try to combine the old and new phonon results)
Sure, one thing that I have just noticed is that although the phonon calculation was aborted due to "Unstable modes found.", the force constant was still calculated. I was just wondering that if the force constants are reliable or I need to redo the calculation as instructed, given that I only need the results for force constants between different type of atoms.
I have got the valid force constant file, which is "fc.out" file. However, I wish to know which two specific atoms are each listed bond connecting with, so can we also put such information in the "fc.out" file? (i.e., the atom ID of the two atoms between which the listed bond exists. Atom ID can be the position of the atom in the "str_relax.out" file, from which we created a set of perturbations.)
The idea is actually simple. As we can calculate the bond length between two atoms, we know the position of the two atoms in the supercell. Therefore can we also export the information of the atomic positions along with the bond length (maybe in another file) ?
You can easily edit the print_fc routine in the fitfc.c++ file to output what you want.
The end points are the i_sg->pair(0) and i_sg->pair(1) variables.