1 /* Copyright (C) 2003-2007 CAMP 2 * Copyright (C) 2007-2009 CAMd 3 * Please see the accompanying LICENSE file for further information. */ 4 5 #define spherical_harmonics(l, f, x, y, z, r2, p) (\ 6 {\ 7 switch(l)\ 8 {\ 9 case 0:\ 10 p[0] = f * 0.28209479177387814;\ 11 break;\ 12 case 1:\ 13 p[0] = f * 0.48860251190291992 * y;\ 14 p[1] = f * 0.48860251190291992 * z;\ 15 p[2] = f * 0.48860251190291992 * x;\ 16 break;\ 17 case 2:\ 18 p[0] = f * 1.0925484305920792 * x*y;\ 19 p[1] = f * 1.0925484305920792 * y*z;\ 20 p[2] = f * 0.31539156525252005 * (-r2+3*z*z);\ 21 p[3] = f * 1.0925484305920792 * x*z;\ 22 p[4] = f * 0.54627421529603959 * (-y*y+x*x);\ 23 break;\ 24 case 3:\ 25 p[0] = f * 0.59004358992664352 * (-y*y*y+3*x*x*y);\ 26 p[1] = f * 2.8906114426405538 * x*y*z;\ 27 p[2] = f * 0.45704579946446577 * (5*y*z*z-y*r2);\ 28 p[3] = f * 0.3731763325901154 * (-3*z*r2+5*z*z*z);\ 29 p[4] = f * 0.45704579946446577 * (-x*r2+5*x*z*z);\ 30 p[5] = f * 1.4453057213202769 * (-y*y*z+x*x*z);\ 31 p[6] = f * 0.59004358992664352 * (x*x*x-3*x*y*y);\ 32 break;\ 33 case 4:\ 34 p[0] = f * 2.5033429417967046 * (x*x*x*y-x*y*y*y);\ 35 p[1] = f * 1.7701307697799307 * (3*x*x*y*z-y*y*y*z);\ 36 p[2] = f * 0.94617469575756008 * (-x*y*r2+7*x*y*z*z);\ 37 p[3] = f * 0.66904654355728921 * (-3*y*z*r2+7*y*z*z*z);\ 38 p[4] = f * 0.10578554691520431 * (3*r2*r2-30*z*z*r2+35*z*z*z*z);\ 39 p[5] = f * 0.66904654355728921 * (7*x*z*z*z-3*x*z*r2);\ 40 p[6] = f * 0.47308734787878004 * (y*y*r2+7*x*x*z*z-x*x*r2-7*y*y*z*z);\ 41 p[7] = f * 1.7701307697799307 * (x*x*x*z-3*x*y*y*z);\ 42 p[8] = f * 0.62583573544917614 * (-6*x*x*y*y+x*x*x*x+y*y*y*y);\ 43 break;\ 44 default:\ 45 assert(0 == 1);\ 46 }\ 47 }\ 48 )\ 49 50 #define spherical_harmonics_derivative_x(l, f, x, y, z, r2, p) (\ 51 {\ 52 switch(l)\ 53 {\ 54 case 0:\ 55 p[0] = f * 0;\ 56 break;\ 57 case 1:\ 58 p[0] = f * 0;\ 59 p[1] = f * 0;\ 60 p[2] = f * 0.48860251190291992;\ 61 break;\ 62 case 2:\ 63 p[0] = f * 1.0925484305920792 * y;\ 64 p[1] = f * 0;\ 65 p[2] = f * 0.63078313050504009 * -x;\ 66 p[3] = f * 1.0925484305920792 * z;\ 67 p[4] = f * 1.0925484305920792 * x;\ 68 break;\ 69 case 3:\ 70 p[0] = f * 3.5402615395598613 * x*y;\ 71 p[1] = f * 2.8906114426405538 * y*z;\ 72 p[2] = f * 0.91409159892893155 * -x*y;\ 73 p[3] = f * 2.2390579955406924 * -x*z;\ 74 p[4] = f * 0.45704579946446577 * (-r2-2*x*x+5*z*z);\ 75 p[5] = f * 2.8906114426405538 * x*z;\ 76 p[6] = f * 1.7701307697799307 * (-y*y+x*x);\ 77 break;\ 78 case 4:\ 79 p[0] = f * 2.5033429417967046 * (-y*y*y+3*x*x*y);\ 80 p[1] = f * 10.620784618679583 * x*y*z;\ 81 p[2] = f * 0.94617469575756008 * (7*y*z*z-y*r2-2*x*x*y);\ 82 p[3] = f * 4.0142792613437353 * -x*y*z;\ 83 p[4] = f * 1.2694265629824517 * (x*r2-5*x*z*z);\ 84 p[5] = f * 0.66904654355728921 * (-3*z*r2-6*x*x*z+7*z*z*z);\ 85 p[6] = f * 0.94617469575756008 * (-x*r2-x*x*x+x*y*y+7*x*z*z);\ 86 p[7] = f * 5.3103923093397913 * (-y*y*z+x*x*z);\ 87 p[8] = f * 2.5033429417967046 * (-3*x*y*y+x*x*x);\ 88 break;\ 89 default:\ 90 assert(0 == 1);\ 91 }\ 92 }\ 93 )\ 94 95 #define spherical_harmonics_derivative_y(l, f, x, y, z, r2, p) (\ 96 {\ 97 switch(l)\ 98 {\ 99 case 0:\ 100 p[0] = f * 0;\ 101 break;\ 102 case 1:\ 103 p[0] = f * 0.48860251190291992;\ 104 p[1] = f * 0;\ 105 p[2] = f * 0;\ 106 break;\ 107 case 2:\ 108 p[0] = f * 1.0925484305920792 * x;\ 109 p[1] = f * 1.0925484305920792 * z;\ 110 p[2] = f * 0.63078313050504009 * -y;\ 111 p[3] = f * 0;\ 112 p[4] = f * 1.0925484305920792 * -y;\ 113 break;\ 114 case 3:\ 115 p[0] = f * 1.7701307697799307 * (-y*y+x*x);\ 116 p[1] = f * 2.8906114426405538 * x*z;\ 117 p[2] = f * 0.45704579946446577 * (-2*y*y-r2+5*z*z);\ 118 p[3] = f * 2.2390579955406924 * -y*z;\ 119 p[4] = f * 0.91409159892893155 * -x*y;\ 120 p[5] = f * 2.8906114426405538 * -y*z;\ 121 p[6] = f * 3.5402615395598613 * -x*y;\ 122 break;\ 123 case 4:\ 124 p[0] = f * 2.5033429417967046 * (x*x*x-3*x*y*y);\ 125 p[1] = f * 5.3103923093397913 * (-y*y*z+x*x*z);\ 126 p[2] = f * 0.94617469575756008 * (-x*r2-2*x*y*y+7*x*z*z);\ 127 p[3] = f * 0.66904654355728921 * (-6*y*y*z-3*z*r2+7*z*z*z);\ 128 p[4] = f * 1.2694265629824517 * (-5*y*z*z+y*r2);\ 129 p[5] = f * 4.0142792613437353 * -x*y*z;\ 130 p[6] = f * 0.94617469575756008 * (y*y*y-7*y*z*z+y*r2-x*x*y);\ 131 p[7] = f * 10.620784618679583 * -x*y*z;\ 132 p[8] = f * 2.5033429417967046 * (y*y*y-3*x*x*y);\ 133 break;\ 134 default:\ 135 assert(0 == 1);\ 136 }\ 137 }\ 138 )\ 139 140 #define spherical_harmonics_derivative_z(l, f, x, y, z, r2, p) (\ 141 {\ 142 switch(l)\ 143 {\ 144 case 0:\ 145 p[0] = f * 0;\ 146 break;\ 147 case 1:\ 148 p[0] = f * 0;\ 149 p[1] = f * 0.48860251190291992;\ 150 p[2] = f * 0;\ 151 break;\ 152 case 2:\ 153 p[0] = f * 0;\ 154 p[1] = f * 1.0925484305920792 * y;\ 155 p[2] = f * 1.2615662610100802 * z;\ 156 p[3] = f * 1.0925484305920792 * x;\ 157 p[4] = f * 0;\ 158 break;\ 159 case 3:\ 160 p[0] = f * 0;\ 161 p[1] = f * 2.8906114426405538 * x*y;\ 162 p[2] = f * 3.6563663957157262 * y*z;\ 163 p[3] = f * 1.1195289977703462 * (-r2+3*z*z);\ 164 p[4] = f * 3.6563663957157262 * x*z;\ 165 p[5] = f * 1.4453057213202769 * (-y*y+x*x);\ 166 p[6] = f * 0;\ 167 break;\ 168 case 4:\ 169 p[0] = f * 0;\ 170 p[1] = f * 1.7701307697799307 * (-y*y*y+3*x*x*y);\ 171 p[2] = f * 11.354096349090721 * x*y*z;\ 172 p[3] = f * 2.0071396306718676 * (5*y*z*z-y*r2);\ 173 p[4] = f * 1.6925687506432689 * (-3*z*r2+5*z*z*z);\ 174 p[5] = f * 2.0071396306718676 * (-x*r2+5*x*z*z);\ 175 p[6] = f * 5.6770481745453605 * (-y*y*z+x*x*z);\ 176 p[7] = f * 1.7701307697799307 * (x*x*x-3*x*y*y);\ 177 p[8] = f * 0;\ 178 break;\ 179 default:\ 180 assert(0 == 1);\ 181 }\ 182 }\ 183 )\ 184 185