Go to the documentation of this file.
4 #define ROUNDUP_QUOTIENT(n, k) (((n)/(k)) + (((n)%(k)) != 0))
74 #define SPOLY(pg, pdg, ra, split) \
78 double _g = 0, _dg = 0; \
83 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8)); \
84 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4)); \
87 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8 + (_s-1)*(-5./16))); \
88 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4 + (_s-1)*(-15./16))); \
91 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8 + (_s-1)*(-5./16 \
92 + (_s-1)*(35./128)))); \
93 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4 + (_s-1)*(-15./16 \
94 + (_s-1)*(35./32)))); \
97 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8 + (_s-1)*(-5./16 \
98 + (_s-1)*(35./128 + (_s-1)*(-63./256))))); \
99 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4 + (_s-1)*(-15./16 + (_s-1)*(35./32 \
100 + (_s-1)*(-315./256))))); \
102 case SPLIT_TAYLOR6: \
103 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8 + (_s-1)*(-5./16 \
104 + (_s-1)*(35./128 + (_s-1)*(-63./256 \
105 + (_s-1)*(231./1024)))))); \
106 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4 + (_s-1)*(-15./16 + (_s-1)*(35./32 \
107 + (_s-1)*(-315./256 + (_s-1)*(693./512)))))); \
109 case SPLIT_TAYLOR7: \
110 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8 + (_s-1)*(-5./16 \
111 + (_s-1)*(35./128 + (_s-1)*(-63./256 \
112 + (_s-1)*(231./1024 + (_s-1)*(-429./2048))))))); \
113 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4 + (_s-1)*(-15./16 + (_s-1)*(35./32 \
114 + (_s-1)*(-315./256 + (_s-1)*(693./512 \
115 + (_s-1)*(-3003./2048))))))); \
117 case SPLIT_TAYLOR8: \
118 _g = 1 + (_s-1)*(-1./2 + (_s-1)*(3./8 + (_s-1)*(-5./16 \
119 + (_s-1)*(35./128 + (_s-1)*(-63./256 \
120 + (_s-1)*(231./1024 + (_s-1)*(-429./2048 \
121 + (_s-1)*(6435./32768)))))))); \
122 _dg = (2*_r)*(-1./2 + (_s-1)*(3./4 + (_s-1)*(-15./16 + (_s-1)*(35./32 \
123 + (_s-1)*(-315./256 + (_s-1)*(693./512 \
124 + (_s-1)*(-3003./2048 + (_s-1)*(6435./4096)))))))); \
126 case SPLIT_TAYLOR1: \
127 _g = 1 + (_s-1)*(-1./2); \
128 _dg = (2*_r)*(-1./2); \
131 case SPLIT_SIGMA2_3: \
132 _g = 2 + _s*(-2 + _r); \
133 _dg = _r*(-4 + _r*3); \
135 case SPLIT_SIGMA3_5: \
136 _g = 9./4 + _s*(-5./2 + _s*(9./4 - _r)); \
137 _dg = _r*(-5 + _s*(9 + _r*(-5))); \
139 case SPLIT_SIGMA4_6: \
140 _g = 21./8 + _s*(-35./8 + _s*(63./8 + _r*(-7 + _r*(15./8)))); \
141 _dg = _r*(-35./4 + _s*(63./2 + _r*(-35 + _r*(45./4)))); \
143 case SPLIT_SIGMA4_7: \
144 _g = 5./2 + _s*(-7./2 + _s*(7./2 + _s*(-5./2 + _r))); \
145 _dg = _r*(-7 + _s*(14 + _s*(-15 + _r*(7)))); \
147 case SPLIT_SIGMA5_8: \
148 _g = 45./16 + _s*(-21./4 + _s*(63./8 + _s*(-45./4 \
149 + _r*(9 + _r*(-35./16))))); \
150 _dg = _r*(-21./2 + _s*(63./2 + _s*(-135./2 \
151 + _r*(63 + _r*(-35./2))))); \
153 case SPLIT_SIGMA5_9: \
154 _g = 175./64 + _s*(-75./16 + _s*(189./32 + _s*(-75./16 \
155 + _s*(175./64 - _r)))); \
156 _dg = _r*(-75./8 + _s*(189./8 + _s*(-225./8 + _s*(175./8 \
159 case SPLIT_SIGMA6_9: \
160 _g = 25./8 + _s*(-15./2 + _s*(63./4 + _s*(-75./2 \
161 + _r*(45 + _r*(-175./8 + _r*4))))); \
162 _dg = _r*(-15 + _s*(63 + _s*(-225 \
163 + _r*(315 + _r*(-175 + _r*36))))); \
165 case SPLIT_SIGMA6_10: \
166 _g = 385./128 + _s*(-825./128 + _s*(693./64 + _s*(-825./64 \
167 + _s*(1925./128 + _r*(-11 + _r*(315./128)))))); \
168 _dg = _r*(-825./64 + _s*(693./16 + _s*(-2475./32 \
169 + _s*(1925./16 + _r*(-99 + _r*(1575./64)))))); \
171 case SPLIT_SIGMA6_11: \
172 _g = 189./64 + _s*(-385./64 + _s*(297./32 + _s*(-297./32 \
173 + _s*(385./64 + _s*(-189./64 + _r))))); \
174 _dg = _r*(-385./32 + _s*(297./8 + _s*(-891./16 + _s*(385./8 \
175 + _s*(-945./32 + _r*(11)))))); \
177 case SPLIT_SIGMA7_11: \
178 _g = 105./32 + _s*(-275./32 + _s*(297./16 + _s*(-495./16 \
179 + _s*(1925./32 + _r*(-66 + _r*(945./32 + _r*(-5))))))); \
180 _dg = _r*(-275./16 + _s*(297./4 + _s*(-1485./8 \
181 + _s*(1925./4 + _r*(-594 + _r*(4725./16 + _r*(-55))))))); \
183 case SPLIT_SIGMA7_12: \
184 _g = 819./256 + _s*(-1001./128 + _s*(3861./256 \
185 + _s*(-1287./64 + _s*(5005./256 + _s*(-2457./128 \
186 + _r*(13 + _r*(-693./256))))))); \
187 _dg = _r*(-1001./64 + _s*(3861./64 + _s*(-3861./32 \
188 + _s*(5005./32 + _s*(-12285./64 + _r*(143 \
189 + _r*(-2079./64))))))); \
191 case SPLIT_SIGMA7_13: \
192 _g = 1617./512 + _s*(-1911./256 + _s*(7007./512 + _s*(-2145./128 \
193 + _s*(7007./512 + _s*(-1911./256 + _s*(1617./512 - _r))))));\
194 _dg = _r*(-1911./128 + _s*(7007./128 + _s*(-6435./64 + _s*(7007./64 \
195 + _s*(-9555./128 + _s*(4851./128 + _r*(-13))))))); \
197 case SPLIT_SIGMA8_12: \
198 _g = 455./128 + _s*(-715./64 + _s*(3861./128 + _s*(-2145./32 \
199 + _s*(25025./128 + _r*(-286 + _r*(12285./64 + _r*(-65 \
200 + _r*(1155./128)))))))); \
201 _dg = _r*(-715./32 + _s*(3861./32 + _s*(-6435./16 \
202 + _s*(25025./16 + _r*(-2574 + _r*(61425./32 + _r*(-715 \
203 + _r*(3465./32)))))))); \
205 case SPLIT_SIGMA8_13: \
206 _g = 441./128 + _s*(-637./64 + _s*(3003./128 \
207 + _s*(-1287./32 + _s*(7007./128 + _s*(-5733./64 \
208 + _r*(91 + _r*(-4851./128 + _r*(6)))))))); \
209 _dg = _r*(-637./32 + _s*(3003./32 + _s*(-3861./16 \
210 + _s*(7007./16 + _s*(-28665./32 + _r*(1001 \
211 + _r*(-14553./32 + _r*(78)))))))); \
213 case SPLIT_SIGMA8_14: \
214 _g = 3465./1024 + _s*(-9555./1024 + _s*(21021./1024 \
215 + _s*(-32175./1024 + _s*(35035./1024 + _s*(-28665./1024 \
216 + _s*(24255./1024 + _r*(-15 + _r*(3003./1024)))))))); \
217 _dg = _r*(-9555./512 + _s*(21021./256 + _s*(-96525./512 \
218 + _s*(35035./128 + _s*(-143325./512 + _s*(72765./256 \
219 + _r*(-195 + _r*(21021./512)))))))); \
221 case SPLIT_SIGMA8_15: \
222 _g = 429./128 + _s*(-1155./128 + _s*(2457./128 + _s*(-3575./128 \
223 + _s*(3575./128 + _s*(-2457./128 + _s*(1155./128 \
224 + _s*(-429./128 + _r))))))); \
225 _dg = _r*(-1155./64 + _s*(2457./32 + _s*(-10725./64 \
226 + _s*(3575./16 + _s*(-12285./64 + _s*(3465./32 \
227 + _s*(-3003./64 + _r*(15)))))))); \
230 case SPLIT_SIGMA2_6: \
231 _g = (31./16) + _s*(-23./16 + _s*(9./16 + _s*(-1./16))); \
232 _dg = (2*_r)*(-23./16 + _s*(9./8 + _s*(-3./16))); \
235 case SPLIT_SWITCH1_2: \
237 _g = 5./3 + _r + _s*(-3 + _r*(4./3)); \
238 _dg = 1 + _r*(-6 + _r*(4)); \
245 case SPLIT_SWITCH3_4: \
247 _g = 5./7 + _r*(27./7 + _r*(-41./7 + _r*(16./7))); \
248 _dg = 27./7 + _r*(-82./7 + _r*(48./7)); \
251 _g = 47./28 + _s*(-5./7); \
255 case SPLIT_SWITCH7_8: \
257 _g = -19./15 + _r*(49./5 + _r*(-59./5 + _r*(64./15))); \
258 _dg = 49./5 + _r*(-118./5 + _r*(64./5)); \
261 _g = 191./120 + _s*(-3./5); \
279 #define STENCIL_1D(_phi, _delta, _approx) \
285 phi[0] = 0.5f * (1 - t) * (2 - t) * (2 - t); \
287 phi[1] = (1 - t) * (1 + t - 1.5f * t * t); \
289 phi[2] = (1 + t) * (1 - t - 1.5f * t * t); \
291 phi[3] = 0.5f * (1 + t) * (2 + t) * (2 + t); \
293 case APPROX_QUINTIC: \
294 phi[0] = (1.f/24) * (1-t) * (2-t) * (3-t) * (3-t) * (4-t); \
296 phi[1] = (1-t) * (2-t) * (3-t) * ((1.f/6) + t * (0.375f - (5.f/24)*t));\
298 phi[2] = (1-t*t) * (2-t) * (0.5f + t * (0.25f - (5.f/12)*t)); \
300 phi[3] = (1-t*t) * (2+t) * (0.5f - t * (0.25f + (5.f/12)*t)); \
302 phi[4] = (1+t) * (2+t) * (3+t) * ((1.f/6) - t * (0.375f + (5.f/24)*t));\
304 phi[5] = (1.f/24) * (1+t) * (2+t) * (3+t) * (3+t) * (4+t); \
306 case APPROX_QUINTIC2: \
307 phi[0] = (1.f/24) * (3-t) * (3-t) * (3-t) * (t-2) * (5*t-8); \
309 phi[1] = (-1.f/24) * (2-t) * (t-1) * (-48+t*(153+t*(-114+t*25))); \
311 phi[2] = (1.f/12) * (1-t) * (12+t*(12+t*(-3+t*(-38+t*25)))); \
313 phi[3] = (1.f/12) * (1+t) * (12+t*(-12+t*(-3+t*(38+t*25)))); \
315 phi[4] = (-1.f/24) * (2+t) * (t+1) * (48+t*(153+t*(114+t*25))); \
317 phi[5] = (1.f/24) * (3+t) * (3+t) * (3+t) * (t+2) * (5*t+8); \
319 case APPROX_SEPTIC: \
320 phi[0] = (-1.f/720)*(t-1)*(t-2)*(t-3)*(t-4)*(t-4)*(t-5)*(t-6); \
322 phi[1] = (1.f/720)*(t-1)*(t-2)*(t-3)*(t-4)*(t-5)*(-6+t*(-20+7*t)); \
324 phi[2] = (-1.f/240)*(t*t-1)*(t-2)*(t-3)*(t-4)*(-10+t*(-12+7*t)); \
326 phi[3] = (1.f/144)*(t*t-1)*(t*t-4)*(t-3)*(-12+t*(-4+7*t)); \
328 phi[4] = (-1.f/144)*(t*t-1)*(t*t-4)*(t+3)*(-12+t*(4+7*t)); \
330 phi[5] = (1.f/240)*(t*t-1)*(t+2)*(t+3)*(t+4)*(-10+t*(12+7*t)); \
332 phi[6] = (-1.f/720)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(-6+t*(20+7*t)); \
334 phi[7] = (1.f/720)*(t+1)*(t+2)*(t+3)*(t+4)*(t+4)*(t+5)*(t+6); \
336 case APPROX_SEPTIC3: \
337 phi[0] = (3632.f/5) + t*((-7456.f/5) + t*((58786.f/45) + t*(-633 \
338 + t*((26383.f/144) + t*((-22807.f/720) + t*((727.f/240) \
339 + t*(-89.f/720))))))); \
341 phi[1] = -440 + t*((25949.f/20) + t*((-117131.f/72) + t*((2247.f/2) \
342 + t*((-66437.f/144) + t*((81109.f/720) + t*((-727.f/48) \
343 + t*(623.f/720))))))); \
345 phi[2] = (138.f/5) + t*((-8617.f/60) + t*((12873.f/40) + t*((-791.f/2) \
346 + t*((4557.f/16) + t*((-9583.f/80) + t*((2181.f/80) \
347 + t*(-623.f/240))))))); \
349 phi[3] = 1 + t*t*((-49.f/36) + t*t*((-959.f/144) + t*((2569.f/144) \
350 + t*((-727.f/48) + t*(623.f/144))))); \
352 phi[4] = 1 + t*t*((-49.f/36) + t*t*((-959.f/144) + t*((-2569.f/144) \
353 + t*((-727.f/48) + t*(-623.f/144))))); \
355 phi[5] = (138.f/5) + t*((8617.f/60) + t*((12873.f/40) + t*((791.f/2) \
356 + t*((4557.f/16) + t*((9583.f/80) + t*((2181.f/80) \
357 + t*(623.f/240))))))); \
359 phi[6] = -440 + t*((-25949.f/20) + t*((-117131.f/72) + t*((-2247.f/2) \
360 + t*((-66437.f/144) + t*((-81109.f/720) + t*((-727.f/48) \
361 + t*(-623.f/720))))))); \
363 phi[7] = (3632.f/5) + t*((7456.f/5) + t*((58786.f/45) + t*(633 \
364 + t*((26383.f/144) + t*((22807.f/720) + t*((727.f/240) \
365 + t*(89.f/720))))))); \
368 phi[0] = (-1.f/40320)*(t-8)*(t-7)*(t-6)*(t-5)*(t-5)*(t-4)*(t-3)* \
371 phi[1] = (1.f/40320)*(t-7)*(t-6)*(t-5)*(t-4)*(t-3)*(t-2)*(t-1)* \
374 phi[2] = (-1.f/10080)*(t-6)*(t-5)*(t-4)*(t-3)*(t-2)*(t-1)*(t+1)* \
377 phi[3] = (1.f/1440)*(t-5)*(t-4)*(t-3)*(t-2)*(t-1)*(t+1)*(t+2)* \
380 phi[4] = (-1.f/2880)*(t-4)*(t-3)*(t-2)*(t-1)*(t+1)*(t+2)*(t+3)* \
383 phi[5] = (1.f/2880)*(t-3)*(t-2)*(t-1)*(t+1)*(t+2)*(t+3)*(t+4)* \
386 phi[6] = (-1.f/1440)*(t-2)*(t-1)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)* \
389 phi[7] = (1.f/10080)*(t-1)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(t+6)* \
392 phi[8] = (-1.f/40320)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(t+6)*(t+7)* \
395 phi[9] = (1.f/40320)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(t+5)*(t+6)* \
398 case APPROX_NONIC4: \
399 phi[0] = 439375.f/7+t*(-64188125.f/504+t*(231125375.f/2016 \
400 +t*(-17306975.f/288+t*(7761805.f/384+t*(-2895587.f/640 \
401 +t*(129391.f/192+t*(-259715.f/4032+t*(28909.f/8064 \
402 +t*(-3569.f/40320))))))))); \
404 phi[1] = -56375+t*(8314091.f/56+t*(-49901303.f/288+t*(3763529.f/32 \
405 +t*(-19648027.f/384+t*(9469163.f/640+t*(-545977.f/192 \
406 +t*(156927.f/448+t*(-28909.f/1152 \
407 +t*(3569.f/4480))))))))); \
409 phi[2] = 68776.f/7+t*(-1038011.f/28+t*(31157515.f/504+t*(-956669.f/16 \
410 +t*(3548009.f/96+t*(-2422263.f/160+t*(197255.f/48 \
411 +t*(-19959.f/28+t*(144545.f/2016 \
412 +t*(-3569.f/1120))))))))); \
414 phi[3] = -154+t*(12757.f/12+t*(-230123.f/72+t*(264481.f/48 \
415 +t*(-576499.f/96+t*(686147.f/160+t*(-96277.f/48 \
416 +t*(14221.f/24+t*(-28909.f/288+t*(3569.f/480))))))))); \
418 phi[4] = 1+t*t*(-205.f/144+t*t*(91.f/192+t*(-6181.f/320 \
419 +t*(6337.f/96+t*(-2745.f/32+t*(28909.f/576 \
420 +t*(-3569.f/320))))))); \
422 phi[5] = 1+t*t*(-205.f/144+t*t*(91.f/192+t*(6181.f/320 \
423 +t*(6337.f/96+t*(2745.f/32+t*(28909.f/576 \
424 +t*(3569.f/320))))))); \
426 phi[6] = -154+t*(-12757.f/12+t*(-230123.f/72+t*(-264481.f/48 \
427 +t*(-576499.f/96+t*(-686147.f/160+t*(-96277.f/48 \
428 +t*(-14221.f/24+t*(-28909.f/288+t*(-3569.f/480))))))))); \
430 phi[7] = 68776.f/7+t*(1038011.f/28+t*(31157515.f/504+t*(956669.f/16 \
431 +t*(3548009.f/96+t*(2422263.f/160+t*(197255.f/48 \
432 +t*(19959.f/28+t*(144545.f/2016+t*(3569.f/1120))))))))); \
434 phi[8] = -56375+t*(-8314091.f/56+t*(-49901303.f/288+t*(-3763529.f/32 \
435 +t*(-19648027.f/384+t*(-9469163.f/640+t*(-545977.f/192 \
436 +t*(-156927.f/448+t*(-28909.f/1152 \
437 +t*(-3569.f/4480))))))))); \
439 phi[9] = 439375.f/7+t*(64188125.f/504+t*(231125375.f/2016 \
440 +t*(17306975.f/288+t*(7761805.f/384+t*(2895587.f/640 \
441 +t*(129391.f/192+t*(259715.f/4032+t*(28909.f/8064 \
442 +t*(3569.f/40320))))))))); \
444 case APPROX_BSPLINE: \
445 phi[0] = (1.f/6) * (2-t) * (2-t) * (2-t); \
447 phi[1] = (2.f/3) + t*t*(-1 + 0.5f*t); \
449 phi[2] = (2.f/3) + t*t*(-1 - 0.5f*t); \
451 phi[3] = (1.f/6) * (2+t) * (2+t) * (2+t); \
467 #define D_STENCIL_1D(_dphi, _phi, _h_1, _delta, _approx) \
469 float *dphi = _dphi; \
475 phi[0] = 0.5f * (1 - t) * (2 - t) * (2 - t); \
476 dphi[0] = (1.5f * t - 2) * (2 - t) * h_1; \
478 phi[1] = (1 - t) * (1 + t - 1.5f * t * t); \
479 dphi[1] = (-5 + 4.5f * t) * t * h_1; \
481 phi[2] = (1 + t) * (1 - t - 1.5f * t * t); \
482 dphi[2] = (-5 - 4.5f * t) * t * h_1; \
484 phi[3] = 0.5f * (1 + t) * (2 + t) * (2 + t); \
485 dphi[3] = (1.5f * t + 2) * (2 + t) * h_1; \
487 case APPROX_QUINTIC: \
488 phi[0] = (1.f/24) * (1-t) * (2-t) * (3-t) * (3-t) * (4-t); \
489 dphi[0] = ((-1.f/24) * ((3-t) * (3-t) * (14 + t * (-14 + 3*t)) \
490 + 2 * (1-t) * (2-t) * (3-t) * (4-t))) * h_1; \
492 phi[1] = (1-t) * (2-t) * (3-t) * ((1.f/6) + t * (0.375f - (5.f/24)*t));\
493 dphi[1] = (-((1.f/6) + t * (0.375f - (5.f/24)*t)) * (11 + t * (-12 + 3*t))\
494 + (1-t) * (2-t) * (3-t) * (0.375f - (5.f/12)*t)) * h_1; \
496 phi[2] = (1-t*t) * (2-t) * (0.5f + t * (0.25f - (5.f/12)*t)); \
497 dphi[2] = (-(0.5f + t * (0.25f - (5.f/12)*t)) * (1 + t * (4 - 3*t)) \
498 + (1-t*t) * (2-t) * (0.25f - (5.f/6)*t)) * h_1; \
500 phi[3] = (1-t*t) * (2+t) * (0.5f - t * (0.25f + (5.f/12)*t)); \
501 dphi[3] = ((0.5f + t * (-0.25f - (5.f/12)*t)) * (1 + t * (-4 - 3*t)) \
502 - (1-t*t) * (2+t) * (0.25f + (5.f/6)*t)) * h_1; \
504 phi[4] = (1+t) * (2+t) * (3+t) * ((1.f/6) - t * (0.375f + (5.f/24)*t));\
505 dphi[4] = (((1.f/6) + t * (-0.375f - (5.f/24)*t)) * (11 + t * (12 + 3*t)) \
506 - (1+t) * (2+t) * (3+t) * (0.375f + (5.f/12)*t)) * h_1; \
508 phi[5] = (1.f/24) * (1+t) * (2+t) * (3+t) * (3+t) * (4+t); \
509 dphi[5] = ((1.f/24) * ((3+t) * (3+t) * (14 + t * (14 + 3*t)) \
510 + 2 * (1+t) * (2+t) * (3+t) * (4+t))) * h_1; \
512 case APPROX_QUINTIC2: \
513 phi[0] = (1.f/24) * (3-t) * (3-t) * (3-t) * (t-2) * (5*t-8); \
514 dphi[0] = ((1.f/24) * (3-t) * (3-t) * ((3-t)*(5*t-8) - 3*(t-2)*(5*t-8) \
515 + 5*(t-2)*(3-t))) * h_1; \
517 phi[1] = (-1.f/24) * (2-t) * (t-1) * (-48+t*(153+t*(-114+t*25))); \
518 dphi[1] = ((-1.f/24) * ((2-t)*(-48+t*(153+t*(-114+t*25))) - (t-1)* \
519 (-48+t*(153+t*(-114+t*25))) \
520 + (2-t)*(t-1)*(153+t*(-228+t*75)))) * h_1; \
522 phi[2] = (1.f/12) * (1-t) * (12+t*(12+t*(-3+t*(-38+t*25)))); \
523 dphi[2] = ((1.f/12) * (-(12+t*(12+t*(-3+t*(-38+t*25)))) \
524 + (1-t)*(12+t*(-6+t*(-114+t*100))))) * h_1; \
526 phi[3] = (1.f/12) * (1+t) * (12+t*(-12+t*(-3+t*(38+t*25)))); \
527 dphi[3] = ((1.f/12) * ((12+t*(-12+t*(-3+t*(38+t*25)))) \
528 + (1+t)*(-12+t*(-6+t*(114+t*100))))) * h_1; \
530 phi[4] = (-1.f/24) * (2+t) * (t+1) * (48+t*(153+t*(114+t*25))); \
531 dphi[4] = ((-1.f/24) * ((2+t)*(48+t*(153+t*(114+t*25))) + (t+1)* \
532 (48+t*(153+t*(114+t*25))) \
533 + (2+t)*(t+1)*(153+t*(228+t*75)))) * h_1; \
535 phi[5] = (1.f/24) * (3+t) * (3+t) * (3+t) * (t+2) * (5*t+8); \
536 dphi[5] = ((1.f/24) * (3+t) * (3+t) * ((3+t)*(5*t+8) + 3*(t+2)*(5*t+8) \
537 + 5*(t+2)*(3+t))) * h_1; \
539 case APPROX_SEPTIC: \
540 phi[0] = (-1.f/720)*(t-1)*(t-2)*(t-3)*(t-4)*(t-4)*(t-5)*(t-6); \
541 dphi[0] = (-1.f/720)*(t-4)*(-1944+t*(3644+t*(-2512+t*(807 \
542 +t*(-122+t*7))))) * h_1; \
544 phi[1] = (1.f/720)*(t-1)*(t-2)*(t-3)*(t-4)*(t-5)*(-6+t*(-20+7*t)); \
545 dphi[1] = (1.f/720)*(756+t*(-9940+t*(17724+t*(-12740+t*(4445 \
546 +t*(-750+t*49)))))) * h_1; \
548 phi[2] = (-1.f/240)*(t*t-1)*(t-2)*(t-3)*(t-4)*(-10+t*(-12+7*t)); \
549 dphi[2] = (-1.f/240)*(-28+t*(1260+t*(-756+t*(-1260+t*(1365 \
550 +t*(-450+t*49)))))) * h_1; \
552 phi[3] = (1.f/144)*(t*t-1)*(t*t-4)*(t-3)*(-12+t*(-4+7*t)); \
553 dphi[3] = (1.f/144)*t*(-560+t*(84+t*(644+t*(-175+t*(-150+t*49))))) * \
556 phi[4] = (-1.f/144)*(t*t-1)*(t*t-4)*(t+3)*(-12+t*(4+7*t)); \
557 dphi[4] = (-1.f/144)*t*(560+t*(84+t*(-644+t*(-175+t*(150+t*49))))) * \
560 phi[5] = (1.f/240)*(t*t-1)*(t+2)*(t+3)*(t+4)*(-10+t*(12+7*t)); \
561 dphi[5] = (1.f/240)*(-28+t*(-1260+t*(-756+t*(1260+t*(1365 \
562 +t*(450+t*49)))))) * h_1; \
564 phi[6] = (-1.f/720)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(-6+t*(20+7*t)); \
565 dphi[6] = (-1.f/720)*(756+t*(9940+t*(17724+t*(12740+t*(4445 \
566 +t*(750+t*49)))))) * h_1; \
568 phi[7] = (1.f/720)*(t+1)*(t+2)*(t+3)*(t+4)*(t+4)*(t+5)*(t+6); \
569 dphi[7] = (1.f/720)*(t+4)*(1944+t*(3644+t*(2512+t*(807 \
570 +t*(122+t*7))))) * h_1; \
572 case APPROX_SEPTIC3: \
573 phi[0] = (3632.f/5) + t*((-7456.f/5) + t*((58786.f/45) + t*(-633 \
574 + t*((26383.f/144) + t*((-22807.f/720) + t*((727.f/240) \
575 + t*(-89.f/720))))))); \
576 dphi[0] = ((-7456.f/5) + t*((117572.f/45) + t*(-1899 + t*((26383.f/36) \
577 + t*((-22807.f/144) + t*((727.f/40) + t*(-623.f/720)))))))*h_1; \
579 phi[1] = -440 + t*((25949.f/20) + t*((-117131.f/72) + t*((2247.f/2) \
580 + t*((-66437.f/144) + t*((81109.f/720) + t*((-727.f/48) \
581 + t*(623.f/720))))))); \
582 dphi[1] = ((25949.f/20) + t*((-117131.f/36) + t*((6741.f/2) \
583 + t*((-66437.f/36) + t*((81109.f/144) + t*((-727.f/8) \
584 + t*(4361.f/720))))))) * h_1; \
586 phi[2] = (138.f/5) + t*((-8617.f/60) + t*((12873.f/40) + t*((-791.f/2) \
587 + t*((4557.f/16) + t*((-9583.f/80) + t*((2181.f/80) \
588 + t*(-623.f/240))))))); \
589 dphi[2] = ((-8617.f/60) + t*((12873.f/20) + t*((-2373.f/2) + t*((4557.f/4) \
590 + t*((-9583.f/16) + t*((6543.f/40) + t*(-4361.f/240)))))))*h_1; \
592 phi[3] = 1 + t*t*((-49.f/36) + t*t*((-959.f/144) + t*((2569.f/144) \
593 + t*((-727.f/48) + t*(623.f/144))))); \
594 dphi[3] = (t*((-49.f/18) + t*t*((-959.f/36) + t*((12845.f/144) \
595 + t*((-727.f/8) + t*(4361.f/144)))))) * h_1; \
597 phi[4] = 1 + t*t*((-49.f/36) + t*t*((-959.f/144) + t*((-2569.f/144) \
598 + t*((-727.f/48) + t*(-623.f/144))))); \
599 dphi[4] = (t*((-49.f/18) + t*t*((-959.f/36) + t*((-12845.f/144) \
600 + t*((-727.f/8) + t*(-4361.f/144)))))) * h_1; \
602 phi[5] = (138.f/5) + t*((8617.f/60) + t*((12873.f/40) + t*((791.f/2) \
603 + t*((4557.f/16) + t*((9583.f/80) + t*((2181.f/80) \
604 + t*(623.f/240))))))); \
605 dphi[5] = ((8617.f/60) + t*((12873.f/20) + t*((2373.f/2) + t*((4557.f/4) \
606 + t*((9583.f/16) + t*((6543.f/40) + t*(4361.f/240)))))))*h_1; \
608 phi[6] = -440 + t*((-25949.f/20) + t*((-117131.f/72) + t*((-2247.f/2) \
609 + t*((-66437.f/144) + t*((-81109.f/720) + t*((-727.f/48) \
610 + t*(-623.f/720))))))); \
611 dphi[6] = ((-25949.f/20) + t*((-117131.f/36) + t*((-6741.f/2) \
612 + t*((-66437.f/36) + t*((-81109.f/144) + t*((-727.f/8) \
613 + t*(-4361.f/720))))))) * h_1; \
615 phi[7] = (3632.f/5) + t*((7456.f/5) + t*((58786.f/45) + t*(633 \
616 + t*((26383.f/144) + t*((22807.f/720) + t*((727.f/240) \
617 + t*(89.f/720))))))); \
618 dphi[7] = ((7456.f/5) + t*((117572.f/45) + t*(1899 + t*((26383.f/36) \
619 + t*((22807.f/144) + t*((727.f/40) + t*(623.f/720)))))))*h_1; \
622 phi[0] = (-1.f/40320)*(t-8)*(t-7)*(t-6)*(t-5)*(t-5)*(t-4)*(t-3)* \
624 dphi[0] = (-1.f/40320)*(t-5)*(-117648+t*(256552+t*(-221416 \
625 +t*(99340+t*(-25261+t*(3667+t*(-283+t*9)))))))*h_1; \
627 phi[1] = (1.f/40320)*(t-7)*(t-6)*(t-5)*(t-4)*(t-3)*(t-2)*(t-1)* \
629 dphi[1] = (1.f/40320)*(71856+t*(-795368+t*(1569240+t*(-1357692 \
630 +t*(634725+t*(-172116+t*(27090+t*(-2296+t*81))))))))*h_1; \
632 phi[2] = (-1.f/10080)*(t-6)*(t-5)*(t-4)*(t-3)*(t-2)*(t-1)*(t+1)* \
634 dphi[2] = (1.f/10080)*(3384+t*(-69080+t*(55026 \
635 +t*(62580+t*(-99225+t*(51660+t*(-13104+t*(1640 \
636 +t*(-81)))))))))*h_1; \
638 phi[3] = (1.f/1440)*(t-5)*(t-4)*(t-3)*(t-2)*(t-1)*(t+1)*(t+2)* \
640 dphi[3] = (1.f/1440)*(72+t*(-6344+t*(2070 \
641 +t*(7644+t*(-4725+t*(-828+t*(1260+t*(-328+t*27))))))))*h_1; \
643 phi[4] = (-1.f/2880)*(t-4)*(t-3)*(t-2)*(t-1)*(t+1)*(t+2)*(t+3)* \
645 dphi[4] = (-1.f/2880)*t*(10792+t*(-972+t*(-12516 \
646 +t*(2205+t*(3924+t*(-882+t*(-328+t*81)))))))*h_1; \
648 phi[5] = (1.f/2880)*(t-3)*(t-2)*(t-1)*(t+1)*(t+2)*(t+3)*(t+4)* \
650 dphi[5] = (1.f/2880)*t*(-10792+t*(-972+t*(12516 \
651 +t*(2205+t*(-3924+t*(-882+t*(328+t*81)))))))*h_1; \
653 phi[6] = (-1.f/1440)*(t-2)*(t-1)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)* \
655 dphi[6] = (1.f/1440)*(-72+t*(-6344+t*(-2070 \
656 +t*(7644+t*(4725+t*(-828+t*(-1260+t*(-328+t*(-27)))))))))*h_1; \
658 phi[7] = (1.f/10080)*(t-1)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(t+6)* \
660 dphi[7] = (1.f/10080)*(-3384+t*(-69080+t*(-55026 \
661 +t*(62580+t*(99225+t*(51660+t*(13104+t*(1640+t*81))))))))*h_1; \
663 phi[8] = (-1.f/40320)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(t+6)*(t+7)* \
665 dphi[8] = (-1.f/40320)*(71856+t*(795368+t*(1569240 \
666 +t*(1357692+t*(634725+t*(172116+t*(27090+t*(2296 \
669 phi[9] = (1.f/40320)*(t+1)*(t+2)*(t+3)*(t+4)*(t+5)*(t+5)*(t+6)* \
671 dphi[9] = (1.f/40320)*(t+5)*(117648+t*(256552+t*(221416 \
672 +t*(99340+t*(25261+t*(3667+t*(283+t*9)))))))*h_1; \
674 case APPROX_NONIC4: \
675 phi[0] = 439375.f/7+t*(-64188125.f/504+t*(231125375.f/2016 \
676 +t*(-17306975.f/288+t*(7761805.f/384+t*(-2895587.f/640 \
677 +t*(129391.f/192+t*(-259715.f/4032+t*(28909.f/8064 \
678 +t*(-3569.f/40320))))))))); \
679 dphi[0] = (-64188125.f/504+t*(231125375.f/1008 \
680 +t*(-17306975.f/96+t*(7761805.f/96+t*(-2895587.f/128 \
681 +t*(129391.f/32+t*(-259715.f/576+t*(28909.f/1008 \
682 +t*(-3569.f/4480)))))))))*h_1; \
684 phi[1] = -56375+t*(8314091.f/56+t*(-49901303.f/288+t*(3763529.f/32 \
685 +t*(-19648027.f/384+t*(9469163.f/640+t*(-545977.f/192 \
686 +t*(156927.f/448+t*(-28909.f/1152 \
687 +t*(3569.f/4480))))))))); \
688 dphi[1] = (8314091.f/56+t*(-49901303.f/144+t*(11290587.f/32 \
689 +t*(-19648027.f/96+t*(9469163.f/128+t*(-545977.f/32 \
690 +t*(156927.f/64+t*(-28909.f/144 \
691 +t*(32121.f/4480)))))))))*h_1; \
693 phi[2] = 68776.f/7+t*(-1038011.f/28+t*(31157515.f/504+t*(-956669.f/16 \
694 +t*(3548009.f/96+t*(-2422263.f/160+t*(197255.f/48 \
695 +t*(-19959.f/28+t*(144545.f/2016 \
696 +t*(-3569.f/1120))))))))); \
697 dphi[2] = (-1038011.f/28+t*(31157515.f/252+t*(-2870007.f/16 \
698 +t*(3548009.f/24+t*(-2422263.f/32+t*(197255.f/8 \
699 +t*(-19959.f/4+t*(144545.f/252 \
700 +t*(-32121.f/1120)))))))))*h_1; \
702 phi[3] = -154+t*(12757.f/12+t*(-230123.f/72+t*(264481.f/48 \
703 +t*(-576499.f/96+t*(686147.f/160+t*(-96277.f/48 \
704 +t*(14221.f/24+t*(-28909.f/288+t*(3569.f/480))))))))); \
705 dphi[3] = (12757.f/12+t*(-230123.f/36+t*(264481.f/16 \
706 +t*(-576499.f/24+t*(686147.f/32+t*(-96277.f/8 \
707 +t*(99547.f/24+t*(-28909.f/36 \
708 +t*(10707.f/160)))))))))*h_1; \
710 phi[4] = 1+t*t*(-205.f/144+t*t*(91.f/192+t*(-6181.f/320 \
711 +t*(6337.f/96+t*(-2745.f/32+t*(28909.f/576 \
712 +t*(-3569.f/320))))))); \
713 dphi[4] = t*(-205.f/72+t*t*(91.f/48+t*(-6181.f/64 \
714 +t*(6337.f/16+t*(-19215.f/32+t*(28909.f/72 \
715 +t*(-32121.f/320)))))))*h_1; \
717 phi[5] = 1+t*t*(-205.f/144+t*t*(91.f/192+t*(6181.f/320 \
718 +t*(6337.f/96+t*(2745.f/32+t*(28909.f/576 \
719 +t*(3569.f/320))))))); \
720 dphi[5] = t*(-205.f/72+t*t*(91.f/48+t*(6181.f/64 \
721 +t*(6337.f/16+t*(19215.f/32+t*(28909.f/72 \
722 +t*(32121.f/320)))))))*h_1; \
724 phi[6] = -154+t*(-12757.f/12+t*(-230123.f/72+t*(-264481.f/48 \
725 +t*(-576499.f/96+t*(-686147.f/160+t*(-96277.f/48 \
726 +t*(-14221.f/24+t*(-28909.f/288+t*(-3569.f/480))))))))); \
727 dphi[6] = (-12757.f/12+t*(-230123.f/36+t*(-264481.f/16 \
728 +t*(-576499.f/24+t*(-686147.f/32+t*(-96277.f/8 \
729 +t*(-99547.f/24+t*(-28909.f/36 \
730 +t*(-10707.f/160)))))))))*h_1; \
732 phi[7] = 68776.f/7+t*(1038011.f/28+t*(31157515.f/504+t*(956669.f/16 \
733 +t*(3548009.f/96+t*(2422263.f/160+t*(197255.f/48 \
734 +t*(19959.f/28+t*(144545.f/2016+t*(3569.f/1120))))))))); \
735 dphi[7] = (1038011.f/28+t*(31157515.f/252+t*(2870007.f/16 \
736 +t*(3548009.f/24+t*(2422263.f/32+t*(197255.f/8 \
737 +t*(19959.f/4+t*(144545.f/252 \
738 +t*(32121.f/1120)))))))))*h_1; \
740 phi[8] = -56375+t*(-8314091.f/56+t*(-49901303.f/288+t*(-3763529.f/32 \
741 +t*(-19648027.f/384+t*(-9469163.f/640+t*(-545977.f/192 \
742 +t*(-156927.f/448+t*(-28909.f/1152 \
743 +t*(-3569.f/4480))))))))); \
744 dphi[8] = (-8314091.f/56+t*(-49901303.f/144+t*(-11290587.f/32 \
745 +t*(-19648027.f/96+t*(-9469163.f/128+t*(-545977.f/32 \
746 +t*(-156927.f/64+t*(-28909.f/144 \
747 +t*(-32121.f/4480)))))))))*h_1; \
749 phi[9] = 439375.f/7+t*(64188125.f/504+t*(231125375.f/2016 \
750 +t*(17306975.f/288+t*(7761805.f/384+t*(2895587.f/640 \
751 +t*(129391.f/192+t*(259715.f/4032+t*(28909.f/8064 \
752 +t*(3569.f/40320))))))))); \
753 dphi[9] = (64188125.f/504+t*(231125375.f/1008 \
754 +t*(17306975.f/96+t*(7761805.f/96+t*(2895587.f/128 \
755 +t*(129391.f/32+t*(259715.f/576+t*(28909.f/1008 \
756 +t*(3569.f/4480)))))))))*h_1; \
758 case APPROX_BSPLINE: \
759 phi[0] = (1.f/6) * (2-t) * (2-t) * (2-t); \
760 dphi[0] = -0.5f * (2-t) * (2-t) * h_1; \
762 phi[1] = (2.f/3) + t*t*(-1 + 0.5f*t); \
763 dphi[1] = t*(-2 + 1.5f*t) * h_1; \
765 phi[2] = (2.f/3) + t*t*(-1 - 0.5f*t); \
766 dphi[2] = t*(-2 - 1.5f*t) * h_1; \
768 phi[3] = (1.f/6) * (2+t) * (2+t) * (2+t); \
769 dphi[3] = 0.5f * (2+t) * (2+t) * h_1; \
778 #endif // MSM_MACROS_H