| 1566 | return make_pair(iNeighbour, iCenter); |
| 1567 | } |
| 1568 | double* getFlir(double* oO4arri,double* ri, double* minExp, double* pluExp, int icount, int rsize, int lMax) |
| 1569 | { |
| 1570 | double* Flir = (double*) malloc(sd*(lMax+1)*icount*rsize); |
| 1571 | //l=0 |
| 1572 | for (int i = 0; i < icount; i++) { |
| 1573 | for (int w = 0; w < rsize; w++) { |
| 1574 | Flir[rsize*i + w] = oO4arri[rsize*i + w]*(minExp[rsize*i + w] - pluExp[rsize*i + w]); |
| 1575 | } |
| 1576 | } |
| 1577 | //l=1 |
| 1578 | if (lMax>0) { |
| 1579 | for (int i = 0; i < icount; i++) { |
| 1580 | for (int w = 0; w < rsize; w++) { |
| 1581 | Flir[rsize*icount + rsize*i + w] = oO4arri[rsize*i + w]*(minExp[rsize*i + w] + pluExp[rsize*i + w] - 2*Flir[rsize*i + w]); |
| 1582 | } |
| 1583 | } |
| 1584 | } |
| 1585 | //l>1 |
| 1586 | if (lMax>1) { |
| 1587 | for (int l = 2; l < lMax+1; l++){ |
| 1588 | for (int i = 0; i < icount; i++){ |
| 1589 | for (int w = 0; w < rsize; w++){ |
| 1590 | Flir[l*rsize*icount+rsize*i+w] = Flir[(l-2)*rsize*icount+rsize*i+w] - oO4arri[rsize*i+w]*(4*l-2)*Flir[(l-1)*rsize*icount+rsize*i+w] ; |
| 1591 | // Very Important!!! |
| 1592 | if (Flir[l*rsize*icount+rsize*i+w] < 0) { |
| 1593 | Flir[l*rsize*icount+rsize*i+w] = 0.0; |
| 1594 | } |
| 1595 | } |
| 1596 | } |
| 1597 | } |
| 1598 | } |
| 1599 | |
| 1600 | return Flir; |
| 1601 | } |
| 1602 | double legendre_poly(int l, int m, double x) |
| 1603 | { |
| 1604 | double fact,pll,pmm,pmmp1,somx2; |