You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
C
40 lines
1.3 KiB
C
#include <math.h>
|
|
#include <stdlib.h>
|
|
|
|
/*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;
|
|
}
|