Reactivation and automation of enhanced Force routines (+ refactoring?)
Aaron Klüppelberg implemented costly, but in return highly accurate and improved force routines into the Fleur code (on several levels). These implementations happened before the Gitlab page was set up and lie around as deprecated files in the Forces folder. In a modified Fleur26 directory I received from @gerhorst, these routines still exist and seem to work properly. There also exists an automated Python script to calculate the phonon dispersion from a single unperturbed, non-supercell inpgen input file via the Phon code, that even automatically threw calculations on the old IFF cluster.
The goal is to re-implement the routines and modify the related Python automation script to work with the current version of Fleur (especially the modified input) and the iffslurm cluster set up since then.
EDIT: The automation will be changed and made more sophisticated to be executed as an Aiida workflow.
Why is this feature needed?
Automatically calculating the phonon dispersion of a crystal from scratch in a finite displacement approach (with literally the only effort being the writing of an input file) is pretty, pretty neat and something @gerhorst and I could use very well to benchmark juPhon calculations using DFPT against FD phonons.
I already have a list of steps that need to be taken in order to fully reintroduce Aaron's features.
- py: Reactivate the automation script to work on a local machine.
- v26*: Test the reproducibility of Aaron's results with his input in Fleur v26*.
- py: Modify FDphonons.py to automatically put jobs on the iffslurm (with a new queue subscript).
- py32: Adjust the writing of a supercell input file to Fleur v32.
- py32: Account for the fact that fixed-format inp --> inp.xml since v26.
- py32: Adjust the amount of Fleur calls in the script (no separate one needed for stden).
- py32: Adjust the way convergence is checked; we now stop automatically when we reach it.
- py32: Check, whether we still print out forces exactly the same (for the greps).
- py32: Adapt the script for non-cubic crystal setups.
- py32: Ensure, that the force calculation is only done for one iteration (costly!).
- force32: Identify all points in the code Aaron modified (according to README.FORCE and the keywords force, f_level, pulay).
- force32: Find out who put the deprecated files onto the Git etc.
- force32: Open branch à la "better forces" or something.
- force32: Put all necessary files into the Fleur Gitlab (if not already there and deprecated).
- force32: Also add all necessary uses and code snippets to the correct places.
- force32: Re-implement and correctly link all force corrections behind a hard-coded .FALSE. and modernize the respective code sections.
- force32: Introduce force level switch to the inp.xml.
- force32: Test the reproducibility of Aaron's results in Fleur v32.
- force33: Find the mpi problem that makes the force run get stuck in the second iteration for levels .GE. 1.
- Aiida: Adapt the workflow of the automation script into an Aiida workflow.
- misc: Refactor the force section and comment the code comprehensively.
- misc: Make the FDphonons.py output more thorough and add units etc. to the plots.
- misc: Use up-to-date version of Phon.
Here is the aforementioned script. It is built for v26 and therefore not using any of the files we use at the moment, but the concept should be clear.