#include #include /*normalizes anisotropy axes*/ void axes(double *ap,double *scf,int N) { double sclpdt, r, eps = 1.E-6; int i,j,k; for (k = 0; k < N; k++) { r = sqrt(ap[9*k]*ap[9*k]+ap[9*k+1]*ap[9*k+1]+ap[9*k+2]*ap[9*k+2]); ap[9*k] /= r; ap[9*k+1] /= r; ap[9*k+2] /= r; sclpdt = ap[9*k]*ap[9*k+3]+ap[9*k+1]*ap[9*k+4]+ap[9*k+2]*ap[9*k+5]; if (sclpdt > eps) { printf("Non orthogonal axes"); exit; } else { r = sqrt(ap[9*k+3]*ap[9*k+3]+ap[9*k+4]*ap[9*k+4]+ap[9*k+5]*ap[9*k+5]); ap[9*k+3] /= r; ap[9*k+4] /= r; ap[9*k+5] /= r; ap[9*k+6] = ap[9*k+1]*ap[9*k+5]-ap[9*k+2]*ap[9*k+4]; ap[9*k+7] = ap[9*k+2]*ap[9*k+3]-ap[9*k]*ap[9*k+5]; ap[9*k+8] = ap[9*k]*ap[9*k+4]-ap[9*k+1]*ap[9*k+3]; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (scf[3*k+j] == 0.) scf[3*k+j] = 1.; ap[9*k+3*j+i] /= scf[3*k+j]; } } } } return; }