3
\brief Routines for determining the rotational invariance of gradients.
7
#include <libipv1/ip_lib.h>
10
#include <libint/libint.h>
17
namespace psi { namespace CINTS {
21
double cross[] = {0.0, 0.0, 0.0} ;
24
for(atom=0; atom<Molecule.num_atoms; atom++) {
25
cross[0] += (Molecule.centers[atom].y*Grad[atom][2] - Molecule.centers[atom].z*Grad[atom][1]);
26
cross[1] += (Molecule.centers[atom].z*Grad[atom][0] - Molecule.centers[atom].x*Grad[atom][2]);
27
cross[2] += (Molecule.centers[atom].x*Grad[atom][1] - Molecule.centers[atom].y*Grad[atom][0]);
30
mod_cross = sqrt(cross[0]*cross[0] + cross[1]*cross[1] + cross[2]*cross[2]);
32
if (mod_cross > ROT_INV_TOLER) {
33
printf(" Rotational invariance of the energy derivative is violated!\n\n");
34
fprintf(outfile," Rotational invariance of the energy derivative is violated!\n");
35
fprintf(outfile," |X cross Grad| = %15.12lf\n\n",mod_cross);
39
fprintf(outfile," Rotational invariance condition satisfied.\n");
40
fprintf(outfile," |X cross Grad| = %15.12lf (it is the accuracy of the computed forces)\n",mod_cross);
41
fprintf(outfile," So long..\n\n");