================================================================
| 106 | } |
| 107 | //================================================================ |
| 108 | void getCfactorsD(double* preCoef, double* prCofDX, double* prCofDY, double* prCofDZ, int Asize, double* x,double* x2, double* x4, double* x6, double* x8, double* x10,double* x12,double* x14,double* x16,double* x18, double* y,double* y2, double* y4, double* y6, double* y8, double* y10,double* y12,double* y14,double* y16,double* y18, double* z, double* z2, double* z4, double* z6, double* z8, double* z10,double* z12,double* z14,double* z16,double* z18, double* r2, double* r4, double* r6, double* r8,double* r10,double* r12,double* r14,double* r16,double* r18, double* r20, double* x20, double* y20, double* z20, int totalAN, int lMax, bool return_derivatives){ |
| 109 | |
| 110 | for (int i = 0; i < Asize; i++) { |
| 111 | if (lMax > 1){ |
| 112 | preCoef[ +i] = 1.09254843059208*x[i]*y[i]; |
| 113 | preCoef[totalAN*1+i] = 1.09254843059208*y[i]*z[i]; |
| 114 | preCoef[totalAN*2+i] = -0.31539156525252*x2[i] - 0.31539156525252*y2[i] + 0.63078313050504*z2[i]; |
| 115 | preCoef[totalAN*3+i] = 1.09254843059208*x[i]*z[i]; |
| 116 | preCoef[totalAN*4+i] = 0.54627421529604*x2[i] - 0.54627421529604*y2[i]; |
| 117 | if (return_derivatives) { |
| 118 | prCofDX[ +i] = 1.09254843059208*y[i]; |
| 119 | prCofDX[totalAN*1+i] = 0; |
| 120 | prCofDX[totalAN*2+i] = -0.63078313050504*x[i]; |
| 121 | prCofDX[totalAN*3+i] = 1.09254843059208*z[i]; |
| 122 | prCofDX[totalAN*4+i] = 1.09254843059208*x[i]; |
| 123 | |
| 124 | prCofDY[ +i] = 1.09254843059208*x[i]; |
| 125 | prCofDY[totalAN*1+i] = 1.09254843059208*z[i]; |
| 126 | prCofDY[totalAN*2+i] = -0.63078313050504*y[i]; |
| 127 | prCofDY[totalAN*3+i] = 0; |
| 128 | prCofDY[totalAN*4+i] = -1.09254843059208*y[i]; |
| 129 | |
| 130 | prCofDZ[ +i] = 0; |
| 131 | prCofDZ[totalAN*1+i] = 1.09254843059208*y[i]; |
| 132 | prCofDZ[totalAN*2+i] = 1.26156626101008*z[i]; |
| 133 | prCofDZ[totalAN*3+i] = 1.09254843059208*x[i]; |
| 134 | prCofDZ[totalAN*4+i] = 0; |
| 135 | } |
| 136 | if (lMax > 2){ |
| 137 | preCoef[totalAN*5+i] = 0.590043589926644*y[i]*(3.0*x2[i] - y2[i]); |
| 138 | preCoef[totalAN*6+i] = 2.89061144264055*x[i]*y[i]*z[i]; |
| 139 | preCoef[totalAN*7+i] = -0.457045799464466*y[i]*(x2[i] + y2[i] - 4.0*z2[i]); |
| 140 | preCoef[totalAN*8+i] = 0.373176332590115*z[i]*(-3.0*x2[i] - 3.0*y2[i] + 2.0*z2[i]); |
| 141 | preCoef[totalAN*9+i] = -0.457045799464466*x[i]*(x2[i] + y2[i] - 4.0*z2[i]); |
| 142 | preCoef[totalAN*10+i] = 1.44530572132028*z[i]*(x2[i] - y2[i]); |
| 143 | preCoef[totalAN*11+i] = 0.590043589926644*x[i]*(x2[i] - 3.0*y2[i]); |
| 144 | |
| 145 | if(return_derivatives){ |
| 146 | prCofDX[totalAN*5+i] = 3.54026153955986*x[i]*y[i]; |
| 147 | prCofDX[totalAN*6+i] = 2.89061144264055*y[i]*z[i]; |
| 148 | prCofDX[totalAN*7+i] = -0.914091598928931*x[i]*y[i]; |
| 149 | prCofDX[totalAN*8+i] = -2.23905799554069*x[i]*z[i]; |
| 150 | prCofDX[totalAN*9+i] = -1.3711373983934*x2[i] - 0.457045799464466*y2[i] + 1.82818319785786*z2[i]; |
| 151 | prCofDX[totalAN*10+i] = 2.89061144264055*x[i]*z[i]; |
| 152 | prCofDX[totalAN*11+i] = 1.77013076977993*x2[i] - 1.77013076977993*y2[i]; |
| 153 | |
| 154 | prCofDY[totalAN*5+i] = 1.77013076977993*x2[i] - 1.77013076977993*y2[i]; |
| 155 | prCofDY[totalAN*6+i] = 2.89061144264055*x[i]*z[i]; |
| 156 | prCofDY[totalAN*7+i] = -0.457045799464466*x2[i] - 1.3711373983934*y2[i] + 1.82818319785786*z2[i]; |
| 157 | prCofDY[totalAN*8+i] = -2.23905799554069*y[i]*z[i]; |
| 158 | prCofDY[totalAN*9+i] = -0.914091598928931*x[i]*y[i]; |
| 159 | prCofDY[totalAN*10+i] = -2.89061144264055*y[i]*z[i]; |
| 160 | prCofDY[totalAN*11+i] = -3.54026153955986*x[i]*y[i]; |
| 161 | |
| 162 | prCofDZ[totalAN*5+i] = 0; |
| 163 | prCofDZ[totalAN*6+i] = 2.89061144264055*x[i]*y[i]; |
| 164 | prCofDZ[totalAN*7+i] = 3.65636639571573*y[i]*z[i]; |
| 165 | prCofDZ[totalAN*8+i] = -1.11952899777035*x2[i] - 1.11952899777035*y2[i] + 2.23905799554069*z2[i]; |