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)
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>
81 casadi_int
casadi_iamax(casadi_int n,
const T1* x, casadi_int inc_x);
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);
99 const T1* y, casadi_int ncol_y, T1* z, casadi_int tr);
102 template<
typename T1>
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>
116 template<
typename T1>
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>
130 template<
typename T1>
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);
159 if (casadi_dnrm2_hook)
return casadi_dnrm2_hook(n, x);
160 return casadi_norm_2<double>(n, 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>
184 template<
typename T1>
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>
199 const T1* b, casadi_int mB, casadi_int nB, T1* r);
202 template<
typename T1>
204 const T1* b,
const casadi_int* sp_b, T1* r);
207 template<
typename T1>
209 const T1* b, casadi_int mB, casadi_int nB, T1* r);
212 template<
typename T1>
214 const T1* b,
const casadi_int* sp_b,
215 T1* y,
const casadi_int* sp_y, T1* w);
218 template<
typename T1>
220 const T1* b, casadi_int mB, casadi_int nB,
224 template<
typename T1>
226 const T1* b,
const casadi_int* sp_b,
230 template<
typename T1>
232 const T1* b, casadi_int mB, casadi_int nB,
233 T1* y,
const casadi_int* sp_y);
236 template<
typename T1>
238 const T1* a,
const casadi_int* sp_a,
239 T1* y,
const casadi_int* sp_y, T1* w);
242 template<
typename T1>
244 const T1* a, casadi_int mA, casadi_int nA,
248 template<
typename T1>
250 const T1* a,
const casadi_int* sp_a,
254 template<
typename T1>
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>
268 template<
typename T1>
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>
281 const T1* x, T1* alpha, casadi_int* index);
284 template<
typename T1>
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>
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>
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>
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>
321 template<
typename T1>
324 template<
typename T1>
327 template<
typename T1>
340 template<
typename T1>
342 const T1* lbx,
const T1* ubx);
345 template<
typename T1>
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"
T1 casadi_max_viol(casadi_int n, const T1 *x, const T1 *lb, const T1 *ub)
Largest bound violation.
void casadi_kron_contract_inner(const T1 *m, const casadi_int *sp_m, const T1 *b, const casadi_int *sp_b, T1 *y, const casadi_int *sp_y, T1 *w)
T1 casadi_logsumexp(const T1 *x, casadi_int n)
T1 casadi_interpn_interpolate(casadi_int ndim, const casadi_int *offset, const T1 *values, const T1 *alpha, const casadi_int *index, const casadi_int *corner, T1 *coeff)
void casadi_interpn_weights(casadi_int ndim, const T1 *grid, const casadi_int *offset, const T1 *x, T1 *alpha, casadi_int *index)
T1 casadi_interpn(casadi_int ndim, const T1 *grid, const casadi_int *offset, const T1 *values, const T1 *x, casadi_int *iw, T1 *w)
T1 casadi_norm_1(casadi_int n, const T1 *x)
NORM_1: ||x||_1 -> return.
void casadi_triusolve(const casadi_int *sp_a, const T1 *nz_a, T1 *x, int tr, int unity, casadi_int nrhs)
Linear solve, upper triangular matrix, optionally transposed or unity diagonal (1 - R)
void casadi_kron_contract_inner_dense(const T1 *m, casadi_int mA, casadi_int nA, const T1 *b, casadi_int mB, casadi_int nB, T1 *y)
void casadi_mtimes_dense_sparse(const T1 *x, casadi_int nrow_x, const T1 *y, const casadi_int *sp_y, T1 *z)
Dense * sparse matrix multiplication: z <- z + x*y (z, x dense col-major)
void casadi_kron_sparse_dense(const T1 *a, const casadi_int *sp_a, const T1 *b, casadi_int mB, casadi_int nB, T1 *r)
casadi_int casadi_low(T1 x, const T1 *grid, casadi_int ng, casadi_int lookup_mode)
void casadi_kron_contract_outer_dense(const T1 *m, casadi_int mB, casadi_int nB, const T1 *a, casadi_int mA, casadi_int nA, T1 *y)
void casadi_sparsify(const T1 *x, T2 *y, const casadi_int *sp_y, casadi_int tr)
Convert dense to sparse.
T1 casadi_bilin(const T1 *A, const casadi_int *sp_A, const T1 *x, const T1 *y)
void casadi_kron_contract_inner_sparse_dense(const T1 *m, const casadi_int *sp_m, const T1 *b, casadi_int mB, casadi_int nB, T1 *y, const casadi_int *sp_y)
void casadi_project(const T1 *x, const casadi_int *sp_x, T1 *y, const casadi_int *sp_y, T1 *w)
Sparse copy: y <- x, w work vector (length >= number of rows)
void casadi_mtimes_dense(const T1 *x, casadi_int nrow_x, casadi_int ncol_x, const T1 *y, casadi_int ncol_y, T1 *z, casadi_int tr)
Dense matrix-matrix multiplication: z <- z + x*y (column-major)
void casadi_bound_consistency(casadi_int n, T1 *x, T1 *lam, const T1 *lbx, const T1 *ubx)
T1 casadi_norm_inf_mul(const T1 *x, const casadi_int *sp_x, const T1 *y, const casadi_int *sp_y, T1 *dwork, casadi_int *iwork)
casadi_int casadi_iamax(casadi_int n, const T1 *x, casadi_int inc_x)
IAMAX: index corresponding to the entry with the largest absolute value.
void casadi_kron_contract_inner_dense_sparse(const T1 *m, casadi_int mA, casadi_int nA, const T1 *b, const casadi_int *sp_b, T1 *y)
T1 casadi_sum_viol(casadi_int n, const T1 *x, const T1 *lb, const T1 *ub)
Sum of bound violations.
void casadi_clear_casadi_int(casadi_int *x, casadi_int n)
void casadi_copy(const T1 *x, casadi_int n, T1 *y)
COPY: y <-x.
void casadi_getu(const T1 *x, const casadi_int *sp_x, T1 *v)
Get the nonzeros for the upper triangular half.
void casadi_fill(T1 *x, casadi_int n, T1 alpha)
FILL: x <- alpha.
void casadi_kron_contract_outer_dense_sparse(const T1 *m, casadi_int mB, casadi_int nB, const T1 *a, const casadi_int *sp_a, T1 *y)
T1 casadi_norm_2(casadi_int n, const T1 *x)
NORM_2: ||x||_2 -> return.
casadi_int casadi_flip(casadi_int *corner, casadi_int ndim)
void casadi_interpn_grad(T1 *grad, casadi_int ndim, const T1 *grid, const casadi_int *offset, const T1 *values, const T1 *x, casadi_int *iw, T1 *w)
T1 casadi_vfmax(const T1 *x, casadi_int n, T1 r)
T1 casadi_vfmin(const T1 *x, casadi_int n, T1 r)
void casadi_tensor_ttv(T1 *ret, casadi_int dim, casadi_int n_dims, const T1 *all_w, const casadi_int *w_offset, const casadi_int *starts, const casadi_int *strides, const T1 *c, casadi_int m, T1 weight, casadi_int offset)
void casadi_mtimes(const T1 *x, const casadi_int *sp_x, const T1 *y, const casadi_int *sp_y, T1 *z, const casadi_int *sp_z, T1 *w, casadi_int tr)
Sparse matrix-matrix multiplication: z <- z + x*y.
T1 casadi_dot(casadi_int n, const T1 *x, const T1 *y)
Inner product.
T1 casadi_mmax(const T1 *x, casadi_int n, T1 is_dense)
void casadi_densify(const T1 *x, const casadi_int *sp_x, T2 *y, casadi_int tr)
Convert sparse to dense.
void casadi_fill_casadi_int(casadi_int *x, casadi_int n, casadi_int alpha)
void casadi_scal(casadi_int n, T1 alpha, T1 *x)
SCAL: x <- alpha*x.
void casadi_swap(casadi_int n, T1 *x, casadi_int inc_x, T1 *y, casadi_int inc_y)
SWAP: x <-> y.
int casadi_newton(const casadi_newton_mem< T1 > *m)
void casadi_kron(const T1 *a, const casadi_int *sp_a, const T1 *b, const casadi_int *sp_b, T1 *r)
T1 casadi_mmin(const T1 *x, casadi_int n, casadi_int is_dense)
void casadi_axpy(casadi_int n, T1 alpha, const T1 *x, T1 *y)
AXPY: y <- a*x + y.
void casadi_trilsolve(const casadi_int *sp_a, const T1 *nz_a, T1 *x, int tr, int unity, casadi_int nrhs)
Linear solve, lower triangular matrix, optionally transposed or unity diagonal (1 - L)
void casadi_de_boor(T1 x, const T1 *knots, casadi_int n_knots, casadi_int degree, T1 *boor)
T1 casadi_norm_inf(casadi_int n, const T1 *x)
void casadi_kron_contract_outer_sparse_dense(const T1 *m, const casadi_int *sp_m, const T1 *a, casadi_int mA, casadi_int nA, T1 *y, const casadi_int *sp_y)
void casadi_clear(T1 *x, casadi_int n)
CLEAR: x <- 0.
void casadi_kron_dense(const T1 *a, casadi_int mA, casadi_int nA, const T1 *b, casadi_int mB, casadi_int nB, T1 *r)
void casadi_mv(const T1 *x, const casadi_int *sp_x, const T1 *y, T1 *z, casadi_int tr)
Sparse matrix-vector multiplication: z <- z + x*y.
void casadi_rank1(T1 *A, const casadi_int *sp_A, T1 alpha, const T1 *x)
Adds a multiple alpha/2 of the outer product mul(x, trans(x)) to A.
void casadi_trans(const T1 *x, const casadi_int *sp_x, T1 *y, const casadi_int *sp_y, casadi_int *tmp)
TRANS: y <- trans(x) , w work vector (length >= rows x)
void casadi_kron_contract_outer(const T1 *m, const casadi_int *sp_m, const T1 *a, const casadi_int *sp_a, T1 *y, const casadi_int *sp_y, T1 *w)
void casadi_nd_boor_eval(T1 *ret, casadi_int n_dims, const T1 *knots, const casadi_int *offset, const casadi_int *degree, const casadi_int *strides, const T1 *c, casadi_int m, const T1 *x, const casadi_int *lookup_mode, casadi_int *iw, T1 *w)
void casadi_kron_dense_sparse(const T1 *a, casadi_int mA, casadi_int nA, const T1 *b, const casadi_int *sp_b, T1 *r)
T1 casadi_polyval(const T1 *p, casadi_int n, T1 x)
Evaluate a polynomial.