22 void casadi_blazing_1d_boor_eval(T1* f, T1* J, T1* H,
const T1* all_knots,
const casadi_int* offset,
const T1* c,
const T1* dc,
const T1* ddc,
const T1* all_x,
const casadi_int* lookup_mode, casadi_int* iw, T1* w) {
23 casadi_int n_dims = 1;
25 casadi_int n_iter, i, pivot;
26 casadi_int *boor_offset, *starts, *index, *coeff_offset;
28 boor_offset = iw; iw+=n_dims+1;
29 starts = iw; iw+=n_dims;
30 index = iw; iw+=n_dims;
32 cumprod = w; w+= n_dims+1;
35 coeff_offset[n_dims] = 0;
37 casadi_int stride1 = offset[1]-offset[0]-4;
39 simde__m256d zero = simde_mm256_set1_pd(0.0);
41 simde__m256d boor_start_0000 = zero;
42 simde__m256d boor_start_1111 = simde_mm256_set1_pd(1.0);
43 simde__m256d boor_start_0001 = simde_mm256_set_pd(1.0, 0.0, 0.0, 0.0);
44 simde__m256d boor_start_0010 = simde_mm256_set_pd(0.0, 1.0, 0.0, 0.0);
46 simde__m256d boor0_d3;
47 simde__m256d boor0_d2;
48 simde__m256d boor0_d1;
49 simde__m256d boor0_d0;
53 casadi_int degree, n_knots, n_b, L, start;
55 knots = all_knots + offset[0];
56 n_knots = offset[0+1]-offset[0];
57 n_b = n_knots-degree-1;
59 L = casadi_low(x, knots+degree, n_knots-2*degree, lookup_mode[0]);
61 if (start>n_b-degree-1) start = n_b-degree-1;
63 boor0_d3 = boor_start_0000;
64 if (x>=knots[0] && x<=knots[n_knots-1]) {
66 boor0_d3 = boor_start_1111;
67 }
else if (x==knots[n_knots-1]) {
68 boor0_d3 = boor_start_0001;
69 }
else if (knots[L+degree]==x) {
70 boor0_d3 = boor_start_0010;
72 boor0_d3 = boor_start_0001;
75 casadi_blazing_de_boor(x, knots+start, &boor0_d0, &boor0_d1, &boor0_d2, &boor0_d3);
78 simde_mm256_storeu_pd(boor0_d0v, boor0_d0);
80 const T1*
C = c+starts[0];
83 for (casadi_int i=0;i<4;++i) {
84 f[0] += boor0_d0v[i]*
C[i];
93 simde_mm256_storeu_pd(boor0_d1v, boor0_d1);
96 for (casadi_int i=0;i<3;++i) {
97 J[0] += boor0_d1v[i+1]*
C[i];
105 simde_mm256_storeu_pd(boor0_d2v, boor0_d2);
108 for (casadi_int i=0;i<2;++i) {
109 H[0] += boor0_d2v[i+2]*
C[i];