26 #ifndef CASADI_CASADI_RUNTIME_HPP
27 #define CASADI_CASADI_RUNTIME_HPP
29 #include "../calculus.hpp"
31 #include <casadi/core/casadi_export.h>
34 #define CASADI_PREFIX(ID) casadi_##ID
35 #define CASADI_CAST(TYPE, ARG) static_cast<TYPE>(ARG)
41 void casadi_copy(
const T1* x, casadi_int n, T1* y);
45 void casadi_swap(casadi_int n, T1* x, casadi_int inc_x, T1* y, casadi_int inc_y);
49 void casadi_project(
const T1* x,
const casadi_int* sp_x, T1* y,
const casadi_int* sp_y, T1* w);
52 template<
typename T1,
typename T2>
53 void casadi_densify(
const T1* x,
const casadi_int* sp_x, T2* y, casadi_int tr);
56 template<
typename T1,
typename T2>
57 void casadi_sparsify(
const T1* x, T2* y,
const casadi_int* sp_y, casadi_int tr);
61 void casadi_scal(casadi_int n, T1 alpha, T1* x);
65 void casadi_axpy(casadi_int n, T1 alpha,
const T1* x, T1* y);
69 T1 casadi_dot(casadi_int n,
const T1* x,
const T1* y);
73 T1 casadi_max_viol(casadi_int n,
const T1* x,
const T1* lb,
const T1* ub);
77 T1 casadi_sum_viol(casadi_int n,
const T1* x,
const T1* lb,
const T1* ub);
81 casadi_int casadi_iamax(casadi_int n,
const T1* x, casadi_int inc_x);
85 void casadi_clear(T1* x, casadi_int n);
89 void casadi_fill(T1* x, casadi_int n, T1 alpha);
93 void casadi_mtimes(
const T1* x,
const casadi_int* sp_x,
const T1* y,
const casadi_int* sp_y,
94 T1* z,
const casadi_int* sp_z, T1* w, casadi_int tr);
98 void casadi_mtimes_dense(
const T1* x, casadi_int nrow_x, casadi_int ncol_x,
99 const T1* y, casadi_int ncol_y, T1* z, casadi_int tr);
102 template<
typename T1>
103 void casadi_mtimes_dense_sparse(
const T1* x, casadi_int nrow_x,
104 const T1* y,
const casadi_int* sp_y, T1* z);
107 template<
typename T1>
108 void casadi_mv(
const T1* x,
const casadi_int* sp_x,
const T1* y, T1* z, casadi_int tr);
111 template<
typename T1>
112 void casadi_triusolve(
const casadi_int* sp_a,
const T1* nz_a, T1* x,
int tr,
int unity,
116 template<
typename T1>
117 void casadi_trilsolve(
const casadi_int* sp_a,
const T1* nz_a, T1* x,
int tr,
int unity,
121 template<
typename T1>
122 void casadi_trans(
const T1* x,
const casadi_int* sp_x, T1* y,
const casadi_int* sp_y,
126 template<
typename T1>
127 T1 casadi_norm_1(casadi_int n,
const T1* x);
130 template<
typename T1>
131 T1 casadi_norm_2(casadi_int n,
const T1* x);
133 #if !defined(SWIG) && defined(CASADI_L1_BLAS)
134 typedef void (*casadi_daxpy_t)(casadi_int, double,
const double*,
double*);
135 typedef double (*casadi_ddot_t )(casadi_int,
const double*,
const double*);
136 typedef void (*casadi_dscal_t)(casadi_int, double,
double*);
137 typedef double (*casadi_dnrm2_t)(casadi_int,
const double*);
138 typedef double (*casadi_dasum_t)(casadi_int,
const double*);
139 typedef void (*casadi_dcopy_t)(
const double*, casadi_int,
double*);
140 extern CASADI_EXPORT casadi_daxpy_t casadi_daxpy_hook;
141 extern CASADI_EXPORT casadi_ddot_t casadi_ddot_hook;
142 extern CASADI_EXPORT casadi_dscal_t casadi_dscal_hook;
143 extern CASADI_EXPORT casadi_dnrm2_t casadi_dnrm2_hook;
144 extern CASADI_EXPORT casadi_dasum_t casadi_dasum_hook;
145 extern CASADI_EXPORT casadi_dcopy_t casadi_dcopy_hook;
146 inline void casadi_axpy(casadi_int n,
double alpha,
const double* x,
double* y) {
147 if (casadi_daxpy_hook) { casadi_daxpy_hook(n, alpha, x, y);
return; }
148 casadi_axpy<double>(n, alpha, x, y);
150 inline double casadi_dot(casadi_int n,
const double* x,
const double* y) {
151 if (casadi_ddot_hook)
return casadi_ddot_hook(n, x, y);
152 return casadi_dot<double>(n, x, y);
154 inline void casadi_scal(casadi_int n,
double alpha,
double* x) {
155 if (casadi_dscal_hook) { casadi_dscal_hook(n, alpha, x);
return; }
156 casadi_scal<double>(n, alpha, x);
158 inline double casadi_norm_2(casadi_int n,
const double* x) {
159 if (casadi_dnrm2_hook)
return casadi_dnrm2_hook(n, x);
160 return casadi_norm_2<double>(n, x);
162 inline double casadi_norm_1(casadi_int n,
const double* x) {
163 if (casadi_dasum_hook)
return casadi_dasum_hook(n, x);
164 return casadi_norm_1<double>(n, x);
166 inline void casadi_copy(
const double* x, casadi_int n,
double* y) {
167 if (casadi_dcopy_hook) { casadi_dcopy_hook(x, n, y);
return; }
168 casadi_copy<double>(x, n, y);
175 template<
typename T1>
176 T1 casadi_norm_inf(casadi_int n,
const T1* x);
184 template<
typename T1>
185 T1 casadi_norm_inf_mul(
const T1* x,
const casadi_int* sp_x,
const T1* y,
const casadi_int* sp_y,
186 T1* dwork, casadi_int* iwork);
189 template<
typename T1>
190 T1 casadi_bilin(
const T1* A,
const casadi_int* sp_A,
const T1* x,
const T1* y);
193 template<
typename T1>
194 void casadi_kron(
const T1* a,
const casadi_int* sp_a,
const T1* b,
const casadi_int* sp_b, T1* r);
197 template<
typename T1>
198 void casadi_kron_dense(
const T1* a, casadi_int mA, casadi_int nA,
199 const T1* b, casadi_int mB, casadi_int nB, T1* r);
202 template<
typename T1>
203 void casadi_kron_dense_sparse(
const T1* a, casadi_int mA, casadi_int nA,
204 const T1* b,
const casadi_int* sp_b, T1* r);
207 template<
typename T1>
208 void casadi_kron_sparse_dense(
const T1* a,
const casadi_int* sp_a,
209 const T1* b, casadi_int mB, casadi_int nB, T1* r);
212 template<
typename T1>
213 void casadi_kron_contract_inner(
const T1* m,
const casadi_int* sp_m,
214 const T1* b,
const casadi_int* sp_b,
215 T1* y,
const casadi_int* sp_y, T1* w);
218 template<
typename T1>
219 void casadi_kron_contract_inner_dense(
const T1* m, casadi_int mA, casadi_int nA,
220 const T1* b, casadi_int mB, casadi_int nB,
224 template<
typename T1>
225 void casadi_kron_contract_inner_dense_sparse(
const T1* m, casadi_int mA, casadi_int nA,
226 const T1* b,
const casadi_int* sp_b,
230 template<
typename T1>
231 void casadi_kron_contract_inner_sparse_dense(
const T1* m,
const casadi_int* sp_m,
232 const T1* b, casadi_int mB, casadi_int nB,
233 T1* y,
const casadi_int* sp_y);
236 template<
typename T1>
237 void casadi_kron_contract_outer(
const T1* m,
const casadi_int* sp_m,
238 const T1* a,
const casadi_int* sp_a,
239 T1* y,
const casadi_int* sp_y, T1* w);
242 template<
typename T1>
243 void casadi_kron_contract_outer_dense(
const T1* m, casadi_int mB, casadi_int nB,
244 const T1* a, casadi_int mA, casadi_int nA,
248 template<
typename T1>
249 void casadi_kron_contract_outer_dense_sparse(
const T1* m, casadi_int mB, casadi_int nB,
250 const T1* a,
const casadi_int* sp_a,
254 template<
typename T1>
255 void casadi_kron_contract_outer_sparse_dense(
const T1* m,
const casadi_int* sp_m,
256 const T1* a, casadi_int mA, casadi_int nA,
257 T1* y,
const casadi_int* sp_y);
260 template<
typename T1>
261 void casadi_rank1(T1* A,
const casadi_int* sp_A, T1 alpha,
const T1* x);
264 template<
typename T1>
265 void casadi_getu(
const T1* x,
const casadi_int* sp_x, T1* v);
268 template<
typename T1>
269 T1 casadi_polyval(
const T1* p, casadi_int n, T1 x);
272 casadi_int casadi_flip(casadi_int* corner, casadi_int ndim);
275 template<
typename T1>
276 casadi_int casadi_low(T1 x,
const T1* grid, casadi_int ng, casadi_int lookup_mode);
279 template<
typename T1>
280 void casadi_interpn_weights(casadi_int ndim,
const T1* grid,
const casadi_int* offset,
281 const T1* x, T1* alpha, casadi_int* index);
284 template<
typename T1>
285 T1 casadi_interpn_interpolate(casadi_int ndim,
const casadi_int* offset,
const T1* values,
286 const T1* alpha,
const casadi_int* index,
287 const casadi_int* corner, T1* coeff);
290 template<
typename T1>
291 T1 casadi_interpn(casadi_int ndim,
const T1* grid,
const casadi_int* offset,
const T1* values,
292 const T1* x, casadi_int* iw, T1* w);
295 template<
typename T1>
296 void casadi_interpn_grad(T1* grad, casadi_int ndim,
const T1* grid,
const casadi_int* offset,
297 const T1* values,
const T1* x, casadi_int* iw, T1* w);
300 template<
typename T1>
301 void casadi_de_boor(T1 x,
const T1* knots, casadi_int n_knots, casadi_int degree, T1* boor);
304 template<
typename T1>
305 void casadi_tensor_ttv(T1* ret, casadi_int dim, casadi_int n_dims,
306 const T1* all_w,
const casadi_int* w_offset,
307 const casadi_int* starts,
const casadi_int* strides,
308 const T1* c, casadi_int m,
309 T1 weight, casadi_int offset);
312 template<
typename T1>
313 void casadi_nd_boor_eval(T1* ret, casadi_int n_dims,
const T1* knots,
const casadi_int* offset,
314 const casadi_int* degree,
const casadi_int* strides,
const T1* c,
316 const T1* x,
const casadi_int* lookup_mode, casadi_int* iw, T1* w);
318 template<
typename T1>
319 T1 casadi_mmax(
const T1* x, casadi_int n, T1 is_dense);
321 template<
typename T1>
322 T1 casadi_mmin(
const T1* x, casadi_int n, casadi_int is_dense);
324 template<
typename T1>
325 T1 casadi_vfmax(
const T1* x, casadi_int n, T1 r);
327 template<
typename T1>
328 T1 casadi_vfmin(
const T1* x, casadi_int n, T1 r);
331 inline void casadi_fill_casadi_int(casadi_int* x, casadi_int n, casadi_int alpha) {
332 casadi_fill(x, n, alpha);
336 inline void casadi_clear_casadi_int(casadi_int* x, casadi_int n) {
340 template<
typename T1>
341 void casadi_bound_consistency(casadi_int n, T1* x, T1* lam,
342 const T1* lbx,
const T1* ubx);
345 template<
typename T1>
346 T1 casadi_logsumexp(
const T1* x, casadi_int n);
352 template<
typename T1>
356 #define CASADI_GEMM_NT(M, N, K, A, LDA, B, LDB, C, LDC) \
357 for (i=0, rr=C; i<M; ++i) \
358 for (j=0; j<N; ++j, ++rr) \
359 for (k=0, ss=A+i*LDA, tt=B+j*LDB; k<K; ++k) \
363 #include "casadi_copy.hpp"
364 #include "casadi_cvx.hpp"
365 #include "casadi_swap.hpp"
366 #include "casadi_project.hpp"
367 #include "casadi_tri_project.hpp"
368 #include "casadi_densify.hpp"
369 #include "casadi_sparsify.hpp"
370 #include "casadi_scal.hpp"
371 #include "casadi_iamax.hpp"
372 #include "casadi_axpy.hpp"
373 #include "casadi_dot.hpp"
374 #include "casadi_kron.hpp"
375 #include "casadi_kron_dense.hpp"
376 #include "casadi_kron_dense_sparse.hpp"
377 #include "casadi_kron_sparse_dense.hpp"
378 #include "casadi_kron_contract_inner.hpp"
379 #include "casadi_kron_contract_inner_dense.hpp"
380 #include "casadi_kron_contract_inner_dense_sparse.hpp"
381 #include "casadi_kron_contract_inner_sparse_dense.hpp"
382 #include "casadi_kron_contract_outer.hpp"
383 #include "casadi_kron_contract_outer_dense.hpp"
384 #include "casadi_kron_contract_outer_dense_sparse.hpp"
385 #include "casadi_kron_contract_outer_sparse_dense.hpp"
386 #include "casadi_clear.hpp"
387 #include "casadi_clip_max.hpp"
388 #include "casadi_clip_min.hpp"
389 #include "casadi_fill.hpp"
390 #include "casadi_max_viol.hpp"
391 #include "casadi_mmin.hpp"
392 #include "casadi_mmax.hpp"
393 #include "casadi_vfmin.hpp"
394 #include "casadi_vfmax.hpp"
395 #include "casadi_vector_fmin.hpp"
396 #include "casadi_vector_fmax.hpp"
397 #include "casadi_sum_viol.hpp"
398 #include "casadi_mtimes.hpp"
399 #include "casadi_mtimes_dense.hpp"
400 #include "casadi_mtimes_dense_sparse.hpp"
401 #include "casadi_mv.hpp"
402 #include "casadi_trilsolve.hpp"
403 #include "casadi_triusolve.hpp"
404 #include "casadi_trans.hpp"
405 #include "casadi_norm_1.hpp"
406 #include "casadi_norm_2.hpp"
407 #include "casadi_norm_inf.hpp"
408 #include "casadi_masked_norm_inf.hpp"
409 #include "casadi_norm_inf_mul.hpp"
410 #include "casadi_bilin.hpp"
411 #include "casadi_rank1.hpp"
412 #include "casadi_low.hpp"
413 #include "casadi_flip.hpp"
414 #include "casadi_polyval.hpp"
415 #include "casadi_de_boor.hpp"
416 #include "casadi_tensor_ttv.hpp"
417 #include "casadi_nd_boor_eval.hpp"
418 #include "casadi_nd_boor_dual_eval.hpp"
419 #include "casadi_interpn_weights.hpp"
420 #include "casadi_interpn_interpolate.hpp"
421 #include "casadi_interpn.hpp"
422 #include "casadi_interpn_grad.hpp"
423 #include "casadi_mv_dense.hpp"
424 #include "casadi_finite_diff.hpp"
425 #include "casadi_file_slurp.hpp"
426 #include "casadi_ldl.hpp"
427 #include "casadi_qr.hpp"
428 #include "casadi_det.hpp"
429 #include "casadi_qp.hpp"
430 #include "casadi_qrqp.hpp"
431 #include "casadi_kkt.hpp"
432 #include "casadi_ipqp.hpp"
433 #include "casadi_oracle.hpp"
434 #include "casadi_nlp.hpp"
435 #include "casadi_sqpmethod.hpp"
436 #include "casadi_feasiblesqpmethod.hpp"
437 #include "casadi_bfgs.hpp"
438 #include "casadi_regularize.hpp"
439 #include "casadi_newton.hpp"
440 #include "casadi_bound_consistency.hpp"
441 #include "casadi_lsqr.hpp"
442 #include "casadi_dense_lsqr.hpp"
443 #include "casadi_cache.hpp"
444 #include "casadi_convexify.hpp"
445 #include "casadi_socp.hpp"
446 #include "casadi_logsumexp.hpp"
447 #include "casadi_sum.hpp"
448 #include "casadi_sparsity.hpp"
449 #include "casadi_jac.hpp"
450 #include "casadi_oracle_callback.hpp"
451 #include "casadi_ocp_block.hpp"
452 #include "casadi_scaled_copy.hpp"