I am a new user of GULP. I want to calculate the vibrational eigenvector of a system by perfroming lattice dynamics. The system contains around 50,000 atoms and the force field is OPLS-AA. I have successfully converted the force field parameters from Lammps. However, When I run GULP, I encountered the error message: ERROR : memory allocation failed. How can I solve this problem? Thanks a lot.
Long answer: Calculating the phonons requires diagonalising the dynamical matrix which has dimensions of (3N)^2 where N is the number of atoms. For 50,000 atoms this means a gamma point only calculation (where the dynamical matrix is real) would require a computer with just short of 0.2 TB of memory. If you were trying phonon dispersion where the matrix is complex then double this & computing eigenvectors would increase even further. To allow for all possibilities you should find a computer with about 1 TB of memory. So if you tried running this on your laptop then you can understand why you ran of memory!
General: Beyond the memory issue, you should also remember that diagonalising a matrix scales as the third power of the system size & so this is a very expensive calculation, which is why you don’t find people computing the phonons for 50,000 atoms in the literature as a rule. If your system is a supercell then the smarter approach is to run the calculation for the smallest possible cell and then integrate across the Brillouin zone. This provides the same (and arguably more) information and costs dramatically less if the unit cell is small.
Thanks for your reply.
My server has a hard disk with about 5.5 TB of memory. And I have installed GULP in that hard disk and tried my calculations in the same hard disk. However, I still encountered this error message, even when I want to output the phonon density of states. Honestly, I have a little understanding about phonon. I don’t konw how to set the GULP’s libary file and gin file to calculate the gamma point. Could you please give me some examples about this calculation? I can not find examples in the example file of GULP. Thanks a lot.
It’s important to note that the hard disk is not where the memory of the computer lies. The hard disk is for slow data access & long-term storage - memory is for processing while jobs run. So your computer’s memory is typically of the order of GB not TB.
Example 5 shows how to compute phonons in GULP. If you want the gamma point then remove the dispersion and any k points.
How can I modify the commands in Example 5 to remove the dispersion and any k points and obtain the vibrational eigenvector?
please forgive my stupid questions.
Thanks again. I deleted the k points and dispersion options. And I found the supercomputer in my school could perform the calculations. And an example of my system has been running for 2 hours on a single core. Maybe I need to compute in parallel to reduce the running time.
Diagonalising a matrix of size 150,000 is a monster calculation in most peoples books and some might argue about numerical stability issues of such large calculations. Definitely unlikely to complete in a reasonable timeframe on a single core (might be pushing the meantime between node failure on an average supercomputer). You can check the scaling for Scalapack (which does the diagonalisation in parallel) on your system but should scale up to ~1,000 cores for this matrix size in this part of the calculation.
Regards,
Julian
PS Make sure you linked the optimised maths libraries under MPI when compiling GULP & run some smaller scaling tests first.