| 1697 | return summed; |
| 1698 | } |
| 1699 | void getC(double* C, double* ws, double* rw2, double * gns, double* summed, double rCut, int lMax, int rsize, int gnsize, int nCenters, int nNeighbours, double eta, double* weights) |
| 1700 | { |
| 1701 | // Initialize to zero |
| 1702 | memset(C, 0.0, 2*(lMax+1)*(lMax+1)*gnsize*sizeof(double)); |
| 1703 | |
| 1704 | for (int n = 0; n < gnsize; n++) { |
| 1705 | // For atoms at the center we add a precalculated constant value |
| 1706 | // because the numerical integration cannot handle them |
| 1707 | if (nCenters > 0) { |
| 1708 | double weight = weights[nNeighbours]; |
| 1709 | for (int iCenter = 0; iCenter < nCenters; ++iCenter) { |
| 1710 | for (int rw = 0; rw < rsize; rw++) { |
| 1711 | C[2*(lMax+1)*(lMax+1)*n] += weight * 0.5*0.564189583547756*rw2[rw]*ws[rw]*gns[rsize*n + rw]*exp(-eta*rw2[rw]); |
| 1712 | } |
| 1713 | } |
| 1714 | } |
| 1715 | for (int l = 0; l < lMax+1; l++) { |
| 1716 | for (int m = 0; m < l+1; m++) { |
| 1717 | for (int rw = 0; rw < rsize; rw++) { |
| 1718 | C[2*(lMax+1)*(lMax+1)*n + l*2*(lMax+1) + 2*m ] += rw2[rw]*ws[rw]*gns[rsize*n + rw]*summed[2*(lMax+1)*l*rsize + 2*m*rsize + 2*rw ]; // Re |
| 1719 | C[2*(lMax+1)*(lMax+1)*n + l*2*(lMax+1) + 2*m + 1] += rw2[rw]*ws[rw]*gns[rsize*n + rw]*summed[2*(lMax+1)*l*rsize + 2*m*rsize + 2*rw + 1]; //Im |
| 1720 | } |
| 1721 | } |
| 1722 | } |
| 1723 | } |
| 1724 | } |
| 1725 | |
| 1726 | void accumC(double* Cs, double* C, int lMax, int nMax, int typeI, int i, int nCoeffs) |
| 1727 | { |