IR frequencies and normal modes¶
The Hessian that is needed can be calculated numerically or analytically. This can be set in the AMS part of the input.
$ADFBIN/ams <<eor NormalModes Hessian [Auto | Analytical | Numerical] End ... eor
The analytical second derivatives (Hessian) implementation in ADF is based on Ref.   . The analytical Hessian is as accurate as the numerical Hessian for the same integration accuracy, but can be up to 3 to 5 times quicker to compute, depending on the molecule, integration grid parameters, and choice of basis set. Using the analytical Hessian AMS will calculate the vibrational frequencies and normal modes.
In AMS2020.103 a bug was fixed in ADF regarding analytical frequencies calculations of spin polarized molecules using PBEc.
Bug PBEc The bug for analytical frequencies calculations of spin-polarized molecules using PBEc affects calculations with the exchange-correlation functionals PBE, OPBE, RPBE, revPBE, and S12g. This bug was present in all ADF releases starting from ADF2006, and was fixed in AMS2020.103. Analytical frequencies using LibXC are not affected. Workaround for older versions is to use numerical frequencies. For ADF2019.3 the bug is fixed in ADF2019.307.
Calculating the analytical Hessian requires the solution of the Coupled Perturbed Kohn-Sham (CPKS) equations, which is an iterative process. This part of the process is of order 3 x number of atoms, and is generally the main bottle neck in calculating the frequencies. The immediate result of the solution of the CPKS equations is the U1 matrix, the components of which are closely related to the derivatives of the MO coefficients. One of the adjustable parameters in the input of an analytical frequencies calculation can be used to control the accuracy of the U1 matrix components.
One disadvantage in calculating analytical Hessian is that the range of exchange-correlation functionals is limited. This is because derivative formulas have to be derived for each exchange-correlation functional in ADF, which is not an straight forward task. Here are the currently available functionals:
LDA: XONLY, VWN, STOLL, PW92
Exchange GGA: Becke88, OPTx, PBEx, rPBEx, revPBEx, S12g
Correlation GGA: LYP, Perdew86, PBEc
XC GGA shortcuts: BP86, PBE, RPBE, revPBE, BLYP, OLYP, OPBE
Any functional not mentioned above is not implemented, including PW91 and Hartree-Fock.
A note of caution: For accurate frequencies it is especially important to also have an accurately optimized geometry. During a geometry optimization the integration accuracy is set by default to “Normal”, and so the resulting frequencies will also have this level of integration accuracy while it may be desirable to have frequencies computed with a higher accuracy. One might consider using Good NumericalQuality (or BeckeGrid quality) and set the convergence criteria for the geometry optimization tighter.
AnalyticalFreq B1Size float B1Thresh float Check_CPKS_From_Iteration integer Debug string Hessian [reflect | average] Max_CPKS_Iterations integer Print string PrintNormalModeAnalysis Yes/No U1_Accuracy float End
Type: Block Description: Define options for analytical frequencies.
Type: Float Description: Sparse grid max memory size
Type: Float Default value: 1e-10 Description: MMGF_DENB1 and MMGF_GRADB1 cutoff values
Type: Integer Default value: 1 Description: Solution of the CPKS equations is an iterative process, and convergence is achieved if the difference between U1 matrix of successive iterations falls below a certain threshold. This key can be used to determine at which iteration the checking should start taking place.
Type: String Description: For debugging purposes. Options: fit, hessian, b1, densities, numbers, symmetry, all.
Type: Multiple Choice Default value: reflect Options: [reflect, average] Description: Whether the final Hessian is obtained by reflecting or averaging?
Type: Integer Default value: 20 Description: Calculating the analytical frequencies requires the solution of the Coupled Perturbed Kohn-Sham (CPKS) equations, which is an iterative process. If convergence is not achieved (a warning will be printed in the output if this is the case) then this subkey can be used to increase the number of iterations, although convergence is not guaranteed. The user required accuracy of the U1 matrix, as well as the ADF integration accuracy, can effect the rates of convergence. Type: String Description: Primarily for debugging purposes. Options: eigs, u1, parts. Choosing EIGS results in the print out of the MO eigenvectors, while U1 results in the print out of the U1 matrices. Except for small molecules this will result in a lot of data being output, and so they are not recommended. Choosing PARTS results in the print out of various sub-hessians that add up to give the final analytical hessian.
Type: Bool Default value: No Description: Request ADF to print analysis of the normal modes independently of AMS.
Type: Float Default value: 5.0 Description: Solution of the CPKS equations is an iterative process, and convergence is achieved if the difference between U1 matrix of successive iterations falls below a certain threshold. This subkey can be used to set the threshold. The accuracy of the U1 will be 10**(-x). So, the higher the number the more accurate the U1 will be. While this parameter effects the accuracy of the frequencies, other factors also effect the accuracy of the frequencies, especially the ADF integration accuracy.
|||A. Bérces, R. M. Dickson, L. Fan, H. Jacobsen, D. Swerhone and T. Ziegler, An implementation of the coupled perturbed Kohn-Sham equations: perturbation due to nuclear displacements, Computer Physics Communications 100, 247 (1997)|
|||H. Jacobsen, A. Bérces, D. Swerhone and T. Ziegler, Analytic second derivatives of molecular energies: a density functional implementation, Computer Physics Communications 100, 263 (1997)|
|||S.K. Wolff, Analytical second derivatives in the Amsterdam density functional package, International Journal of Quantum Chemistry 104, 645 (2005)|
For Raman calculations by default AORESPONSE will be used to calculate the frequency-dependent polarizability. To use RESPONSE instead of AORESPONSE include the RESPONSE block key in the Engine ADF part of the input:
Engine ADF Response End EndEngine