wip
This commit is contained in:
6
third_party/SConscript
vendored
Normal file
6
third_party/SConscript
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Import('env')
|
||||||
|
|
||||||
|
env.Library('json11', ['json11/json11.cpp'], CCFLAGS=env['CCFLAGS'] + ['-Wno-unqualified-std-cast-call'])
|
||||||
|
env.Append(CPPPATH=[Dir('json11')])
|
||||||
|
|
||||||
|
env.Library('kaitai', ['kaitai/kaitaistream.cpp'], CPPDEFINES=['KS_STR_ENCODING_NONE'])
|
||||||
BIN
third_party/acados/Darwin/t_renderer
vendored
Normal file
BIN
third_party/acados/Darwin/t_renderer
vendored
Normal file
Binary file not shown.
6
third_party/acados/acados_template/.gitignore
vendored
Normal file
6
third_party/acados/acados_template/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
__pycache__/
|
||||||
|
|
||||||
|
# Cython intermediates
|
||||||
|
*_pyx.c
|
||||||
|
*_pyx.o
|
||||||
|
*_pyx.so
|
||||||
101
third_party/acados/acados_template/c_templates_tera/acados_sim_solver.in.h
vendored
Normal file
101
third_party/acados/acados_template/c_templates_tera/acados_sim_solver.in.h
vendored
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_{{ model.name }}_H_
|
||||||
|
#define ACADOS_SIM_{{ model.name }}_H_
|
||||||
|
|
||||||
|
#include "acados_c/sim_interface.h"
|
||||||
|
#include "acados_c/external_function_interface.h"
|
||||||
|
|
||||||
|
#define {{ model.name | upper }}_NX {{ dims.nx }}
|
||||||
|
#define {{ model.name | upper }}_NZ {{ dims.nz }}
|
||||||
|
#define {{ model.name | upper }}_NU {{ dims.nu }}
|
||||||
|
#define {{ model.name | upper }}_NP {{ dims.np }}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ** capsule for solver data **
|
||||||
|
typedef struct sim_solver_capsule
|
||||||
|
{
|
||||||
|
// acados objects
|
||||||
|
sim_in *acados_sim_in;
|
||||||
|
sim_out *acados_sim_out;
|
||||||
|
sim_solver *acados_sim_solver;
|
||||||
|
sim_opts *acados_sim_opts;
|
||||||
|
sim_config *acados_sim_config;
|
||||||
|
void *acados_sim_dims;
|
||||||
|
|
||||||
|
/* external functions */
|
||||||
|
// ERK
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_forw_vde_casadi;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_vde_adj_casadi;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_expl_ode_fun_casadi;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_expl_ode_hess;
|
||||||
|
|
||||||
|
// IRK
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_impl_dae_fun;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_impl_dae_fun_jac_x_xdot_z;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_impl_dae_jac_x_xdot_u_z;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_impl_dae_hess;
|
||||||
|
|
||||||
|
// GNSF
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_gnsf_phi_fun;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_gnsf_phi_fun_jac_y;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_gnsf_phi_jac_y_uhat;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_gnsf_f_lo_jac_x1_x1dot_u_z;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} * sim_gnsf_get_matrices_fun;
|
||||||
|
|
||||||
|
} sim_solver_capsule;
|
||||||
|
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_sim_create(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_sim_solve(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_sim_free(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_sim_update_params(sim_solver_capsule *capsule, double *value, int np);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_config * {{ model.name }}_acados_get_sim_config(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_in * {{ model.name }}_acados_get_sim_in(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_out * {{ model.name }}_acados_get_sim_out(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT void * {{ model.name }}_acados_get_sim_dims(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_opts * {{ model.name }}_acados_get_sim_opts(sim_solver_capsule *capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_solver * {{ model.name }}_acados_get_sim_solver(sim_solver_capsule *capsule);
|
||||||
|
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_solver_capsule * {{ model.name }}_acados_sim_solver_create_capsule(void);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_sim_solver_free_capsule(sim_solver_capsule *capsule);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_{{ model.name }}_H_
|
||||||
241
third_party/acados/acados_template/c_templates_tera/acados_solver.in.h
vendored
Normal file
241
third_party/acados/acados_template/c_templates_tera/acados_solver.in.h
vendored
Normal file
@@ -0,0 +1,241 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ACADOS_SOLVER_{{ model.name }}_H_
|
||||||
|
#define ACADOS_SOLVER_{{ model.name }}_H_
|
||||||
|
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
#include "acados_c/ocp_nlp_interface.h"
|
||||||
|
#include "acados_c/external_function_interface.h"
|
||||||
|
|
||||||
|
#define {{ model.name | upper }}_NX {{ dims.nx }}
|
||||||
|
#define {{ model.name | upper }}_NZ {{ dims.nz }}
|
||||||
|
#define {{ model.name | upper }}_NU {{ dims.nu }}
|
||||||
|
#define {{ model.name | upper }}_NP {{ dims.np }}
|
||||||
|
#define {{ model.name | upper }}_NBX {{ dims.nbx }}
|
||||||
|
#define {{ model.name | upper }}_NBX0 {{ dims.nbx_0 }}
|
||||||
|
#define {{ model.name | upper }}_NBU {{ dims.nbu }}
|
||||||
|
#define {{ model.name | upper }}_NSBX {{ dims.nsbx }}
|
||||||
|
#define {{ model.name | upper }}_NSBU {{ dims.nsbu }}
|
||||||
|
#define {{ model.name | upper }}_NSH {{ dims.nsh }}
|
||||||
|
#define {{ model.name | upper }}_NSG {{ dims.nsg }}
|
||||||
|
#define {{ model.name | upper }}_NSPHI {{ dims.nsphi }}
|
||||||
|
#define {{ model.name | upper }}_NSHN {{ dims.nsh_e }}
|
||||||
|
#define {{ model.name | upper }}_NSGN {{ dims.nsg_e }}
|
||||||
|
#define {{ model.name | upper }}_NSPHIN {{ dims.nsphi_e }}
|
||||||
|
#define {{ model.name | upper }}_NSBXN {{ dims.nsbx_e }}
|
||||||
|
#define {{ model.name | upper }}_NS {{ dims.ns }}
|
||||||
|
#define {{ model.name | upper }}_NSN {{ dims.ns_e }}
|
||||||
|
#define {{ model.name | upper }}_NG {{ dims.ng }}
|
||||||
|
#define {{ model.name | upper }}_NBXN {{ dims.nbx_e }}
|
||||||
|
#define {{ model.name | upper }}_NGN {{ dims.ng_e }}
|
||||||
|
#define {{ model.name | upper }}_NY0 {{ dims.ny_0 }}
|
||||||
|
#define {{ model.name | upper }}_NY {{ dims.ny }}
|
||||||
|
#define {{ model.name | upper }}_NYN {{ dims.ny_e }}
|
||||||
|
#define {{ model.name | upper }}_N {{ dims.N }}
|
||||||
|
#define {{ model.name | upper }}_NH {{ dims.nh }}
|
||||||
|
#define {{ model.name | upper }}_NPHI {{ dims.nphi }}
|
||||||
|
#define {{ model.name | upper }}_NHN {{ dims.nh_e }}
|
||||||
|
#define {{ model.name | upper }}_NPHIN {{ dims.nphi_e }}
|
||||||
|
#define {{ model.name | upper }}_NR {{ dims.nr }}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{%- if not solver_options.custom_update_filename %}
|
||||||
|
{%- set custom_update_filename = "" %}
|
||||||
|
{% else %}
|
||||||
|
{%- set custom_update_filename = solver_options.custom_update_filename %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
// ** capsule for solver data **
|
||||||
|
typedef struct {{ model.name }}_solver_capsule
|
||||||
|
{
|
||||||
|
// acados objects
|
||||||
|
ocp_nlp_in *nlp_in;
|
||||||
|
ocp_nlp_out *nlp_out;
|
||||||
|
ocp_nlp_out *sens_out;
|
||||||
|
ocp_nlp_solver *nlp_solver;
|
||||||
|
void *nlp_opts;
|
||||||
|
ocp_nlp_plan_t *nlp_solver_plan;
|
||||||
|
ocp_nlp_config *nlp_config;
|
||||||
|
ocp_nlp_dims *nlp_dims;
|
||||||
|
|
||||||
|
// number of expected runtime parameters
|
||||||
|
unsigned int nlp_np;
|
||||||
|
|
||||||
|
/* external functions */
|
||||||
|
// dynamics
|
||||||
|
{% if solver_options.integrator_type == "ERK" %}
|
||||||
|
external_function_param_casadi *forw_vde_casadi;
|
||||||
|
external_function_param_casadi *expl_ode_fun;
|
||||||
|
{% if solver_options.hessian_approx == "EXACT" %}
|
||||||
|
external_function_param_casadi *hess_vde_casadi;
|
||||||
|
{%- endif %}
|
||||||
|
{% elif solver_options.integrator_type == "IRK" %}
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *impl_dae_fun;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *impl_dae_fun_jac_x_xdot_z;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *impl_dae_jac_x_xdot_u_z;
|
||||||
|
{% if solver_options.hessian_approx == "EXACT" %}
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *impl_dae_hess;
|
||||||
|
{%- endif %}
|
||||||
|
{% elif solver_options.integrator_type == "LIFTED_IRK" %}
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *impl_dae_fun;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *impl_dae_fun_jac_x_xdot_u;
|
||||||
|
{% elif solver_options.integrator_type == "GNSF" %}
|
||||||
|
external_function_param_casadi *gnsf_phi_fun;
|
||||||
|
external_function_param_casadi *gnsf_phi_fun_jac_y;
|
||||||
|
external_function_param_casadi *gnsf_phi_jac_y_uhat;
|
||||||
|
external_function_param_casadi *gnsf_f_lo_jac_x1_x1dot_u_z;
|
||||||
|
external_function_param_casadi *gnsf_get_matrices_fun;
|
||||||
|
{% elif solver_options.integrator_type == "DISCRETE" %}
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *discr_dyn_phi_fun;
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *discr_dyn_phi_fun_jac_ut_xt;
|
||||||
|
{%- if solver_options.hessian_approx == "EXACT" %}
|
||||||
|
external_function_param_{{ model.dyn_ext_fun_type }} *discr_dyn_phi_fun_jac_ut_xt_hess;
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
|
||||||
|
// cost
|
||||||
|
{% if cost.cost_type == "NONLINEAR_LS" %}
|
||||||
|
external_function_param_casadi *cost_y_fun;
|
||||||
|
external_function_param_casadi *cost_y_fun_jac_ut_xt;
|
||||||
|
external_function_param_casadi *cost_y_hess;
|
||||||
|
{% elif cost.cost_type == "CONVEX_OVER_NONLINEAR" %}
|
||||||
|
external_function_param_casadi *conl_cost_fun;
|
||||||
|
external_function_param_casadi *conl_cost_fun_jac_hess;
|
||||||
|
{%- elif cost.cost_type == "EXTERNAL" %}
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type }} *ext_cost_fun;
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type }} *ext_cost_fun_jac;
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type }} *ext_cost_fun_jac_hess;
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if cost.cost_type_0 == "NONLINEAR_LS" %}
|
||||||
|
external_function_param_casadi cost_y_0_fun;
|
||||||
|
external_function_param_casadi cost_y_0_fun_jac_ut_xt;
|
||||||
|
external_function_param_casadi cost_y_0_hess;
|
||||||
|
{% elif cost.cost_type_0 == "CONVEX_OVER_NONLINEAR" %}
|
||||||
|
external_function_param_casadi conl_cost_0_fun;
|
||||||
|
external_function_param_casadi conl_cost_0_fun_jac_hess;
|
||||||
|
{% elif cost.cost_type_0 == "EXTERNAL" %}
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type_0 }} ext_cost_0_fun;
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type_0 }} ext_cost_0_fun_jac;
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type_0 }} ext_cost_0_fun_jac_hess;
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{% if cost.cost_type_e == "NONLINEAR_LS" %}
|
||||||
|
external_function_param_casadi cost_y_e_fun;
|
||||||
|
external_function_param_casadi cost_y_e_fun_jac_ut_xt;
|
||||||
|
external_function_param_casadi cost_y_e_hess;
|
||||||
|
{% elif cost.cost_type_e == "CONVEX_OVER_NONLINEAR" %}
|
||||||
|
external_function_param_casadi conl_cost_e_fun;
|
||||||
|
external_function_param_casadi conl_cost_e_fun_jac_hess;
|
||||||
|
{% elif cost.cost_type_e == "EXTERNAL" %}
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type_e }} ext_cost_e_fun;
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type_e }} ext_cost_e_fun_jac;
|
||||||
|
external_function_param_{{ cost.cost_ext_fun_type_e }} ext_cost_e_fun_jac_hess;
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
// constraints
|
||||||
|
{%- if constraints.constr_type == "BGP" %}
|
||||||
|
external_function_param_casadi *phi_constraint;
|
||||||
|
{% elif constraints.constr_type == "BGH" and dims.nh > 0 %}
|
||||||
|
external_function_param_casadi *nl_constr_h_fun_jac;
|
||||||
|
external_function_param_casadi *nl_constr_h_fun;
|
||||||
|
{%- if solver_options.hessian_approx == "EXACT" %}
|
||||||
|
external_function_param_casadi *nl_constr_h_fun_jac_hess;
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{% if constraints.constr_type_e == "BGP" %}
|
||||||
|
external_function_param_casadi phi_e_constraint;
|
||||||
|
{% elif constraints.constr_type_e == "BGH" and dims.nh_e > 0 %}
|
||||||
|
external_function_param_casadi nl_constr_h_e_fun_jac;
|
||||||
|
external_function_param_casadi nl_constr_h_e_fun;
|
||||||
|
{%- if solver_options.hessian_approx == "EXACT" %}
|
||||||
|
external_function_param_casadi nl_constr_h_e_fun_jac_hess;
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{%- if custom_update_filename != "" %}
|
||||||
|
void * custom_update_memory;
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
} {{ model.name }}_solver_capsule;
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT {{ model.name }}_solver_capsule * {{ model.name }}_acados_create_capsule(void);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_free_capsule({{ model.name }}_solver_capsule *capsule);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_create({{ model.name }}_solver_capsule * capsule);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_reset({{ model.name }}_solver_capsule* capsule, int reset_qp_solver_mem);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generic version of {{ model.name }}_acados_create which allows to use a different number of shooting intervals than
|
||||||
|
* the number used for code generation. If new_time_steps=NULL and n_time_steps matches the number used for code
|
||||||
|
* generation, the time-steps from code generation is used.
|
||||||
|
*/
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_create_with_discretization({{ model.name }}_solver_capsule * capsule, int n_time_steps, double* new_time_steps);
|
||||||
|
/**
|
||||||
|
* Update the time step vector. Number N must be identical to the currently set number of shooting nodes in the
|
||||||
|
* nlp_solver_plan. Returns 0 if no error occurred and a otherwise a value other than 0.
|
||||||
|
*/
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_update_time_steps({{ model.name }}_solver_capsule * capsule, int N, double* new_time_steps);
|
||||||
|
/**
|
||||||
|
* This function is used for updating an already initialized solver with a different number of qp_cond_N.
|
||||||
|
*/
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_update_qp_solver_cond_N({{ model.name }}_solver_capsule * capsule, int qp_solver_cond_N);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_update_params({{ model.name }}_solver_capsule * capsule, int stage, double *value, int np);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_update_params_sparse({{ model.name }}_solver_capsule * capsule, int stage, int *idx, double *p, int n_update);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_solve({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_free({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT void {{ model.name }}_acados_print_stats({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT int {{ model.name }}_acados_custom_update({{ model.name }}_solver_capsule* capsule, double* data, int data_len);
|
||||||
|
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_in *{{ model.name }}_acados_get_nlp_in({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_out *{{ model.name }}_acados_get_nlp_out({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_out *{{ model.name }}_acados_get_sens_out({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_solver *{{ model.name }}_acados_get_nlp_solver({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_config *{{ model.name }}_acados_get_nlp_config({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT void *{{ model.name }}_acados_get_nlp_opts({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_dims *{{ model.name }}_acados_get_nlp_dims({{ model.name }}_solver_capsule * capsule);
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_plan_t *{{ model.name }}_acados_get_nlp_plan({{ model.name }}_solver_capsule * capsule);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SOLVER_{{ model.name }}_H_
|
||||||
110
third_party/acados/acados_template/c_templates_tera/constraints.in.h
vendored
Normal file
110
third_party/acados/acados_template/c_templates_tera/constraints.in.h
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef {{ model.name }}_CONSTRAINTS
|
||||||
|
#define {{ model.name }}_CONSTRAINTS
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{% if dims.nphi > 0 %}
|
||||||
|
int {{ model.name }}_phi_constraint(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_phi_constraint_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_phi_constraint_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_phi_constraint_sparsity_out(int);
|
||||||
|
int {{ model.name }}_phi_constraint_n_in(void);
|
||||||
|
int {{ model.name }}_phi_constraint_n_out(void);
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if dims.nphi_e > 0 %}
|
||||||
|
int {{ model.name }}_phi_e_constraint(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_phi_e_constraint_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_phi_e_constraint_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_phi_e_constraint_sparsity_out(int);
|
||||||
|
int {{ model.name }}_phi_e_constraint_n_in(void);
|
||||||
|
int {{ model.name }}_phi_e_constraint_n_out(void);
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if dims.nh > 0 %}
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_constr_h_fun_jac_uxt_zt_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_constr_h_fun_jac_uxt_zt_sparsity_out(int);
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_n_in(void);
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_constr_h_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_constr_h_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_constr_h_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_constr_h_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_constr_h_fun_n_in(void);
|
||||||
|
int {{ model.name }}_constr_h_fun_n_out(void);
|
||||||
|
|
||||||
|
{% if solver_options.hessian_approx == "EXACT" -%}
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_constr_h_fun_jac_uxt_zt_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_constr_h_fun_jac_uxt_zt_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_hess_n_in(void);
|
||||||
|
int {{ model.name }}_constr_h_fun_jac_uxt_zt_hess_n_out(void);
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if dims.nh_e > 0 %}
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_constr_h_e_fun_jac_uxt_zt_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_constr_h_e_fun_jac_uxt_zt_sparsity_out(int);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_n_in(void);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_constr_h_e_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_constr_h_e_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_constr_h_e_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_n_in(void);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_n_out(void);
|
||||||
|
|
||||||
|
{% if solver_options.hessian_approx == "EXACT" -%}
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_constr_h_e_fun_jac_uxt_zt_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_constr_h_e_fun_jac_uxt_zt_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_hess_n_in(void);
|
||||||
|
int {{ model.name }}_constr_h_e_fun_jac_uxt_zt_hess_n_out(void);
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // {{ model.name }}_CONSTRAINTS
|
||||||
238
third_party/acados/acados_template/c_templates_tera/cost.in.h
vendored
Normal file
238
third_party/acados/acados_template/c_templates_tera/cost.in.h
vendored
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef {{ model.name }}_COST
|
||||||
|
#define {{ model.name }}_COST
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// Cost at initial shooting node
|
||||||
|
{% if cost.cost_type_0 == "NONLINEAR_LS" %}
|
||||||
|
int {{ model.name }}_cost_y_0_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_0_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_0_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_0_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_0_fun_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_0_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_y_0_fun_jac_ut_xt(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_0_fun_jac_ut_xt_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_0_fun_jac_ut_xt_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_0_fun_jac_ut_xt_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_0_fun_jac_ut_xt_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_0_fun_jac_ut_xt_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_y_0_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_0_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_0_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_0_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_0_hess_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_0_hess_n_out(void);
|
||||||
|
{% elif cost.cost_type_0 == "CONVEX_OVER_NONLINEAR" %}
|
||||||
|
|
||||||
|
int {{ model.name }}_conl_cost_0_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_conl_cost_0_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_conl_cost_0_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_n_in(void);
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_conl_cost_0_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_conl_cost_0_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_conl_cost_0_fun_jac_hess_n_out(void);
|
||||||
|
|
||||||
|
{% elif cost.cost_type_0 == "EXTERNAL" %}
|
||||||
|
{%- if cost.cost_ext_fun_type_0 == "casadi" %}
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_0_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_0_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_0_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_0_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_hess_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_0_fun_jac_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_0_fun_jac_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_0_fun_jac_n_out(void);
|
||||||
|
{%- else %}
|
||||||
|
int {{ cost.cost_function_ext_cost_0 }}(void **, void **, void *);
|
||||||
|
{%- endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
// Cost at path shooting node
|
||||||
|
{% if cost.cost_type == "NONLINEAR_LS" %}
|
||||||
|
int {{ model.name }}_cost_y_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_fun_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_y_fun_jac_ut_xt(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_fun_jac_ut_xt_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_fun_jac_ut_xt_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_fun_jac_ut_xt_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_fun_jac_ut_xt_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_fun_jac_ut_xt_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_y_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_hess_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_hess_n_out(void);
|
||||||
|
|
||||||
|
{% elif cost.cost_type == "CONVEX_OVER_NONLINEAR" %}
|
||||||
|
int {{ model.name }}_conl_cost_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_conl_cost_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_conl_cost_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_conl_cost_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_conl_cost_fun_n_in(void);
|
||||||
|
int {{ model.name }}_conl_cost_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_conl_cost_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_conl_cost_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_conl_cost_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_conl_cost_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_conl_cost_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_conl_cost_fun_jac_hess_n_out(void);
|
||||||
|
{% elif cost.cost_type == "EXTERNAL" %}
|
||||||
|
{%- if cost.cost_ext_fun_type == "casadi" %}
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_hess_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_fun_jac_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_fun_jac_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_fun_jac_n_out(void);
|
||||||
|
{%- else %}
|
||||||
|
int {{ cost.cost_function_ext_cost }}(void **, void **, void *);
|
||||||
|
{%- endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
// Cost at terminal shooting node
|
||||||
|
{% if cost.cost_type_e == "NONLINEAR_LS" %}
|
||||||
|
int {{ model.name }}_cost_y_e_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_e_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_e_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_e_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_e_fun_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_e_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_y_e_fun_jac_ut_xt(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_e_fun_jac_ut_xt_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_e_fun_jac_ut_xt_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_e_fun_jac_ut_xt_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_e_fun_jac_ut_xt_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_e_fun_jac_ut_xt_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_y_e_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_y_e_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_y_e_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_y_e_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_y_e_hess_n_in(void);
|
||||||
|
int {{ model.name }}_cost_y_e_hess_n_out(void);
|
||||||
|
{% elif cost.cost_type_e == "CONVEX_OVER_NONLINEAR" %}
|
||||||
|
int {{ model.name }}_conl_cost_e_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_conl_cost_e_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_conl_cost_e_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_n_in(void);
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_conl_cost_e_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_conl_cost_e_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_conl_cost_e_fun_jac_hess_n_out(void);
|
||||||
|
{% elif cost.cost_type_e == "EXTERNAL" %}
|
||||||
|
{%- if cost.cost_ext_fun_type_e == "casadi" %}
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_e_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_e_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_e_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_e_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_hess_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_e_fun_jac_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_cost_ext_cost_e_fun_jac_sparsity_out(int);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_n_in(void);
|
||||||
|
int {{ model.name }}_cost_ext_cost_e_fun_jac_n_out(void);
|
||||||
|
{%- else %}
|
||||||
|
int {{ cost.cost_function_ext_cost_e }}(void **, void **, void *);
|
||||||
|
{%- endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // {{ model.name }}_COST
|
||||||
218
third_party/acados/acados_template/c_templates_tera/model.in.h
vendored
Normal file
218
third_party/acados/acados_template/c_templates_tera/model.in.h
vendored
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef {{ model.name }}_MODEL
|
||||||
|
#define {{ model.name }}_MODEL
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{%- if solver_options.hessian_approx %}
|
||||||
|
{%- set hessian_approx = solver_options.hessian_approx %}
|
||||||
|
{%- elif solver_options.sens_hess %}
|
||||||
|
{%- set hessian_approx = "EXACT" %}
|
||||||
|
{%- else %}
|
||||||
|
{%- set hessian_approx = "GAUSS_NEWTON" %}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{% if solver_options.integrator_type == "IRK" or solver_options.integrator_type == "LIFTED_IRK" %}
|
||||||
|
{% if model.dyn_ext_fun_type == "casadi" %}
|
||||||
|
// implicit ODE: function
|
||||||
|
int {{ model.name }}_impl_dae_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_impl_dae_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_impl_dae_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_impl_dae_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_impl_dae_fun_n_in(void);
|
||||||
|
int {{ model.name }}_impl_dae_fun_n_out(void);
|
||||||
|
|
||||||
|
// implicit ODE: function + jacobians
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_z(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_z_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_impl_dae_fun_jac_x_xdot_z_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_impl_dae_fun_jac_x_xdot_z_sparsity_out(int);
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_z_n_in(void);
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_z_n_out(void);
|
||||||
|
|
||||||
|
// implicit ODE: jacobians only
|
||||||
|
int {{ model.name }}_impl_dae_jac_x_xdot_u_z(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_impl_dae_jac_x_xdot_u_z_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_impl_dae_jac_x_xdot_u_z_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_impl_dae_jac_x_xdot_u_z_sparsity_out(int);
|
||||||
|
int {{ model.name }}_impl_dae_jac_x_xdot_u_z_n_in(void);
|
||||||
|
int {{ model.name }}_impl_dae_jac_x_xdot_u_z_n_out(void);
|
||||||
|
|
||||||
|
// implicit ODE - for lifted_irk
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_u(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_u_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_impl_dae_fun_jac_x_xdot_u_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_impl_dae_fun_jac_x_xdot_u_sparsity_out(int);
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_u_n_in(void);
|
||||||
|
int {{ model.name }}_impl_dae_fun_jac_x_xdot_u_n_out(void);
|
||||||
|
|
||||||
|
{%- if hessian_approx == "EXACT" %}
|
||||||
|
// implicit ODE - hessian
|
||||||
|
int {{ model.name }}_impl_dae_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_impl_dae_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_impl_dae_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_impl_dae_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_impl_dae_hess_n_in(void);
|
||||||
|
int {{ model.name }}_impl_dae_hess_n_out(void);
|
||||||
|
{% endif %}
|
||||||
|
{% else %}{# ext_fun_type #}
|
||||||
|
{%- if hessian_approx == "EXACT" %}
|
||||||
|
int {{ model.dyn_impl_dae_hess }}(void **, void **, void *);
|
||||||
|
{% endif %}
|
||||||
|
int {{ model.dyn_impl_dae_fun_jac }}(void **, void **, void *);
|
||||||
|
int {{ model.dyn_impl_dae_jac }}(void **, void **, void *);
|
||||||
|
int {{ model.dyn_impl_dae_fun }}(void **, void **, void *);
|
||||||
|
{% endif %}{# ext_fun_type #}
|
||||||
|
|
||||||
|
{% elif solver_options.integrator_type == "GNSF" %}
|
||||||
|
/* GNSF Functions */
|
||||||
|
{% if model.gnsf.purely_linear != 1 %}
|
||||||
|
// phi_fun
|
||||||
|
int {{ model.name }}_gnsf_phi_fun(const double** arg, double** res, int* iw, double* w, void *mem);
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_gnsf_phi_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_gnsf_phi_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_n_in(void);
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_n_out(void);
|
||||||
|
|
||||||
|
// phi_fun_jac_y
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_jac_y(const double** arg, double** res, int* iw, double* w, void *mem);
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_jac_y_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_gnsf_phi_fun_jac_y_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_gnsf_phi_fun_jac_y_sparsity_out(int);
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_jac_y_n_in(void);
|
||||||
|
int {{ model.name }}_gnsf_phi_fun_jac_y_n_out(void);
|
||||||
|
|
||||||
|
// phi_jac_y_uhat
|
||||||
|
int {{ model.name }}_gnsf_phi_jac_y_uhat(const double** arg, double** res, int* iw, double* w, void *mem);
|
||||||
|
int {{ model.name }}_gnsf_phi_jac_y_uhat_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_gnsf_phi_jac_y_uhat_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_gnsf_phi_jac_y_uhat_sparsity_out(int);
|
||||||
|
int {{ model.name }}_gnsf_phi_jac_y_uhat_n_in(void);
|
||||||
|
int {{ model.name }}_gnsf_phi_jac_y_uhat_n_out(void);
|
||||||
|
{% if model.gnsf.nontrivial_f_LO == 1 %}
|
||||||
|
// f_lo_fun_jac_x1k1uz
|
||||||
|
int {{ model.name }}_gnsf_f_lo_fun_jac_x1k1uz(const double** arg, double** res, int* iw, double* w, void *mem);
|
||||||
|
int {{ model.name }}_gnsf_f_lo_fun_jac_x1k1uz_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_gnsf_f_lo_fun_jac_x1k1uz_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_gnsf_f_lo_fun_jac_x1k1uz_sparsity_out(int);
|
||||||
|
int {{ model.name }}_gnsf_f_lo_fun_jac_x1k1uz_n_in(void);
|
||||||
|
int {{ model.name }}_gnsf_f_lo_fun_jac_x1k1uz_n_out(void);
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
// used to import model matrices
|
||||||
|
int {{ model.name }}_gnsf_get_matrices_fun(const double** arg, double** res, int* iw, double* w, void *mem);
|
||||||
|
int {{ model.name }}_gnsf_get_matrices_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_gnsf_get_matrices_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_gnsf_get_matrices_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_gnsf_get_matrices_fun_n_in(void);
|
||||||
|
int {{ model.name }}_gnsf_get_matrices_fun_n_out(void);
|
||||||
|
|
||||||
|
{% elif solver_options.integrator_type == "ERK" %}
|
||||||
|
/* explicit ODE */
|
||||||
|
|
||||||
|
// explicit ODE
|
||||||
|
int {{ model.name }}_expl_ode_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_expl_ode_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_expl_ode_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_expl_ode_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_expl_ode_fun_n_in(void);
|
||||||
|
int {{ model.name }}_expl_ode_fun_n_out(void);
|
||||||
|
|
||||||
|
// explicit forward VDE
|
||||||
|
int {{ model.name }}_expl_vde_forw(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_expl_vde_forw_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_expl_vde_forw_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_expl_vde_forw_sparsity_out(int);
|
||||||
|
int {{ model.name }}_expl_vde_forw_n_in(void);
|
||||||
|
int {{ model.name }}_expl_vde_forw_n_out(void);
|
||||||
|
|
||||||
|
// explicit adjoint VDE
|
||||||
|
int {{ model.name }}_expl_vde_adj(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_expl_vde_adj_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_expl_vde_adj_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_expl_vde_adj_sparsity_out(int);
|
||||||
|
int {{ model.name }}_expl_vde_adj_n_in(void);
|
||||||
|
int {{ model.name }}_expl_vde_adj_n_out(void);
|
||||||
|
|
||||||
|
{%- if hessian_approx == "EXACT" %}
|
||||||
|
int {{ model.name }}_expl_ode_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_expl_ode_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_expl_ode_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_expl_ode_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_expl_ode_hess_n_in(void);
|
||||||
|
int {{ model.name }}_expl_ode_hess_n_out(void);
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{% elif solver_options.integrator_type == "DISCRETE" %}
|
||||||
|
|
||||||
|
{% if model.dyn_ext_fun_type == "casadi" %}
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_dyn_disc_phi_fun_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_dyn_disc_phi_fun_sparsity_out(int);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_n_in(void);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_n_out(void);
|
||||||
|
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_dyn_disc_phi_fun_jac_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_dyn_disc_phi_fun_jac_sparsity_out(int);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_n_in(void);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_n_out(void);
|
||||||
|
|
||||||
|
{%- if hessian_approx == "EXACT" %}
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_hess(const real_t** arg, real_t** res, int* iw, real_t* w, void *mem);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_hess_work(int *, int *, int *, int *);
|
||||||
|
const int *{{ model.name }}_dyn_disc_phi_fun_jac_hess_sparsity_in(int);
|
||||||
|
const int *{{ model.name }}_dyn_disc_phi_fun_jac_hess_sparsity_out(int);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_hess_n_in(void);
|
||||||
|
int {{ model.name }}_dyn_disc_phi_fun_jac_hess_n_out(void);
|
||||||
|
{%- endif %}
|
||||||
|
{% else %}
|
||||||
|
{%- if hessian_approx == "EXACT" %}
|
||||||
|
int {{ model.dyn_disc_fun_jac_hess }}(void **, void **, void *);
|
||||||
|
{% endif %}
|
||||||
|
int {{ model.dyn_disc_fun_jac }}(void **, void **, void *);
|
||||||
|
int {{ model.dyn_disc_fun }}(void **, void **, void *);
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // {{ model.name }}_MODEL
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "acados_solver_{{ model.name }}.h"
|
||||||
|
|
||||||
|
// Called at the end of solver creation.
|
||||||
|
// This is allowed to allocate memory and store the pointer to it into capsule->custom_update_memory.
|
||||||
|
int custom_update_init_function({{ model.name }}_solver_capsule* capsule);
|
||||||
|
|
||||||
|
|
||||||
|
// Custom update function that can be called between solver calls
|
||||||
|
int custom_update_function({{ model.name }}_solver_capsule* capsule, double* data, int data_len);
|
||||||
|
|
||||||
|
|
||||||
|
// Called just before destroying the solver.
|
||||||
|
// Responsible to free allocated memory, stored at capsule->custom_update_memory.
|
||||||
|
int custom_update_terminate_function({{ model.name }}_solver_capsule* capsule);
|
||||||
56
third_party/acados/build.sh
vendored
Normal file
56
third_party/acados/build.sh
vendored
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null && pwd)"
|
||||||
|
|
||||||
|
ARCHNAME="x86_64"
|
||||||
|
BLAS_TARGET="X64_AUTOMATIC"
|
||||||
|
if [ -f /TICI ]; then
|
||||||
|
ARCHNAME="larch64"
|
||||||
|
BLAS_TARGET="ARMV8A_ARM_CORTEX_A57"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ACADOS_FLAGS="-DACADOS_WITH_QPOASES=ON -UBLASFEO_TARGET -DBLASFEO_TARGET=$BLAS_TARGET"
|
||||||
|
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
ACADOS_FLAGS="$ACADOS_FLAGS -DCMAKE_OSX_ARCHITECTURES=arm64;x86_64 -DCMAKE_MACOSX_RPATH=1"
|
||||||
|
ARCHNAME="Darwin"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d acados_repo/ ]; then
|
||||||
|
git clone https://github.com/acados/acados.git $DIR/acados_repo
|
||||||
|
# git clone https://github.com/commaai/acados.git $DIR/acados_repo
|
||||||
|
fi
|
||||||
|
cd acados_repo
|
||||||
|
git fetch --all
|
||||||
|
git checkout 8af9b0ad180940ef611884574a0b27a43504311d # v0.2.2
|
||||||
|
git submodule update --depth=1 --recursive --init
|
||||||
|
|
||||||
|
# build
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake $ACADOS_FLAGS ..
|
||||||
|
make -j20 install
|
||||||
|
|
||||||
|
INSTALL_DIR="$DIR/$ARCHNAME"
|
||||||
|
rm -rf $INSTALL_DIR
|
||||||
|
mkdir -p $INSTALL_DIR
|
||||||
|
|
||||||
|
rm $DIR/acados_repo/lib/*.json
|
||||||
|
|
||||||
|
rm -rf $DIR/include $DIR/acados_template
|
||||||
|
cp -r $DIR/acados_repo/include $DIR
|
||||||
|
cp -r $DIR/acados_repo/lib $INSTALL_DIR
|
||||||
|
cp -r $DIR/acados_repo/interfaces/acados_template/acados_template $DIR/
|
||||||
|
#pip3 install -e $DIR/acados/interfaces/acados_template
|
||||||
|
|
||||||
|
# build tera
|
||||||
|
cd $DIR/acados_repo/interfaces/acados_template/tera_renderer/
|
||||||
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||||
|
cargo build --verbose --release --target aarch64-apple-darwin
|
||||||
|
cargo build --verbose --release --target x86_64-apple-darwin
|
||||||
|
lipo -create -output target/release/t_renderer target/x86_64-apple-darwin/release/t_renderer target/aarch64-apple-darwin/release/t_renderer
|
||||||
|
else
|
||||||
|
cargo build --verbose --release
|
||||||
|
fi
|
||||||
|
cp target/release/t_renderer $INSTALL_DIR/
|
||||||
147
third_party/acados/include/acados/dense_qp/dense_qp_common.h
vendored
Normal file
147
third_party/acados/include/acados/dense_qp/dense_qp_common.h
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_DENSE_QP_DENSE_QP_COMMON_H_
|
||||||
|
#define ACADOS_DENSE_QP_DENSE_QP_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// hpipm
|
||||||
|
#include "hpipm/include/hpipm_d_dense_qp.h"
|
||||||
|
#include "hpipm/include/hpipm_d_dense_qp_res.h"
|
||||||
|
#include "hpipm/include/hpipm_d_dense_qp_sol.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef struct d_dense_qp_dim dense_qp_dims;
|
||||||
|
typedef struct d_dense_qp dense_qp_in;
|
||||||
|
typedef struct d_dense_qp_sol dense_qp_out;
|
||||||
|
typedef struct d_dense_qp_res dense_qp_res;
|
||||||
|
typedef struct d_dense_qp_res_ws dense_qp_res_ws;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef QP_SOLVER_CONFIG_
|
||||||
|
#define QP_SOLVER_CONFIG_
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void (*dims_set)(void *config_, void *dims_, const char *field, const int* value);
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*opts_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, void *dims, void *args);
|
||||||
|
void (*opts_update)(void *config, void *dims, void *args);
|
||||||
|
void (*opts_set)(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *args);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *args, void *raw_memory);
|
||||||
|
void (*memory_get)(void *config_, void *mem_, const char *field, void* value);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *args);
|
||||||
|
int (*evaluate)(void *config, void *qp_in, void *qp_out, void *args, void *mem, void *work);
|
||||||
|
void (*eval_sens)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
} qp_solver_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef QP_INFO_
|
||||||
|
#define QP_INFO_
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double solve_QP_time;
|
||||||
|
double condensing_time;
|
||||||
|
double interface_time;
|
||||||
|
double total_time;
|
||||||
|
int num_iter;
|
||||||
|
int t_computed;
|
||||||
|
} qp_info;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_solver_config_calculate_size();
|
||||||
|
//
|
||||||
|
qp_solver_config *dense_qp_solver_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_dims_calculate_size();
|
||||||
|
//
|
||||||
|
dense_qp_dims *dense_qp_dims_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_dims_set(void *config_, void *dims_, const char *field, const int* value);
|
||||||
|
//
|
||||||
|
|
||||||
|
/* in */
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_in_calculate_size(dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
dense_qp_in *dense_qp_in_assign(dense_qp_dims *dims, void *raw_memory);
|
||||||
|
|
||||||
|
/* out */
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_out_calculate_size(dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
dense_qp_out *dense_qp_out_assign(dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_out_get(dense_qp_out *out, const char *field, void *value);
|
||||||
|
|
||||||
|
/* res */
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_res_calculate_size(dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
dense_qp_res *dense_qp_res_assign(dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_res_workspace_calculate_size(dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
dense_qp_res_ws *dense_qp_res_workspace_assign(dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_compute_t(dense_qp_in *qp_in, dense_qp_out *qp_out);
|
||||||
|
//
|
||||||
|
void dense_qp_res_compute(dense_qp_in *qp_in, dense_qp_out *qp_out, dense_qp_res *qp_res, dense_qp_res_ws *res_ws);
|
||||||
|
//
|
||||||
|
void dense_qp_res_compute_nrm_inf(dense_qp_res *qp_res, double res[4]);
|
||||||
|
|
||||||
|
/* misc */
|
||||||
|
//
|
||||||
|
void dense_qp_stack_slacks_dims(dense_qp_dims *in, dense_qp_dims *out);
|
||||||
|
//
|
||||||
|
void dense_qp_stack_slacks(dense_qp_in *in, dense_qp_in *out);
|
||||||
|
//
|
||||||
|
void dense_qp_unstack_slacks(dense_qp_out *in, dense_qp_in *qp_out, dense_qp_out *out);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_DENSE_QP_DENSE_QP_COMMON_H_
|
||||||
110
third_party/acados/include/acados/dense_qp/dense_qp_daqp.h
vendored
Normal file
110
third_party/acados/include/acados/dense_qp/dense_qp_daqp.h
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_DENSE_QP_DENSE_QP_DAQP_H_
|
||||||
|
#define ACADOS_DENSE_QP_DENSE_QP_DAQP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// daqp
|
||||||
|
#include "daqp/include/types.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct dense_qp_daqp_opts_
|
||||||
|
{
|
||||||
|
DAQPSettings* daqp_opts;
|
||||||
|
int warm_start;
|
||||||
|
} dense_qp_daqp_opts;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct dense_qp_daqp_memory_
|
||||||
|
{
|
||||||
|
double* lb_tmp;
|
||||||
|
double* ub_tmp;
|
||||||
|
int* idxb;
|
||||||
|
int* idxv_to_idxb;
|
||||||
|
int* idxs;
|
||||||
|
int* idxdaqp_to_idxs;
|
||||||
|
|
||||||
|
double* Zl;
|
||||||
|
double* Zu;
|
||||||
|
double* zl;
|
||||||
|
double* zu;
|
||||||
|
double* d_ls;
|
||||||
|
double* d_us;
|
||||||
|
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
DAQPWorkspace * daqp_work;
|
||||||
|
|
||||||
|
} dense_qp_daqp_memory;
|
||||||
|
|
||||||
|
// opts
|
||||||
|
acados_size_t dense_qp_daqp_opts_calculate_size(void *config, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *dense_qp_daqp_opts_assign(void *config, dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_daqp_opts_initialize_default(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void dense_qp_daqp_opts_update(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
// memory
|
||||||
|
acados_size_t dense_qp_daqp_workspace_calculate_size(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *dense_qp_daqp_workspace_assign(void *config, dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_daqp_memory_calculate_size(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *dense_qp_daqp_memory_assign(void *config, dense_qp_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
// functions
|
||||||
|
int dense_qp_daqp(void *config, dense_qp_in *qp_in, dense_qp_out *qp_out, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_daqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_daqp_memory_reset(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_daqp_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_DENSE_QP_DENSE_QP_DAQP_H_
|
||||||
91
third_party/acados/include/acados/dense_qp/dense_qp_hpipm.h
vendored
Normal file
91
third_party/acados/include/acados/dense_qp/dense_qp_hpipm.h
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_DENSE_QP_DENSE_QP_HPIPM_H_
|
||||||
|
#define ACADOS_DENSE_QP_DENSE_QP_HPIPM_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// hpipm
|
||||||
|
#include "hpipm/include/hpipm_d_dense_qp.h"
|
||||||
|
#include "hpipm/include/hpipm_d_dense_qp_ipm.h"
|
||||||
|
#include "hpipm/include/hpipm_d_dense_qp_sol.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct dense_qp_hpipm_opts_
|
||||||
|
{
|
||||||
|
struct d_dense_qp_ipm_arg *hpipm_opts;
|
||||||
|
} dense_qp_hpipm_opts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct dense_qp_hpipm_memory_
|
||||||
|
{
|
||||||
|
struct d_dense_qp_ipm_ws *hpipm_workspace;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
|
||||||
|
} dense_qp_hpipm_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_hpipm_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *dense_qp_hpipm_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_hpipm_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void dense_qp_hpipm_opts_update(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_hpipm_calculate_memory_size(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *dense_qp_hpipm_assign_memory(void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_hpipm_calculate_workspace_size(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int dense_qp_hpipm(void *config, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_hpipm_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_hpipm_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_DENSE_QP_DENSE_QP_HPIPM_H_
|
||||||
125
third_party/acados/include/acados/dense_qp/dense_qp_ooqp.h
vendored
Normal file
125
third_party/acados/include/acados/dense_qp/dense_qp_ooqp.h
vendored
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_DENSE_QP_DENSE_QP_OOQP_H_
|
||||||
|
#define ACADOS_DENSE_QP_DENSE_QP_OOQP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
enum dense_qp_ooqp_termination_code
|
||||||
|
{
|
||||||
|
DENSE_SUCCESSFUL_TERMINATION = 0,
|
||||||
|
DENSE_NOT_FINISHED,
|
||||||
|
DENSE_MAX_ITS_EXCEEDED,
|
||||||
|
DENSE_INFEASIBLE,
|
||||||
|
DENSE_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct dense_qp_ooqp_opts_
|
||||||
|
{
|
||||||
|
int printLevel;
|
||||||
|
int useDiagonalWeights; // TODO(dimitris): implement option
|
||||||
|
int fixHessian;
|
||||||
|
int fixDynamics;
|
||||||
|
int fixInequalities;
|
||||||
|
} dense_qp_ooqp_opts;
|
||||||
|
|
||||||
|
typedef struct dense_qp_ooqp_workspace_
|
||||||
|
{
|
||||||
|
double *x;
|
||||||
|
double *gamma;
|
||||||
|
double *phi;
|
||||||
|
double *y;
|
||||||
|
double *z;
|
||||||
|
double *lambda;
|
||||||
|
double *pi;
|
||||||
|
double objectiveValue;
|
||||||
|
} dense_qp_ooqp_workspace;
|
||||||
|
|
||||||
|
typedef struct dense_qp_ooqp_memory_
|
||||||
|
{
|
||||||
|
int firstRun;
|
||||||
|
int nx;
|
||||||
|
int my;
|
||||||
|
int mz;
|
||||||
|
double *c;
|
||||||
|
double *dQ;
|
||||||
|
double *xlow;
|
||||||
|
char *ixlow;
|
||||||
|
double *xupp;
|
||||||
|
char *ixupp;
|
||||||
|
double *dA;
|
||||||
|
double *bA;
|
||||||
|
double *dC;
|
||||||
|
double *clow;
|
||||||
|
char *iclow;
|
||||||
|
double *cupp;
|
||||||
|
char *icupp;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
|
||||||
|
} dense_qp_ooqp_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_ooqp_opts_calculate_size(void *config_, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *dense_qp_ooqp_opts_assign(void *config_, dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_ooqp_opts_initialize_default(void *config_, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void dense_qp_ooqp_opts_update(void *config_, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_ooqp_memory_calculate_size(void *config_, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *dense_qp_ooqp_memory_assign(void *config_, dense_qp_dims *dims, void *opts_,
|
||||||
|
void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_ooqp_workspace_calculate_size(void *config_, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int dense_qp_ooqp(void *config_, dense_qp_in *qp_in, dense_qp_out *qp_out, void *opts_,
|
||||||
|
void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_ooqp_destroy(void *mem_, void *work);
|
||||||
|
//
|
||||||
|
void dense_qp_ooqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_ooqp_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_DENSE_QP_DENSE_QP_OOQP_H_
|
||||||
124
third_party/acados/include/acados/dense_qp/dense_qp_qore.h
vendored
Normal file
124
third_party/acados/include/acados/dense_qp/dense_qp_qore.h
vendored
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_DENSE_QP_DENSE_QP_QORE_H_
|
||||||
|
#define ACADOS_DENSE_QP_DENSE_QP_QORE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// qore
|
||||||
|
#include "qore/QPSOLVER_DENSE/include/qpsolver_dense.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef struct dense_qp_qore_opts_
|
||||||
|
{
|
||||||
|
int nsmax; // maximum size of Schur complement
|
||||||
|
int print_freq; // print frequency,
|
||||||
|
// prtfreq < 0: disable printing;
|
||||||
|
// prtfreq == 0: print on each call and include working set changes;
|
||||||
|
// prtfreq > 0: print on every prtfreq seconds, but do not include working set
|
||||||
|
// changes;
|
||||||
|
int warm_start; // warm start with updated matrices H and C
|
||||||
|
int warm_strategy; // 0: ramp-up from zero homotopy; 1: setup homotopy from the previous
|
||||||
|
// solution
|
||||||
|
int hot_start; // hot start with unchanged matrices H and C
|
||||||
|
int max_iter; // maximum number of iterations
|
||||||
|
int compute_t; // compute t in qp_out (to have correct residuals in NLP)
|
||||||
|
} dense_qp_qore_opts;
|
||||||
|
|
||||||
|
typedef struct dense_qp_qore_memory_
|
||||||
|
{
|
||||||
|
double *H;
|
||||||
|
double *HH;
|
||||||
|
double *g;
|
||||||
|
double *gg;
|
||||||
|
double *Zl;
|
||||||
|
double *Zu;
|
||||||
|
double *zl;
|
||||||
|
double *zu;
|
||||||
|
double *A;
|
||||||
|
double *b;
|
||||||
|
double *C;
|
||||||
|
double *CC;
|
||||||
|
double *Ct;
|
||||||
|
double *CCt;
|
||||||
|
double *d_lb0;
|
||||||
|
double *d_ub0;
|
||||||
|
double *d_lb;
|
||||||
|
double *d_ub;
|
||||||
|
double *d_lg;
|
||||||
|
double *d_ug;
|
||||||
|
double *d_ls;
|
||||||
|
double *d_us;
|
||||||
|
double *lb;
|
||||||
|
double *ub;
|
||||||
|
int *idxb;
|
||||||
|
int *idxb_stacked;
|
||||||
|
int *idxs;
|
||||||
|
double *prim_sol;
|
||||||
|
double *dual_sol;
|
||||||
|
QoreProblemDense *QP;
|
||||||
|
int num_iter;
|
||||||
|
dense_qp_in *qp_stacked;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
|
||||||
|
} dense_qp_qore_memory;
|
||||||
|
|
||||||
|
acados_size_t dense_qp_qore_opts_calculate_size(void *config, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *dense_qp_qore_opts_assign(void *config, dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_qore_opts_initialize_default(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void dense_qp_qore_opts_update(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_qore_memory_calculate_size(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *dense_qp_qore_memory_assign(void *config, dense_qp_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_qore_workspace_calculate_size(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int dense_qp_qore(void *config, dense_qp_in *qp_in, dense_qp_out *qp_out, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_qore_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_qore_config_initialize_default(void *config);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_DENSE_QP_DENSE_QP_QORE_H_
|
||||||
126
third_party/acados/include/acados/dense_qp/dense_qp_qpoases.h
vendored
Normal file
126
third_party/acados/include/acados/dense_qp/dense_qp_qpoases.h
vendored
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_DENSE_QP_DENSE_QP_QPOASES_H_
|
||||||
|
#define ACADOS_DENSE_QP_DENSE_QP_QPOASES_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef struct dense_qp_qpoases_opts_
|
||||||
|
{
|
||||||
|
double max_cputime; // maximum cpu time in seconds
|
||||||
|
int max_nwsr; // maximum number of working set recalculations
|
||||||
|
int warm_start; // warm start with dual_sol in memory
|
||||||
|
int use_precomputed_cholesky;
|
||||||
|
int hotstart; // this option requires constant data matrices! (eg linear MPC, inexact schemes
|
||||||
|
// with frozen sensitivities)
|
||||||
|
int set_acado_opts; // use same options as in acado code generation
|
||||||
|
int compute_t; // compute t in qp_out (to have correct residuals in NLP)
|
||||||
|
double tolerance; // terminationTolerance
|
||||||
|
} dense_qp_qpoases_opts;
|
||||||
|
|
||||||
|
typedef struct dense_qp_qpoases_memory_
|
||||||
|
{
|
||||||
|
double *H;
|
||||||
|
double *HH;
|
||||||
|
double *R;
|
||||||
|
double *g;
|
||||||
|
double *gg;
|
||||||
|
double *Zl;
|
||||||
|
double *Zu;
|
||||||
|
double *zl;
|
||||||
|
double *zu;
|
||||||
|
double *A;
|
||||||
|
double *b;
|
||||||
|
double *d_lb0;
|
||||||
|
double *d_ub0;
|
||||||
|
double *d_lb;
|
||||||
|
double *d_ub;
|
||||||
|
double *C;
|
||||||
|
double *CC;
|
||||||
|
double *d_lg0;
|
||||||
|
double *d_ug0;
|
||||||
|
double *d_lg;
|
||||||
|
double *d_ug;
|
||||||
|
double *d_ls;
|
||||||
|
double *d_us;
|
||||||
|
int *idxb;
|
||||||
|
int *idxb_stacked;
|
||||||
|
int *idxs;
|
||||||
|
double *prim_sol;
|
||||||
|
double *dual_sol;
|
||||||
|
void *QPB; // NOTE(giaf): cast to QProblemB to use
|
||||||
|
void *QP; // NOTE(giaf): cast to QProblem to use
|
||||||
|
double cputime; // cputime of qpoases
|
||||||
|
int nwsr; // performed number of working set recalculations
|
||||||
|
int first_it; // to be used with hotstart
|
||||||
|
dense_qp_in *qp_stacked;
|
||||||
|
double time_qp_solver_call; // equal to cputime
|
||||||
|
int iter;
|
||||||
|
|
||||||
|
} dense_qp_qpoases_memory;
|
||||||
|
|
||||||
|
acados_size_t dense_qp_qpoases_opts_calculate_size(void *config, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *dense_qp_qpoases_opts_assign(void *config, dense_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void dense_qp_qpoases_opts_initialize_default(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void dense_qp_qpoases_opts_update(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_qpoases__memorycalculate_size(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *dense_qp_qpoases_memory_assign(void *config, dense_qp_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_qpoases_workspace_calculate_size(void *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int dense_qp_qpoases(void *config, dense_qp_in *qp_in, dense_qp_out *qp_out, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_qpoases_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_qpoases_memory_reset(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void dense_qp_qpoases_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_DENSE_QP_DENSE_QP_QPOASES_H_
|
||||||
446
third_party/acados/include/acados/ocp_nlp/ocp_nlp_common.h
vendored
Normal file
446
third_party/acados/include/acados/ocp_nlp/ocp_nlp_common.h
vendored
Normal file
@@ -0,0 +1,446 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// \defgroup ocp_nlp ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \defgroup ocp_nlp_solver ocp_nlp_solver
|
||||||
|
/// @{
|
||||||
|
/// @}
|
||||||
|
|
||||||
|
/// \ingroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \ingroup ocp_nlp_solver
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \defgroup ocp_nlp_common ocp_nlp_common
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_COMMON_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_constraints_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_cost_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_dynamics_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_reg_common.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_xcond_solver.h"
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* config
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct ocp_nlp_config
|
||||||
|
{
|
||||||
|
int N; // number of stages
|
||||||
|
|
||||||
|
// solver-specific implementations of memory management functions
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*opts_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, void *dims, void *opts_);
|
||||||
|
void (*opts_update)(void *config, void *dims, void *opts_);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *opts_);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts_);
|
||||||
|
void (*opts_set)(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
void (*opts_set_at_stage)(void *config_, void *opts_, size_t stage, const char *field, void* value);
|
||||||
|
// evaluate solver // TODO rename into solve
|
||||||
|
int (*evaluate)(void *config, void *dims, void *nlp_in, void *nlp_out, void *opts_, void *mem, void *work);
|
||||||
|
void (*eval_param_sens)(void *config, void *dims, void *opts_, void *mem, void *work,
|
||||||
|
char *field, int stage, int index, void *sens_nlp_out);
|
||||||
|
// prepare memory
|
||||||
|
int (*precompute)(void *config, void *dims, void *nlp_in, void *nlp_out, void *opts_, void *mem, void *work);
|
||||||
|
void (*memory_reset_qp_solver)(void *config, void *dims, void *nlp_in, void *nlp_out, void *opts_, void *mem, void *work);
|
||||||
|
// initalize this struct with default values
|
||||||
|
void (*config_initialize_default)(void *config);
|
||||||
|
// general getter
|
||||||
|
void (*get)(void *config_, void *dims, void *mem_, const char *field, void *return_value_);
|
||||||
|
void (*opts_get)(void *config_, void *dims, void *opts_, const char *field, void *return_value_);
|
||||||
|
void (*work_get)(void *config_, void *dims, void *work_, const char *field, void *return_value_);
|
||||||
|
// config structs of submodules
|
||||||
|
ocp_qp_xcond_solver_config *qp_solver; // TODO rename xcond_solver
|
||||||
|
ocp_nlp_dynamics_config **dynamics;
|
||||||
|
ocp_nlp_cost_config **cost;
|
||||||
|
ocp_nlp_constraints_config **constraints;
|
||||||
|
ocp_nlp_reg_config *regularize;
|
||||||
|
|
||||||
|
} ocp_nlp_config;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_config_calculate_size(int N);
|
||||||
|
//
|
||||||
|
ocp_nlp_config *ocp_nlp_config_assign(int N, void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
/// Structure to store dimensions/number of variables.
|
||||||
|
typedef struct ocp_nlp_dims
|
||||||
|
{
|
||||||
|
void **cost;
|
||||||
|
void **dynamics;
|
||||||
|
void **constraints;
|
||||||
|
ocp_qp_xcond_solver_dims *qp_solver; // xcond solver instead ??
|
||||||
|
ocp_nlp_reg_dims *regularize;
|
||||||
|
|
||||||
|
int *nv; // number of primal variables (states+controls+slacks)
|
||||||
|
int *nx; // number of differential states
|
||||||
|
int *nu; // number of inputs
|
||||||
|
int *ni; // number of two-sided inequality constraints: nb+ng+nh+ns
|
||||||
|
int *nz; // number of algebraic variables
|
||||||
|
int *ns; // number of slack variables
|
||||||
|
int N; // number of shooting nodes
|
||||||
|
|
||||||
|
void *raw_memory; // Pointer to allocated memory, to be used for freeing
|
||||||
|
} ocp_nlp_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
ocp_nlp_dims *ocp_nlp_dims_assign(void *config, void *raw_memory);
|
||||||
|
|
||||||
|
/// Sets the dimension of optimization variables
|
||||||
|
/// (states, constrols, algebraic variables, slack variables).
|
||||||
|
///
|
||||||
|
/// \param config_ The configuration struct.
|
||||||
|
/// \param dims_ The dimension struct.
|
||||||
|
/// \param field The type of optimization variables, either nx, nu, nz, or ns.
|
||||||
|
/// \param value_array Number of variables for each stage.
|
||||||
|
void ocp_nlp_dims_set_opt_vars(void *config_, void *dims_,
|
||||||
|
const char *field, const void* value_array);
|
||||||
|
|
||||||
|
/// Sets the dimensions of constraints functions for a stage
|
||||||
|
/// (bounds on states, bounds on controls, equality constraints,
|
||||||
|
/// inequality constraints).
|
||||||
|
///
|
||||||
|
/// \param config_ The configuration struct.
|
||||||
|
/// \param dims_ The dimension struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field The type of constraint/bound, either nbx, nbu, ng, or nh.
|
||||||
|
/// \param value_field Number of constraints/bounds for the given stage.
|
||||||
|
void ocp_nlp_dims_set_constraints(void *config_, void *dims_, int stage,
|
||||||
|
const char *field, const void* value_field);
|
||||||
|
|
||||||
|
/// Sets the dimensions of the cost terms for a stage.
|
||||||
|
///
|
||||||
|
/// \param config_ The configuration struct.
|
||||||
|
/// \param dims_ The dimension struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field Type of cost term, can be eiter ny.
|
||||||
|
/// \param value_field Number of cost terms/residuals for the given stage.
|
||||||
|
void ocp_nlp_dims_set_cost(void *config_, void *dims_, int stage, const char *field,
|
||||||
|
const void* value_field);
|
||||||
|
|
||||||
|
/// Sets the dimensions of the dynamics for a stage.
|
||||||
|
///
|
||||||
|
/// \param config_ The configuration struct.
|
||||||
|
/// \param dims_ The dimension struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field TBD
|
||||||
|
/// \param value TBD
|
||||||
|
void ocp_nlp_dims_set_dynamics(void *config_, void *dims_, int stage, const char *field,
|
||||||
|
const void* value);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* Inputs
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
/// Struct for storing the inputs of an OCP NLP solver
|
||||||
|
typedef struct ocp_nlp_in
|
||||||
|
{
|
||||||
|
/// Length of sampling intervals/timesteps.
|
||||||
|
double *Ts;
|
||||||
|
|
||||||
|
/// Pointers to cost functions (TBC).
|
||||||
|
void **cost;
|
||||||
|
|
||||||
|
/// Pointers to dynamics functions (TBC).
|
||||||
|
void **dynamics;
|
||||||
|
|
||||||
|
/// Pointers to constraints functions (TBC).
|
||||||
|
void **constraints;
|
||||||
|
|
||||||
|
/// Pointer to allocated memory, to be used for freeing.
|
||||||
|
void *raw_memory;
|
||||||
|
|
||||||
|
} ocp_nlp_in;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_in_calculate_size_self(int N);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_in_calculate_size(ocp_nlp_config *config, ocp_nlp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_nlp_in *ocp_nlp_in_assign_self(int N, void *raw_memory);
|
||||||
|
//
|
||||||
|
ocp_nlp_in *ocp_nlp_in_assign(ocp_nlp_config *config, ocp_nlp_dims *dims, void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* out
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct ocp_nlp_out
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec *ux; // NOTE: this contains [u; x; s_l; s_u]! - rename to uxs?
|
||||||
|
struct blasfeo_dvec *z; // algebraic vairables
|
||||||
|
struct blasfeo_dvec *pi; // multipliers for dynamics
|
||||||
|
struct blasfeo_dvec *lam; // inequality mulitpliers
|
||||||
|
struct blasfeo_dvec *t; // slack variables corresponding to evaluation of all inequalities (at the solution)
|
||||||
|
|
||||||
|
// NOTE: the inequalities are internally organized in the following order:
|
||||||
|
// [ lbu lbx lg lh lphi ubu ubx ug uh uphi; lsbu lsbx lsg lsh lsphi usbu usbx usg ush usphi]
|
||||||
|
double inf_norm_res;
|
||||||
|
|
||||||
|
void *raw_memory; // Pointer to allocated memory, to be used for freeing
|
||||||
|
|
||||||
|
} ocp_nlp_out;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_out_calculate_size(ocp_nlp_config *config, ocp_nlp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_nlp_out *ocp_nlp_out_assign(ocp_nlp_config *config, ocp_nlp_dims *dims,
|
||||||
|
void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
/// Globalization types
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
FIXED_STEP,
|
||||||
|
MERIT_BACKTRACKING,
|
||||||
|
} ocp_nlp_globalization_t;
|
||||||
|
|
||||||
|
typedef struct ocp_nlp_opts
|
||||||
|
{
|
||||||
|
ocp_qp_xcond_solver_opts *qp_solver_opts; // xcond solver opts instead ???
|
||||||
|
void *regularize;
|
||||||
|
void **dynamics; // dynamics_opts
|
||||||
|
void **cost; // cost_opts
|
||||||
|
void **constraints; // constraints_opts
|
||||||
|
double step_length; // step length in case of FIXED_STEP
|
||||||
|
double levenberg_marquardt; // LM factor to be added to the hessian before regularization
|
||||||
|
int reuse_workspace;
|
||||||
|
int num_threads;
|
||||||
|
int print_level;
|
||||||
|
|
||||||
|
// TODO: move to separate struct?
|
||||||
|
ocp_nlp_globalization_t globalization;
|
||||||
|
int full_step_dual;
|
||||||
|
int line_search_use_sufficient_descent;
|
||||||
|
int globalization_use_SOC;
|
||||||
|
double alpha_min;
|
||||||
|
double alpha_reduction;
|
||||||
|
double eps_sufficient_descent;
|
||||||
|
} ocp_nlp_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_opts_set(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_opts_set_at_stage(void *config, void *opts, int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* residuals
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct ocp_nlp_res
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec *res_stat; // stationarity
|
||||||
|
struct blasfeo_dvec *res_eq; // dynamics
|
||||||
|
struct blasfeo_dvec *res_ineq; // inequality constraints
|
||||||
|
struct blasfeo_dvec *res_comp; // complementarity
|
||||||
|
struct blasfeo_dvec tmp; // tmp
|
||||||
|
double inf_norm_res_stat;
|
||||||
|
double inf_norm_res_eq;
|
||||||
|
double inf_norm_res_ineq;
|
||||||
|
double inf_norm_res_comp;
|
||||||
|
acados_size_t memsize;
|
||||||
|
} ocp_nlp_res;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_res_calculate_size(ocp_nlp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_nlp_res *ocp_nlp_res_assign(ocp_nlp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_res_get_inf_norm(ocp_nlp_res *res, double *out);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct ocp_nlp_memory
|
||||||
|
{
|
||||||
|
// void *qp_solver_mem; // xcond solver mem instead ???
|
||||||
|
ocp_qp_xcond_solver_memory *qp_solver_mem; // xcond solver mem instead ???
|
||||||
|
void *regularize_mem;
|
||||||
|
void **dynamics; // dynamics memory
|
||||||
|
void **cost; // cost memory
|
||||||
|
void **constraints; // constraints memory
|
||||||
|
|
||||||
|
// residuals
|
||||||
|
ocp_nlp_res *nlp_res;
|
||||||
|
|
||||||
|
// qp in & out
|
||||||
|
ocp_qp_in *qp_in;
|
||||||
|
ocp_qp_out *qp_out;
|
||||||
|
// QP stuff not entering the qp_in struct
|
||||||
|
struct blasfeo_dmat *dzduxt; // dzdux transposed
|
||||||
|
struct blasfeo_dvec *z_alg; // z_alg, output algebraic variables
|
||||||
|
|
||||||
|
struct blasfeo_dvec *cost_grad;
|
||||||
|
struct blasfeo_dvec *ineq_fun;
|
||||||
|
struct blasfeo_dvec *ineq_adj;
|
||||||
|
struct blasfeo_dvec *dyn_fun;
|
||||||
|
struct blasfeo_dvec *dyn_adj;
|
||||||
|
|
||||||
|
double cost_value;
|
||||||
|
|
||||||
|
bool *set_sim_guess; // indicate if there is new explicitly provided guess for integration variables
|
||||||
|
struct blasfeo_dvec *sim_guess;
|
||||||
|
|
||||||
|
int *sqp_iter; // pointer to iteration number
|
||||||
|
|
||||||
|
} ocp_nlp_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_memory_calculate_size(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_opts *opts);
|
||||||
|
//
|
||||||
|
ocp_nlp_memory *ocp_nlp_memory_assign(ocp_nlp_config *config, ocp_nlp_dims *dims,
|
||||||
|
ocp_nlp_opts *opts, void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct ocp_nlp_workspace
|
||||||
|
{
|
||||||
|
|
||||||
|
void *qp_work;
|
||||||
|
void **dynamics; // dynamics_workspace
|
||||||
|
void **cost; // cost_workspace
|
||||||
|
void **constraints; // constraints_workspace
|
||||||
|
|
||||||
|
// for globalization: -> move to module?!
|
||||||
|
ocp_nlp_out *tmp_nlp_out;
|
||||||
|
ocp_nlp_out *weight_merit_fun;
|
||||||
|
struct blasfeo_dvec tmp_nxu;
|
||||||
|
struct blasfeo_dvec tmp_ni;
|
||||||
|
struct blasfeo_dvec dxnext_dy;
|
||||||
|
|
||||||
|
} ocp_nlp_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_workspace_calculate_size(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_opts *opts);
|
||||||
|
//
|
||||||
|
ocp_nlp_workspace *ocp_nlp_workspace_assign(ocp_nlp_config *config, ocp_nlp_dims *dims,
|
||||||
|
ocp_nlp_opts *opts, ocp_nlp_memory *mem, void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
void ocp_nlp_alias_memory_to_submodules(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_initialize_submodules(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_approximate_qp_matrices(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_approximate_qp_vectors_sqp(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_embed_initial_value(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_update_variables_sqp(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work, double alpha);
|
||||||
|
//
|
||||||
|
int ocp_nlp_precompute_common(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
double ocp_nlp_line_search(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work,
|
||||||
|
int check_early_termination);
|
||||||
|
//
|
||||||
|
double ocp_nlp_evaluate_merit_fun(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_initialize_t_slacks(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_res_compute(ocp_nlp_dims *dims, ocp_nlp_in *in, ocp_nlp_out *out,
|
||||||
|
ocp_nlp_res *res, ocp_nlp_memory *mem);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_compute(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
ocp_nlp_out *out, ocp_nlp_opts *opts, ocp_nlp_memory *mem, ocp_nlp_workspace *work);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_COMMON_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
238
third_party/acados/include/acados/ocp_nlp/ocp_nlp_constraints_bgh.h
vendored
Normal file
238
third_party/acados/include/acados/ocp_nlp/ocp_nlp_constraints_bgh.h
vendored
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_constraints
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_BGH_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_BGH_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_constraints_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx;
|
||||||
|
int nu;
|
||||||
|
int nz;
|
||||||
|
int nb; // nbx + nbu
|
||||||
|
int nbu; // number of input box constraints
|
||||||
|
int nbx; // number of state box constraints
|
||||||
|
int ng; // number of general linear constraints
|
||||||
|
int nh; // number of nonlinear path constraints
|
||||||
|
int ns; // nsbu + nsbx + nsg + nsh
|
||||||
|
int nsbu; // number of softened input bounds
|
||||||
|
int nsbx; // number of softened state bounds
|
||||||
|
int nsg; // number of softened general linear constraints
|
||||||
|
int nsh; // number of softened nonlinear constraints
|
||||||
|
int nbue; // number of input box constraints which are equality
|
||||||
|
int nbxe; // number of state box constraints which are equality
|
||||||
|
int nge; // number of general linear constraints which are equality
|
||||||
|
int nhe; // number of nonlinear path constraints which are equality
|
||||||
|
} ocp_nlp_constraints_bgh_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgh_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgh_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_dims_set(void *config_, void *dims_,
|
||||||
|
const char *field, const int* value);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* model
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int *idxb;
|
||||||
|
int *idxs;
|
||||||
|
int *idxe;
|
||||||
|
struct blasfeo_dvec d; // gathers bounds
|
||||||
|
struct blasfeo_dmat DCt; // general linear constraint matrix
|
||||||
|
// lg <= [D, C] * [u; x] <= ug
|
||||||
|
external_function_generic *nl_constr_h_fun; // nonlinear: lh <= h(x,u) <= uh
|
||||||
|
external_function_generic *nl_constr_h_fun_jac; // nonlinear: lh <= h(x,u) <= uh
|
||||||
|
external_function_generic *nl_constr_h_fun_jac_hess; // nonlinear: lh <= h(x,u) <= uh
|
||||||
|
} ocp_nlp_constraints_bgh_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgh_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgh_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int ocp_nlp_constraints_bgh_model_set(void *config_, void *dims_,
|
||||||
|
void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_model_get(void *config_, void *dims_,
|
||||||
|
void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int compute_adj;
|
||||||
|
int compute_hess;
|
||||||
|
} ocp_nlp_constraints_bgh_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgh_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgh_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_opts_set(void *config, void *opts, char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec fun;
|
||||||
|
struct blasfeo_dvec adj;
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to ux in tmp_nlp_out
|
||||||
|
struct blasfeo_dvec *lam; // pointer to lam in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_lam;// pointer to lam in tmp_nlp_out
|
||||||
|
struct blasfeo_dvec *z_alg; // pointer to z_alg in ocp_nlp memory
|
||||||
|
struct blasfeo_dmat *DCt; // pointer to DCt in qp_in
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dmat *dzduxt; // pointer to dzduxt in ocp_nlp memory
|
||||||
|
int *idxb; // pointer to idxb[ii] in qp_in
|
||||||
|
int *idxs_rev; // pointer to idxs_rev[ii] in qp_in
|
||||||
|
int *idxe; // pointer to idxe[ii] in qp_in
|
||||||
|
} ocp_nlp_constraints_bgh_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgh_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgh_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_constraints_bgh_memory_get_fun_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_constraints_bgh_memory_get_adj_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_lam_ptr(struct blasfeo_dvec *lam, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_tmp_lam_ptr(struct blasfeo_dvec *tmp_lam, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_DCt_ptr(struct blasfeo_dmat *DCt, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_RSQrq_ptr(struct blasfeo_dmat *RSQrq, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_z_alg_ptr(struct blasfeo_dvec *z_alg, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_dzduxt_ptr(struct blasfeo_dmat *dzduxt, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_idxb_ptr(int *idxb, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_idxs_rev_ptr(int *idxs_rev, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_idxe_ptr(int *idxe, void *memory_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat tmp_nv_nv;
|
||||||
|
struct blasfeo_dmat tmp_nz_nh;
|
||||||
|
struct blasfeo_dmat tmp_nv_nh;
|
||||||
|
struct blasfeo_dmat tmp_nz_nv;
|
||||||
|
struct blasfeo_dmat hess_z;
|
||||||
|
struct blasfeo_dvec tmp_ni;
|
||||||
|
struct blasfeo_dvec tmp_nh;
|
||||||
|
} ocp_nlp_constraints_bgh_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgh_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_initialize(void *config, void *dims, void *model, void *opts,
|
||||||
|
void *mem, void *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_update_qp_matrices(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_compute_fun(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_bounds_update(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_BGH_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
218
third_party/acados/include/acados/ocp_nlp/ocp_nlp_constraints_bgp.h
vendored
Normal file
218
third_party/acados/include/acados/ocp_nlp/ocp_nlp_constraints_bgp.h
vendored
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_constraints
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_BGP_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_BGP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_constraints_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx;
|
||||||
|
int nu;
|
||||||
|
int nz;
|
||||||
|
int nb; // nbx + nbu
|
||||||
|
int nbu;
|
||||||
|
int nbx;
|
||||||
|
int ng; // number of general linear constraints
|
||||||
|
int nphi; // dimension of convex outer part
|
||||||
|
int ns; // nsbu + nsbx + nsg + nsphi
|
||||||
|
int nsbu; // number of softened input bounds
|
||||||
|
int nsbx; // number of softened state bounds
|
||||||
|
int nsg; // number of softened general linear constraints
|
||||||
|
int nsphi; // number of softened nonlinear constraints
|
||||||
|
int nr; // dimension of nonlinear function in convex_over_nonlinear constraint
|
||||||
|
int nbue; // number of input box constraints which are equality
|
||||||
|
int nbxe; // number of state box constraints which are equality
|
||||||
|
int nge; // number of general linear constraints which are equality
|
||||||
|
int nphie; // number of nonlinear path constraints which are equality
|
||||||
|
} ocp_nlp_constraints_bgp_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgp_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgp_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
/* model */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// ocp_nlp_constraints_bgp_dims *dims;
|
||||||
|
int *idxb;
|
||||||
|
int *idxs;
|
||||||
|
int *idxe;
|
||||||
|
struct blasfeo_dvec d;
|
||||||
|
struct blasfeo_dmat DCt;
|
||||||
|
external_function_generic *nl_constr_phi_o_r_fun_phi_jac_ux_z_phi_hess_r_jac_ux;
|
||||||
|
external_function_generic *nl_constr_phi_o_r_fun;
|
||||||
|
external_function_generic *nl_constr_r_fun_jac;
|
||||||
|
} ocp_nlp_constraints_bgp_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgp_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgp_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int ocp_nlp_constraints_bgp_model_set(void *config_, void *dims_,
|
||||||
|
void *model_, const char *field, void *value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_model_get(void *config_, void *dims_,
|
||||||
|
void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
/* options */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int compute_adj;
|
||||||
|
int compute_hess;
|
||||||
|
} ocp_nlp_constraints_bgp_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgp_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgp_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_opts_set(void *config, void *opts, char *field, void *value);
|
||||||
|
|
||||||
|
/* memory */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec fun;
|
||||||
|
struct blasfeo_dvec adj;
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to ux in tmp_nlp_out
|
||||||
|
struct blasfeo_dvec *lam; // pointer to lam in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_lam;// pointer to lam in tmp_nlp_out
|
||||||
|
struct blasfeo_dvec *z_alg; // pointer to z_alg in ocp_nlp memory
|
||||||
|
struct blasfeo_dmat *DCt; // pointer to DCt in qp_in
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dmat *dzduxt; // pointer to dzduxt in ocp_nlp memory
|
||||||
|
int *idxb; // pointer to idxb[ii] in qp_in
|
||||||
|
int *idxs_rev; // pointer to idxs_rev[ii] in qp_in
|
||||||
|
int *idxe; // pointer to idxe[ii] in qp_in
|
||||||
|
} ocp_nlp_constraints_bgp_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgp_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_constraints_bgp_memory_assign(void *config, void *dims, void *opts,
|
||||||
|
void *raw_memory);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_constraints_bgp_memory_get_fun_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_constraints_bgp_memory_get_adj_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_lam_ptr(struct blasfeo_dvec *lam, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_tmp_lam_ptr(struct blasfeo_dvec *tmp_lam, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_DCt_ptr(struct blasfeo_dmat *DCt, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_z_alg_ptr(struct blasfeo_dvec *z_alg, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_dzduxt_ptr(struct blasfeo_dmat *dzduxt, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_idxb_ptr(int *idxb, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_memory_set_idxs_rev_ptr(int *idxs_rev, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgh_memory_set_idxe_ptr(int *idxe, void *memory_);
|
||||||
|
|
||||||
|
/* workspace */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec tmp_ni;
|
||||||
|
struct blasfeo_dmat jac_r_ux_tran;
|
||||||
|
struct blasfeo_dmat tmp_nr_nphi_nr;
|
||||||
|
struct blasfeo_dmat tmp_nv_nr;
|
||||||
|
struct blasfeo_dmat tmp_nv_nphi;
|
||||||
|
struct blasfeo_dmat tmp_nz_nphi;
|
||||||
|
} ocp_nlp_constraints_bgp_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_bgp_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_initialize(void *config, void *dims, void *model,
|
||||||
|
void *opts, void *mem, void *work);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_update_qp_matrices(void *config_, void *dims,
|
||||||
|
void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_compute_fun(void *config_, void *dims,
|
||||||
|
void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_constraints_bgp_bounds_update(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_BGP_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
108
third_party/acados/include/acados/ocp_nlp/ocp_nlp_constraints_common.h
vendored
Normal file
108
third_party/acados/include/acados/ocp_nlp/ocp_nlp_constraints_common.h
vendored
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \ingroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \defgroup ocp_nlp_constraints ocp_nlp_constraints
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_COMMON_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* config
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
acados_size_t (*dims_calculate_size)(void *config);
|
||||||
|
void *(*dims_assign)(void *config, void *raw_memory);
|
||||||
|
acados_size_t (*model_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*model_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
int (*model_set)(void *config_, void *dims_, void *model_, const char *field, void *value);
|
||||||
|
void (*model_get)(void *config_, void *dims_, void *model_, const char *field, void *value);
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*opts_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_update)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config, void *opts, char *field, void *value);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
struct blasfeo_dvec *(*memory_get_fun_ptr)(void *memory);
|
||||||
|
struct blasfeo_dvec *(*memory_get_adj_ptr)(void *memory);
|
||||||
|
void (*memory_set_ux_ptr)(struct blasfeo_dvec *ux, void *memory);
|
||||||
|
void (*memory_set_tmp_ux_ptr)(struct blasfeo_dvec *tmp_ux, void *memory);
|
||||||
|
void (*memory_set_lam_ptr)(struct blasfeo_dvec *lam, void *memory);
|
||||||
|
void (*memory_set_tmp_lam_ptr)(struct blasfeo_dvec *tmp_lam, void *memory);
|
||||||
|
void (*memory_set_DCt_ptr)(struct blasfeo_dmat *DCt, void *memory);
|
||||||
|
void (*memory_set_RSQrq_ptr)(struct blasfeo_dmat *RSQrq, void *memory);
|
||||||
|
void (*memory_set_z_alg_ptr)(struct blasfeo_dvec *z_alg, void *memory);
|
||||||
|
void (*memory_set_dzdux_tran_ptr)(struct blasfeo_dmat *dzduxt, void *memory);
|
||||||
|
void (*memory_set_idxb_ptr)(int *idxb, void *memory);
|
||||||
|
void (*memory_set_idxs_rev_ptr)(int *idxs_rev, void *memory);
|
||||||
|
void (*memory_set_idxe_ptr)(int *idxe, void *memory);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
void (*initialize)(void *config, void *dims, void *model, void *opts, void *mem, void *work);
|
||||||
|
void (*update_qp_matrices)(void *config, void *dims, void *model, void *opts, void *mem, void *work);
|
||||||
|
void (*compute_fun)(void *config, void *dims, void *model, void *opts, void *mem, void *work);
|
||||||
|
void (*bounds_update)(void *config, void *dims, void *model, void *opts, void *mem, void *work);
|
||||||
|
void (*config_initialize_default)(void *config);
|
||||||
|
// dimension setters
|
||||||
|
void (*dims_set)(void *config_, void *dims_, const char *field, const int *value);
|
||||||
|
void (*dims_get)(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
} ocp_nlp_constraints_config;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_constraints_config_calculate_size();
|
||||||
|
//
|
||||||
|
ocp_nlp_constraints_config *ocp_nlp_constraints_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_CONSTRAINTS_COMMON_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
107
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_common.h
vendored
Normal file
107
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_common.h
vendored
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \defgroup ocp_nlp_cost ocp_nlp_cost
|
||||||
|
///
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp_cost ocp_nlp_cost
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost_common ocp_nlp_cost_common
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_COST_COMMON_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_COST_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* config
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
acados_size_t (*dims_calculate_size)(void *config);
|
||||||
|
void *(*dims_assign)(void *config, void *raw_memory);
|
||||||
|
void (*dims_set)(void *config_, void *dims_, const char *field, int *value);
|
||||||
|
void (*dims_get)(void *config_, void *dims_, const char *field, int *value);
|
||||||
|
acados_size_t (*model_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*model_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
int (*model_set)(void *config_, void *dims_, void *model_, const char *field, void *value_);
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*opts_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_update)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config, void *opts, const char *field, void *value);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
double *(*memory_get_fun_ptr)(void *memory);
|
||||||
|
struct blasfeo_dvec *(*memory_get_grad_ptr)(void *memory);
|
||||||
|
void (*memory_set_ux_ptr)(struct blasfeo_dvec *ux, void *memory);
|
||||||
|
void (*memory_set_tmp_ux_ptr)(struct blasfeo_dvec *tmp_ux, void *memory);
|
||||||
|
void (*memory_set_z_alg_ptr)(struct blasfeo_dvec *z_alg, void *memory);
|
||||||
|
void (*memory_set_dzdux_tran_ptr)(struct blasfeo_dmat *dzdux, void *memory);
|
||||||
|
void (*memory_set_RSQrq_ptr)(struct blasfeo_dmat *RSQrq, void *memory);
|
||||||
|
void (*memory_set_Z_ptr)(struct blasfeo_dvec *Z, void *memory);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
void (*initialize)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
// computes the function value, gradient and hessian (approximation) of the cost function
|
||||||
|
void (*update_qp_matrices)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
// computes the cost function value (intended for globalization)
|
||||||
|
void (*compute_fun)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
void (*config_initialize_default)(void *config);
|
||||||
|
void (*precompute)(void *config_, void *dims_, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
} ocp_nlp_cost_config;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_config_calculate_size();
|
||||||
|
//
|
||||||
|
ocp_nlp_cost_config *ocp_nlp_cost_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_COST_COMMON_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
207
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_conl.h
vendored
Normal file
207
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_conl.h
vendored
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost ocp_nlp_cost
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost_conl ocp_nlp_cost_conl
|
||||||
|
/// \brief This module implements convex-over-nonlinear costs of the form
|
||||||
|
/// \f$\min_{x,u,z} \psi(y(x,u,z,p) - y_{\text{ref}}, p)\f$,
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_COST_CONL_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_COST_CONL_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_cost_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx; // number of states
|
||||||
|
int nz; // number of algebraic variables
|
||||||
|
int nu; // number of inputs
|
||||||
|
int ny; // number of outputs
|
||||||
|
int ns; // number of slacks
|
||||||
|
} ocp_nlp_cost_conl_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_conl_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_conl_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_dims_initialize(void *config, void *dims, int nx, int nu, int ny, int ns, int nz);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_dims_set(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* model
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// slack penalty has the form z^T * s + .5 * s^T * Z * s
|
||||||
|
external_function_generic *conl_cost_fun;
|
||||||
|
external_function_generic *conl_cost_fun_jac_hess;
|
||||||
|
struct blasfeo_dvec y_ref;
|
||||||
|
struct blasfeo_dvec Z; // diagonal Hessian of slacks as vector
|
||||||
|
struct blasfeo_dvec z; // gradient of slacks as vector
|
||||||
|
double scaling;
|
||||||
|
} ocp_nlp_cost_conl_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_conl_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_conl_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int ocp_nlp_cost_conl_model_set(void *config_, void *dims_, void *model_, const char *field, void *value_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
bool gauss_newton_hess; // dummy options, we always use a gauss-newton hessian
|
||||||
|
} ocp_nlp_cost_conl_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_conl_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_conl_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_opts_set(void *config, void *opts, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec grad; // gradient of cost function
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to ux in tmp_nlp_out
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dvec *Z; // pointer to Z in qp_in
|
||||||
|
struct blasfeo_dvec *z_alg; ///< pointer to z in sim_out
|
||||||
|
struct blasfeo_dmat *dzdux_tran; ///< pointer to sensitivity of a wrt ux in sim_out
|
||||||
|
double fun; ///< value of the cost function
|
||||||
|
} ocp_nlp_cost_conl_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_conl_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_conl_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
double *ocp_nlp_cost_conl_memory_get_fun_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_cost_conl_memory_get_grad_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_memory_set_RSQrq_ptr(struct blasfeo_dmat *RSQrq, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_memory_set_Z_ptr(struct blasfeo_dvec *Z, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_memory_set_z_alg_ptr(struct blasfeo_dvec *z_alg, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_memory_set_dzdux_tran_ptr(struct blasfeo_dmat *dzdux_tran, void *memory_);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat W; // hessian of outer loss function
|
||||||
|
struct blasfeo_dmat W_chol; // cholesky factor of hessian of outer loss function
|
||||||
|
struct blasfeo_dmat Jt_ux; // jacobian of inner residual function
|
||||||
|
struct blasfeo_dmat Jt_ux_tilde; // jacobian of inner residual function plus gradient contribution of algebraic variables
|
||||||
|
struct blasfeo_dmat Jt_z; // jacobian of inner residual function wrt algebraic variables
|
||||||
|
struct blasfeo_dmat tmp_nv_ny;
|
||||||
|
struct blasfeo_dvec tmp_ny;
|
||||||
|
struct blasfeo_dvec tmp_2ns;
|
||||||
|
} ocp_nlp_cost_conl_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_conl_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_precompute(void *config_, void *dims_, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_initialize(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_update_qp_matrices(void *config_, void *dims, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_conl_compute_fun(void *config_, void *dims, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_COST_CONL_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
187
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_external.h
vendored
Normal file
187
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_external.h
vendored
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_COST_EXTERNAL_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_COST_EXTERNAL_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_cost_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx; // number of states
|
||||||
|
int nz; // number of algebraic variables
|
||||||
|
int nu; // number of inputs
|
||||||
|
int ns; // number of slacks
|
||||||
|
} ocp_nlp_cost_external_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_external_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_external_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_dims_set(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* model
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
external_function_generic *ext_cost_fun; // function
|
||||||
|
external_function_generic *ext_cost_fun_jac_hess; // function, gradient and hessian
|
||||||
|
external_function_generic *ext_cost_fun_jac; // function, gradient
|
||||||
|
struct blasfeo_dvec Z;
|
||||||
|
struct blasfeo_dvec z;
|
||||||
|
struct blasfeo_dmat numerical_hessian; // custom hessian approximation
|
||||||
|
double scaling;
|
||||||
|
} ocp_nlp_cost_external_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_external_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_external_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int use_numerical_hessian; // > 0 indicating custom hessian is used instead of CasADi evaluation
|
||||||
|
} ocp_nlp_cost_external_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_external_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_external_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_opts_set(void *config, void *opts, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec grad; // gradient of cost function
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to tmp_ux in nlp_out
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dvec *Z; // pointer to Z in qp_in
|
||||||
|
struct blasfeo_dvec *z_alg; ///< pointer to z in sim_out
|
||||||
|
struct blasfeo_dmat *dzdux_tran; ///< pointer to sensitivity of a wrt ux in sim_out
|
||||||
|
double fun; ///< value of the cost function
|
||||||
|
} ocp_nlp_cost_external_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_external_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_external_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
double *ocp_nlp_cost_external_memory_get_fun_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_cost_external_memory_get_grad_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_memory_set_RSQrq_ptr(struct blasfeo_dmat *RSQrq, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_Z_ptr(struct blasfeo_dvec *Z, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_memory_set_z_alg_ptr(struct blasfeo_dvec *z_alg, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_memory_set_dzdux_tran_ptr(struct blasfeo_dmat *dzdux_tran, void *memory_);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat tmp_nunx_nunx;
|
||||||
|
struct blasfeo_dmat tmp_nz_nz;
|
||||||
|
struct blasfeo_dmat tmp_nz_nunx;
|
||||||
|
struct blasfeo_dvec tmp_nunxnz;
|
||||||
|
struct blasfeo_dvec tmp_2ns; // temporary vector of dimension 2*ns
|
||||||
|
} ocp_nlp_cost_external_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_external_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_precompute(void *config_, void *dims_, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_initialize(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_update_qp_matrices(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_external_compute_fun(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_COST_EXTERNAL_H_
|
||||||
243
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_ls.h
vendored
Normal file
243
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_ls.h
vendored
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost ocp_nlp_cost
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost_ls ocp_nlp_cost_ls
|
||||||
|
/// \brief This module implements linear-least squares costs of the form
|
||||||
|
/// \f$\min_{x,u,z} \| V_x x + V_u u + V_z z - y_{\text{ref}}\|_W^2\f$.
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_COST_LS_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_COST_LS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_cost_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// dims //
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx; // number of states
|
||||||
|
int nz; // number of algebraic variables
|
||||||
|
int nu; // number of inputs
|
||||||
|
int ny; // number of outputs
|
||||||
|
int ns; // number of slacks
|
||||||
|
} ocp_nlp_cost_ls_dims;
|
||||||
|
|
||||||
|
|
||||||
|
/// Calculate the size of the ocp_nlp_cost_ls_dims struct
|
||||||
|
///
|
||||||
|
/// \param[in] config_ structure containing configuration of ocp_nlp_cost
|
||||||
|
/// module
|
||||||
|
/// \param[out] []
|
||||||
|
/// \return \c size of ocp_nlp_dims struct
|
||||||
|
acados_size_t ocp_nlp_cost_ls_dims_calculate_size(void *config);
|
||||||
|
|
||||||
|
|
||||||
|
/// Assign memory pointed to by raw_memory to ocp_nlp-cost_ls dims struct
|
||||||
|
///
|
||||||
|
/// \param[in] config structure containing configuration of ocp_nlp_cost
|
||||||
|
/// module
|
||||||
|
/// \param[in] raw_memory pointer to memory location
|
||||||
|
/// \param[out] []
|
||||||
|
/// \return dims
|
||||||
|
void *ocp_nlp_cost_ls_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_dims_set(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// model //
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
/// structure containing the data describing the linear least-square cost
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// slack penalty has the form z^T * s + .5 * s^T * Z * s
|
||||||
|
struct blasfeo_dmat Cyt; ///< output matrix: Cy * [u,x] = y; in transposed form
|
||||||
|
struct blasfeo_dmat Vz; ///< Vz in ls cost Vx*x + Vu*u + Vz*z
|
||||||
|
struct blasfeo_dmat W; ///< ls norm corresponding to this matrix
|
||||||
|
struct blasfeo_dvec y_ref; ///< yref
|
||||||
|
struct blasfeo_dvec Z; ///< diagonal Hessian of slacks as vector (lower and upper)
|
||||||
|
struct blasfeo_dvec z; ///< gradient of slacks as vector (lower and upper)
|
||||||
|
double scaling;
|
||||||
|
int W_changed; ///< flag indicating whether W has changed and needs to be refactorized
|
||||||
|
int Cyt_or_scaling_changed; ///< flag indicating whether Cyt or scaling has changed and Hessian needs to be recomputed
|
||||||
|
} ocp_nlp_cost_ls_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_ls_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_ls_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int ocp_nlp_cost_ls_model_set(void *config_, void *dims_, void *model_,
|
||||||
|
const char *field, void *value_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// options //
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int dummy; // struct can't be void
|
||||||
|
} ocp_nlp_cost_ls_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_ls_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_ls_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_opts_set(void *config, void *opts, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// memory //
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// structure containing the memory associated with cost_ls component
|
||||||
|
/// of the ocp_nlp module
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat hess; ///< hessian of cost function
|
||||||
|
struct blasfeo_dmat W_chol; ///< cholesky factor of weight matrix
|
||||||
|
struct blasfeo_dvec res; ///< ls residual r(x)
|
||||||
|
struct blasfeo_dvec grad; ///< gradient of cost function
|
||||||
|
struct blasfeo_dvec *ux; ///< pointer to ux in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_ux; ///< pointer to ux in tmp_nlp_out
|
||||||
|
struct blasfeo_dvec *z_alg; ///< pointer to z in sim_out
|
||||||
|
struct blasfeo_dmat *dzdux_tran; ///< pointer to sensitivity of a wrt ux in sim_out
|
||||||
|
struct blasfeo_dmat *RSQrq; ///< pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dvec *Z; ///< pointer to Z in qp_in
|
||||||
|
double fun; ///< value of the cost function
|
||||||
|
} ocp_nlp_cost_ls_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_ls_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_ls_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
double *ocp_nlp_cost_ls_memory_get_fun_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_cost_ls_memory_get_grad_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_RSQrq_ptr(struct blasfeo_dmat *RSQrq, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_Z_ptr(struct blasfeo_dvec *Z, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_z_alg_ptr(struct blasfeo_dvec *z_alg, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_memory_set_dzdux_tran_ptr(struct blasfeo_dmat *dzdux_tran, void *memory_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// workspace //
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat tmp_nv_ny; // temporary matrix of dimensions nv, ny
|
||||||
|
struct blasfeo_dmat Cyt_tilde; // updated Cyt (after z elimination)
|
||||||
|
struct blasfeo_dmat dzdux_tran; // derivatives of z wrt u and x (tran)
|
||||||
|
struct blasfeo_dvec tmp_ny; // temporary vector of dimension ny
|
||||||
|
struct blasfeo_dvec tmp_2ns; // temporary vector of dimension ny
|
||||||
|
struct blasfeo_dvec tmp_nz; // temporary vector of dimension nz
|
||||||
|
struct blasfeo_dvec y_ref_tilde; // updated y_ref (after z elimination)
|
||||||
|
} ocp_nlp_cost_ls_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_ls_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// functions //
|
||||||
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
// computations that are done once when solver is created
|
||||||
|
void ocp_nlp_cost_ls_precompute(void *config_, void *dims_, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_initialize(void *config_, void *dims, void *model_, void *opts_,
|
||||||
|
void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_update_qp_matrices(void *config_, void *dims, void *model_,
|
||||||
|
void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_ls_compute_fun(void *config_, void *dims, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_COST_LS_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
211
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_nls.h
vendored
Normal file
211
third_party/acados/include/acados/ocp_nlp/ocp_nlp_cost_nls.h
vendored
Normal file
@@ -0,0 +1,211 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost ocp_nlp_cost
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_cost_nls ocp_nlp_cost_nls
|
||||||
|
/// \brief This module implements nonlinear-least squares costs of the form
|
||||||
|
/// \f$\min_{x,u,z} \| y(x,u,z,p) - y_{\text{ref}} \|_W^2\f$,
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_COST_NLS_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_COST_NLS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_cost_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx; // number of states
|
||||||
|
int nz; // number of algebraic variables
|
||||||
|
int nu; // number of inputs
|
||||||
|
int ny; // number of outputs
|
||||||
|
int ns; // number of slacks
|
||||||
|
} ocp_nlp_cost_nls_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_nls_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_nls_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_dims_set(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* model
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// nonliner function nls_y(x,u) replaces Cy * [x,u] in ls_cost
|
||||||
|
// slack penalty has the form z^T * s + .5 * s^T * Z * s
|
||||||
|
external_function_generic *nls_y_fun; // evaluation of nls function
|
||||||
|
external_function_generic *nls_y_fun_jac; // evaluation nls function and jacobian
|
||||||
|
external_function_generic *nls_y_hess; // hessian*seeds of nls residuals
|
||||||
|
struct blasfeo_dmat W; //
|
||||||
|
struct blasfeo_dvec y_ref;
|
||||||
|
struct blasfeo_dvec Z; // diagonal Hessian of slacks as vector
|
||||||
|
struct blasfeo_dvec z; // gradient of slacks as vector
|
||||||
|
double scaling;
|
||||||
|
int W_changed; ///< flag indicating whether W has changed and needs to be refactorized
|
||||||
|
} ocp_nlp_cost_nls_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_nls_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_nls_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int ocp_nlp_cost_nls_model_set(void *config_, void *dims_, void *model_, const char *field, void *value_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
bool gauss_newton_hess; // gauss-newton hessian approximation
|
||||||
|
} ocp_nlp_cost_nls_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_nls_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_nls_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_opts_set(void *config, void *opts, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat W_chol; // cholesky factor of weight matrix
|
||||||
|
struct blasfeo_dmat Jt; // jacobian of nls fun
|
||||||
|
struct blasfeo_dvec res; // nls residual r(x)
|
||||||
|
struct blasfeo_dvec grad; // gradient of cost function
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to ux in tmp_nlp_out
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dvec *Z; // pointer to Z in qp_in
|
||||||
|
struct blasfeo_dvec *z_alg; ///< pointer to z in sim_out
|
||||||
|
struct blasfeo_dmat *dzdux_tran; ///< pointer to sensitivity of a wrt ux in sim_out
|
||||||
|
double fun; ///< value of the cost function
|
||||||
|
} ocp_nlp_cost_nls_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_nls_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_cost_nls_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
double *ocp_nlp_cost_nls_memory_get_fun_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_cost_nls_memory_get_grad_ptr(void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_memory_set_RSQrq_ptr(struct blasfeo_dmat *RSQrq, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_memory_set_Z_ptr(struct blasfeo_dvec *Z, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_memory_set_z_alg_ptr(struct blasfeo_dvec *z_alg, void *memory_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_memory_set_dzdux_tran_ptr(struct blasfeo_dmat *dzdux_tran, void *memory_);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat tmp_nv_ny;
|
||||||
|
struct blasfeo_dmat tmp_nv_nv;
|
||||||
|
struct blasfeo_dmat Vz;
|
||||||
|
struct blasfeo_dmat Cyt_tilde;
|
||||||
|
struct blasfeo_dvec tmp_ny;
|
||||||
|
struct blasfeo_dvec tmp_2ns;
|
||||||
|
struct blasfeo_dvec tmp_nz;
|
||||||
|
} ocp_nlp_cost_nls_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_cost_nls_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_precompute(void *config_, void *dims_, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_initialize(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_update_qp_matrices(void *config_, void *dims, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_cost_nls_compute_fun(void *config_, void *dims, void *model_, void *opts_, void *memory_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_COST_NLS_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
119
third_party/acados/include/acados/ocp_nlp/ocp_nlp_dynamics_common.h
vendored
Normal file
119
third_party/acados/include/acados/ocp_nlp/ocp_nlp_dynamics_common.h
vendored
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \ingroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \defgroup ocp_nlp_dynamics ocp_nlp_dynamics
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_COMMON_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* config
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void (*config_initialize_default)(void *config);
|
||||||
|
sim_config *sim_solver;
|
||||||
|
/* dims */
|
||||||
|
acados_size_t (*dims_calculate_size)(void *config);
|
||||||
|
void *(*dims_assign)(void *config, void *raw_memory);
|
||||||
|
void (*dims_set)(void *config_, void *dims_, const char *field, int *value);
|
||||||
|
void (*dims_get)(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
/* model */
|
||||||
|
acados_size_t (*model_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*model_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*model_set)(void *config_, void *dims_, void *model_, const char *field, void *value_);
|
||||||
|
/* opts */
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*opts_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
void (*opts_update)(void *config, void *dims, void *opts);
|
||||||
|
/* memory */
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
// get shooting node gap x_next(x_n, u_n) - x_{n+1}
|
||||||
|
struct blasfeo_dvec *(*memory_get_fun_ptr)(void *memory_);
|
||||||
|
struct blasfeo_dvec *(*memory_get_adj_ptr)(void *memory_);
|
||||||
|
void (*memory_set_ux_ptr)(struct blasfeo_dvec *ux, void *memory_);
|
||||||
|
void (*memory_set_tmp_ux_ptr)(struct blasfeo_dvec *tmp_ux, void *memory_);
|
||||||
|
void (*memory_set_ux1_ptr)(struct blasfeo_dvec *ux1, void *memory_);
|
||||||
|
void (*memory_set_tmp_ux1_ptr)(struct blasfeo_dvec *tmp_ux1, void *memory_);
|
||||||
|
void (*memory_set_pi_ptr)(struct blasfeo_dvec *pi, void *memory_);
|
||||||
|
void (*memory_set_tmp_pi_ptr)(struct blasfeo_dvec *tmp_pi, void *memory_);
|
||||||
|
void (*memory_set_BAbt_ptr)(struct blasfeo_dmat *BAbt, void *memory_);
|
||||||
|
void (*memory_set_RSQrq_ptr)(struct blasfeo_dmat *RSQrq, void *memory_);
|
||||||
|
void (*memory_set_dzduxt_ptr)(struct blasfeo_dmat *mat, void *memory_);
|
||||||
|
void (*memory_set_sim_guess_ptr)(struct blasfeo_dvec *vec, bool *bool_ptr, void *memory_);
|
||||||
|
void (*memory_set_z_alg_ptr)(struct blasfeo_dvec *vec, void *memory_);
|
||||||
|
void (*memory_get)(void *config, void *dims, void *mem, const char *field, void* value);
|
||||||
|
/* workspace */
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
void (*initialize)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
void (*update_qp_matrices)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
void (*compute_fun)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
int (*precompute)(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
} ocp_nlp_dynamics_config;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_config_calculate_size();
|
||||||
|
//
|
||||||
|
ocp_nlp_dynamics_config *ocp_nlp_dynamics_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_COMMON_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
209
third_party/acados/include/acados/ocp_nlp/ocp_nlp_dynamics_cont.h
vendored
Normal file
209
third_party/acados/include/acados/ocp_nlp/ocp_nlp_dynamics_cont.h
vendored
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_dynamics
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_CONT_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_CONT_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_dynamics_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
#include "acados_c/sim_interface.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void *sim;
|
||||||
|
int nx; // number of states at the current stage
|
||||||
|
int nz; // number of algebraic states at the current stage
|
||||||
|
int nu; // number of inputs at the current stage
|
||||||
|
int nx1; // number of states at the next stage
|
||||||
|
int nu1; // number of inputes at the next stage
|
||||||
|
} ocp_nlp_dynamics_cont_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_cont_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_cont_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_dims_set(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void *sim_solver;
|
||||||
|
int compute_adj;
|
||||||
|
int compute_hess;
|
||||||
|
} ocp_nlp_dynamics_cont_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_cont_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_cont_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_opts_set(void *config, void *opts, const char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec fun;
|
||||||
|
struct blasfeo_dvec adj;
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out at current stage
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to ux in tmp_nlp_out at current stage
|
||||||
|
struct blasfeo_dvec *ux1; // pointer to ux in nlp_out at next stage
|
||||||
|
struct blasfeo_dvec *tmp_ux1; // pointer to ux in tmp_nlp_out at next stage
|
||||||
|
struct blasfeo_dvec *pi; // pointer to pi in nlp_out at current stage
|
||||||
|
struct blasfeo_dvec *tmp_pi; // pointer to pi in tmp_nlp_out at current stage
|
||||||
|
struct blasfeo_dmat *BAbt; // pointer to BAbt in qp_in
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dvec *z_alg; // pointer to output z at t = 0
|
||||||
|
bool *set_sim_guess; // indicate if initialization for integrator is set from outside
|
||||||
|
struct blasfeo_dvec *sim_guess; // initializations for integrator
|
||||||
|
// struct blasfeo_dvec *z; // pointer to (input) z in nlp_out at current stage
|
||||||
|
struct blasfeo_dmat *dzduxt; // pointer to dzdux transposed
|
||||||
|
void *sim_solver; // sim solver memory
|
||||||
|
} ocp_nlp_dynamics_cont_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_cont_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_cont_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_dynamics_cont_memory_get_fun_ptr(void *memory);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_dynamics_cont_memory_get_adj_ptr(void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_ux1_ptr(struct blasfeo_dvec *ux1, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_tmp_ux1_ptr(struct blasfeo_dvec *tmp_ux1, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_pi_ptr(struct blasfeo_dvec *pi, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_tmp_pi_ptr(struct blasfeo_dvec *tmp_pi, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_memory_set_BAbt_ptr(struct blasfeo_dmat *BAbt, void *memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat hess;
|
||||||
|
sim_in *sim_in;
|
||||||
|
sim_out *sim_out;
|
||||||
|
void *sim_solver; // sim solver workspace
|
||||||
|
} ocp_nlp_dynamics_cont_workspace;
|
||||||
|
|
||||||
|
acados_size_t ocp_nlp_dynamics_cont_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* model
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void *sim_model;
|
||||||
|
// double *state_transition; // TODO
|
||||||
|
double T; // simulation time
|
||||||
|
} ocp_nlp_dynamics_cont_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_cont_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_cont_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_model_set(void *config_, void *dims_, void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_initialize(void *config_, void *dims, void *model_, void *opts, void *mem, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_update_qp_matrices(void *config_, void *dims, void *model_, void *opts, void *mem, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_cont_compute_fun(void *config_, void *dims, void *model_, void *opts, void *mem, void *work_);
|
||||||
|
//
|
||||||
|
int ocp_nlp_dynamics_cont_precompute(void *config_, void *dims, void *model_, void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_CONT_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
192
third_party/acados/include/acados/ocp_nlp/ocp_nlp_dynamics_disc.h
vendored
Normal file
192
third_party/acados/include/acados/ocp_nlp/ocp_nlp_dynamics_disc.h
vendored
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_dynamics
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_DISC_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_DISC_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_dynamics_common.h"
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx; // number of states at the current stage
|
||||||
|
int nu; // number of inputs at the current stage
|
||||||
|
int nx1; // number of states at the next stage
|
||||||
|
int nu1; // number of inputes at the next stage
|
||||||
|
} ocp_nlp_dynamics_disc_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_disc_dims_calculate_size(void *config);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_disc_dims_assign(void *config, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_dims_set(void *config_, void *dims_, const char *dim, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int compute_adj;
|
||||||
|
int compute_hess;
|
||||||
|
} ocp_nlp_dynamics_disc_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_disc_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_disc_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
int ocp_nlp_dynamics_disc_precompute(void *config_, void *dims, void *model_, void *opts_,
|
||||||
|
void *mem_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec fun;
|
||||||
|
struct blasfeo_dvec adj;
|
||||||
|
struct blasfeo_dvec *ux; // pointer to ux in nlp_out at current stage
|
||||||
|
struct blasfeo_dvec *tmp_ux; // pointer to ux in tmp_nlp_out at current stage
|
||||||
|
struct blasfeo_dvec *ux1; // pointer to ux in nlp_out at next stage
|
||||||
|
struct blasfeo_dvec *tmp_ux1;// pointer to ux in tmp_nlp_out at next stage
|
||||||
|
struct blasfeo_dvec *pi; // pointer to pi in nlp_out at current stage
|
||||||
|
struct blasfeo_dvec *tmp_pi; // pointer to pi in tmp_nlp_out at current stage
|
||||||
|
struct blasfeo_dmat *BAbt; // pointer to BAbt in qp_in
|
||||||
|
struct blasfeo_dmat *RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
} ocp_nlp_dynamics_disc_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_disc_memory_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_disc_memory_assign(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_dynamics_disc_memory_get_fun_ptr(void *memory);
|
||||||
|
//
|
||||||
|
struct blasfeo_dvec *ocp_nlp_dynamics_disc_memory_get_adj_ptr(void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_ux_ptr(struct blasfeo_dvec *ux, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_tmp_ux_ptr(struct blasfeo_dvec *tmp_ux, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_ux1_ptr(struct blasfeo_dvec *ux1, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_tmp_ux1_ptr(struct blasfeo_dvec *tmp_ux1, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_pi_ptr(struct blasfeo_dvec *pi, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_tmp_pi_ptr(struct blasfeo_dvec *tmp_pi, void *memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_memory_set_BAbt_ptr(struct blasfeo_dmat *BAbt, void *memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat tmp_nv_nv;
|
||||||
|
} ocp_nlp_dynamics_disc_workspace;
|
||||||
|
|
||||||
|
acados_size_t ocp_nlp_dynamics_disc_workspace_calculate_size(void *config, void *dims, void *opts);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* model
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
external_function_generic *disc_dyn_fun;
|
||||||
|
external_function_generic *disc_dyn_fun_jac;
|
||||||
|
external_function_generic *disc_dyn_fun_jac_hess;
|
||||||
|
} ocp_nlp_dynamics_disc_model;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_dynamics_disc_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_dynamics_disc_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_model_set(void *config_, void *dims_, void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_config_initialize_default(void *config);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_initialize(void *config_, void *dims, void *model_, void *opts, void *mem, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_update_qp_matrices(void *config_, void *dims, void *model_, void *opts, void *mem, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_dynamics_disc_compute_fun(void *config_, void *dims, void *model_, void *opts, void *mem, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_DYNAMICS_DISC_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
122
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_common.h
vendored
Normal file
122
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_common.h
vendored
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \ingroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
/// \defgroup ocp_nlp_reg ocp_nlp_reg
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_REG_COMMON_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_REG_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
|
||||||
|
//typedef ocp_qp_dims ocp_nlp_reg_dims;
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int *nx;
|
||||||
|
int *nu;
|
||||||
|
int *nbu;
|
||||||
|
int *nbx;
|
||||||
|
int *ng;
|
||||||
|
int N;
|
||||||
|
} ocp_nlp_reg_dims;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_dims_calculate_size(int N);
|
||||||
|
//
|
||||||
|
ocp_nlp_reg_dims *ocp_nlp_reg_dims_assign(int N, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_dims_set(void *config_, ocp_nlp_reg_dims *dims, int stage, char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* dims */
|
||||||
|
acados_size_t (*dims_calculate_size)(int N);
|
||||||
|
ocp_nlp_reg_dims *(*dims_assign)(int N, void *raw_memory);
|
||||||
|
void (*dims_set)(void *config, ocp_nlp_reg_dims *dims, int stage, char *field, int *value);
|
||||||
|
/* opts */
|
||||||
|
acados_size_t (*opts_calculate_size)(void);
|
||||||
|
void *(*opts_assign)(void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config, ocp_nlp_reg_dims *dims, void *opts, char *field, void* value);
|
||||||
|
/* memory */
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
void *(*memory_assign)(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
|
||||||
|
void (*memory_set)(void *config, ocp_nlp_reg_dims *dims, void *memory, char *field, void* value);
|
||||||
|
void (*memory_set_RSQrq_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dmat *mat, void *memory);
|
||||||
|
void (*memory_set_rq_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dvec *vec, void *memory);
|
||||||
|
void (*memory_set_BAbt_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dmat *mat, void *memory);
|
||||||
|
void (*memory_set_b_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dvec *vec, void *memory);
|
||||||
|
void (*memory_set_idxb_ptr)(ocp_nlp_reg_dims *dims, int **idxb, void *memory);
|
||||||
|
void (*memory_set_DCt_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dmat *mat, void *memory);
|
||||||
|
void (*memory_set_ux_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dvec *vec, void *memory);
|
||||||
|
void (*memory_set_pi_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dvec *vec, void *memory);
|
||||||
|
void (*memory_set_lam_ptr)(ocp_nlp_reg_dims *dims, struct blasfeo_dvec *vec, void *memory);
|
||||||
|
/* functions */
|
||||||
|
void (*regularize_hessian)(void *config, ocp_nlp_reg_dims *dims, void *opts, void *memory);
|
||||||
|
void (*correct_dual_sol)(void *config, ocp_nlp_reg_dims *dims, void *opts, void *memory);
|
||||||
|
} ocp_nlp_reg_config;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_config_calculate_size(void);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* regularization help functions */
|
||||||
|
void acados_reconstruct_A(int dim, double *A, double *V, double *d);
|
||||||
|
void acados_mirror(int dim, double *A, double *V, double *d, double *e, double epsilon);
|
||||||
|
void acados_project(int dim, double *A, double *V, double *d, double *e, double epsilon);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_REG_COMMON_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
146
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_convexify.h
vendored
Normal file
146
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_convexify.h
vendored
Normal file
@@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_reg
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_REG_CONVEXIFY_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_REG_CONVEXIFY_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_reg_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// use the functions in ocp_nlp_reg_common
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double delta;
|
||||||
|
double epsilon;
|
||||||
|
// double gamma; // 0.0
|
||||||
|
} ocp_nlp_reg_convexify_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_convexify_opts_calculate_size(void);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_convexify_opts_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_convexify_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_convexify_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
double *R;
|
||||||
|
double *V; // TODO move to workspace
|
||||||
|
double *d; // TODO move to workspace
|
||||||
|
double *e; // TODO move to workspace
|
||||||
|
double *reg_hess; // TODO move to workspace
|
||||||
|
|
||||||
|
struct blasfeo_dmat Q_tilde;
|
||||||
|
struct blasfeo_dmat Q_bar;
|
||||||
|
struct blasfeo_dmat BAQ;
|
||||||
|
struct blasfeo_dmat L;
|
||||||
|
struct blasfeo_dmat delta_eye;
|
||||||
|
struct blasfeo_dmat St_copy;
|
||||||
|
|
||||||
|
struct blasfeo_dmat *original_RSQrq;
|
||||||
|
struct blasfeo_dmat tmp_RSQ;
|
||||||
|
|
||||||
|
struct blasfeo_dvec tmp_nuxM;
|
||||||
|
struct blasfeo_dvec tmp_nbgM;
|
||||||
|
|
||||||
|
// struct blasfeo_dvec grad;
|
||||||
|
// struct blasfeo_dvec b2;
|
||||||
|
|
||||||
|
// giaf's
|
||||||
|
struct blasfeo_dmat **RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dvec **rq; // pointer to rq in qp_in
|
||||||
|
struct blasfeo_dmat **BAbt; // pointer to BAbt in qp_in
|
||||||
|
struct blasfeo_dvec **b; // pointer to b in qp_in
|
||||||
|
struct blasfeo_dmat **DCt; // pointer to DCt in qp_in
|
||||||
|
struct blasfeo_dvec **ux; // pointer to ux in qp_out
|
||||||
|
struct blasfeo_dvec **pi; // pointer to pi in qp_out
|
||||||
|
struct blasfeo_dvec **lam; // pointer to lam in qp_out
|
||||||
|
int **idxb; // pointer to idxb in qp_in
|
||||||
|
|
||||||
|
} ocp_nlp_reg_convexify_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_convexify_calculate_memory_size(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_convexify_assign_memory(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_convexify_config_initialize_default(ocp_nlp_reg_config *config);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_REG_CONVEXIFY_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
121
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_mirror.h
vendored
Normal file
121
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_mirror.h
vendored
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_reg
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_REG_MIRROR_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_REG_MIRROR_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_reg_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// use the functions in ocp_nlp_reg_common
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double epsilon;
|
||||||
|
} ocp_nlp_reg_mirror_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_mirror_opts_calculate_size(void);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_mirror_opts_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_mirror_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_mirror_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double *reg_hess; // TODO move to workspace
|
||||||
|
double *V; // TODO move to workspace
|
||||||
|
double *d; // TODO move to workspace
|
||||||
|
double *e; // TODO move to workspace
|
||||||
|
|
||||||
|
// giaf's
|
||||||
|
struct blasfeo_dmat **RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
} ocp_nlp_reg_mirror_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_mirror_memory_calculate_size(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_mirror_memory_assign(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_mirror_config_initialize_default(ocp_nlp_reg_config *config);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_REG_MIRROR_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
106
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_noreg.h
vendored
Normal file
106
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_noreg.h
vendored
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_reg
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_REG_NOREG_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_REG_NOREG_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_reg_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// use the functions in ocp_nlp_reg_common
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_noreg_opts_calculate_size(void);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_noreg_opts_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_noreg_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_noreg_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_noreg_memory_calculate_size(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_noreg_memory_assign(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// not needed
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_noreg_config_initialize_default(ocp_nlp_reg_config *config);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_REG_NOREG_H_
|
||||||
|
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
121
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_project.h
vendored
Normal file
121
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_project.h
vendored
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_reg
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_REG_PROJECT_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_REG_PROJECT_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_reg_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// use the functions in ocp_nlp_reg_common
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double epsilon;
|
||||||
|
} ocp_nlp_reg_project_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_project_opts_calculate_size(void);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_project_opts_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_project_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_project_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double *reg_hess; // TODO move to workspace
|
||||||
|
double *V; // TODO move to workspace
|
||||||
|
double *d; // TODO move to workspace
|
||||||
|
double *e; // TODO move to workspace
|
||||||
|
|
||||||
|
// giaf's
|
||||||
|
struct blasfeo_dmat **RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
} ocp_nlp_reg_project_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_project_memory_calculate_size(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_project_memory_assign(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_project_config_initialize_default(ocp_nlp_reg_config *config);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_REG_PROJECT_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
132
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_project_reduc_hess.h
vendored
Normal file
132
third_party/acados/include/acados/ocp_nlp/ocp_nlp_reg_project_reduc_hess.h
vendored
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_reg
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_REG_PROJECT_REDUC_HESS_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_REG_PROJECT_REDUC_HESS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_reg_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* dims
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// use the functions in ocp_nlp_reg_common
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double thr_eig;
|
||||||
|
double min_eig;
|
||||||
|
double min_pivot;
|
||||||
|
int pivoting;
|
||||||
|
} ocp_nlp_reg_project_reduc_hess_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_project_reduc_hess_opts_calculate_size(void);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_project_reduc_hess_opts_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_project_reduc_hess_opts_initialize_default(void *config_, ocp_nlp_reg_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_project_reduc_hess_opts_set(void *config_, ocp_nlp_reg_dims *dims, void *opts_, char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double *reg_hess; // TODO move to workspace
|
||||||
|
double *V; // TODO move to workspace
|
||||||
|
double *d; // TODO move to workspace
|
||||||
|
double *e; // TODO move to workspace
|
||||||
|
|
||||||
|
// giaf's
|
||||||
|
struct blasfeo_dmat L; // TODO move to workspace
|
||||||
|
struct blasfeo_dmat L2; // TODO move to workspace
|
||||||
|
struct blasfeo_dmat L3; // TODO move to workspace
|
||||||
|
struct blasfeo_dmat Ls; // TODO move to workspace
|
||||||
|
struct blasfeo_dmat P; // TODO move to workspace
|
||||||
|
struct blasfeo_dmat AL; // TODO move to workspace
|
||||||
|
|
||||||
|
struct blasfeo_dmat **RSQrq; // pointer to RSQrq in qp_in
|
||||||
|
struct blasfeo_dmat **BAbt; // pointer to RSQrq in qp_in
|
||||||
|
} ocp_nlp_reg_project_reduc_hess_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_reg_project_reduc_hess_memory_calculate_size(void *config, ocp_nlp_reg_dims *dims, void *opts);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_reg_project_reduc_hess_memory_assign(void *config, ocp_nlp_reg_dims *dims, void *opts, void *raw_memory);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// TODO
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_nlp_reg_project_reduc_hess_config_initialize_default(ocp_nlp_reg_config *config);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_REG_PROJECT_REDUC_HESS_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
170
third_party/acados/include/acados/ocp_nlp/ocp_nlp_sqp.h
vendored
Normal file
170
third_party/acados/include/acados/ocp_nlp/ocp_nlp_sqp.h
vendored
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_solver
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_sqp ocp_nlp_sqp
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_SQP_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_SQP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_nlp_opts *nlp_opts;
|
||||||
|
double tol_stat; // exit tolerance on stationarity condition
|
||||||
|
double tol_eq; // exit tolerance on equality constraints
|
||||||
|
double tol_ineq; // exit tolerance on inequality constraints
|
||||||
|
double tol_comp; // exit tolerance on complementarity condition
|
||||||
|
int max_iter;
|
||||||
|
int ext_qp_res; // compute external QP residuals (i.e. at SQP level) at each SQP iteration (for debugging)
|
||||||
|
int qp_warm_start; // qp_warm_start in all but the first sqp iterations
|
||||||
|
bool warm_start_first_qp; // to set qp_warm_start in first iteration
|
||||||
|
int rti_phase; // only phase 0 at the moment
|
||||||
|
int initialize_t_slacks; // 0-false or 1-true
|
||||||
|
|
||||||
|
} ocp_nlp_sqp_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_sqp_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_sqp_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_opts_initialize_default(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_opts_update(void *config, void *dims, void *opts);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_opts_set(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_opts_set_at_stage(void *config_, void *opts_, size_t stage, const char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// nlp memory
|
||||||
|
ocp_nlp_memory *nlp_mem;
|
||||||
|
|
||||||
|
double time_qp_sol;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
double time_qp_xcond;
|
||||||
|
double time_lin;
|
||||||
|
double time_reg;
|
||||||
|
double time_tot;
|
||||||
|
double time_glob;
|
||||||
|
double time_sim;
|
||||||
|
double time_sim_la;
|
||||||
|
double time_sim_ad;
|
||||||
|
double time_solution_sensitivities;
|
||||||
|
|
||||||
|
// statistics
|
||||||
|
double *stat;
|
||||||
|
int stat_m;
|
||||||
|
int stat_n;
|
||||||
|
|
||||||
|
int status;
|
||||||
|
int sqp_iter;
|
||||||
|
|
||||||
|
} ocp_nlp_sqp_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_sqp_memory_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_sqp_memory_assign(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_memory_reset_qp_solver(void *config_, void *dims_, void *nlp_in_, void *nlp_out_,
|
||||||
|
void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_nlp_workspace *nlp_work;
|
||||||
|
|
||||||
|
// temp QP in & out (to be used as workspace in param sens)
|
||||||
|
ocp_qp_in *tmp_qp_in;
|
||||||
|
ocp_qp_out *tmp_qp_out;
|
||||||
|
|
||||||
|
// qp residuals
|
||||||
|
ocp_qp_res *qp_res;
|
||||||
|
ocp_qp_res_ws *qp_res_ws;
|
||||||
|
|
||||||
|
} ocp_nlp_sqp_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_sqp_workspace_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
int ocp_nlp_sqp(void *config, void *dims, void *nlp_in, void *nlp_out,
|
||||||
|
void *args, void *mem, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_config_initialize_default(void *config_);
|
||||||
|
//
|
||||||
|
int ocp_nlp_sqp_precompute(void *config_, void *dims_, void *nlp_in_, void *nlp_out_,
|
||||||
|
void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_SQP_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
163
third_party/acados/include/acados/ocp_nlp/ocp_nlp_sqp_rti.h
vendored
Normal file
163
third_party/acados/include/acados/ocp_nlp/ocp_nlp_sqp_rti.h
vendored
Normal file
@@ -0,0 +1,163 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/// \addtogroup ocp_nlp
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_solver
|
||||||
|
/// @{
|
||||||
|
/// \addtogroup ocp_nlp_sqp_rti ocp_nlp_sqp_rti
|
||||||
|
/// @{
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_NLP_OCP_NLP_SQP_RTI_H_
|
||||||
|
#define ACADOS_OCP_NLP_OCP_NLP_SQP_RTI_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* options
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_nlp_opts *nlp_opts;
|
||||||
|
int compute_dual_sol;
|
||||||
|
int ext_qp_res; // compute external QP residuals (i.e. at SQP level) at each SQP iteration (for debugging)
|
||||||
|
int qp_warm_start; // NOTE: this is not actually setting the warm_start! Just for compatibility with sqp.
|
||||||
|
bool warm_start_first_qp; // to set qp_warm_start in first iteration
|
||||||
|
int rti_phase; // phase of RTI. Possible values 1 (preparation), 2 (feedback) 0 (both)
|
||||||
|
|
||||||
|
} ocp_nlp_sqp_rti_opts;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_sqp_rti_opts_calculate_size(void *config_, void *dims_);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_sqp_rti_opts_assign(void *config_, void *dims_, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_rti_opts_initialize_default(void *config_, void *dims_, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_rti_opts_update(void *config_, void *dims_, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_rti_opts_set(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_rti_opts_set_at_stage(void *config_, void *opts_, size_t stage,
|
||||||
|
const char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* memory
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// nlp memory
|
||||||
|
ocp_nlp_memory *nlp_mem;
|
||||||
|
|
||||||
|
double time_qp_sol;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
double time_qp_xcond;
|
||||||
|
double time_lin;
|
||||||
|
double time_reg;
|
||||||
|
double time_tot;
|
||||||
|
double time_glob;
|
||||||
|
double time_solution_sensitivities;
|
||||||
|
|
||||||
|
// statistics
|
||||||
|
double *stat;
|
||||||
|
int stat_m;
|
||||||
|
int stat_n;
|
||||||
|
|
||||||
|
int status;
|
||||||
|
|
||||||
|
} ocp_nlp_sqp_rti_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_sqp_rti_memory_calculate_size(void *config_, void *dims_, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_nlp_sqp_rti_memory_assign(void *config_, void *dims_, void *opts_,
|
||||||
|
void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* workspace
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_nlp_workspace *nlp_work;
|
||||||
|
|
||||||
|
// temp QP in & out (to be used as workspace in param sens)
|
||||||
|
ocp_qp_in *tmp_qp_in;
|
||||||
|
ocp_qp_out *tmp_qp_out;
|
||||||
|
|
||||||
|
// qp residuals
|
||||||
|
ocp_qp_res *qp_res;
|
||||||
|
ocp_qp_res_ws *qp_res_ws;
|
||||||
|
|
||||||
|
|
||||||
|
} ocp_nlp_sqp_rti_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_nlp_sqp_rti_workspace_calculate_size(void *config_, void *dims_, void *opts_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* functions
|
||||||
|
************************************************/
|
||||||
|
//
|
||||||
|
int ocp_nlp_sqp_rti(void *config_, void *dims_, void *nlp_in_, void *nlp_out_,
|
||||||
|
void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_nlp_sqp_rti_config_initialize_default(void *config_);
|
||||||
|
//
|
||||||
|
int ocp_nlp_sqp_rti_precompute(void *config_, void *dims_,
|
||||||
|
void *nlp_in_, void *nlp_out_, void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_NLP_OCP_NLP_SQP_RTI_H_
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
|
/// @}
|
||||||
180
third_party/acados/include/acados/ocp_qp/ocp_qp_common.h
vendored
Normal file
180
third_party/acados/include/acados/ocp_qp/ocp_qp_common.h
vendored
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_COMMON_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_COMMON_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// hpipm
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp.h"
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp_dim.h"
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp_res.h"
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp_sol.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct d_ocp_qp_dim ocp_qp_dims;
|
||||||
|
typedef struct d_ocp_qp ocp_qp_in;
|
||||||
|
typedef struct d_ocp_qp_sol ocp_qp_out;
|
||||||
|
typedef struct d_ocp_qp_res ocp_qp_res;
|
||||||
|
typedef struct d_ocp_qp_res_ws ocp_qp_res_ws;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef QP_SOLVER_CONFIG_
|
||||||
|
#define QP_SOLVER_CONFIG_
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void (*dims_set)(void *config_, void *dims_, int stage, const char *field, int* value);
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*opts_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_update)(void *config, void *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
void (*memory_get)(void *config_, void *mem_, const char *field, void* value);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
int (*evaluate)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
void (*memory_reset)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
void (*eval_sens)(void *config, void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
} qp_solver_config;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
acados_size_t (*dims_calculate_size)(void *config, int N);
|
||||||
|
void *(*dims_assign)(void *config, int N, void *raw_memory);
|
||||||
|
void (*dims_set)(void *config, void *dims_, int stage, const char *field, int* value);
|
||||||
|
void (*dims_get)(void *config, void *dims, const char *field, void* value);
|
||||||
|
// TODO add config everywhere !!!!!
|
||||||
|
acados_size_t (*opts_calculate_size)(void *dims);
|
||||||
|
void *(*opts_assign)(void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *dims, void *opts);
|
||||||
|
void (*opts_update)(void *dims, void *opts);
|
||||||
|
void (*opts_set)(void *opts_, const char *field, void* value);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *dims, void *opts);
|
||||||
|
void *(*memory_assign)(void *dims, void *opts, void *raw_memory);
|
||||||
|
void (*memory_get)(void *config, void *mem, const char *field, void* value);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *dims, void *opts);
|
||||||
|
int (*condensing)(void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
int (*condensing_rhs)(void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
int (*expansion)(void *qp_in, void *qp_out, void *opts, void *mem, void *work);
|
||||||
|
} ocp_qp_xcond_config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// Struct containing metrics of the qp solver.
|
||||||
|
#ifndef QP_INFO_
|
||||||
|
#define QP_INFO_
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double solve_QP_time;
|
||||||
|
double condensing_time;
|
||||||
|
double interface_time;
|
||||||
|
double total_time;
|
||||||
|
int num_iter;
|
||||||
|
int t_computed;
|
||||||
|
} qp_info;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_solver_config_calculate_size();
|
||||||
|
//
|
||||||
|
qp_solver_config *ocp_qp_solver_config_assign(void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_condensing_config_calculate_size();
|
||||||
|
//
|
||||||
|
ocp_qp_xcond_config *ocp_qp_condensing_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_dims_calculate_size(int N);
|
||||||
|
//
|
||||||
|
ocp_qp_dims *ocp_qp_dims_assign(int N, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_dims_set(void *config_, void *dims, int stage, const char *field, int* value);
|
||||||
|
//
|
||||||
|
void ocp_qp_dims_get(void *config_, void *dims, int stage, const char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
/* in */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_in_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_qp_in *ocp_qp_in_assign(ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
|
||||||
|
|
||||||
|
/* out */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_out_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_qp_out *ocp_qp_out_assign(ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
|
||||||
|
/* res */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_res_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_qp_res *ocp_qp_res_assign(ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_res_workspace_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
ocp_qp_res_ws *ocp_qp_res_workspace_assign(ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_res_compute(ocp_qp_in *qp_in, ocp_qp_out *qp_out, ocp_qp_res *qp_res, ocp_qp_res_ws *res_ws);
|
||||||
|
//
|
||||||
|
void ocp_qp_res_compute_nrm_inf(ocp_qp_res *qp_res, double res[4]);
|
||||||
|
|
||||||
|
|
||||||
|
/* misc */
|
||||||
|
//
|
||||||
|
void ocp_qp_stack_slacks_dims(ocp_qp_dims *in, ocp_qp_dims *out);
|
||||||
|
//
|
||||||
|
void ocp_qp_stack_slacks(ocp_qp_in *in, ocp_qp_in *out);
|
||||||
|
//
|
||||||
|
void ocp_qp_compute_t(ocp_qp_in *qp_in, ocp_qp_out *qp_out);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_COMMON_H_
|
||||||
118
third_party/acados/include/acados/ocp_qp/ocp_qp_common_frontend.h
vendored
Normal file
118
third_party/acados/include/acados/ocp_qp/ocp_qp_common_frontend.h
vendored
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_COMMON_FRONTEND_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_COMMON_FRONTEND_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int N;
|
||||||
|
int *nx;
|
||||||
|
int *nu;
|
||||||
|
int *nb;
|
||||||
|
int *nc;
|
||||||
|
double **A;
|
||||||
|
double **B;
|
||||||
|
double **b;
|
||||||
|
double **Q;
|
||||||
|
double **S;
|
||||||
|
double **R;
|
||||||
|
double **q;
|
||||||
|
double **r;
|
||||||
|
int **idxb;
|
||||||
|
double **lb;
|
||||||
|
double **ub;
|
||||||
|
double **Cx;
|
||||||
|
double **Cu;
|
||||||
|
double **lc;
|
||||||
|
double **uc;
|
||||||
|
} colmaj_ocp_qp_in;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double **x;
|
||||||
|
double **u;
|
||||||
|
double **pi;
|
||||||
|
double **lam;
|
||||||
|
} colmaj_ocp_qp_out;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double **res_r;
|
||||||
|
double **res_q;
|
||||||
|
double **res_ls;
|
||||||
|
double **res_us;
|
||||||
|
double **res_b;
|
||||||
|
double **res_d_lb;
|
||||||
|
double **res_d_ub;
|
||||||
|
double **res_d_lg;
|
||||||
|
double **res_d_ug;
|
||||||
|
double **res_d_ls;
|
||||||
|
double **res_d_us;
|
||||||
|
double **res_m_lb;
|
||||||
|
double **res_m_ub;
|
||||||
|
double **res_m_lg;
|
||||||
|
double **res_m_ug;
|
||||||
|
double **res_m_ls;
|
||||||
|
double **res_m_us;
|
||||||
|
double res_nrm_inf[4];
|
||||||
|
} colmaj_ocp_qp_res;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t colmaj_ocp_qp_in_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
char *assign_colmaj_ocp_qp_in(ocp_qp_dims *dims, colmaj_ocp_qp_in **qp_in, void *ptr);
|
||||||
|
//
|
||||||
|
acados_size_t colmaj_ocp_qp_out_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
char *assign_colmaj_ocp_qp_out(ocp_qp_dims *dims, colmaj_ocp_qp_out **qp_out, void *ptr);
|
||||||
|
//
|
||||||
|
acados_size_t colmaj_ocp_qp_res_calculate_size(ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
char *assign_colmaj_ocp_qp_res(ocp_qp_dims *dims, colmaj_ocp_qp_res **qp_res, void *ptr);
|
||||||
|
//
|
||||||
|
void convert_colmaj_to_ocp_qp_in(colmaj_ocp_qp_in *cm_qp_in, ocp_qp_in *qp_in);
|
||||||
|
//
|
||||||
|
void convert_ocp_qp_out_to_colmaj(ocp_qp_out *qp_out, colmaj_ocp_qp_out *cm_qp_out);
|
||||||
|
//
|
||||||
|
void convert_ocp_qp_res_to_colmaj(ocp_qp_res *qp_res, colmaj_ocp_qp_res *cm_qp_res);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_COMMON_FRONTEND_H_
|
||||||
114
third_party/acados/include/acados/ocp_qp/ocp_qp_full_condensing.h
vendored
Normal file
114
third_party/acados/include/acados/ocp_qp/ocp_qp_full_condensing.h
vendored
Normal file
@@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_FULL_CONDENSING_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_FULL_CONDENSING_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// hpipm
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp_red.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_qp_dims *orig_dims;
|
||||||
|
ocp_qp_dims *red_dims; // dims of reduced qp
|
||||||
|
dense_qp_dims *fcond_dims;
|
||||||
|
} ocp_qp_full_condensing_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_full_condensing_opts_
|
||||||
|
{
|
||||||
|
struct d_cond_qp_arg *hpipm_cond_opts;
|
||||||
|
struct d_ocp_qp_reduce_eq_dof_arg *hpipm_red_opts;
|
||||||
|
// dense_qp_dims *fcond_dims; // TODO(all): move to dims
|
||||||
|
int cond_hess; // 0 cond only rhs, 1 cond hess + rhs
|
||||||
|
int expand_dual_sol; // 0 primal sol only, 1 primal + dual sol
|
||||||
|
int ric_alg;
|
||||||
|
int mem_qp_in; // allocate qp_in in memory
|
||||||
|
} ocp_qp_full_condensing_opts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_full_condensing_memory_
|
||||||
|
{
|
||||||
|
struct d_cond_qp_ws *hpipm_cond_work;
|
||||||
|
struct d_ocp_qp_reduce_eq_dof_ws *hpipm_red_work;
|
||||||
|
// in memory
|
||||||
|
dense_qp_in *fcond_qp_in;
|
||||||
|
dense_qp_out *fcond_qp_out;
|
||||||
|
ocp_qp_in *red_qp; // reduced qp
|
||||||
|
ocp_qp_out *red_sol; // reduced qp sol
|
||||||
|
// only pointer
|
||||||
|
ocp_qp_in *ptr_qp_in;
|
||||||
|
qp_info *qp_out_info; // info in fcond_qp_in
|
||||||
|
double time_qp_xcond;
|
||||||
|
} ocp_qp_full_condensing_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_full_condensing_opts_calculate_size(void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_full_condensing_opts_assign(void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_full_condensing_opts_initialize_default(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_full_condensing_opts_update(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_full_condensing_opts_set(void *opts_, const char *field, void* value);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_full_condensing_memory_calculate_size(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_full_condensing_memory_assign(void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_full_condensing_workspace_calculate_size(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_full_condensing(void *in, void *out, void *opts, void *mem, void *work);
|
||||||
|
//
|
||||||
|
int ocp_qp_full_expansion(void *in, void *out, void *opts, void *mem, void *work);
|
||||||
|
//
|
||||||
|
void ocp_qp_full_condensing_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_FULL_CONDENSING_H_
|
||||||
100
third_party/acados/include/acados/ocp_qp/ocp_qp_hpipm.h
vendored
Normal file
100
third_party/acados/include/acados/ocp_qp/ocp_qp_hpipm.h
vendored
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_HPIPM_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_HPIPM_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// hpipm
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp_ipm.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// struct of arguments to the solver
|
||||||
|
// TODO(roversch): why not make this a typedef of the underlying struct?
|
||||||
|
typedef struct ocp_qp_hpipm_opts_
|
||||||
|
{
|
||||||
|
struct d_ocp_qp_ipm_arg *hpipm_opts;
|
||||||
|
} ocp_qp_hpipm_opts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// TODO(roversch): why not make this a typedef of the underlying struct?
|
||||||
|
// struct of the solver memory
|
||||||
|
typedef struct ocp_qp_hpipm_memory_
|
||||||
|
{
|
||||||
|
struct d_ocp_qp_ipm_ws *hpipm_workspace;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
} ocp_qp_hpipm_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_hpipm_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_hpipm_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpipm_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpipm_opts_update(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpipm_opts_set(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_hpipm_memory_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_hpipm_memory_assign(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_hpipm_workspace_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_hpipm(void *config, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpipm_memory_reset(void *config_, void *qp_in_, void *qp_out_, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpipm_eval_sens(void *config, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpipm_config_initialize_default(void *config);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_HPIPM_H_
|
||||||
127
third_party/acados/include/acados/ocp_qp/ocp_qp_hpmpc.h
vendored
Normal file
127
third_party/acados/include/acados/ocp_qp/ocp_qp_hpmpc.h
vendored
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_HPMPC_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_HPMPC_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef enum hpmpc_options_t_ { HPMPC_DEFAULT_ARGUMENTS } hpmpc_options_t;
|
||||||
|
|
||||||
|
typedef struct ocp_qp_hpmpc_opts_
|
||||||
|
{
|
||||||
|
double tol;
|
||||||
|
int max_iter;
|
||||||
|
double mu0;
|
||||||
|
double alpha_min;
|
||||||
|
int warm_start;
|
||||||
|
int N2; // horizion length of the partially condensed problem
|
||||||
|
|
||||||
|
// partial tightening
|
||||||
|
double sigma_mu;
|
||||||
|
int N;
|
||||||
|
int M;
|
||||||
|
} ocp_qp_hpmpc_opts;
|
||||||
|
|
||||||
|
// struct of the solver memory
|
||||||
|
typedef struct ocp_qp_hpmpc_memory_
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec *hpi;
|
||||||
|
double *stats;
|
||||||
|
|
||||||
|
// workspace
|
||||||
|
void *hpmpc_work; // raw workspace
|
||||||
|
|
||||||
|
// partial tightening-specific (init of extra variables)
|
||||||
|
struct blasfeo_dvec *lam0;
|
||||||
|
struct blasfeo_dvec *ux0;
|
||||||
|
struct blasfeo_dvec *pi0;
|
||||||
|
struct blasfeo_dvec *t0;
|
||||||
|
|
||||||
|
// 2. workspace
|
||||||
|
struct blasfeo_dmat *hsL;
|
||||||
|
struct blasfeo_dmat *hsric_work_mat;
|
||||||
|
struct blasfeo_dmat sLxM;
|
||||||
|
struct blasfeo_dmat sPpM;
|
||||||
|
|
||||||
|
struct blasfeo_dvec *hsQx;
|
||||||
|
struct blasfeo_dvec *hsqx;
|
||||||
|
struct blasfeo_dvec *hstinv;
|
||||||
|
struct blasfeo_dvec *hsrq;
|
||||||
|
struct blasfeo_dvec *hsdux;
|
||||||
|
|
||||||
|
struct blasfeo_dvec *hsdlam;
|
||||||
|
struct blasfeo_dvec *hsdt;
|
||||||
|
struct blasfeo_dvec *hsdpi;
|
||||||
|
struct blasfeo_dvec *hslamt;
|
||||||
|
|
||||||
|
struct blasfeo_dvec *hsPb;
|
||||||
|
|
||||||
|
void *work_ric;
|
||||||
|
|
||||||
|
int out_iter;
|
||||||
|
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
} ocp_qp_hpmpc_memory;
|
||||||
|
|
||||||
|
acados_size_t ocp_qp_hpmpc_opts_calculate_size(void *config_, ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_hpmpc_opts_assign(void *config_, ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpmpc_opts_initialize_default(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpmpc_opts_update(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_hpmpc_memory_calculate_size(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_hpmpc_memory_assign(void *config_, ocp_qp_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_hpmpc_workspace_calculate_size(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_hpmpc(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpmpc_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_hpmpc_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_HPMPC_H_
|
||||||
144
third_party/acados/include/acados/ocp_qp/ocp_qp_ooqp.h
vendored
Normal file
144
third_party/acados/include/acados/ocp_qp/ocp_qp_ooqp.h
vendored
Normal file
@@ -0,0 +1,144 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_OOQP_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_OOQP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
enum ocp_qp_ooqp_termination_code
|
||||||
|
{
|
||||||
|
SPARSE_SUCCESSFUL_TERMINATION = 0,
|
||||||
|
SPARSE_NOT_FINISHED,
|
||||||
|
SPARSE_MAX_ITS_EXCEEDED,
|
||||||
|
SPARSE_INFEASIBLE,
|
||||||
|
SPARSE_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct ocp_qp_ooqp_opts_
|
||||||
|
{
|
||||||
|
int printLevel;
|
||||||
|
int useDiagonalWeights; // TODO(dimitris): implement option
|
||||||
|
int fixHessian;
|
||||||
|
int fixHessianSparsity;
|
||||||
|
int fixDynamics;
|
||||||
|
int fixDynamicsSparsity;
|
||||||
|
int fixInequalities;
|
||||||
|
int fixInequalitiesSparsity;
|
||||||
|
} ocp_qp_ooqp_opts;
|
||||||
|
|
||||||
|
typedef struct ocp_qp_ooqp_workspace_
|
||||||
|
{
|
||||||
|
double *x;
|
||||||
|
double *gamma;
|
||||||
|
double *phi;
|
||||||
|
double *y;
|
||||||
|
double *z;
|
||||||
|
double *lambda;
|
||||||
|
double *pi;
|
||||||
|
double objectiveValue;
|
||||||
|
int *tmpInt; // temporary vector to sort indicies sparse matrices
|
||||||
|
double *tmpReal; // temporary vector to sort data of sparse matrices
|
||||||
|
// int ierr;
|
||||||
|
} ocp_qp_ooqp_workspace;
|
||||||
|
|
||||||
|
typedef struct ocp_qp_ooqp_memory_
|
||||||
|
{
|
||||||
|
int firstRun;
|
||||||
|
double *c;
|
||||||
|
int nx;
|
||||||
|
int *irowQ;
|
||||||
|
int nnzQ;
|
||||||
|
int *jcolQ;
|
||||||
|
int *orderQ;
|
||||||
|
double *dQ;
|
||||||
|
double *xlow;
|
||||||
|
char *ixlow;
|
||||||
|
double *xupp;
|
||||||
|
char *ixupp;
|
||||||
|
int *irowA;
|
||||||
|
int nnzA;
|
||||||
|
int *jcolA;
|
||||||
|
int *orderA;
|
||||||
|
double *dA;
|
||||||
|
double *bA;
|
||||||
|
int my;
|
||||||
|
int *irowC;
|
||||||
|
int nnzC;
|
||||||
|
int *jcolC;
|
||||||
|
int *orderC;
|
||||||
|
double *dC;
|
||||||
|
double *clow;
|
||||||
|
int mz;
|
||||||
|
char *iclow;
|
||||||
|
double *cupp;
|
||||||
|
char *icupp;
|
||||||
|
int nnz; // max(nnzQ, nnzA, nnzC)
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
} ocp_qp_ooqp_memory;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_ooqp_opts_calculate_size(void *config_, ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_ooqp_opts_assign(void *config_, ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_ooqp_opts_initialize_default(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_ooqp_opts_update(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_ooqp_memory_calculate_size(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_ooqp_memory_assign(void *config_, ocp_qp_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_ooqp_workspace_calculate_size(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_ooqp(void *config_, ocp_qp_in *qp_in, ocp_qp_out *qp_out, void *opts_, void *memory_,
|
||||||
|
void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_ooqp_destroy(void *mem_, void *work);
|
||||||
|
//
|
||||||
|
void ocp_qp_ooqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_ooqp_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_OOQP_H_
|
||||||
103
third_party/acados/include/acados/ocp_qp/ocp_qp_osqp.h
vendored
Normal file
103
third_party/acados/include/acados/ocp_qp/ocp_qp_osqp.h
vendored
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_OSQP_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_OSQP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// osqp
|
||||||
|
#include "osqp/include/types.h"
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef struct ocp_qp_osqp_opts_
|
||||||
|
{
|
||||||
|
OSQPSettings *osqp_opts;
|
||||||
|
} ocp_qp_osqp_opts;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_osqp_memory_
|
||||||
|
{
|
||||||
|
c_int first_run;
|
||||||
|
|
||||||
|
c_float *q;
|
||||||
|
c_float *l;
|
||||||
|
c_float *u;
|
||||||
|
|
||||||
|
c_int P_nnzmax;
|
||||||
|
c_int *P_i;
|
||||||
|
c_int *P_p;
|
||||||
|
c_float *P_x;
|
||||||
|
|
||||||
|
c_int A_nnzmax;
|
||||||
|
c_int *A_i;
|
||||||
|
c_int *A_p;
|
||||||
|
c_float *A_x;
|
||||||
|
|
||||||
|
OSQPData *osqp_data;
|
||||||
|
OSQPWorkspace *osqp_work;
|
||||||
|
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
} ocp_qp_osqp_memory;
|
||||||
|
|
||||||
|
acados_size_t ocp_qp_osqp_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_osqp_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_osqp_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_osqp_opts_update(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_osqp_memory_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_osqp_memory_assign(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_osqp_workspace_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_osqp(void *config, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_osqp_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_osqp_config_initialize_default(void *config);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_OSQP_H_
|
||||||
120
third_party/acados/include/acados/ocp_qp/ocp_qp_partial_condensing.h
vendored
Normal file
120
third_party/acados/include/acados/ocp_qp/ocp_qp_partial_condensing.h
vendored
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_PARTIAL_CONDENSING_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_PARTIAL_CONDENSING_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// hpipm
|
||||||
|
#include "hpipm/include/hpipm_d_ocp_qp_red.h"
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_qp_dims *orig_dims;
|
||||||
|
ocp_qp_dims *red_dims; // dims of reduced qp
|
||||||
|
ocp_qp_dims *pcond_dims;
|
||||||
|
int *block_size;
|
||||||
|
int N2;
|
||||||
|
int N2_bkp;
|
||||||
|
} ocp_qp_partial_condensing_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_partial_condensing_opts_
|
||||||
|
{
|
||||||
|
struct d_part_cond_qp_arg *hpipm_pcond_opts;
|
||||||
|
struct d_ocp_qp_reduce_eq_dof_arg *hpipm_red_opts;
|
||||||
|
// ocp_qp_dims *pcond_dims; // TODO(all): move to dims
|
||||||
|
// int *block_size;
|
||||||
|
int N2;
|
||||||
|
int N2_bkp;
|
||||||
|
// int expand_dual_sol; // 0 primal sol only, 1 primal + dual sol
|
||||||
|
int ric_alg;
|
||||||
|
int mem_qp_in; // allocate qp_in in memory
|
||||||
|
} ocp_qp_partial_condensing_opts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_partial_condensing_memory_
|
||||||
|
{
|
||||||
|
struct d_part_cond_qp_ws *hpipm_pcond_work;
|
||||||
|
struct d_ocp_qp_reduce_eq_dof_ws *hpipm_red_work;
|
||||||
|
// in memory
|
||||||
|
ocp_qp_in *pcond_qp_in;
|
||||||
|
ocp_qp_out *pcond_qp_out;
|
||||||
|
ocp_qp_in *red_qp; // reduced qp
|
||||||
|
ocp_qp_out *red_sol; // reduced qp sol
|
||||||
|
// only pointer
|
||||||
|
ocp_qp_in *ptr_qp_in;
|
||||||
|
ocp_qp_in *ptr_pcond_qp_in;
|
||||||
|
qp_info *qp_out_info; // info in pcond_qp_in
|
||||||
|
double time_qp_xcond;
|
||||||
|
} ocp_qp_partial_condensing_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_partial_condensing_opts_calculate_size(void *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_partial_condensing_opts_assign(void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_partial_condensing_opts_initialize_default(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_partial_condensing_opts_update(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_partial_condensing_opts_set(void *opts_, const char *field, void* value);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_partial_condensing_memory_calculate_size(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_partial_condensing_memory_assign(void *dims, void *opts, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_partial_condensing_workspace_calculate_size(void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_partial_condensing(void *in, void *out, void *opts, void *mem, void *work);
|
||||||
|
//
|
||||||
|
int ocp_qp_partial_expansion(void *in, void *out, void *opts, void *mem, void *work);
|
||||||
|
//
|
||||||
|
void ocp_qp_partial_condensing_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_PARTIAL_CONDENSING_H_
|
||||||
119
third_party/acados/include/acados/ocp_qp/ocp_qp_qpdunes.h
vendored
Normal file
119
third_party/acados/include/acados/ocp_qp/ocp_qp_qpdunes.h
vendored
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_QPDUNES_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_QPDUNES_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "qpDUNES.h"
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef enum qpdunes_options_t_ {
|
||||||
|
QPDUNES_DEFAULT_ARGUMENTS,
|
||||||
|
QPDUNES_LINEAR_MPC, // TODO(dimitris): partly implemented
|
||||||
|
QPDUNES_NONLINEAR_MPC, // TODO(dimitris): not implemented yet
|
||||||
|
QPDUNES_ACADO_SETTINGS
|
||||||
|
} qpdunes_options_t;
|
||||||
|
|
||||||
|
typedef enum { QPDUNES_WITH_QPOASES, QPDUNES_WITH_CLIPPING } qpdunes_stage_qp_solver_t;
|
||||||
|
|
||||||
|
typedef struct ocp_qp_qpdunes_opts_
|
||||||
|
{
|
||||||
|
qpOptions_t options;
|
||||||
|
qpdunes_stage_qp_solver_t stageQpSolver;
|
||||||
|
int warmstart; // warmstart = 0: all multipliers set to zero, warmstart = 1: use previous mult.
|
||||||
|
bool isLinearMPC;
|
||||||
|
} ocp_qp_qpdunes_opts;
|
||||||
|
|
||||||
|
typedef struct ocp_qp_qpdunes_memory_
|
||||||
|
{
|
||||||
|
int firstRun;
|
||||||
|
int nx;
|
||||||
|
int nu;
|
||||||
|
int nz;
|
||||||
|
int nDmax; // max(dims->ng)
|
||||||
|
qpData_t qpData;
|
||||||
|
double time_qp_solver_call;
|
||||||
|
int iter;
|
||||||
|
int status;
|
||||||
|
|
||||||
|
} ocp_qp_qpdunes_memory;
|
||||||
|
|
||||||
|
typedef struct ocp_qp_qpdunes_workspace_
|
||||||
|
{
|
||||||
|
double *H;
|
||||||
|
double *Q;
|
||||||
|
double *R;
|
||||||
|
double *S;
|
||||||
|
double *g;
|
||||||
|
double *ABt;
|
||||||
|
double *b;
|
||||||
|
double *Ct;
|
||||||
|
double *lc;
|
||||||
|
double *uc;
|
||||||
|
double *zLow;
|
||||||
|
double *zUpp;
|
||||||
|
} ocp_qp_qpdunes_workspace;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_qpdunes_opts_calculate_size(void *config_, ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_qpdunes_opts_assign(void *config_, ocp_qp_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_qpdunes_opts_initialize_default(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_qpdunes_opts_update(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_qpdunes_memory_calculate_size(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_qpdunes_memory_assign(void *config_, ocp_qp_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_qpdunes_workspace_calculate_size(void *config_, ocp_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_qpdunes(void *config_, ocp_qp_in *qp_in, ocp_qp_out *qp_out, void *opts_, void *memory_,
|
||||||
|
void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_qpdunes_free_memory(void *mem_);
|
||||||
|
//
|
||||||
|
void ocp_qp_qpdunes_eval_sens(void *config_, void *qp_in, void *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void ocp_qp_qpdunes_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_QPDUNES_H_
|
||||||
150
third_party/acados/include/acados/ocp_qp/ocp_qp_xcond_solver.h
vendored
Normal file
150
third_party/acados/include/acados/ocp_qp/ocp_qp_xcond_solver.h
vendored
Normal file
@@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_OCP_QP_OCP_QP_PARTIAL_CONDENSING_SOLVER_H_
|
||||||
|
#define ACADOS_OCP_QP_OCP_QP_PARTIAL_CONDENSING_SOLVER_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_qp_dims *orig_dims;
|
||||||
|
void *xcond_dims;
|
||||||
|
} ocp_qp_xcond_solver_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_xcond_solver_opts_
|
||||||
|
{
|
||||||
|
void *xcond_opts;
|
||||||
|
void *qp_solver_opts;
|
||||||
|
} ocp_qp_xcond_solver_opts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_xcond_solver_memory_
|
||||||
|
{
|
||||||
|
void *xcond_memory;
|
||||||
|
void *solver_memory;
|
||||||
|
void *xcond_qp_in;
|
||||||
|
void *xcond_qp_out;
|
||||||
|
} ocp_qp_xcond_solver_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct ocp_qp_xcond_solver_workspace_
|
||||||
|
{
|
||||||
|
void *xcond_work;
|
||||||
|
void *qp_solver_work;
|
||||||
|
} ocp_qp_xcond_solver_workspace;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
acados_size_t (*dims_calculate_size)(void *config, int N);
|
||||||
|
ocp_qp_xcond_solver_dims *(*dims_assign)(void *config, int N, void *raw_memory);
|
||||||
|
void (*dims_set)(void *config_, ocp_qp_xcond_solver_dims *dims, int stage, const char *field, int* value);
|
||||||
|
void (*dims_get)(void *config_, ocp_qp_xcond_solver_dims *dims, int stage, const char *field, int* value);
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config, ocp_qp_xcond_solver_dims *dims);
|
||||||
|
void *(*opts_assign)(void *config, ocp_qp_xcond_solver_dims *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config, ocp_qp_xcond_solver_dims *dims, void *opts);
|
||||||
|
void (*opts_update)(void *config, ocp_qp_xcond_solver_dims *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, ocp_qp_xcond_solver_dims *dims, void *opts);
|
||||||
|
void *(*memory_assign)(void *config, ocp_qp_xcond_solver_dims *dims, void *opts, void *raw_memory);
|
||||||
|
void (*memory_get)(void *config_, void *mem_, const char *field, void* value);
|
||||||
|
void (*memory_reset)(void *config, ocp_qp_xcond_solver_dims *dims, ocp_qp_in *qp_in, ocp_qp_out *qp_out, void *opts, void *mem, void *work);
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, ocp_qp_xcond_solver_dims *dims, void *opts);
|
||||||
|
int (*evaluate)(void *config, ocp_qp_xcond_solver_dims *dims, ocp_qp_in *qp_in, ocp_qp_out *qp_out, void *opts, void *mem, void *work);
|
||||||
|
void (*eval_sens)(void *config, ocp_qp_xcond_solver_dims *dims, ocp_qp_in *param_qp_in, ocp_qp_out *sens_qp_out, void *opts, void *mem, void *work);
|
||||||
|
qp_solver_config *qp_solver; // either ocp_qp_solver or dense_solver
|
||||||
|
ocp_qp_xcond_config *xcond;
|
||||||
|
} ocp_qp_xcond_solver_config; // pcond - partial condensing or fcond - full condensing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_xcond_solver_config_calculate_size();
|
||||||
|
//
|
||||||
|
ocp_qp_xcond_solver_config *ocp_qp_xcond_solver_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_xcond_solver_dims_calculate_size(void *config, int N);
|
||||||
|
//
|
||||||
|
ocp_qp_xcond_solver_dims *ocp_qp_xcond_solver_dims_assign(void *config, int N, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_xcond_solver_dims_set_(void *config, ocp_qp_xcond_solver_dims *dims, int stage, const char *field, int* value);
|
||||||
|
|
||||||
|
/* opts */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_xcond_solver_opts_calculate_size(void *config, ocp_qp_xcond_solver_dims *dims);
|
||||||
|
//
|
||||||
|
void *ocp_qp_xcond_solver_opts_assign(void *config, ocp_qp_xcond_solver_dims *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void ocp_qp_xcond_solver_opts_initialize_default(void *config, ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_xcond_solver_opts_update(void *config, ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void ocp_qp_xcond_solver_opts_set_(void *config_, void *opts_, const char *field, void* value);
|
||||||
|
|
||||||
|
/* memory */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_xcond_solver_memory_calculate_size(void *config, ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *ocp_qp_xcond_solver_memory_assign(void *config, ocp_qp_xcond_solver_dims *dims, void *opts_, void *raw_memory);
|
||||||
|
|
||||||
|
/* workspace */
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_xcond_solver_workspace_calculate_size(void *config, ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
//
|
||||||
|
int ocp_qp_xcond_solver(void *config, ocp_qp_xcond_solver_dims *dims, ocp_qp_in *qp_in, ocp_qp_out *qp_out, void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
//
|
||||||
|
void ocp_qp_xcond_solver_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_OCP_QP_OCP_QP_PARTIAL_CONDENSING_SOLVER_H_
|
||||||
97
third_party/acados/include/acados/sim/sim_collocation_utils.h
vendored
Normal file
97
third_party/acados/include/acados/sim/sim_collocation_utils.h
vendored
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_SIM_COLLOCATION_UTILS_H_
|
||||||
|
#define ACADOS_SIM_SIM_COLLOCATION_UTILS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// enum Newton_type_collocation
|
||||||
|
// {
|
||||||
|
// exact = 0,
|
||||||
|
// simplified_in,
|
||||||
|
// simplified_inis
|
||||||
|
// };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// typedef struct
|
||||||
|
// {
|
||||||
|
// enum Newton_type_collocation type;
|
||||||
|
// double *eig;
|
||||||
|
// double *low_tria;
|
||||||
|
// bool single;
|
||||||
|
// bool freeze;
|
||||||
|
|
||||||
|
// double *transf1;
|
||||||
|
// double *transf2;
|
||||||
|
|
||||||
|
// double *transf1_T;
|
||||||
|
// double *transf2_T;
|
||||||
|
// } Newton_scheme;
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
GAUSS_LEGENDRE,
|
||||||
|
GAUSS_RADAU_IIA,
|
||||||
|
} sim_collocation_type;
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// acados_size_t gauss_legendre_nodes_work_calculate_size(int ns);
|
||||||
|
//
|
||||||
|
// void gauss_legendre_nodes(int ns, double *nodes, void *raw_memory);
|
||||||
|
//
|
||||||
|
// acados_size_t gauss_simplified_work_calculate_size(int ns);
|
||||||
|
// //
|
||||||
|
// void gauss_simplified(int ns, Newton_scheme *scheme, void *work);
|
||||||
|
//
|
||||||
|
acados_size_t butcher_tableau_work_calculate_size(int ns);
|
||||||
|
//
|
||||||
|
// void calculate_butcher_tableau_from_nodes(int ns, double *nodes, double *b, double *A, void *work);
|
||||||
|
//
|
||||||
|
void calculate_butcher_tableau(int ns, sim_collocation_type collocation_type, double *c_vec,
|
||||||
|
double *b_vec, double *A_mat, void *work);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_SIM_COLLOCATION_UTILS_H_
|
||||||
221
third_party/acados/include/acados/sim/sim_common.h
vendored
Normal file
221
third_party/acados/include/acados/sim/sim_common.h
vendored
Normal file
@@ -0,0 +1,221 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_SIM_COMMON_H_
|
||||||
|
#define ACADOS_SIM_SIM_COMMON_H_
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "acados/sim/sim_collocation_utils.h"
|
||||||
|
#include "acados/utils/timing.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
|
||||||
|
// maximum number of integration stages
|
||||||
|
#define NS_MAX 15
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
// ERK and LIFTED_ERK
|
||||||
|
EXPL_ODE_FUN,
|
||||||
|
EXPL_ODE_HES, // wrt x and u ???
|
||||||
|
EXPL_VDE_FOR,
|
||||||
|
EXPL_VDE_ADJ,
|
||||||
|
// IRK
|
||||||
|
IMPL_ODE_FUN,
|
||||||
|
IMPL_ODE_FUN_JAC_X_XDOT,
|
||||||
|
IMPL_ODE_JAC_X_XDOT_U,
|
||||||
|
IMPL_ODE_FUN_JAC_X_XDOT_U,
|
||||||
|
IMPL_ODE_HESS,
|
||||||
|
// gnsf
|
||||||
|
PHI_FUN,
|
||||||
|
PHI_FUN_JAC_Y,
|
||||||
|
PHI_JAC_Y_UHAT,
|
||||||
|
LO_FUN,
|
||||||
|
GET_GNSF_MATRICES
|
||||||
|
} sim_function_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
void *dims;
|
||||||
|
|
||||||
|
double *x; // x[NX] - initial state value for simulation
|
||||||
|
double *u; // u[NU] - control - constant over simulation time
|
||||||
|
|
||||||
|
double *S_forw; // forward seed [Sx, Su]
|
||||||
|
double *S_adj; // backward seed
|
||||||
|
|
||||||
|
bool identity_seed; // indicating if S_forw = [eye(nx), zeros(nx x nu)]
|
||||||
|
|
||||||
|
void *model;
|
||||||
|
|
||||||
|
double T; // simulation time
|
||||||
|
|
||||||
|
} sim_in;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double CPUtime; // in seconds
|
||||||
|
double LAtime; // in seconds
|
||||||
|
double ADtime; // in seconds
|
||||||
|
|
||||||
|
} sim_info;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double *xn; // xn[NX]
|
||||||
|
double *S_forw; // S_forw[NX*(NX+NU)]
|
||||||
|
double *S_adj; //
|
||||||
|
double *S_hess; //
|
||||||
|
|
||||||
|
double *zn; // z - algebraic variables - reported at start of simulation interval
|
||||||
|
double *S_algebraic; // sensitivities of reported value of algebraic variables w.r.t.
|
||||||
|
// initial stat & control (x_n,u)
|
||||||
|
|
||||||
|
double *grad; // gradient correction
|
||||||
|
|
||||||
|
sim_info *info;
|
||||||
|
|
||||||
|
} sim_out;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int ns; // number of integration stages
|
||||||
|
|
||||||
|
int num_steps;
|
||||||
|
int num_forw_sens;
|
||||||
|
|
||||||
|
int tableau_size; // check that is consistent with ns
|
||||||
|
// only update when butcher tableau is changed
|
||||||
|
// kind of private -> no setter!
|
||||||
|
double *A_mat;
|
||||||
|
double *c_vec;
|
||||||
|
double *b_vec;
|
||||||
|
|
||||||
|
bool sens_forw;
|
||||||
|
bool sens_adj;
|
||||||
|
bool sens_hess;
|
||||||
|
|
||||||
|
bool output_z; // 1 -- if zn should be computed
|
||||||
|
bool sens_algebraic; // 1 -- if S_algebraic should be computed
|
||||||
|
bool exact_z_output; // 1 -- if z, S_algebraic should be computed exactly, extra Newton iterations
|
||||||
|
sim_collocation_type collocation_type;
|
||||||
|
|
||||||
|
// for explicit integrators: newton_iter == 0 && scheme == NULL
|
||||||
|
// && jac_reuse=false
|
||||||
|
int newton_iter;
|
||||||
|
bool jac_reuse;
|
||||||
|
// Newton_scheme *scheme;
|
||||||
|
|
||||||
|
double newton_tol; // optinally used in implicit integrators
|
||||||
|
|
||||||
|
// workspace
|
||||||
|
void *work;
|
||||||
|
|
||||||
|
} sim_opts;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int (*evaluate)(void *config_, sim_in *in, sim_out *out, void *opts, void *mem, void *work);
|
||||||
|
int (*precompute)(void *config_, sim_in *in, sim_out *out, void *opts, void *mem, void *work);
|
||||||
|
// opts
|
||||||
|
acados_size_t (*opts_calculate_size)(void *config_, void *dims);
|
||||||
|
void *(*opts_assign)(void *config_, void *dims, void *raw_memory);
|
||||||
|
void (*opts_initialize_default)(void *config_, void *dims, void *opts);
|
||||||
|
void (*opts_update)(void *config_, void *dims, void *opts);
|
||||||
|
void (*opts_set)(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
void (*opts_get)(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
// mem
|
||||||
|
acados_size_t (*memory_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
void *(*memory_assign)(void *config, void *dims, void *opts, void *raw_memory);
|
||||||
|
int (*memory_set)(void *config, void *dims, void *mem, const char *field, void *value);
|
||||||
|
int (*memory_set_to_zero)(void *config, void *dims, void *opts, void *mem, const char *field);
|
||||||
|
void (*memory_get)(void *config, void *dims, void *mem, const char *field, void *value);
|
||||||
|
// work
|
||||||
|
acados_size_t (*workspace_calculate_size)(void *config, void *dims, void *opts);
|
||||||
|
// model
|
||||||
|
acados_size_t (*model_calculate_size)(void *config, void *dims);
|
||||||
|
void *(*model_assign)(void *config, void *dims, void *raw_memory);
|
||||||
|
int (*model_set)(void *model, const char *field, void *value);
|
||||||
|
// config
|
||||||
|
void (*config_initialize_default)(void *config);
|
||||||
|
// dims
|
||||||
|
acados_size_t (*dims_calculate_size)();
|
||||||
|
void *(*dims_assign)(void *config, void *raw_memory);
|
||||||
|
void (*dims_set)(void *config, void *dims, const char *field, const int *value);
|
||||||
|
void (*dims_get)(void *config, void *dims, const char *field, int *value);
|
||||||
|
|
||||||
|
} sim_config;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
//
|
||||||
|
acados_size_t sim_config_calculate_size();
|
||||||
|
//
|
||||||
|
sim_config *sim_config_assign(void *raw_memory);
|
||||||
|
|
||||||
|
/* in */
|
||||||
|
//
|
||||||
|
acados_size_t sim_in_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
sim_in *sim_in_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int sim_in_set_(void *config_, void *dims_, sim_in *in, const char *field, void *value);
|
||||||
|
|
||||||
|
/* out */
|
||||||
|
//
|
||||||
|
acados_size_t sim_out_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
sim_out *sim_out_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int sim_out_get_(void *config, void *dims, sim_out *out, const char *field, void *value);
|
||||||
|
|
||||||
|
/* opts */
|
||||||
|
//
|
||||||
|
void sim_opts_set_(sim_opts *opts, const char *field, void *value);
|
||||||
|
//
|
||||||
|
void sim_opts_get_(sim_config *config, sim_opts *opts, const char *field, void *value);
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_SIM_COMMON_H_
|
||||||
140
third_party/acados/include/acados/sim/sim_erk_integrator.h
vendored
Normal file
140
third_party/acados/include/acados/sim/sim_erk_integrator.h
vendored
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_SIM_ERK_INTEGRATOR_H_
|
||||||
|
#define ACADOS_SIM_SIM_ERK_INTEGRATOR_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx;
|
||||||
|
int nu;
|
||||||
|
int nz;
|
||||||
|
} sim_erk_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* external functions */
|
||||||
|
// explicit ode
|
||||||
|
external_function_generic *expl_ode_fun;
|
||||||
|
// hessian explicit ode
|
||||||
|
external_function_generic *expl_ode_hes;
|
||||||
|
// forward explicit vde
|
||||||
|
external_function_generic *expl_vde_for;
|
||||||
|
// adjoint explicit vde
|
||||||
|
external_function_generic *expl_vde_adj;
|
||||||
|
|
||||||
|
} erk_model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// memory
|
||||||
|
double time_sim;
|
||||||
|
double time_ad;
|
||||||
|
double time_la;
|
||||||
|
|
||||||
|
// workspace structs
|
||||||
|
} sim_erk_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// workspace mem
|
||||||
|
double *rhs_forw_in; // x + S + p
|
||||||
|
|
||||||
|
double *K_traj; // (stages*nX) or (steps*stages*nX) for adj
|
||||||
|
double *out_forw_traj; // S or (steps+1)*nX for adj
|
||||||
|
|
||||||
|
double *rhs_adj_in;
|
||||||
|
double *out_adj_tmp;
|
||||||
|
double *adj_traj;
|
||||||
|
|
||||||
|
} sim_erk_workspace;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// dims
|
||||||
|
acados_size_t sim_erk_dims_calculate_size();
|
||||||
|
void *sim_erk_dims_assign(void *config_, void *raw_memory);
|
||||||
|
void sim_erk_dims_set(void *config_, void *dims_, const char *field, const int* value);
|
||||||
|
void sim_erk_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
// model
|
||||||
|
acados_size_t sim_erk_model_calculate_size(void *config, void *dims);
|
||||||
|
void *sim_erk_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
int sim_erk_model_set(void *model, const char *field, void *value);
|
||||||
|
|
||||||
|
// opts
|
||||||
|
acados_size_t sim_erk_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void sim_erk_opts_update(void *config_, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *sim_erk_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void sim_erk_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void sim_erk_opts_set(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
// memory
|
||||||
|
acados_size_t sim_erk_memory_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *sim_erk_memory_assign(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
int sim_erk_memory_set(void *config_, void *dims_, void *mem_, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
// workspace
|
||||||
|
acados_size_t sim_erk_workspace_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
|
||||||
|
//
|
||||||
|
int sim_erk(void *config, sim_in *in, sim_out *out, void *opts_, void *mem_, void *work_);
|
||||||
|
//
|
||||||
|
void sim_erk_config_initialize_default(void *config);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_SIM_ERK_INTEGRATOR_H_
|
||||||
364
third_party/acados/include/acados/sim/sim_gnsf.h
vendored
Normal file
364
third_party/acados/include/acados/sim/sim_gnsf.h
vendored
Normal file
@@ -0,0 +1,364 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_SIM_GNSF_H_
|
||||||
|
#define ACADOS_SIM_SIM_GNSF_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "acados/utils/timing.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
// #include "blasfeo/include/blasfeo_d_aux.h"
|
||||||
|
// #include "blasfeo/include/blasfeo_d_aux_ext_dep.h"
|
||||||
|
// #include "blasfeo/include/blasfeo_d_blas.h"
|
||||||
|
// #include "blasfeo/include/blasfeo_d_kernel.h"
|
||||||
|
// #include "blasfeo/include/blasfeo_i_aux_ext_dep.h"
|
||||||
|
// #include "blasfeo/include/blasfeo_target.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
GNSF - Generalized Nonlinear Static Feedback Model
|
||||||
|
has the following form
|
||||||
|
https://github.com/acados/acados/files/3359595/gnsf_structure_blo.pdf
|
||||||
|
|
||||||
|
Details on the algorithm can be found in master thesis of Jonathan Frey,
|
||||||
|
which presents a slightly different format without the terms B_LO, c_LO.
|
||||||
|
https://github.com/acados/acados/files/2318322/gnsf_structure.pdf
|
||||||
|
https://cdn.syscop.de/publications/Frey2018.pdf
|
||||||
|
https://cdn.syscop.de/publications/Frey2019.pdf
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx; // total number of differential states
|
||||||
|
int nu; // total number of inputs
|
||||||
|
int nz; // total number of algebraic states
|
||||||
|
int nx1; // number of differential states in NSF part
|
||||||
|
int nz1; // number of algebraic states in NSF part
|
||||||
|
int n_out; // output dimension of phi
|
||||||
|
int ny; // dimension of first input of phi
|
||||||
|
int nuhat; // dimension of second input of phi
|
||||||
|
|
||||||
|
} sim_gnsf_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* external functions */
|
||||||
|
// phi: nonlinearity function
|
||||||
|
external_function_generic *phi_fun;
|
||||||
|
external_function_generic *phi_fun_jac_y;
|
||||||
|
external_function_generic *phi_jac_y_uhat;
|
||||||
|
|
||||||
|
// f_lo: linear output function
|
||||||
|
external_function_generic *f_lo_fun_jac_x1_x1dot_u_z;
|
||||||
|
|
||||||
|
// to import model matrices
|
||||||
|
external_function_generic *get_gnsf_matrices;
|
||||||
|
|
||||||
|
// flag indicating, if model defining matrices are imported via external (casadi) function,
|
||||||
|
// [default]: true -> auto;
|
||||||
|
bool auto_import_gnsf;
|
||||||
|
|
||||||
|
// booleans from structure detection
|
||||||
|
bool nontrivial_f_LO; // indicates if f_LO is constant zero function
|
||||||
|
bool fully_linear; // indicates if model is fully linear LOS
|
||||||
|
|
||||||
|
/* model defining matrices */
|
||||||
|
// TODO: add setters to set manually
|
||||||
|
double *A;
|
||||||
|
double *B;
|
||||||
|
double *C;
|
||||||
|
double *E;
|
||||||
|
|
||||||
|
double *L_x;
|
||||||
|
double *L_xdot;
|
||||||
|
double *L_z;
|
||||||
|
double *L_u;
|
||||||
|
|
||||||
|
double *A_LO;
|
||||||
|
double *B_LO;
|
||||||
|
double *E_LO;
|
||||||
|
|
||||||
|
/* constant vector */
|
||||||
|
double *c;
|
||||||
|
double *c_LO;
|
||||||
|
|
||||||
|
// permutation vector - to have GNSF order of x, z within sim_gnsf only
|
||||||
|
int *ipiv_x;
|
||||||
|
int *ipiv_z;
|
||||||
|
|
||||||
|
double *ipiv_x_double;
|
||||||
|
double *ipiv_z_double;
|
||||||
|
|
||||||
|
} gnsf_model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// pre_workspace - workspace used in the precomputation phase
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat E11;
|
||||||
|
struct blasfeo_dmat E12;
|
||||||
|
struct blasfeo_dmat E21;
|
||||||
|
struct blasfeo_dmat E22;
|
||||||
|
|
||||||
|
struct blasfeo_dmat A1;
|
||||||
|
struct blasfeo_dmat A2;
|
||||||
|
struct blasfeo_dmat B1;
|
||||||
|
struct blasfeo_dmat B2;
|
||||||
|
struct blasfeo_dmat C1;
|
||||||
|
struct blasfeo_dmat C2;
|
||||||
|
|
||||||
|
struct blasfeo_dmat AA1;
|
||||||
|
struct blasfeo_dmat AA2;
|
||||||
|
struct blasfeo_dmat BB1;
|
||||||
|
struct blasfeo_dmat BB2;
|
||||||
|
struct blasfeo_dmat CC1;
|
||||||
|
struct blasfeo_dmat CC2;
|
||||||
|
struct blasfeo_dmat DD1;
|
||||||
|
struct blasfeo_dmat DD2;
|
||||||
|
struct blasfeo_dmat EE1;
|
||||||
|
struct blasfeo_dmat EE2;
|
||||||
|
|
||||||
|
struct blasfeo_dmat QQ1;
|
||||||
|
|
||||||
|
struct blasfeo_dmat LLZ;
|
||||||
|
struct blasfeo_dmat LLx;
|
||||||
|
struct blasfeo_dmat LLK;
|
||||||
|
|
||||||
|
int *ipivEE1; // index of pivot vector
|
||||||
|
int *ipivEE2;
|
||||||
|
int *ipivQQ1;
|
||||||
|
|
||||||
|
// for algebraic sensitivity propagation
|
||||||
|
struct blasfeo_dmat Q1;
|
||||||
|
|
||||||
|
// for constant term in NSF
|
||||||
|
struct blasfeo_dvec cc1;
|
||||||
|
struct blasfeo_dvec cc2;
|
||||||
|
|
||||||
|
} gnsf_pre_workspace;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// workspace
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double *Z_work; // used to perform computations to get out->zn
|
||||||
|
|
||||||
|
int *ipiv; // index of pivot vector
|
||||||
|
|
||||||
|
struct blasfeo_dvec *vv_traj;
|
||||||
|
struct blasfeo_dvec *yy_traj;
|
||||||
|
struct blasfeo_dmat *f_LO_jac_traj;
|
||||||
|
|
||||||
|
struct blasfeo_dvec K2_val;
|
||||||
|
struct blasfeo_dvec x0_traj;
|
||||||
|
struct blasfeo_dvec res_val;
|
||||||
|
struct blasfeo_dvec u0;
|
||||||
|
struct blasfeo_dvec lambda;
|
||||||
|
struct blasfeo_dvec lambda_old;
|
||||||
|
|
||||||
|
struct blasfeo_dvec yyu;
|
||||||
|
struct blasfeo_dvec yyss;
|
||||||
|
|
||||||
|
struct blasfeo_dvec K1_val;
|
||||||
|
struct blasfeo_dvec f_LO_val;
|
||||||
|
struct blasfeo_dvec x1_stage_val;
|
||||||
|
struct blasfeo_dvec Z1_val;
|
||||||
|
|
||||||
|
struct blasfeo_dvec K1u;
|
||||||
|
struct blasfeo_dvec Zu;
|
||||||
|
struct blasfeo_dvec ALOtimesx02;
|
||||||
|
struct blasfeo_dvec BLOtimesu0;
|
||||||
|
|
||||||
|
struct blasfeo_dvec uhat;
|
||||||
|
|
||||||
|
struct blasfeo_dmat J_r_vv;
|
||||||
|
struct blasfeo_dmat J_r_x1u;
|
||||||
|
|
||||||
|
struct blasfeo_dmat dK1_dx1;
|
||||||
|
struct blasfeo_dmat dK1_du;
|
||||||
|
struct blasfeo_dmat dZ_dx1;
|
||||||
|
struct blasfeo_dmat dZ_du;
|
||||||
|
struct blasfeo_dmat J_G2_K1;
|
||||||
|
|
||||||
|
struct blasfeo_dmat dK2_dx1;
|
||||||
|
struct blasfeo_dmat dK2_dvv;
|
||||||
|
struct blasfeo_dmat dxf_dwn;
|
||||||
|
struct blasfeo_dmat S_forw_new;
|
||||||
|
struct blasfeo_dmat S_algebraic_aux;
|
||||||
|
|
||||||
|
struct blasfeo_dmat dPsi_dvv;
|
||||||
|
struct blasfeo_dmat dPsi_dx;
|
||||||
|
struct blasfeo_dmat dPsi_du;
|
||||||
|
|
||||||
|
struct blasfeo_dmat dPHI_dyuhat;
|
||||||
|
struct blasfeo_dvec z0;
|
||||||
|
|
||||||
|
// memory only available if (opts->sens_algebraic)
|
||||||
|
// struct blasfeo_dvec y_one_stage;
|
||||||
|
// struct blasfeo_dvec x0dot_1;
|
||||||
|
// struct blasfeo_dmat dz10_dx1u; // (nz1) * (nx1+nu);
|
||||||
|
// struct blasfeo_dmat dr0_dvv0; // (n_out * n_out)
|
||||||
|
// struct blasfeo_dmat f_LO_jac0; // (nx2+nz2) * (2*nx1 + nz1 + nu)
|
||||||
|
// struct blasfeo_dmat sens_z2_rhs; // (nx2 + nz2) * (nx1 + nu)
|
||||||
|
// int *ipiv_vv0;
|
||||||
|
|
||||||
|
} gnsf_workspace;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// memory
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
bool first_call;
|
||||||
|
|
||||||
|
// simulation time for one step
|
||||||
|
double dt;
|
||||||
|
|
||||||
|
// (scaled) butcher table
|
||||||
|
double *A_dt;
|
||||||
|
double *b_dt;
|
||||||
|
double *c_butcher;
|
||||||
|
|
||||||
|
// value used to initialize integration variables - corresponding to value of phi
|
||||||
|
double *phi_guess; // n_out
|
||||||
|
|
||||||
|
struct blasfeo_dmat S_forw;
|
||||||
|
struct blasfeo_dmat S_algebraic;
|
||||||
|
|
||||||
|
// precomputed matrices
|
||||||
|
struct blasfeo_dmat KKv;
|
||||||
|
struct blasfeo_dmat KKx;
|
||||||
|
struct blasfeo_dmat KKu;
|
||||||
|
|
||||||
|
struct blasfeo_dmat YYv;
|
||||||
|
struct blasfeo_dmat YYx;
|
||||||
|
struct blasfeo_dmat YYu;
|
||||||
|
|
||||||
|
struct blasfeo_dmat ZZv;
|
||||||
|
struct blasfeo_dmat ZZx;
|
||||||
|
struct blasfeo_dmat ZZu;
|
||||||
|
|
||||||
|
struct blasfeo_dmat ALO;
|
||||||
|
struct blasfeo_dmat BLO;
|
||||||
|
struct blasfeo_dmat M2_LU;
|
||||||
|
int *ipivM2;
|
||||||
|
|
||||||
|
struct blasfeo_dmat dK2_dx2;
|
||||||
|
struct blasfeo_dmat dK2_du;
|
||||||
|
struct blasfeo_dmat dx2f_dx2u;
|
||||||
|
|
||||||
|
struct blasfeo_dmat Lu;
|
||||||
|
|
||||||
|
// precomputed vectors for constant term in NSF
|
||||||
|
struct blasfeo_dvec KK0;
|
||||||
|
struct blasfeo_dvec YY0;
|
||||||
|
struct blasfeo_dvec ZZ0;
|
||||||
|
|
||||||
|
// for algebraic sensitivities only;
|
||||||
|
// struct blasfeo_dmat *Z0x;
|
||||||
|
// struct blasfeo_dmat *Z0u;
|
||||||
|
// struct blasfeo_dmat *Z0v;
|
||||||
|
|
||||||
|
// struct blasfeo_dmat *Y0x;
|
||||||
|
// struct blasfeo_dmat *Y0u;
|
||||||
|
// struct blasfeo_dmat *Y0v;
|
||||||
|
|
||||||
|
// struct blasfeo_dmat *K0x;
|
||||||
|
// struct blasfeo_dmat *K0u;
|
||||||
|
// struct blasfeo_dmat *K0v;
|
||||||
|
|
||||||
|
// struct blasfeo_dmat *ELO_LU;
|
||||||
|
// int *ipiv_ELO;
|
||||||
|
// struct blasfeo_dmat *ELO_inv_ALO;
|
||||||
|
|
||||||
|
// struct blasfeo_dmat *Lx;
|
||||||
|
// struct blasfeo_dmat *Lxdot;
|
||||||
|
// struct blasfeo_dmat *Lz;
|
||||||
|
|
||||||
|
double time_sim;
|
||||||
|
double time_ad;
|
||||||
|
double time_la;
|
||||||
|
|
||||||
|
} sim_gnsf_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// gnsf dims
|
||||||
|
acados_size_t sim_gnsf_dims_calculate_size();
|
||||||
|
void *sim_gnsf_dims_assign(void *config_, void *raw_memory);
|
||||||
|
|
||||||
|
// get & set functions
|
||||||
|
void sim_gnsf_dims_set(void *config_, void *dims_, const char *field, const int *value);
|
||||||
|
void sim_gnsf_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
// opts
|
||||||
|
acados_size_t sim_gnsf_opts_calculate_size(void *config, void *dims);
|
||||||
|
void *sim_gnsf_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
void sim_gnsf_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
void sim_gnsf_opts_update(void *config_, void *dims, void *opts_);
|
||||||
|
void sim_gnsf_opts_set(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
|
||||||
|
// model
|
||||||
|
acados_size_t sim_gnsf_model_calculate_size(void *config, void *dims_);
|
||||||
|
void *sim_gnsf_model_assign(void *config, void *dims_, void *raw_memory);
|
||||||
|
int sim_gnsf_model_set(void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
// precomputation
|
||||||
|
int sim_gnsf_precompute(void *config_, sim_in *in, sim_out *out, void *opts_, void *mem_,
|
||||||
|
void *work_);
|
||||||
|
|
||||||
|
// workspace & memory
|
||||||
|
acados_size_t sim_gnsf_workspace_calculate_size(void *config, void *dims_, void *args);
|
||||||
|
acados_size_t sim_gnsf_memory_calculate_size(void *config, void *dims_, void *opts_);
|
||||||
|
void *sim_gnsf_memory_assign(void *config, void *dims_, void *opts_, void *raw_memory);
|
||||||
|
|
||||||
|
// interface
|
||||||
|
void sim_gnsf_config_initialize_default(void *config_);
|
||||||
|
|
||||||
|
// integrator
|
||||||
|
int sim_gnsf(void *config, sim_in *in, sim_out *out, void *opts, void *mem_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_SIM_GNSF_H_
|
||||||
183
third_party/acados/include/acados/sim/sim_irk_integrator.h
vendored
Normal file
183
third_party/acados/include/acados/sim/sim_irk_integrator.h
vendored
Normal file
@@ -0,0 +1,183 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_SIM_IRK_INTEGRATOR_H_
|
||||||
|
#define ACADOS_SIM_SIM_IRK_INTEGRATOR_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
#include "blasfeo/include/blasfeo_common.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx;
|
||||||
|
int nu;
|
||||||
|
int nz;
|
||||||
|
|
||||||
|
} sim_irk_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* external functions */
|
||||||
|
// implicit fun - can either be fully implicit ode or dae
|
||||||
|
// - i.e. dae has z as additional last argument & nz > 0
|
||||||
|
external_function_generic *impl_ode_fun;
|
||||||
|
// implicit ode & jac_x & jax_xdot & jac_z
|
||||||
|
external_function_generic *impl_ode_fun_jac_x_xdot_z;
|
||||||
|
// jax_x & jac_xdot & jac_u & jac_z of implicit ode
|
||||||
|
external_function_generic *impl_ode_jac_x_xdot_u_z;
|
||||||
|
// hessian of implicit ode:
|
||||||
|
external_function_generic *impl_ode_hess;
|
||||||
|
} irk_model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec *rG; // residuals of G (nx*ns)
|
||||||
|
struct blasfeo_dvec *K; // internal K variables ((nx+nz)*ns)
|
||||||
|
struct blasfeo_dvec *xt; // temporary x
|
||||||
|
struct blasfeo_dvec *xn; // x at each integration step
|
||||||
|
struct blasfeo_dvec xtdot; // temporary xdot
|
||||||
|
|
||||||
|
struct blasfeo_dvec *lambda; // adjoint sensitivities (nx + nu)
|
||||||
|
struct blasfeo_dvec *lambdaK; // auxiliary variable ((nx+nz)*ns) for adjoint propagation
|
||||||
|
|
||||||
|
struct blasfeo_dmat df_dx; // temporary Jacobian of ode w.r.t x (nx+nz, nx)
|
||||||
|
struct blasfeo_dmat df_dxdot; // temporary Jacobian of ode w.r.t xdot (nx+nz, nx)
|
||||||
|
struct blasfeo_dmat df_du; // temporary Jacobian of ode w.r.t u (nx+nz, nu)
|
||||||
|
struct blasfeo_dmat df_dz; // temporary Jacobian of ode w.r.t z (nx+nz, nu)
|
||||||
|
|
||||||
|
/* NOTE: the memory allocation corresponding to the following fields is CONDITIONAL */
|
||||||
|
|
||||||
|
// only allocated if (opts->sens_algebraic || opts->output_z)
|
||||||
|
int *ipiv_one_stage; // index of pivot vector (nx + nz)
|
||||||
|
double *Z_work; // used to perform computations to get out->zn (ns)
|
||||||
|
|
||||||
|
// df_dxdotz, dk0_dxu, only allocated if (opts->sens_algebraic && opts->exact_z_output)
|
||||||
|
// used for algebraic sensitivity generation
|
||||||
|
struct blasfeo_dmat df_dxdotz; // temporary Jacobian of ode w.r.t. xdot,z (nx+nz, nx+nz);
|
||||||
|
struct blasfeo_dmat dk0_dxu; // intermediate result, (nx+nz, nx+nu)
|
||||||
|
|
||||||
|
// dK_dxu: if (!opts->sens_hess) - single blasfeo_dmat that is reused
|
||||||
|
// if ( opts->sens_hess) - array of (num_steps) blasfeo_dmat
|
||||||
|
// to store intermediate results
|
||||||
|
struct blasfeo_dmat *dK_dxu; // jacobian of (K,Z) over x and u ((nx+nz)*ns, nx+nu);
|
||||||
|
|
||||||
|
// S_forw: if (!opts->sens_hess) - single blasfeo_dmat that is reused
|
||||||
|
// if ( opts->sens_hess) - array of (num_steps + 1) blasfeo_dmat
|
||||||
|
// to store intermediate results
|
||||||
|
struct blasfeo_dmat *S_forw; // forward sensitivities (nx, nx+nu)
|
||||||
|
|
||||||
|
// dG_dxu: if (!opts->sens_hess) - single blasfeo_dmat that is reused
|
||||||
|
// if ( opts->sens_hess) - array of blasfeo_dmat to store intermediate results
|
||||||
|
struct blasfeo_dmat *dG_dxu; // jacobian of G over x and u ((nx+nz)*ns, nx+nu)
|
||||||
|
|
||||||
|
// dG_dK: if (!opts->sens_hess) - single blasfeo_dmat that is reused
|
||||||
|
// if ( opts->sens_hess) - array of blasfeo_dmat to store intermediate results
|
||||||
|
struct blasfeo_dmat *dG_dK; // jacobian of G over K ((nx+nz)*ns, (nx+nz)*ns)
|
||||||
|
|
||||||
|
// ipiv: index of pivot vector
|
||||||
|
// if (!opts->sens_hess) - array (ns * (nx + nz)) that is reused
|
||||||
|
// if ( opts->sens_hess) - array (ns * (nx + nz)) * num_steps, to store all
|
||||||
|
// pivot vectors for dG_dxu
|
||||||
|
int *ipiv; // index of pivot vector
|
||||||
|
|
||||||
|
// xn_traj, K_traj only available if( opts->sens_adj || opts->sens_hess )
|
||||||
|
struct blasfeo_dvec *xn_traj; // xn trajectory
|
||||||
|
struct blasfeo_dvec *K_traj; // K trajectory
|
||||||
|
|
||||||
|
/* the following variables are only available if (opts->sens_hess) */
|
||||||
|
// For Hessian propagation
|
||||||
|
struct blasfeo_dmat Hess; // temporary Hessian (nx + nu, nx + nu)
|
||||||
|
// output of impl_ode_hess
|
||||||
|
struct blasfeo_dmat f_hess; // size: (nx + nu, nx + nu)
|
||||||
|
struct blasfeo_dmat dxkzu_dw0; // size (2*nx + nu + nz) x (nx + nu)
|
||||||
|
struct blasfeo_dmat tmp_dxkzu_dw0; // size (2*nx + nu + nz) x (nx + nu)
|
||||||
|
|
||||||
|
} sim_irk_workspace;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
double *xdot; // xdot[NX] - initialization for state derivatives k within the integrator
|
||||||
|
double *z; // z[NZ] - initialization for algebraic variables z
|
||||||
|
|
||||||
|
double time_sim;
|
||||||
|
double time_ad;
|
||||||
|
double time_la;
|
||||||
|
} sim_irk_memory;
|
||||||
|
|
||||||
|
|
||||||
|
// get & set functions
|
||||||
|
void sim_irk_dims_set(void *config_, void *dims_, const char *field, const int *value);
|
||||||
|
void sim_irk_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
// dims
|
||||||
|
acados_size_t sim_irk_dims_calculate_size();
|
||||||
|
void *sim_irk_dims_assign(void *config_, void *raw_memory);
|
||||||
|
|
||||||
|
// model
|
||||||
|
acados_size_t sim_irk_model_calculate_size(void *config, void *dims);
|
||||||
|
void *sim_irk_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
int sim_irk_model_set(void *model, const char *field, void *value);
|
||||||
|
|
||||||
|
// opts
|
||||||
|
acados_size_t sim_irk_opts_calculate_size(void *config, void *dims);
|
||||||
|
void *sim_irk_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
void sim_irk_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
void sim_irk_opts_update(void *config_, void *dims, void *opts_);
|
||||||
|
void sim_irk_opts_set(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
|
||||||
|
// memory
|
||||||
|
acados_size_t sim_irk_memory_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
void *sim_irk_memory_assign(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
int sim_irk_memory_set(void *config_, void *dims_, void *mem_, const char *field, void *value);
|
||||||
|
|
||||||
|
// workspace
|
||||||
|
acados_size_t sim_irk_workspace_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
void sim_irk_config_initialize_default(void *config);
|
||||||
|
|
||||||
|
// main
|
||||||
|
int sim_irk(void *config, sim_in *in, sim_out *out, void *opts_, void *mem_, void *work_);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_SIM_IRK_INTEGRATOR_H_
|
||||||
157
third_party/acados/include/acados/sim/sim_lifted_irk_integrator.h
vendored
Normal file
157
third_party/acados/include/acados/sim/sim_lifted_irk_integrator.h
vendored
Normal file
@@ -0,0 +1,157 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_SIM_SIM_LIFTED_IRK_INTEGRATOR_H_
|
||||||
|
#define ACADOS_SIM_SIM_LIFTED_IRK_INTEGRATOR_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nx;
|
||||||
|
int nu;
|
||||||
|
int nz;
|
||||||
|
} sim_lifted_irk_dims;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* external functions */
|
||||||
|
// implicit ode
|
||||||
|
external_function_generic *impl_ode_fun;
|
||||||
|
// implicit ode & jax_x & jac_xdot & jac_u implicit ode
|
||||||
|
external_function_generic *impl_ode_fun_jac_x_xdot_u;
|
||||||
|
|
||||||
|
} lifted_irk_model;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
struct blasfeo_dmat *J_temp_x; // temporary Jacobian of ode w.r.t x (nx, nx)
|
||||||
|
struct blasfeo_dmat *J_temp_xdot; // temporary Jacobian of ode w.r.t xdot (nx, nx)
|
||||||
|
struct blasfeo_dmat *J_temp_u; // temporary Jacobian of ode w.r.t u (nx, nu)
|
||||||
|
|
||||||
|
struct blasfeo_dvec *rG; // residuals of G (nx*ns)
|
||||||
|
struct blasfeo_dvec *xt; // temporary x
|
||||||
|
struct blasfeo_dvec *xn; // x at each integration step (for evaluations)
|
||||||
|
struct blasfeo_dvec *xn_out; // x at each integration step (output)
|
||||||
|
struct blasfeo_dvec *dxn; // dx at each integration step
|
||||||
|
struct blasfeo_dvec *w; // stacked x and u
|
||||||
|
|
||||||
|
int *ipiv; // index of pivot vector
|
||||||
|
|
||||||
|
} sim_lifted_irk_workspace;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// memory for lifted integrators
|
||||||
|
struct blasfeo_dmat *S_forw; // forward sensitivities
|
||||||
|
struct blasfeo_dmat *JGK; // jacobian of G over K (nx*ns, nx*ns)
|
||||||
|
struct blasfeo_dmat *JGf; // jacobian of G over x and u (nx*ns, nx+nu);
|
||||||
|
struct blasfeo_dmat *JKf; // jacobian of K over x and u (nx*ns, nx+nu);
|
||||||
|
|
||||||
|
struct blasfeo_dvec *K; // internal variables (nx*ns)
|
||||||
|
struct blasfeo_dvec *x; // states (nx) -- for expansion step
|
||||||
|
struct blasfeo_dvec *u; // controls (nu) -- for expansion step
|
||||||
|
|
||||||
|
int update_sens;
|
||||||
|
// int init_K;
|
||||||
|
|
||||||
|
double time_sim;
|
||||||
|
double time_ad;
|
||||||
|
double time_la;
|
||||||
|
|
||||||
|
} sim_lifted_irk_memory;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
void sim_lifted_irk_dims_set(void *config_, void *dims_, const char *field, const int *value);
|
||||||
|
void sim_lifted_irk_dims_get(void *config_, void *dims_, const char *field, int* value);
|
||||||
|
|
||||||
|
acados_size_t sim_lifted_irk_dims_calculate_size();
|
||||||
|
//
|
||||||
|
void *sim_lifted_irk_dims_assign(void* config_, void *raw_memory);
|
||||||
|
|
||||||
|
/* model */
|
||||||
|
//
|
||||||
|
acados_size_t sim_lifted_irk_model_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *sim_lifted_irk_model_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
int sim_lifted_irk_model_set(void *model_, const char *field, void *value);
|
||||||
|
|
||||||
|
/* opts */
|
||||||
|
//
|
||||||
|
acados_size_t sim_lifted_irk_opts_calculate_size(void *config, void *dims);
|
||||||
|
//
|
||||||
|
void *sim_lifted_irk_opts_assign(void *config, void *dims, void *raw_memory);
|
||||||
|
//
|
||||||
|
void sim_lifted_irk_opts_initialize_default(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void sim_lifted_irk_opts_update(void *config_, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void sim_lifted_irk_opts_set(void *config_, void *opts_, const char *field, void *value);
|
||||||
|
|
||||||
|
/* memory */
|
||||||
|
//
|
||||||
|
acados_size_t sim_lifted_irk_memory_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void *sim_lifted_irk_memory_assign(void *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
|
||||||
|
/* workspace */
|
||||||
|
//
|
||||||
|
acados_size_t sim_lifted_irk_workspace_calculate_size(void *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
void sim_lifted_irk_config_initialize_default(void *config);
|
||||||
|
|
||||||
|
/* solver */
|
||||||
|
//
|
||||||
|
int sim_lifted_irk(void *config, sim_in *in, sim_out *out, void *opts_,
|
||||||
|
void *mem_, void *work_);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_SIM_SIM_LIFTED_IRK_INTEGRATOR_H_
|
||||||
242
third_party/acados/include/acados/utils/external_function_generic.h
vendored
Normal file
242
third_party/acados/include/acados/utils/external_function_generic.h
vendored
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_EXTERNAL_FUNCTION_GENERIC_H_
|
||||||
|
#define ACADOS_UTILS_EXTERNAL_FUNCTION_GENERIC_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* generic external function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// type of arguments
|
||||||
|
typedef enum {
|
||||||
|
COLMAJ,
|
||||||
|
BLASFEO_DMAT,
|
||||||
|
BLASFEO_DVEC,
|
||||||
|
COLMAJ_ARGS,
|
||||||
|
BLASFEO_DMAT_ARGS,
|
||||||
|
BLASFEO_DVEC_ARGS,
|
||||||
|
IGNORE_ARGUMENT
|
||||||
|
} ext_fun_arg_t;
|
||||||
|
|
||||||
|
struct colmaj_args
|
||||||
|
{
|
||||||
|
double *A;
|
||||||
|
int lda;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_dmat_args
|
||||||
|
{
|
||||||
|
struct blasfeo_dmat *A;
|
||||||
|
int ai;
|
||||||
|
int aj;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_dvec_args
|
||||||
|
{
|
||||||
|
struct blasfeo_dvec *x;
|
||||||
|
int xi;
|
||||||
|
};
|
||||||
|
|
||||||
|
// prototype of an external function
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// public members (have to be before private ones)
|
||||||
|
void (*evaluate)(void *, ext_fun_arg_t *, void **, ext_fun_arg_t *, void **);
|
||||||
|
// private members
|
||||||
|
// .....
|
||||||
|
} external_function_generic;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* generic external parametric function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// prototype of a parametric external function
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// public members for core (have to be before private ones)
|
||||||
|
void (*evaluate)(void *, ext_fun_arg_t *, void **, ext_fun_arg_t *, void **);
|
||||||
|
// public members for interfaces
|
||||||
|
void (*get_nparam)(void *, int *);
|
||||||
|
void (*set_param)(void *, double *);
|
||||||
|
void (*set_param_sparse)(void *, int n_update, int *idx, double *);
|
||||||
|
// private members
|
||||||
|
void *ptr_ext_mem; // pointer to external memory
|
||||||
|
int (*fun)(void **, void **, void *);
|
||||||
|
double *p; // parameters
|
||||||
|
int np; // number of parameters
|
||||||
|
// .....
|
||||||
|
} external_function_param_generic;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t external_function_param_generic_struct_size();
|
||||||
|
//
|
||||||
|
void external_function_param_generic_set_fun(external_function_param_generic *fun, void *value);
|
||||||
|
//
|
||||||
|
acados_size_t external_function_param_generic_calculate_size(external_function_param_generic *fun, int np);
|
||||||
|
//
|
||||||
|
void external_function_param_generic_assign(external_function_param_generic *fun, void *mem);
|
||||||
|
//
|
||||||
|
void external_function_param_generic_wrapper(void *self, ext_fun_arg_t *type_in, void **in, ext_fun_arg_t *type_out, void **out);
|
||||||
|
//
|
||||||
|
void external_function_param_generic_get_nparam(void *self, int *np);
|
||||||
|
//
|
||||||
|
void external_function_param_generic_set_param(void *self, double *p);
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* casadi external function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// public members (have to be the same as in the prototype, and before the private ones)
|
||||||
|
void (*evaluate)(void *, ext_fun_arg_t *, void **, ext_fun_arg_t *, void **);
|
||||||
|
// private members
|
||||||
|
void *ptr_ext_mem; // pointer to external memory
|
||||||
|
int (*casadi_fun)(const double **, double **, int *, double *, void *);
|
||||||
|
int (*casadi_work)(int *, int *, int *, int *);
|
||||||
|
const int *(*casadi_sparsity_in)(int);
|
||||||
|
const int *(*casadi_sparsity_out)(int);
|
||||||
|
int (*casadi_n_in)(void);
|
||||||
|
int (*casadi_n_out)(void);
|
||||||
|
double **args;
|
||||||
|
double **res;
|
||||||
|
double *w;
|
||||||
|
int *iw;
|
||||||
|
int *args_size; // size of args[i]
|
||||||
|
int *res_size; // size of res[i]
|
||||||
|
int args_num; // number of args arrays
|
||||||
|
int args_size_tot; // total size of args arrays
|
||||||
|
int res_num; // number of res arrays
|
||||||
|
int res_size_tot; // total size of res arrays
|
||||||
|
int in_num; // number of input arrays
|
||||||
|
int out_num; // number of output arrays
|
||||||
|
int iw_size; // number of ints for worksapce
|
||||||
|
int w_size; // number of doubles for workspace
|
||||||
|
} external_function_casadi;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t external_function_casadi_struct_size();
|
||||||
|
//
|
||||||
|
void external_function_casadi_set_fun(external_function_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_casadi_set_work(external_function_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_casadi_set_sparsity_in(external_function_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_casadi_set_sparsity_out(external_function_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_casadi_set_n_in(external_function_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_casadi_set_n_out(external_function_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
acados_size_t external_function_casadi_calculate_size(external_function_casadi *fun);
|
||||||
|
//
|
||||||
|
void external_function_casadi_assign(external_function_casadi *fun, void *mem);
|
||||||
|
//
|
||||||
|
void external_function_casadi_wrapper(void *self, ext_fun_arg_t *type_in, void **in,
|
||||||
|
ext_fun_arg_t *type_out, void **out);
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* casadi external parametric function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
// public members for core (have to be the same as in the prototype, and before the private ones)
|
||||||
|
void (*evaluate)(void *, ext_fun_arg_t *, void **, ext_fun_arg_t *, void **);
|
||||||
|
// public members for interfaces
|
||||||
|
void (*get_nparam)(void *, int *);
|
||||||
|
void (*set_param)(void *, double *);
|
||||||
|
void (*set_param_sparse)(void *, int n_update, int *idx, double *);
|
||||||
|
// private members
|
||||||
|
void *ptr_ext_mem; // pointer to external memory
|
||||||
|
int (*casadi_fun)(const double **, double **, int *, double *, void *);
|
||||||
|
int (*casadi_work)(int *, int *, int *, int *);
|
||||||
|
const int *(*casadi_sparsity_in)(int);
|
||||||
|
const int *(*casadi_sparsity_out)(int);
|
||||||
|
int (*casadi_n_in)(void);
|
||||||
|
int (*casadi_n_out)(void);
|
||||||
|
double **args;
|
||||||
|
double **res;
|
||||||
|
double *w;
|
||||||
|
int *iw;
|
||||||
|
int *args_size; // size of args[i]
|
||||||
|
int *res_size; // size of res[i]
|
||||||
|
int args_num; // number of args arrays
|
||||||
|
int args_size_tot; // total size of args arrays
|
||||||
|
int res_num; // number of res arrays
|
||||||
|
int res_size_tot; // total size of res arrays
|
||||||
|
int in_num; // number of input arrays
|
||||||
|
int out_num; // number of output arrays
|
||||||
|
int iw_size; // number of ints for worksapce
|
||||||
|
int w_size; // number of doubles for workspace
|
||||||
|
int np; // number of parameters
|
||||||
|
} external_function_param_casadi;
|
||||||
|
|
||||||
|
//
|
||||||
|
acados_size_t external_function_param_casadi_struct_size();
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_set_fun(external_function_param_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_set_work(external_function_param_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_set_sparsity_in(external_function_param_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_set_sparsity_out(external_function_param_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_set_n_in(external_function_param_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_set_n_out(external_function_param_casadi *fun, void *value);
|
||||||
|
//
|
||||||
|
acados_size_t external_function_param_casadi_calculate_size(external_function_param_casadi *fun, int np);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_assign(external_function_param_casadi *fun, void *mem);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_wrapper(void *self, ext_fun_arg_t *type_in, void **in,
|
||||||
|
ext_fun_arg_t *type_out, void **out);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_get_nparam(void *self, int *np);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_EXTERNAL_FUNCTION_GENERIC_H_
|
||||||
103
third_party/acados/include/acados/utils/math.h
vendored
Normal file
103
third_party/acados/include/acados/utils/math.h
vendored
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_MATH_H_
|
||||||
|
#define ACADOS_UTILS_MATH_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
#if defined(__MABX2__)
|
||||||
|
double fmax(double a, double b);
|
||||||
|
int isnan(double x);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||||
|
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||||
|
|
||||||
|
void dgemm_nn_3l(int m, int n, int k, double *A, int lda, double *B, int ldb, double *C, int ldc);
|
||||||
|
// void dgemv_n_3l(int m, int n, double *A, int lda, double *x, double *y);
|
||||||
|
// void dgemv_t_3l(int m, int n, double *A, int lda, double *x, double *y);
|
||||||
|
// void dcopy_3l(int n, double *x, int incx, double *y, int incy);
|
||||||
|
void daxpy_3l(int n, double da, double *dx, double *dy);
|
||||||
|
void dscal_3l(int n, double da, double *dx);
|
||||||
|
double twonormv(int n, double *ptrv);
|
||||||
|
|
||||||
|
/* copies a matrix into another matrix */
|
||||||
|
void dmcopy(int row, int col, double *ptrA, int lda, double *ptrB, int ldb);
|
||||||
|
|
||||||
|
/* solution of a system of linear equations */
|
||||||
|
void dgesv_3l(int n, int nrhs, double *A, int lda, int *ipiv, double *B, int ldb, int *info);
|
||||||
|
|
||||||
|
/* matrix exponential */
|
||||||
|
void expm(int row, double *A);
|
||||||
|
|
||||||
|
int idamax_3l(int n, double *x);
|
||||||
|
|
||||||
|
void dswap_3l(int n, double *x, int incx, double *y, int incy);
|
||||||
|
|
||||||
|
void dger_3l(int m, int n, double alpha, double *x, int incx, double *y, int incy, double *A,
|
||||||
|
int lda);
|
||||||
|
|
||||||
|
void dgetf2_3l(int m, int n, double *A, int lda, int *ipiv, int *info);
|
||||||
|
|
||||||
|
void dlaswp_3l(int n, double *A, int lda, int k1, int k2, int *ipiv);
|
||||||
|
|
||||||
|
void dtrsm_l_l_n_u_3l(int m, int n, double *A, int lda, double *B, int ldb);
|
||||||
|
|
||||||
|
void dgetrs_3l(int n, int nrhs, double *A, int lda, int *ipiv, double *B, int ldb);
|
||||||
|
|
||||||
|
void dgesv_3l(int n, int nrhs, double *A, int lda, int *ipiv, double *B, int ldb, int *info);
|
||||||
|
|
||||||
|
double onenorm(int row, int col, double *ptrA);
|
||||||
|
|
||||||
|
// double twonormv(int n, double *ptrv);
|
||||||
|
|
||||||
|
void padeapprox(int m, int row, double *A);
|
||||||
|
|
||||||
|
void expm(int row, double *A);
|
||||||
|
|
||||||
|
// void d_compute_qp_size_ocp2dense_rev(int N, int *nx, int *nu, int *nb, int **hidxb, int *ng,
|
||||||
|
// int *nvd, int *ned, int *nbd, int *ngd);
|
||||||
|
|
||||||
|
void acados_eigen_decomposition(int dim, double *A, double *V, double *d, double *e);
|
||||||
|
|
||||||
|
double minimum_of_doubles(double *x, int n);
|
||||||
|
|
||||||
|
void neville_algorithm(double xx, int n, double *x, double *Q, double *out);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_MATH_H_
|
||||||
110
third_party/acados/include/acados/utils/mem.h
vendored
Normal file
110
third_party/acados/include/acados/utils/mem.h
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_MEM_H_
|
||||||
|
#define ACADOS_UTILS_MEM_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
#include "blasfeo/include/blasfeo_d_aux.h"
|
||||||
|
#include "blasfeo/include/blasfeo_d_aux_ext_dep.h"
|
||||||
|
|
||||||
|
// TODO(dimitris): probably does not belong here
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int (*fun)(void *);
|
||||||
|
acados_size_t (*calculate_args_size)(void *);
|
||||||
|
void *(*assign_args)(void *);
|
||||||
|
void (*initialize_default_args)(void *);
|
||||||
|
acados_size_t (*calculate_memory_size)(void *);
|
||||||
|
void *(*assign_memory)(void *);
|
||||||
|
acados_size_t (*calculate_workspace_size)(void *);
|
||||||
|
} module_solver;
|
||||||
|
|
||||||
|
// make int counter of memory multiple of a number (typically 8 or 64)
|
||||||
|
void make_int_multiple_of(acados_size_t num, acados_size_t *size);
|
||||||
|
|
||||||
|
// align char pointer to number (typically 8 for pointers and doubles,
|
||||||
|
// 64 for blasfeo structs) and return offset
|
||||||
|
int align_char_to(int num, char **c_ptr);
|
||||||
|
|
||||||
|
// switch between malloc and calloc (for valgrinding)
|
||||||
|
void *acados_malloc(size_t nitems, acados_size_t size);
|
||||||
|
|
||||||
|
// uses always calloc
|
||||||
|
void *acados_calloc(size_t nitems, acados_size_t size);
|
||||||
|
|
||||||
|
// allocate vector of pointers to vectors of doubles and advance pointer
|
||||||
|
void assign_and_advance_double_ptrs(int n, double ***v, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of pointers to vectors of ints and advance pointer
|
||||||
|
void assign_and_advance_int_ptrs(int n, int ***v, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of pointers to strvecs and advance pointer
|
||||||
|
void assign_and_advance_blasfeo_dvec_structs(int n, struct blasfeo_dvec **sv, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of pointers to strmats and advance pointer
|
||||||
|
void assign_and_advance_blasfeo_dmat_structs(int n, struct blasfeo_dmat **sm, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of pointers to vector of pointers to strmats and advance pointer
|
||||||
|
void assign_and_advance_blasfeo_dmat_ptrs(int n, struct blasfeo_dmat ***sm, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of chars and advance pointer
|
||||||
|
void assign_and_advance_char(int n, char **v, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of ints and advance pointer
|
||||||
|
void assign_and_advance_int(int n, int **v, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of bools and advance pointer
|
||||||
|
void assign_and_advance_bool(int n, bool **v, char **ptr);
|
||||||
|
|
||||||
|
// allocate vector of doubles and advance pointer
|
||||||
|
void assign_and_advance_double(int n, double **v, char **ptr);
|
||||||
|
|
||||||
|
// allocate strvec and advance pointer
|
||||||
|
void assign_and_advance_blasfeo_dvec_mem(int n, struct blasfeo_dvec *sv, char **ptr);
|
||||||
|
|
||||||
|
// allocate strmat and advance pointer
|
||||||
|
void assign_and_advance_blasfeo_dmat_mem(int m, int n, struct blasfeo_dmat *sA, char **ptr);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_MEM_H_
|
||||||
110
third_party/acados/include/acados/utils/print.h
vendored
Normal file
110
third_party/acados/include/acados/utils/print.h
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_PRINT_H_
|
||||||
|
#define ACADOS_UTILS_PRINT_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_common.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common_frontend.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
// void print_matrix(char *file_name, const real_t *matrix, const int_t nrows, const int_t ncols);
|
||||||
|
|
||||||
|
// void print_matrix_name(char *file_name, char *name, const real_t *matrix, const int_t nrows,
|
||||||
|
// const int_t ncols);
|
||||||
|
|
||||||
|
// void print_int_matrix(char *file_name, const int_t *matrix, const int_t nrows, const int_t ncols);
|
||||||
|
|
||||||
|
// void print_array(char *file_name, real_t *array, int_t size);
|
||||||
|
|
||||||
|
// void print_int_array(char *file_name, const int_t *array, int_t size);
|
||||||
|
|
||||||
|
void read_matrix(const char *file_name, real_t *array, const int_t nrows, const int_t ncols);
|
||||||
|
|
||||||
|
void write_double_vector_to_txt(real_t *vec, int_t n, const char *fname);
|
||||||
|
|
||||||
|
// ocp nlp
|
||||||
|
// TODO(andrea): inconsistent naming
|
||||||
|
void ocp_nlp_dims_print(ocp_nlp_dims *dims);
|
||||||
|
// TODO(andrea): inconsistent naming
|
||||||
|
void ocp_nlp_out_print(ocp_nlp_dims *dims, ocp_nlp_out *nlp_out);
|
||||||
|
// TODO(andrea): inconsistent naming
|
||||||
|
void ocp_nlp_res_print(ocp_nlp_dims *dims, ocp_nlp_res *nlp_res);
|
||||||
|
|
||||||
|
// ocp qp
|
||||||
|
// TODO: move printing routines below that print qp structures to HPIPM!
|
||||||
|
void print_ocp_qp_dims(ocp_qp_dims *dims);
|
||||||
|
|
||||||
|
// void print_dense_qp_dims(dense_qp_dims *dims);
|
||||||
|
|
||||||
|
void print_ocp_qp_in(ocp_qp_in *qp_in);
|
||||||
|
|
||||||
|
void print_ocp_qp_in_to_file(FILE *file, ocp_qp_in *qp_in);
|
||||||
|
|
||||||
|
void print_ocp_qp_out(ocp_qp_out *qp_out);
|
||||||
|
|
||||||
|
void print_ocp_qp_out_to_file(FILE *file, ocp_qp_out *qp_out);
|
||||||
|
|
||||||
|
void print_ocp_qp_res(ocp_qp_res *qp_res);
|
||||||
|
|
||||||
|
void print_dense_qp_in(dense_qp_in *qp_in);
|
||||||
|
// void print_ocp_qp_in_to_string(char string_out[], ocp_qp_in *qp_in);
|
||||||
|
|
||||||
|
// void print_ocp_qp_out_to_string(char string_out[], ocp_qp_out *qp_out);
|
||||||
|
|
||||||
|
// void print_colmaj_ocp_qp_in(colmaj_ocp_qp_in *qp);
|
||||||
|
|
||||||
|
// void print_colmaj_ocp_qp_in_to_file(colmaj_ocp_qp_in *qp);
|
||||||
|
|
||||||
|
// void print_colmaj_ocp_qp_out(char *filename, colmaj_ocp_qp_in *qp, colmaj_ocp_qp_out *out);
|
||||||
|
|
||||||
|
void print_qp_info(qp_info *info);
|
||||||
|
|
||||||
|
// void acados_warning(char warning_string[]);
|
||||||
|
|
||||||
|
// void acados_error(char error_string[]);
|
||||||
|
|
||||||
|
// void acados_not_implemented(char feature_string[]);
|
||||||
|
|
||||||
|
// blasfeo
|
||||||
|
// void print_blasfeo_target();
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_PRINT_H_
|
||||||
69
third_party/acados/include/acados/utils/strsep.h
vendored
Normal file
69
third_party/acados/include/acados/utils/strsep.h
vendored
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_STRSEP_H_
|
||||||
|
#define ACADOS_UTILS_STRSEP_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
#include <string>
|
||||||
|
#define STD(x) std::x
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
#include <string.h>
|
||||||
|
#define STD(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
char* strsep_acados(char** stringp, const char* delim)
|
||||||
|
{
|
||||||
|
char* result;
|
||||||
|
|
||||||
|
if ((stringp == NULL) || (*stringp == NULL)) return NULL;
|
||||||
|
|
||||||
|
result = *stringp;
|
||||||
|
|
||||||
|
while (**stringp && !STD(strchr)(delim, **stringp)) ++*stringp;
|
||||||
|
|
||||||
|
if (**stringp)
|
||||||
|
*(*stringp)++ = '\0';
|
||||||
|
else
|
||||||
|
*stringp = NULL;
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} // namespace std
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef STD
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_STRSEP_H_
|
||||||
122
third_party/acados/include/acados/utils/timing.h
vendored
Normal file
122
third_party/acados/include/acados/utils/timing.h
vendored
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_TIMING_H_
|
||||||
|
#define ACADOS_UTILS_TIMING_H_
|
||||||
|
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef MEASURE_TIMINGS
|
||||||
|
#if (defined _WIN32 || defined _WIN64) && !(defined __MINGW32__ || defined __MINGW64__)
|
||||||
|
|
||||||
|
/* Use Windows QueryPerformanceCounter for timing. */
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
/** A structure for keeping internal timer data. */
|
||||||
|
typedef struct acados_timer_
|
||||||
|
{
|
||||||
|
LARGE_INTEGER tic;
|
||||||
|
LARGE_INTEGER toc;
|
||||||
|
LARGE_INTEGER freq;
|
||||||
|
} acados_timer;
|
||||||
|
|
||||||
|
#elif defined(__APPLE__)
|
||||||
|
|
||||||
|
#include <mach/mach_time.h>
|
||||||
|
|
||||||
|
/** A structure for keeping internal timer data. */
|
||||||
|
typedef struct acados_timer_
|
||||||
|
{
|
||||||
|
uint64_t tic;
|
||||||
|
uint64_t toc;
|
||||||
|
mach_timebase_info_data_t tinfo;
|
||||||
|
} acados_timer;
|
||||||
|
|
||||||
|
#elif defined(__MABX2__)
|
||||||
|
|
||||||
|
#include <brtenv.h>
|
||||||
|
|
||||||
|
typedef struct acados_timer_
|
||||||
|
{
|
||||||
|
double time;
|
||||||
|
} acados_timer;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
/* Use POSIX clock_gettime() for timing on non-Windows machines. */
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
|
#if (__STDC_VERSION__ >= 199901L) && !(defined __MINGW32__ || defined __MINGW64__) // C99 Mode
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
typedef struct acados_timer_
|
||||||
|
{
|
||||||
|
struct timeval tic;
|
||||||
|
struct timeval toc;
|
||||||
|
} acados_timer;
|
||||||
|
|
||||||
|
#else // ANSI C Mode
|
||||||
|
|
||||||
|
/** A structure for keeping internal timer data. */
|
||||||
|
typedef struct acados_timer_
|
||||||
|
{
|
||||||
|
struct timespec tic;
|
||||||
|
struct timespec toc;
|
||||||
|
} acados_timer;
|
||||||
|
|
||||||
|
#endif // __STDC_VERSION__ >= 199901L
|
||||||
|
|
||||||
|
#endif // (defined _WIN32 || defined _WIN64)
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
// Dummy type when timings are off
|
||||||
|
typedef real_t acados_timer;
|
||||||
|
|
||||||
|
#endif // MEASURE_TIMINGS
|
||||||
|
|
||||||
|
/** A function for measurement of the current time. */
|
||||||
|
void acados_tic(acados_timer* t);
|
||||||
|
|
||||||
|
/** A function which returns the elapsed time. */
|
||||||
|
real_t acados_toc(acados_timer* t);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_TIMING_H_
|
||||||
91
third_party/acados/include/acados/utils/types.h
vendored
Normal file
91
third_party/acados/include/acados/utils/types.h
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef ACADOS_UTILS_TYPES_H_
|
||||||
|
#define ACADOS_UTILS_TYPES_H_
|
||||||
|
|
||||||
|
/* Symbol visibility in DLLs */
|
||||||
|
#ifndef ACADOS_SYMBOL_EXPORT
|
||||||
|
#if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
|
||||||
|
#if defined(STATIC_LINKED)
|
||||||
|
#define ACADOS_SYMBOL_EXPORT
|
||||||
|
#else
|
||||||
|
#define ACADOS_SYMBOL_EXPORT __declspec(dllexport)
|
||||||
|
#endif
|
||||||
|
#elif defined(__GNUC__) && ((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
|
||||||
|
#define ACADOS_SYMBOL_EXPORT __attribute__ ((visibility ("default")))
|
||||||
|
#else
|
||||||
|
#define ACADOS_SYMBOL_EXPORT
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
#define MAX_STR_LEN 256
|
||||||
|
#define ACADOS_EPS 1e-12
|
||||||
|
#define ACADOS_NEG_INFTY -1.0e9
|
||||||
|
#define ACADOS_POS_INFTY +1.0e9
|
||||||
|
#define UNUSED(x) ((void)(x))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef double real_t;
|
||||||
|
typedef int int_t;
|
||||||
|
typedef size_t acados_size_t;
|
||||||
|
|
||||||
|
|
||||||
|
typedef int (*casadi_function_t)(const double** arg, double** res, int* iw, double* w, void* mem);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// enum of return values
|
||||||
|
enum return_values
|
||||||
|
{
|
||||||
|
ACADOS_SUCCESS,
|
||||||
|
ACADOS_NAN_DETECTED,
|
||||||
|
ACADOS_MAXITER,
|
||||||
|
ACADOS_MINSTEP,
|
||||||
|
ACADOS_QP_FAILURE,
|
||||||
|
ACADOS_READY,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // ACADOS_UTILS_TYPES_H_
|
||||||
81
third_party/acados/include/acados_c/condensing_interface.h
vendored
Normal file
81
third_party/acados/include/acados_c/condensing_interface.h
vendored
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef INTERFACES_ACADOS_C_CONDENSING_INTERFACE_H_
|
||||||
|
#define INTERFACES_ACADOS_C_CONDENSING_INTERFACE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_full_condensing.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_partial_condensing.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
PARTIAL_CONDENSING,
|
||||||
|
FULL_CONDENSING,
|
||||||
|
} condensing_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
condensing_t condensing_type;
|
||||||
|
} condensing_plan;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_qp_xcond_config *config;
|
||||||
|
void *dims;
|
||||||
|
void *opts;
|
||||||
|
void *mem;
|
||||||
|
void *work;
|
||||||
|
} condensing_module;
|
||||||
|
|
||||||
|
ocp_qp_xcond_config *ocp_qp_condensing_config_create(condensing_plan *plan);
|
||||||
|
//
|
||||||
|
void *ocp_qp_condensing_opts_create(ocp_qp_xcond_config *config, void *dims_);
|
||||||
|
//
|
||||||
|
acados_size_t ocp_qp_condensing_calculate_size(ocp_qp_xcond_config *config, void *dims_, void *opts_);
|
||||||
|
//
|
||||||
|
condensing_module *ocp_qp_condensing_assign(ocp_qp_xcond_config *config, void *dims_,
|
||||||
|
void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
condensing_module *ocp_qp_condensing_create(ocp_qp_xcond_config *config, void *dims_,
|
||||||
|
void *opts_);
|
||||||
|
//
|
||||||
|
int ocp_qp_condense(condensing_module *module, void *qp_in, void *qp_out);
|
||||||
|
//
|
||||||
|
int ocp_qp_expand(condensing_module *module, void *qp_in, void *qp_out);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // INTERFACES_ACADOS_C_CONDENSING_INTERFACE_H_
|
||||||
91
third_party/acados/include/acados_c/dense_qp_interface.h
vendored
Normal file
91
third_party/acados/include/acados_c/dense_qp_interface.h
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef INTERFACES_ACADOS_C_DENSE_QP_INTERFACE_H_
|
||||||
|
#define INTERFACES_ACADOS_C_DENSE_QP_INTERFACE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/dense_qp/dense_qp_common.h"
|
||||||
|
|
||||||
|
typedef enum { DENSE_QP_HPIPM, DENSE_QP_QORE, DENSE_QP_QPOASES, DENSE_QP_OOQP, DENSE_QP_DAQP } dense_qp_solver_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
dense_qp_solver_t qp_solver;
|
||||||
|
} dense_qp_solver_plan;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
qp_solver_config *config;
|
||||||
|
void *dims;
|
||||||
|
void *opts;
|
||||||
|
void *mem;
|
||||||
|
void *work;
|
||||||
|
} dense_qp_solver;
|
||||||
|
|
||||||
|
qp_solver_config *dense_qp_config_create(dense_qp_solver_plan *plan);
|
||||||
|
//
|
||||||
|
dense_qp_dims *dense_qp_dims_create();
|
||||||
|
//
|
||||||
|
dense_qp_in *dense_qp_in_create(qp_solver_config *config, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
dense_qp_out *dense_qp_out_create(qp_solver_config *config, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void *dense_qp_opts_create(qp_solver_config *config, dense_qp_dims *dims);
|
||||||
|
//
|
||||||
|
acados_size_t dense_qp_calculate_size(qp_solver_config *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
dense_qp_solver *dense_qp_assign(qp_solver_config *config, dense_qp_dims *dims, void *opts_,
|
||||||
|
void *raw_memory);
|
||||||
|
//
|
||||||
|
dense_qp_solver *dense_qp_create(qp_solver_config *config, dense_qp_dims *dims, void *opts_);
|
||||||
|
//
|
||||||
|
int dense_qp_solve(dense_qp_solver *solver, dense_qp_in *qp_in, dense_qp_out *qp_out);
|
||||||
|
//
|
||||||
|
void dense_qp_inf_norm_residuals(dense_qp_dims *dims, dense_qp_in *qp_in, dense_qp_out *qp_out,
|
||||||
|
double *res);
|
||||||
|
//
|
||||||
|
bool dense_qp_set_field_double_array(const char *field, double *arr, dense_qp_in *qp_in);
|
||||||
|
//
|
||||||
|
bool dense_qp_set_field_int_array(const char *field, int *arr, dense_qp_in *qp_in);
|
||||||
|
//
|
||||||
|
bool dense_qp_get_field_double_array(const char *field, dense_qp_in *qp_in, double *arr);
|
||||||
|
//
|
||||||
|
bool dense_qp_get_field_int_array(const char *field, dense_qp_in *qp_in, int *arr);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // INTERFACES_ACADOS_C_DENSE_QP_INTERFACE_H_
|
||||||
89
third_party/acados/include/acados_c/external_function_interface.h
vendored
Normal file
89
third_party/acados/include/acados_c/external_function_interface.h
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef INTERFACES_ACADOS_C_EXTERNAL_FUNCTION_INTERFACE_H_
|
||||||
|
#define INTERFACES_ACADOS_C_EXTERNAL_FUNCTION_INTERFACE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/utils/external_function_generic.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* generic external parametric function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void external_function_param_generic_create(external_function_param_generic *fun, int np);
|
||||||
|
//
|
||||||
|
void external_function_param_generic_free(external_function_param_generic *fun);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* casadi external function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void external_function_casadi_create(external_function_casadi *fun);
|
||||||
|
//
|
||||||
|
void external_function_casadi_free(external_function_casadi *fun);
|
||||||
|
//
|
||||||
|
void external_function_casadi_create_array(int size, external_function_casadi *funs);
|
||||||
|
//
|
||||||
|
void external_function_casadi_free_array(int size, external_function_casadi *funs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* casadi external parametric function
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_create(external_function_param_casadi *fun, int np);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_free(external_function_param_casadi *fun);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_create_array(int size, external_function_param_casadi *funs,
|
||||||
|
int np);
|
||||||
|
//
|
||||||
|
void external_function_param_casadi_free_array(int size, external_function_param_casadi *funs);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // INTERFACES_ACADOS_C_EXTERNAL_FUNCTION_INTERFACE_H_
|
||||||
428
third_party/acados/include/acados_c/ocp_nlp_interface.h
vendored
Normal file
428
third_party/acados/include/acados_c/ocp_nlp_interface.h
vendored
Normal file
@@ -0,0 +1,428 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef INTERFACES_ACADOS_C_OCP_NLP_INTERFACE_H_
|
||||||
|
#define INTERFACES_ACADOS_C_OCP_NLP_INTERFACE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// acados
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_common.h"
|
||||||
|
#include "acados/ocp_nlp/ocp_nlp_constraints_bgh.h"
|
||||||
|
#include "acados/sim/sim_erk_integrator.h"
|
||||||
|
#include "acados/sim/sim_irk_integrator.h"
|
||||||
|
#include "acados/sim/sim_lifted_irk_integrator.h"
|
||||||
|
#include "acados/sim/sim_gnsf.h"
|
||||||
|
#include "acados/utils/types.h"
|
||||||
|
// acados_c
|
||||||
|
#include "acados_c/ocp_qp_interface.h"
|
||||||
|
#include "acados_c/sim_interface.h"
|
||||||
|
|
||||||
|
|
||||||
|
/// Solution methods for optimal control problems.
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
SQP,
|
||||||
|
SQP_RTI,
|
||||||
|
INVALID_NLP_SOLVER,
|
||||||
|
} ocp_nlp_solver_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Types of the cost function.
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
LINEAR_LS,
|
||||||
|
NONLINEAR_LS,
|
||||||
|
CONVEX_OVER_NONLINEAR,
|
||||||
|
EXTERNAL,
|
||||||
|
INVALID_COST,
|
||||||
|
} ocp_nlp_cost_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Types of the system dynamics, discrete or continuous time.
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
CONTINUOUS_MODEL,
|
||||||
|
DISCRETE_MODEL,
|
||||||
|
INVALID_DYNAMICS,
|
||||||
|
} ocp_nlp_dynamics_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Constraint types
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
/// Comprises simple bounds, polytopic constraints,
|
||||||
|
/// general non-linear constraints.
|
||||||
|
BGH,
|
||||||
|
|
||||||
|
/// Comprises simple bounds, polytopic constraints,
|
||||||
|
/// general non-linear constraints, and positive definite constraints.
|
||||||
|
BGP,
|
||||||
|
|
||||||
|
INVALID_CONSTRAINT,
|
||||||
|
} ocp_nlp_constraints_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Regularization types
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
NO_REGULARIZE,
|
||||||
|
MIRROR,
|
||||||
|
PROJECT,
|
||||||
|
PROJECT_REDUC_HESS,
|
||||||
|
CONVEXIFY,
|
||||||
|
INVALID_REGULARIZE,
|
||||||
|
} ocp_nlp_reg_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Structure to store the configuration of a non-linear program
|
||||||
|
typedef struct ocp_nlp_plan_t
|
||||||
|
{
|
||||||
|
/// QP solver configuration.
|
||||||
|
ocp_qp_solver_plan_t ocp_qp_solver_plan;
|
||||||
|
|
||||||
|
/// Simulation solver configuration for each stage.
|
||||||
|
sim_solver_plan_t *sim_solver_plan;
|
||||||
|
|
||||||
|
/// Nlp solver type.
|
||||||
|
ocp_nlp_solver_t nlp_solver;
|
||||||
|
|
||||||
|
/// Regularization type, defaults to no regularization.
|
||||||
|
ocp_nlp_reg_t regularization;
|
||||||
|
|
||||||
|
/// Cost type for each stage.
|
||||||
|
ocp_nlp_cost_t *nlp_cost;
|
||||||
|
|
||||||
|
/// Dynamics type for each stage.
|
||||||
|
ocp_nlp_dynamics_t *nlp_dynamics;
|
||||||
|
|
||||||
|
/// Constraints type for each stage.
|
||||||
|
ocp_nlp_constraints_t *nlp_constraints;
|
||||||
|
|
||||||
|
/// Horizon length.
|
||||||
|
int N;
|
||||||
|
|
||||||
|
} ocp_nlp_plan_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Structure to store the state/configuration for the non-linear programming solver
|
||||||
|
typedef struct ocp_nlp_solver
|
||||||
|
{
|
||||||
|
ocp_nlp_config *config;
|
||||||
|
void *dims;
|
||||||
|
void *opts;
|
||||||
|
void *mem;
|
||||||
|
void *work;
|
||||||
|
} ocp_nlp_solver;
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an empty plan struct (user nlp configuration), all fields are set to a
|
||||||
|
/// default/invalid state.
|
||||||
|
///
|
||||||
|
/// \param N Horizon length
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_plan_t *ocp_nlp_plan_create(int N);
|
||||||
|
|
||||||
|
/// Destructor for plan struct, frees memory.
|
||||||
|
///
|
||||||
|
/// \param plan_ The plan struct to destroy.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_plan_destroy(void* plan_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an nlp configuration struct from a plan.
|
||||||
|
///
|
||||||
|
/// \param plan The plan (user nlp configuration).
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_config *ocp_nlp_config_create(ocp_nlp_plan_t plan);
|
||||||
|
|
||||||
|
/// Desctructor of the nlp configuration.
|
||||||
|
///
|
||||||
|
/// \param config_ The configuration struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_config_destroy(void *config_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an struct that contains the dimensions of the variables.
|
||||||
|
///
|
||||||
|
/// \param config_ The configuration struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_dims *ocp_nlp_dims_create(void *config_);
|
||||||
|
|
||||||
|
/// Destructor of The dimension struct.
|
||||||
|
///
|
||||||
|
/// \param dims_ The dimension struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_dims_destroy(void *dims_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an input struct for a non-linear programs.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_in *ocp_nlp_in_create(ocp_nlp_config *config, ocp_nlp_dims *dims);
|
||||||
|
|
||||||
|
/// Destructor of the inputs struct.
|
||||||
|
///
|
||||||
|
/// \param in The inputs struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_in_destroy(void *in);
|
||||||
|
|
||||||
|
|
||||||
|
/// Sets the sampling times for the given stage.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param in The inputs struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field Has to be "Ts" (TBC other options).
|
||||||
|
/// \param value The sampling times (floating point).
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_in_set(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in, int stage,
|
||||||
|
const char *field, void *value);
|
||||||
|
|
||||||
|
///
|
||||||
|
// void ocp_nlp_in_get(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in, int stage,
|
||||||
|
// const char *field, void *value);
|
||||||
|
|
||||||
|
/// Sets the function pointers to the dynamics functions for the given stage.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param in The inputs struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param fun_type The name of the function type, either impl_ode_fun,
|
||||||
|
/// impl_ode_fun_jac_x_xdot, impl_ode_jac_x_xdot_u (TBC)
|
||||||
|
/// \param fun_ptr Function pointer to the dynamics function.
|
||||||
|
ACADOS_SYMBOL_EXPORT int ocp_nlp_dynamics_model_set(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
int stage, const char *fun_type, void *fun_ptr);
|
||||||
|
|
||||||
|
|
||||||
|
/// Sets the function pointers to the cost functions for the given stage.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param in The inputs struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field The name of the field, either nls_res_jac,
|
||||||
|
/// y_ref, W (others TBC)
|
||||||
|
/// \param value Cost values.
|
||||||
|
ACADOS_SYMBOL_EXPORT int ocp_nlp_cost_model_set(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_in *in,
|
||||||
|
int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
/// Sets the function pointers to the constraints functions for the given stage.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param in The inputs struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field The name of the field, either lb, ub (others TBC)
|
||||||
|
/// \param value Constraints function or values.
|
||||||
|
ACADOS_SYMBOL_EXPORT int ocp_nlp_constraints_model_set(ocp_nlp_config *config, ocp_nlp_dims *dims,
|
||||||
|
ocp_nlp_in *in, int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
///
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_constraints_model_get(ocp_nlp_config *config, ocp_nlp_dims *dims,
|
||||||
|
ocp_nlp_in *in, int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
/* out */
|
||||||
|
|
||||||
|
/// Constructs an output struct for the non-linear program.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_out *ocp_nlp_out_create(ocp_nlp_config *config, ocp_nlp_dims *dims);
|
||||||
|
|
||||||
|
/// Destructor of the output struct.
|
||||||
|
///
|
||||||
|
/// \param out The output struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_out_destroy(void *out);
|
||||||
|
|
||||||
|
|
||||||
|
/// Sets fields in the output struct of an nlp solver, used to initialize the solver.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param out The output struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field The name of the field, either x, u, pi.
|
||||||
|
/// \param value Initialization values.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_out_set(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_out *out,
|
||||||
|
int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
/// Gets values of fields in the output struct of an nlp solver.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param out The output struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field The name of the field, either x, u, z, pi.
|
||||||
|
/// \param value Pointer to the output memory.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_out_get(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_out *out,
|
||||||
|
int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_get_at_stage(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_solver *solver,
|
||||||
|
int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
// TODO(andrea): remove this once/if the MATLAB interface uses the new setters below?
|
||||||
|
ACADOS_SYMBOL_EXPORT int ocp_nlp_dims_get_from_attr(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_out *out,
|
||||||
|
int stage, const char *field);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_constraint_dims_get_from_attr(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_out *out,
|
||||||
|
int stage, const char *field, int *dims_out);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_cost_dims_get_from_attr(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_out *out,
|
||||||
|
int stage, const char *field, int *dims_out);
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_qp_dims_get_from_attr(ocp_nlp_config *config, ocp_nlp_dims *dims, ocp_nlp_out *out,
|
||||||
|
int stage, const char *field, int *dims_out);
|
||||||
|
|
||||||
|
/* opts */
|
||||||
|
|
||||||
|
/// Creates an options struct for the non-linear program.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void *ocp_nlp_solver_opts_create(ocp_nlp_config *config, ocp_nlp_dims *dims);
|
||||||
|
|
||||||
|
/// Destructor of the options.
|
||||||
|
///
|
||||||
|
/// \param opts The options struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_opts_destroy(void *opts);
|
||||||
|
|
||||||
|
/// Sets an option.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param opts_ The options struct.
|
||||||
|
/// \param field Name of the option.
|
||||||
|
/// \param value Value of the option.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_opts_set(ocp_nlp_config *config, void *opts_, const char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
// ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_opts_get(ocp_nlp_config *config, void *opts_, const char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_opts_set_at_stage(ocp_nlp_config *config, void *opts_, int stage, const char *field, void* value);
|
||||||
|
|
||||||
|
|
||||||
|
/// TBC
|
||||||
|
/// Updates the options.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param opts_ The options struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_opts_update(ocp_nlp_config *config, ocp_nlp_dims *dims, void *opts_);
|
||||||
|
|
||||||
|
|
||||||
|
/* solver */
|
||||||
|
|
||||||
|
/// Creates an ocp solver.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param opts_ The options struct.
|
||||||
|
/// \return The solver.
|
||||||
|
ACADOS_SYMBOL_EXPORT ocp_nlp_solver *ocp_nlp_solver_create(ocp_nlp_config *config, ocp_nlp_dims *dims, void *opts_);
|
||||||
|
|
||||||
|
/// Destructor of the solver.
|
||||||
|
///
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_destroy(void *solver);
|
||||||
|
|
||||||
|
/// Solves the optimal control problem. Call ocp_nlp_precompute before
|
||||||
|
/// calling this functions (TBC).
|
||||||
|
///
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
/// \param nlp_in The inputs struct.
|
||||||
|
/// \param nlp_out The output struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT int ocp_nlp_solve(ocp_nlp_solver *solver, ocp_nlp_in *nlp_in, ocp_nlp_out *nlp_out);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// Resets the memory of the QP solver
|
||||||
|
///
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
/// \param nlp_in The inputs struct.
|
||||||
|
/// \param nlp_out The output struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_solver_reset_qp_memory(ocp_nlp_solver *solver, ocp_nlp_in *nlp_in, ocp_nlp_out *nlp_out);
|
||||||
|
|
||||||
|
|
||||||
|
/// Performs precomputations for the solver. Needs to be called before
|
||||||
|
/// ocl_nlp_solve (TBC).
|
||||||
|
///
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
/// \param nlp_in The inputs struct.
|
||||||
|
/// \param nlp_out The output struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT int ocp_nlp_precompute(ocp_nlp_solver *solver, ocp_nlp_in *nlp_in, ocp_nlp_out *nlp_out);
|
||||||
|
|
||||||
|
|
||||||
|
/// Computes cost function value.
|
||||||
|
///
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
/// \param nlp_in The inputs struct.
|
||||||
|
/// \param nlp_out The output struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_eval_cost(ocp_nlp_solver *solver, ocp_nlp_in *nlp_in, ocp_nlp_out *nlp_out);
|
||||||
|
|
||||||
|
|
||||||
|
/// Computes the residuals.
|
||||||
|
///
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
/// \param nlp_in The inputs struct.
|
||||||
|
/// \param nlp_out The output struct.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_eval_residuals(ocp_nlp_solver *solver, ocp_nlp_in *nlp_in, ocp_nlp_out *nlp_out);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_eval_param_sens(ocp_nlp_solver *solver, char *field, int stage, int index, ocp_nlp_out *sens_nlp_out);
|
||||||
|
|
||||||
|
/* get */
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param solver The solver struct.
|
||||||
|
/// \param field Supports "sqp_iter", "status", "nlp_res", "time_tot", ...
|
||||||
|
/// \param return_value_ Pointer to the output memory.
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_get(ocp_nlp_config *config, ocp_nlp_solver *solver,
|
||||||
|
const char *field, void *return_value_);
|
||||||
|
|
||||||
|
/* set */
|
||||||
|
/// Sets the initial guesses for the integrator for the given stage.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param solver The ocp_nlp_solver struct.
|
||||||
|
/// \param stage Stage number.
|
||||||
|
/// \param field Supports "z_guess", "xdot_guess" (IRK), "phi_guess" (GNSF-IRK)
|
||||||
|
/// \param value The initial guess for the algebraic variables in the integrator (if continuous model is used).
|
||||||
|
ACADOS_SYMBOL_EXPORT void ocp_nlp_set(ocp_nlp_config *config, ocp_nlp_solver *solver,
|
||||||
|
int stage, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // INTERFACES_ACADOS_C_OCP_NLP_INTERFACE_H_
|
||||||
263
third_party/acados/include/acados_c/ocp_qp_interface.h
vendored
Normal file
263
third_party/acados/include/acados_c/ocp_qp_interface.h
vendored
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef INTERFACES_ACADOS_C_OCP_QP_INTERFACE_H_
|
||||||
|
#define INTERFACES_ACADOS_C_OCP_QP_INTERFACE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/ocp_qp/ocp_qp_common.h"
|
||||||
|
#include "acados/ocp_qp/ocp_qp_xcond_solver.h"
|
||||||
|
|
||||||
|
|
||||||
|
/// QP solver types (Enumeration).
|
||||||
|
///
|
||||||
|
/// Full list of fields:
|
||||||
|
/// PARTIAL_CONDENSING_HPIPM
|
||||||
|
/// PARTIAL_CONDENSING_HPMPC
|
||||||
|
/// PARTIAL_CONDENSING_OOQP
|
||||||
|
/// PARTIAL_CONDENSING_OSQP
|
||||||
|
/// PARTIAL_CONDENSING_QPDUNES
|
||||||
|
/// FULL_CONDENSING_HPIPM
|
||||||
|
/// FULL_CONDENSING_QPOASES
|
||||||
|
/// FULL_CONDENSING_QORE
|
||||||
|
/// FULL_CONDENSING_OOQP
|
||||||
|
/// INVALID_QP_SOLVER
|
||||||
|
///
|
||||||
|
/// Note: In this enumeration the partial condensing solvers have to be
|
||||||
|
/// specified before the full condensing solvers.
|
||||||
|
typedef enum {
|
||||||
|
PARTIAL_CONDENSING_HPIPM,
|
||||||
|
#ifdef ACADOS_WITH_HPMPC
|
||||||
|
PARTIAL_CONDENSING_HPMPC,
|
||||||
|
#else
|
||||||
|
PARTIAL_CONDENSING_HPMPC_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
#ifdef ACADOS_WITH_OOQP
|
||||||
|
PARTIAL_CONDENSING_OOQP,
|
||||||
|
#else
|
||||||
|
PARTIAL_CONDENSING_OOQP_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
#ifdef ACADOS_WITH_OSQP
|
||||||
|
PARTIAL_CONDENSING_OSQP,
|
||||||
|
#else
|
||||||
|
PARTIAL_CONDENSING_OSQP_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
#ifdef ACADOS_WITH_QPDUNES
|
||||||
|
PARTIAL_CONDENSING_QPDUNES,
|
||||||
|
#else
|
||||||
|
PARTIAL_CONDENSING_QPDUNES_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
FULL_CONDENSING_HPIPM,
|
||||||
|
#ifdef ACADOS_WITH_QPOASES
|
||||||
|
FULL_CONDENSING_QPOASES,
|
||||||
|
#else
|
||||||
|
FULL_CONDENSING_QPOASES_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
#ifdef ACADOS_WITH_DAQP
|
||||||
|
FULL_CONDENSING_DAQP,
|
||||||
|
#else
|
||||||
|
FULL_CONDENSING_DAQP_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
#ifdef ACADOS_WITH_QORE
|
||||||
|
FULL_CONDENSING_QORE,
|
||||||
|
#else
|
||||||
|
FULL_CONDENSING_QORE_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
#ifdef ACADOS_WITH_OOQP
|
||||||
|
FULL_CONDENSING_OOQP,
|
||||||
|
#else
|
||||||
|
FULL_CONDENSING_OOQP_NOT_AVAILABLE,
|
||||||
|
#endif
|
||||||
|
INVALID_QP_SOLVER,
|
||||||
|
} ocp_qp_solver_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Struct containing qp solver
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_qp_solver_t qp_solver;
|
||||||
|
} ocp_qp_solver_plan_t;
|
||||||
|
|
||||||
|
|
||||||
|
/// Linear ocp configuration.
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
ocp_qp_xcond_solver_config *config;
|
||||||
|
ocp_qp_xcond_solver_dims *dims;
|
||||||
|
void *opts;
|
||||||
|
void *mem;
|
||||||
|
void *work;
|
||||||
|
} ocp_qp_solver;
|
||||||
|
|
||||||
|
|
||||||
|
/// Initializes the qp solver configuration.
|
||||||
|
/// TBC should this be private/static - no, used in ocp_nlp
|
||||||
|
void ocp_qp_xcond_solver_config_initialize_from_plan(
|
||||||
|
ocp_qp_solver_t solver_name, ocp_qp_xcond_solver_config *solver_config);
|
||||||
|
|
||||||
|
/// Constructs a qp solver config and Initializes with default values.
|
||||||
|
///
|
||||||
|
/// \param plan The qp solver plan struct.
|
||||||
|
ocp_qp_xcond_solver_config *ocp_qp_xcond_solver_config_create(ocp_qp_solver_plan_t plan);
|
||||||
|
|
||||||
|
/// Destructor for config struct, frees memory.
|
||||||
|
///
|
||||||
|
/// \param config The config object to destroy.
|
||||||
|
void ocp_qp_xcond_solver_config_free(ocp_qp_xcond_solver_config *config);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs a struct that contains the dimensions for the variables of the qp.
|
||||||
|
///
|
||||||
|
/// \param N The number of variables.
|
||||||
|
ocp_qp_dims *ocp_qp_dims_create(int N);
|
||||||
|
|
||||||
|
/// Destructor of The dimension struct.
|
||||||
|
///
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
void ocp_qp_dims_free(void *dims);
|
||||||
|
|
||||||
|
//
|
||||||
|
ocp_qp_xcond_solver_dims *ocp_qp_xcond_solver_dims_create(ocp_qp_xcond_solver_config *config, int N);
|
||||||
|
//
|
||||||
|
ocp_qp_xcond_solver_dims *ocp_qp_xcond_solver_dims_create_from_ocp_qp_dims(
|
||||||
|
ocp_qp_xcond_solver_config *config, ocp_qp_dims *dims);
|
||||||
|
//
|
||||||
|
void ocp_qp_xcond_solver_dims_free(ocp_qp_xcond_solver_dims *dims_);
|
||||||
|
|
||||||
|
void ocp_qp_xcond_solver_dims_set(void *config_, ocp_qp_xcond_solver_dims *dims,
|
||||||
|
int stage, const char *field, int* value);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an input object for the qp.
|
||||||
|
///
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
ocp_qp_in *ocp_qp_in_create(ocp_qp_dims *dims);
|
||||||
|
|
||||||
|
|
||||||
|
void ocp_qp_in_set(ocp_qp_xcond_solver_config *config, ocp_qp_in *in,
|
||||||
|
int stage, char *field, void *value);
|
||||||
|
|
||||||
|
/// Destructor of the inputs struct.
|
||||||
|
///
|
||||||
|
/// \param in_ The inputs struct.
|
||||||
|
void ocp_qp_in_free(void *in_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an outputs object for the qp.
|
||||||
|
///
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
ocp_qp_out *ocp_qp_out_create(ocp_qp_dims *dims);
|
||||||
|
|
||||||
|
/// Destructor of the output struct.
|
||||||
|
///
|
||||||
|
/// \param out_ The output struct.
|
||||||
|
void ocp_qp_out_free(void *out_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Getter of output struct
|
||||||
|
void ocp_qp_out_get(ocp_qp_out *out, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
/// Constructs an options object for the qp.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
void *ocp_qp_xcond_solver_opts_create(ocp_qp_xcond_solver_config *config,
|
||||||
|
ocp_qp_xcond_solver_dims *dims);
|
||||||
|
|
||||||
|
/// Destructor of the options struct.
|
||||||
|
///
|
||||||
|
/// \param opts The options struct to destroy.
|
||||||
|
void ocp_qp_xcond_solver_opts_free(ocp_qp_xcond_solver_opts *opts);
|
||||||
|
|
||||||
|
|
||||||
|
/// Setter of the options struct.
|
||||||
|
///
|
||||||
|
/// \param opts The options struct.
|
||||||
|
void ocp_qp_xcond_solver_opts_set(ocp_qp_xcond_solver_config *config,
|
||||||
|
ocp_qp_xcond_solver_opts *opts, const char *field, void* value);
|
||||||
|
|
||||||
|
/// TBC Should be private/static?
|
||||||
|
acados_size_t ocp_qp_calculate_size(ocp_qp_xcond_solver_config *config, ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
|
||||||
|
|
||||||
|
/// TBC Reserves memory? TBC Should this be private?
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param opts_ The options struct.
|
||||||
|
/// \param raw_memory Pointer to raw memory to assign to qp solver.
|
||||||
|
ocp_qp_solver *ocp_qp_assign(ocp_qp_xcond_solver_config *config, ocp_qp_xcond_solver_dims *dims,
|
||||||
|
void *opts_, void *raw_memory);
|
||||||
|
|
||||||
|
/// Creates a qp solver. Reserves memory.
|
||||||
|
///
|
||||||
|
/// \param config The configuration struct.
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param opts_ The options struct.
|
||||||
|
ocp_qp_solver *ocp_qp_create(ocp_qp_xcond_solver_config *config,
|
||||||
|
ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Destroys a qp solver. Frees memory.
|
||||||
|
///
|
||||||
|
/// \param solver The qp solver
|
||||||
|
void ocp_qp_solver_destroy(ocp_qp_solver *solver);
|
||||||
|
|
||||||
|
void ocp_qp_x_cond_solver_free(ocp_qp_xcond_solver_config *config,
|
||||||
|
ocp_qp_xcond_solver_dims *dims, void *opts_);
|
||||||
|
|
||||||
|
|
||||||
|
/// Solves the qp.
|
||||||
|
///
|
||||||
|
/// \param solver The solver.
|
||||||
|
/// \param qp_in The inputs struct.
|
||||||
|
/// \param qp_out The output struct.
|
||||||
|
int ocp_qp_solve(ocp_qp_solver *solver, ocp_qp_in *qp_in, ocp_qp_out *qp_out);
|
||||||
|
|
||||||
|
|
||||||
|
/// Calculates the infinity norm of the residuals.
|
||||||
|
///
|
||||||
|
/// \param dims The dimension struct.
|
||||||
|
/// \param qp_in The inputs struct.
|
||||||
|
/// \param qp_out The output struct.
|
||||||
|
/// \param res Output array for the residuals.
|
||||||
|
void ocp_qp_inf_norm_residuals(ocp_qp_dims *dims, ocp_qp_in *qp_in, ocp_qp_out *qp_out,
|
||||||
|
double *res);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // INTERFACES_ACADOS_C_OCP_QP_INTERFACE_H_
|
||||||
137
third_party/acados/include/acados_c/sim_interface.h
vendored
Normal file
137
third_party/acados/include/acados_c/sim_interface.h
vendored
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) The acados authors.
|
||||||
|
*
|
||||||
|
* This file is part of acados.
|
||||||
|
*
|
||||||
|
* The 2-Clause BSD License
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
*
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.;
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef INTERFACES_ACADOS_C_SIM_INTERFACE_H_
|
||||||
|
#define INTERFACES_ACADOS_C_SIM_INTERFACE_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "acados/sim/sim_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
ERK,
|
||||||
|
IRK,
|
||||||
|
GNSF,
|
||||||
|
LIFTED_IRK,
|
||||||
|
INVALID_SIM_SOLVER,
|
||||||
|
} sim_solver_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
sim_solver_t sim_solver;
|
||||||
|
} sim_solver_plan_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
sim_config *config;
|
||||||
|
void *dims;
|
||||||
|
void *opts;
|
||||||
|
void *mem;
|
||||||
|
void *work;
|
||||||
|
} sim_solver;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* config */
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_config *sim_config_create(sim_solver_plan_t plan);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_config_destroy(void *config);
|
||||||
|
|
||||||
|
/* dims */
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void *sim_dims_create(void *config_);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_dims_destroy(void *dims);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_dims_set(sim_config *config, void *dims, const char *field, const int* value);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_dims_get(sim_config *config, void *dims, const char *field, int* value);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_dims_get_from_attr(sim_config *config, void *dims, const char *field, int *dims_out);
|
||||||
|
|
||||||
|
/* in */
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_in *sim_in_create(sim_config *config, void *dims);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_in_destroy(void *out);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT int sim_in_set(void *config_, void *dims_, sim_in *in, const char *field, void *value);
|
||||||
|
|
||||||
|
|
||||||
|
/* out */
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_out *sim_out_create(sim_config *config, void *dims);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_out_destroy(void *out);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT int sim_out_get(void *config, void *dims, sim_out *out, const char *field, void *value);
|
||||||
|
|
||||||
|
/* opts */
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void *sim_opts_create(sim_config *config, void *dims);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_opts_destroy(void *opts);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_opts_set(sim_config *config, void *opts, const char *field, void *value);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_opts_get(sim_config *config, void *opts, const char *field, void *value);
|
||||||
|
|
||||||
|
/* solver */
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT acados_size_t sim_calculate_size(sim_config *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_solver *sim_assign(sim_config *config, void *dims, void *opts_, void *raw_memory);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT sim_solver *sim_solver_create(sim_config *config, void *dims, void *opts_);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT void sim_solver_destroy(void *solver);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT int sim_solve(sim_solver *solver, sim_in *in, sim_out *out);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT int sim_precompute(sim_solver *solver, sim_in *in, sim_out *out);
|
||||||
|
//
|
||||||
|
ACADOS_SYMBOL_EXPORT int sim_solver_set(sim_solver *solver, const char *field, void *value);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // INTERFACES_ACADOS_C_SIM_INTERFACE_H_
|
||||||
52
third_party/acados/include/blasfeo/include/blasfeo.h
vendored
Normal file
52
third_party/acados/include/blasfeo/include/blasfeo.h
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#include "blasfeo_processor_features.h"
|
||||||
|
#include "blasfeo_target.h"
|
||||||
|
#include "blasfeo_block_size.h"
|
||||||
|
#include "blasfeo_stdlib.h"
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
#include "blasfeo_d_aux.h"
|
||||||
|
#include "blasfeo_d_aux_ext_dep.h"
|
||||||
|
#include "blasfeo_d_kernel.h"
|
||||||
|
#include "blasfeo_d_blas.h"
|
||||||
|
#include "blasfeo_s_aux.h"
|
||||||
|
#include "blasfeo_s_aux_ext_dep.h"
|
||||||
|
#include "blasfeo_s_kernel.h"
|
||||||
|
#include "blasfeo_s_blas.h"
|
||||||
|
#include "blasfeo_i_aux_ext_dep.h"
|
||||||
|
#include "blasfeo_v_aux_ext_dep.h"
|
||||||
|
#include "blasfeo_timing.h"
|
||||||
|
#include "blasfeo_memory.h"
|
||||||
447
third_party/acados/include/blasfeo/include/blasfeo_block_size.h
vendored
Normal file
447
third_party/acados/include/blasfeo/include/blasfeo_block_size.h
vendored
Normal file
@@ -0,0 +1,447 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_BLOCK_SIZE_H_
|
||||||
|
#define BLASFEO_BLOCK_SIZE_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define D_EL_SIZE 8 // double precision
|
||||||
|
#define S_EL_SIZE 4 // single precision
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined( TARGET_X64_INTEL_SKYLAKE_X )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64 // data cache size: 64 bytes
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB, 8-way
|
||||||
|
#define L2_CACHE_SIZE (256*1024) //(1024*1024) // L2 data cache size: 1 MB ; DTLB1 64*4 kB = 256 kB
|
||||||
|
#define LLC_CACHE_SIZE (6*1024*1024) //(8*1024*1024) // LLC cache size: 8 MB ; TLB 1536*4 kB = 6 MB
|
||||||
|
// double
|
||||||
|
#define D_PS 8 // panel size
|
||||||
|
#define D_PLD 8 // 4 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 24 // max kernel size
|
||||||
|
#define D_N_KERNEL 8 // max kernel size
|
||||||
|
#define D_KC 128 //256 // 192
|
||||||
|
#define D_NC 144 //72 //96 //72 // 120 // 512
|
||||||
|
#define D_MC 2400 // 6000
|
||||||
|
// single
|
||||||
|
#define S_PS 16 // panel size
|
||||||
|
#define S_PLD 4 // GCD of panel length TODO probably 16 when writing assebly
|
||||||
|
#define S_M_KERNEL 32 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 128 //256
|
||||||
|
#define S_NC 128 //144
|
||||||
|
#define S_MC 3000
|
||||||
|
|
||||||
|
#elif defined( TARGET_X64_INTEL_HASWELL )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64 // data cache size: 64 bytes
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB, 8-way
|
||||||
|
#define L2_CACHE_SIZE (256*1024) // L2 data cache size: 256 kB ; DTLB1 64*4 kB = 256 kB
|
||||||
|
#define LLC_CACHE_SIZE (6*1024*1024) // LLC cache size: 6 MB ; TLB 1024*4 kB = 4 MB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 12 // max kernel size
|
||||||
|
#define D_N_KERNEL 8 // max kernel size
|
||||||
|
#define D_KC 256 // 192
|
||||||
|
#define D_NC 64 //96 //72 // 120 // 512
|
||||||
|
#define D_MC 1500
|
||||||
|
// single
|
||||||
|
#define S_PS 8 // panel size
|
||||||
|
#define S_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define S_M_KERNEL 24 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 144
|
||||||
|
#define S_MC 3000
|
||||||
|
|
||||||
|
#elif defined( TARGET_X64_INTEL_SANDY_BRIDGE )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64 // data cache size: 64 bytes
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB, 8-way
|
||||||
|
#define L2_CACHE_SIZE (256*1024) // L2 data cache size: 256 kB ; DTLB1 64*4 kB = 256 kB
|
||||||
|
#define LLC_CACHE_SIZE (4*1024*1024) // LLC cache size: 4 MB ; TLB 1024*4 kB = 4 MB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 8 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256 //320 //256 //320
|
||||||
|
#define D_NC 72 //64 //72 //60 // 120
|
||||||
|
#define D_MC 1000 // 800
|
||||||
|
// single
|
||||||
|
#define S_PS 8 // panel size
|
||||||
|
#define S_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define S_M_KERNEL 16 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 144
|
||||||
|
#define S_MC 2000
|
||||||
|
|
||||||
|
#elif defined( TARGET_X64_INTEL_CORE )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
#elif defined( TARGET_X64_AMD_BULLDOZER )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined( TARGET_X86_AMD_JAGUAR )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined( TARGET_X86_AMD_BARCELONA )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(TARGET_ARMV8A_APPLE_M1)
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (128*1024) // L1 data cache size (big cores): 64 kB, ?-way ; DTLB1 ?
|
||||||
|
#define LLC_CACHE_SIZE (12*1024*1024) // LLC (L2) cache size (big cores): 12 MB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 8 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 512 //256
|
||||||
|
#define D_NC 128 //256
|
||||||
|
#define D_MC 6000
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 8 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 512
|
||||||
|
#define S_NC 256
|
||||||
|
#define S_MC 6000
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(TARGET_ARMV8A_ARM_CORTEX_A76)
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (64*1024) // L1 data cache size: 64 kB, 4-way ; DTLB1 48*4 kB = 192 kB
|
||||||
|
#define LLC_CACHE_SIZE (1*1024*1024) // LLC cache size: 1 MB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 8 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 512 //256
|
||||||
|
#define D_NC 128 //256
|
||||||
|
#define D_MC 6000
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 8 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 512
|
||||||
|
#define S_NC 256
|
||||||
|
#define S_MC 6000
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(TARGET_ARMV8A_ARM_CORTEX_A73)
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 (64?) kB, 4-way, seen as 8-(16-)way ; DTLB1 48*4 kB = 192 kB
|
||||||
|
#define LLC_CACHE_SIZE (1*1024*1024) // LLC cache size: 1 MB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 8 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 320
|
||||||
|
#define D_NC 256
|
||||||
|
#define D_MC 6000
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 8 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(TARGET_ARMV8A_ARM_CORTEX_A57)
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB, 2-way ; DTLB1 32*4 kB = 128 kB
|
||||||
|
#define LLC_CACHE_SIZE (1*1024*1024) // LLC cache size: 1 MB // 2 MB ???
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 8 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 128 //224 //256 //192
|
||||||
|
#define D_NC 72 //40 //36 //48
|
||||||
|
#define D_MC (4*192) //512 //488 //600
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 8 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(TARGET_ARMV8A_ARM_CORTEX_A55)
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB, 4-way ; DTLB1 16*4 kB = 64 kB
|
||||||
|
#define LLC_CACHE_SIZE (512*1024) // LLC cache size: 512 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 12 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 224
|
||||||
|
#define D_NC 160
|
||||||
|
#define D_MC 6000
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 8 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined(TARGET_ARMV8A_ARM_CORTEX_A53)
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB, 4-way ??? ; DTLB1 10*4 kB = 40 kB
|
||||||
|
#define LLC_CACHE_SIZE (256*1024) // LLC cache size: 256 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 12 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 160
|
||||||
|
#define D_NC 128
|
||||||
|
#define D_MC 6000
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 8 // max kernel size
|
||||||
|
#define S_N_KERNEL 8 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined( TARGET_ARMV7A_ARM_CORTEX_A15 )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined( TARGET_ARMV7A_ARM_CORTEX_A7 )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined( TARGET_ARMV7A_ARM_CORTEX_A9 )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 32
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#elif defined( TARGET_GENERIC )
|
||||||
|
// common
|
||||||
|
#define CACHE_LINE_SIZE 64
|
||||||
|
#define L1_CACHE_SIZE (32*1024) // L1 data cache size: 32 kB
|
||||||
|
// double
|
||||||
|
#define D_PS 4 // panel size
|
||||||
|
#define D_PLD 4 // 2 // GCD of panel length
|
||||||
|
#define D_M_KERNEL 4 // max kernel size
|
||||||
|
#define D_N_KERNEL 4 // max kernel size
|
||||||
|
#define D_KC 256
|
||||||
|
#define D_NC 128 // TODO these are just dummy
|
||||||
|
#define D_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
// single
|
||||||
|
#define S_PS 4
|
||||||
|
#define S_PLD 4 //2
|
||||||
|
#define S_M_KERNEL 4 // max kernel size
|
||||||
|
#define S_N_KERNEL 4 // max kernel size
|
||||||
|
#define S_KC 256
|
||||||
|
#define S_NC 128 // TODO these are just dummy
|
||||||
|
#define S_MC 3000 // TODO these are just dummy
|
||||||
|
|
||||||
|
|
||||||
|
#else
|
||||||
|
#error "Unknown architecture"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define D_CACHE_LINE_EL (CACHE_LINE_SIZE/D_EL_SIZE)
|
||||||
|
#define D_L1_CACHE_EL (L1_CACHE_SIZE/D_EL_SIZE)
|
||||||
|
#define D_L2_CACHE_EL (L2_CACHE_SIZE/D_EL_SIZE)
|
||||||
|
#define D_LLC_CACHE_EL (LLC_CACHE_SIZE/D_EL_SIZE)
|
||||||
|
|
||||||
|
#define S_CACHE_LINE_EL (CACHE_LINE_SIZE/S_EL_SIZE)
|
||||||
|
#define S_L1_CACHE_EL (L1_CACHE_SIZE/S_EL_SIZE)
|
||||||
|
#define S_L2_CACHE_EL (L2_CACHE_SIZE/S_EL_SIZE)
|
||||||
|
#define S_LLC_CACHE_EL (LLC_CACHE_SIZE/S_EL_SIZE)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLASFEO_BLOCK_SIZE_H_
|
||||||
274
third_party/acados/include/blasfeo/include/blasfeo_common.h
vendored
Normal file
274
third_party/acados/include/blasfeo/include/blasfeo_common.h
vendored
Normal file
@@ -0,0 +1,274 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_COMMON_H_
|
||||||
|
#define BLASFEO_COMMON_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_target.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__INTEL_LLVM_COMPILER)
|
||||||
|
#define ALIGNED(VEC, BYTES) VEC __attribute__ ((aligned ( BYTES )))
|
||||||
|
#elif defined (_MSC_VER)
|
||||||
|
#define ALIGNED(VEC, BYTES) __declspec(align( BYTES )) VEC
|
||||||
|
#else
|
||||||
|
#define ALIGNED(VEC, BYTES) VEC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if ( defined(LA_HIGH_PERFORMANCE) & defined(MF_PANELMAJ) ) | ( defined(LA_REFERENCE) & defined(MF_PANELMAJ) )
|
||||||
|
|
||||||
|
#include "blasfeo_block_size.h"
|
||||||
|
|
||||||
|
// matrix structure
|
||||||
|
struct blasfeo_dmat
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pA; // pointer to a pm*pn array of doubles, the first is aligned to cache line size
|
||||||
|
double *dA; // pointer to a min(m,n) (or max???) array of doubles
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int pm; // packed number or rows
|
||||||
|
int cn; // packed number or cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_smat
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pA; // pointer to a pm*pn array of floats, the first is aligned to cache line size
|
||||||
|
float *dA; // pointer to a min(m,n) (or max???) array of floats
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int pm; // packed number or rows
|
||||||
|
int cn; // packed number or cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
// vector structure
|
||||||
|
struct blasfeo_dvec
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pa; // pointer to a pm array of doubles, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int pm; // packed size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_svec
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pa; // pointer to a pm array of floats, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int pm; // packed size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
#define BLASFEO_DMATEL(sA,ai,aj) ((sA)->pA[((ai)-((ai)&(D_PS-1)))*(sA)->cn+(aj)*D_PS+((ai)&(D_PS-1))])
|
||||||
|
#define BLASFEO_SMATEL(sA,ai,aj) ((sA)->pA[((ai)-((ai)&(S_PS-1)))*(sA)->cn+(aj)*S_PS+((ai)&(S_PS-1))])
|
||||||
|
#define BLASFEO_DVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
#define BLASFEO_SVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
|
||||||
|
#elif ( defined(LA_HIGH_PERFORMANCE) & defined(MF_COLMAJ) ) | ( defined(LA_REFERENCE) & defined(MF_COLMAJ) ) | defined(LA_EXTERNAL_BLAS_WRAPPER)
|
||||||
|
|
||||||
|
// matrix structure
|
||||||
|
struct blasfeo_dmat
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pA; // pointer to a m*n array of doubles
|
||||||
|
double *dA; // pointer to a min(m,n) (or max???) array of doubles
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_smat
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pA; // pointer to a m*n array of floats
|
||||||
|
float *dA; // pointer to a min(m,n) (or max???) array of floats
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
// vector structure
|
||||||
|
struct blasfeo_dvec
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pa; // pointer to a m array of doubles, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_svec
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pa; // pointer to a m array of floats, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
#define BLASFEO_DMATEL(sA,ai,aj) ((sA)->pA[(ai)+(aj)*(sA)->m])
|
||||||
|
#define BLASFEO_SMATEL(sA,ai,aj) ((sA)->pA[(ai)+(aj)*(sA)->m])
|
||||||
|
#define BLASFEO_DVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
#define BLASFEO_SVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error : wrong LA or MF choice
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Explicitly panel-major matrix structure
|
||||||
|
struct blasfeo_pm_dmat
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pA; // pointer to a pm*pn array of doubles, the first is aligned to cache line size
|
||||||
|
double *dA; // pointer to a min(m,n) (or max???) array of doubles
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int pm; // packed number or rows
|
||||||
|
int cn; // packed number or cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int ps; // panel size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_pm_smat
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pA; // pointer to a pm*pn array of floats, the first is aligned to cache line size
|
||||||
|
float *dA; // pointer to a min(m,n) (or max???) array of floats
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int pm; // packed number or rows
|
||||||
|
int cn; // packed number or cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int ps; // panel size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_pm_dvec
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pa; // pointer to a pm array of doubles, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int pm; // packed size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_pm_svec
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pa; // pointer to a pm array of floats, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int pm; // packed size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
// Explicitly column-major matrix structure
|
||||||
|
struct blasfeo_cm_dmat
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pA; // pointer to a m*n array of doubles
|
||||||
|
double *dA; // pointer to a min(m,n) (or max???) array of doubles
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_cm_smat
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pA; // pointer to a m*n array of floats
|
||||||
|
float *dA; // pointer to a min(m,n) (or max???) array of floats
|
||||||
|
int m; // rows
|
||||||
|
int n; // cols
|
||||||
|
int use_dA; // flag to tell if dA can be used
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_cm_dvec
|
||||||
|
{
|
||||||
|
double *mem; // pointer to passed chunk of memory
|
||||||
|
double *pa; // pointer to a m array of doubles, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
struct blasfeo_cm_svec
|
||||||
|
{
|
||||||
|
float *mem; // pointer to passed chunk of memory
|
||||||
|
float *pa; // pointer to a m array of floats, the first is aligned to cache line size
|
||||||
|
int m; // size
|
||||||
|
int memsize; // size of needed memory
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#define BLASFEO_PM_DMATEL(sA,ai,aj) ((sA)->pA[((ai)-((ai)&((sA)->ps-1)))*(sA)->cn+(aj)*((sA)->ps)+((ai)&((sA)->ps-1))])
|
||||||
|
#define BLASFEO_PM_SMATEL(sA,ai,aj) ((sA)->pA[((ai)-((ai)&((sA)->ps-1)))*(sA)->cn+(aj)*((sA)->ps)+((ai)&((sA)->ps-1))])
|
||||||
|
#define BLASFEO_PM_DVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
#define BLASFEO_PM_SVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
#define BLASFEO_CM_DMATEL(sA,ai,aj) ((sA)->pA[(ai)+(aj)*(sA)->m])
|
||||||
|
#define BLASFEO_CM_SMATEL(sA,ai,aj) ((sA)->pA[(ai)+(aj)*(sA)->m])
|
||||||
|
#define BLASFEO_CM_DVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
#define BLASFEO_CM_SVECEL(sa,ai) ((sa)->pa[ai])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_COMMON_H_
|
||||||
255
third_party/acados/include/blasfeo/include/blasfeo_d_aux.h
vendored
Normal file
255
third_party/acados/include/blasfeo/include/blasfeo_d_aux.h
vendored
Normal file
@@ -0,0 +1,255 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* auxiliary algebra operations header
|
||||||
|
*
|
||||||
|
* include/blasfeo_aux_lib*.h
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_AUX_H_
|
||||||
|
#define BLASFEO_D_AUX_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
#include "blasfeo_d_aux_old.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// --- memory size calculations
|
||||||
|
//
|
||||||
|
// returns the memory size (in bytes) needed for a dmat
|
||||||
|
size_t blasfeo_memsize_dmat(int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for the diagonal of a dmat
|
||||||
|
size_t blasfeo_memsize_diag_dmat(int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for a dvec
|
||||||
|
size_t blasfeo_memsize_dvec(int m);
|
||||||
|
|
||||||
|
// --- creation
|
||||||
|
//
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_create_dmat(int m, int n, struct blasfeo_dmat *sA, void *memory);
|
||||||
|
// create a strvec for a vector of size m by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_create_dvec(int m, struct blasfeo_dvec *sA, void *memory);
|
||||||
|
|
||||||
|
// --- packing
|
||||||
|
// pack the column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_pack_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// pack the lower-triangular column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_pack_l_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// pack the upper-triangular column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_pack_u_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// transpose and pack the column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_pack_tran_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// pack the vector x into the vector structure y
|
||||||
|
void blasfeo_pack_dvec(int m, double *x, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// unpack the matrix structure A into the column-major matrix B
|
||||||
|
void blasfeo_unpack_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, double *B, int ldb);
|
||||||
|
// transpose and unpack the matrix structure A into the column-major matrix B
|
||||||
|
void blasfeo_unpack_tran_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, double *B, int ldb);
|
||||||
|
// pack the vector structure x into the vector y
|
||||||
|
void blasfeo_unpack_dvec(int m, struct blasfeo_dvec *sx, int xi, double *y, int yi);
|
||||||
|
|
||||||
|
// --- cast
|
||||||
|
//
|
||||||
|
//void d_cast_mat2strmat(double *A, struct blasfeo_dmat *sA); // TODO
|
||||||
|
//void d_cast_diag_mat2strmat(double *dA, struct blasfeo_dmat *sA); // TODO
|
||||||
|
//void d_cast_vec2vecmat(double *a, struct blasfeo_dvec *sx); // TODO
|
||||||
|
|
||||||
|
|
||||||
|
// ge
|
||||||
|
// --- insert/extract
|
||||||
|
//
|
||||||
|
// sA[ai, aj] <= a
|
||||||
|
void blasfeo_dgein1(double a, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// <= sA[ai, aj]
|
||||||
|
double blasfeo_dgeex1(struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// --- set
|
||||||
|
// A <= alpha
|
||||||
|
void blasfeo_dgese(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// --- copy / scale
|
||||||
|
// B <= A
|
||||||
|
void blasfeo_dgecp(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// A <= alpha*A
|
||||||
|
void blasfeo_dgesc(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// B <= alpha*A
|
||||||
|
void blasfeo_dgecpsc(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// B <= A, A lower triangular
|
||||||
|
void blasfeo_dtrcp_l(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
void blasfeo_dtrcpsc_l(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
void blasfeo_dtrsc_l(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// --- sum
|
||||||
|
// B <= B + alpha*A
|
||||||
|
void blasfeo_dgead(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// y <= y + alpha*x
|
||||||
|
void blasfeo_dvecad(int m, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
|
||||||
|
// --- traspositions
|
||||||
|
// B <= A'
|
||||||
|
void blasfeo_dgetr(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// B <= A', A lower triangular
|
||||||
|
void blasfeo_dtrtr_l(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// B <= A', A upper triangular
|
||||||
|
void blasfeo_dtrtr_u(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
|
||||||
|
// dia
|
||||||
|
// diag(A) += alpha
|
||||||
|
void blasfeo_ddiare(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// diag(A) <= alpha*x
|
||||||
|
void blasfeo_ddiain(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// diag(A)[idx] <= alpha*x
|
||||||
|
void blasfeo_ddiain_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// x <= diag(A)
|
||||||
|
void blasfeo_ddiaex(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// x <= diag(A)[idx]
|
||||||
|
void blasfeo_ddiaex_sp(int kmax, double alpha, int *idx, struct blasfeo_dmat *sD, int di, int dj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// diag(A) += alpha*x
|
||||||
|
void blasfeo_ddiaad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// diag(A)[idx] += alpha*x
|
||||||
|
void blasfeo_ddiaad_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// diag(A)[idx] = y + alpha*x
|
||||||
|
void blasfeo_ddiaadin_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// row
|
||||||
|
void blasfeo_drowin(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_drowex(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
void blasfeo_drowad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_drowad_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_drowsw(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
void blasfeo_drowpe(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
void blasfeo_drowpei(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
|
||||||
|
// col
|
||||||
|
void blasfeo_dcolex(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
void blasfeo_dcolin(int kmax, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_dcolad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_dcolsc(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_dcolsw(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
void blasfeo_dcolpe(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
void blasfeo_dcolpei(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
|
||||||
|
// vec
|
||||||
|
// a <= alpha
|
||||||
|
void blasfeo_dvecse(int m, double alpha, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// sx[xi] <= a
|
||||||
|
void blasfeo_dvecin1(double a, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// <= sx[xi]
|
||||||
|
double blasfeo_dvecex1(struct blasfeo_dvec *sx, int xi);
|
||||||
|
// y <= x
|
||||||
|
void blasfeo_dveccp(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// x <= alpha*x
|
||||||
|
void blasfeo_dvecsc(int m, double alpha, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// y <= alpha*x
|
||||||
|
void blasfeo_dveccpsc(int m, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// z[idx] += alpha * x
|
||||||
|
void blasfeo_dvecad_sp(int m, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z[idx] <= alpha * x
|
||||||
|
void blasfeo_dvecin_sp(int m, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= alpha * x[idx]
|
||||||
|
void blasfeo_dvecex_sp(int m, double alpha, int *idx, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z += alpha * x[idx]
|
||||||
|
void blasfeo_dvecexad_sp(int m, double alpha, int *idx, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
void blasfeo_dveccl(int m,
|
||||||
|
struct blasfeo_dvec *sxm, int xim, struct blasfeo_dvec *sx, int xi,
|
||||||
|
struct blasfeo_dvec *sxp, int xip, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
void blasfeo_dveccl_mask(int m,
|
||||||
|
struct blasfeo_dvec *sxm, int xim, struct blasfeo_dvec *sx, int xi,
|
||||||
|
struct blasfeo_dvec *sxp, int xip, struct blasfeo_dvec *sz, int zi,
|
||||||
|
struct blasfeo_dvec *sm, int mi);
|
||||||
|
|
||||||
|
void blasfeo_dvecze(int m, struct blasfeo_dvec *sm, int mi, struct blasfeo_dvec *sv, int vi, struct blasfeo_dvec *se, int ei);
|
||||||
|
void blasfeo_dvecnrm_inf(int m, struct blasfeo_dvec *sx, int xi, double *ptr_norm);
|
||||||
|
void blasfeo_dvecnrm_2(int m, struct blasfeo_dvec *sx, int xi, double *ptr_norm);
|
||||||
|
void blasfeo_dvecpe(int kmax, int *ipiv, struct blasfeo_dvec *sx, int xi);
|
||||||
|
void blasfeo_dvecpei(int kmax, int *ipiv, struct blasfeo_dvec *sx, int xi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Explicitly panel-major matrix format
|
||||||
|
*/
|
||||||
|
|
||||||
|
// returns the memory size (in bytes) needed for a dmat
|
||||||
|
size_t blasfeo_pm_memsize_dmat(int ps, int m, int n);
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_pm_create_dmat(int ps, int m, int n, struct blasfeo_pm_dmat *sA, void *memory);
|
||||||
|
// print
|
||||||
|
void blasfeo_pm_print_dmat(int m, int n, struct blasfeo_pm_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Explicitly panel-major matrix format
|
||||||
|
*/
|
||||||
|
|
||||||
|
// returns the memory size (in bytes) needed for a dmat
|
||||||
|
size_t blasfeo_cm_memsize_dmat(int m, int n);
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_cm_create_dmat(int m, int n, struct blasfeo_pm_dmat *sA, void *memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// BLAS API helper functions
|
||||||
|
//
|
||||||
|
|
||||||
|
#if ( defined(BLAS_API) & defined(MF_PANELMAJ) )
|
||||||
|
// aux
|
||||||
|
void blasfeo_cm_dgetr(int m, int n, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_AUX_H_
|
||||||
145
third_party/acados/include/blasfeo/include/blasfeo_d_aux_ext_dep.h
vendored
Normal file
145
third_party/acados/include/blasfeo/include/blasfeo_d_aux_ext_dep.h
vendored
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* auxiliary algebra operation external dependancies header
|
||||||
|
*
|
||||||
|
* include/blasfeo_d_aux_ext_dep.h
|
||||||
|
*
|
||||||
|
* - dynamic memory allocation
|
||||||
|
* - print
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_AUX_EXT_DEP_H_
|
||||||
|
#define BLASFEO_D_AUX_EXT_DEP_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef EXT_DEP
|
||||||
|
|
||||||
|
/* column-major matrices */
|
||||||
|
|
||||||
|
// dynamically allocate row*col doubles of memory and set accordingly a pointer to double; set allocated memory to zero
|
||||||
|
void d_zeros(double **pA, int row, int col);
|
||||||
|
// dynamically allocate row*col doubles of memory aligned to 64-byte boundaries and set accordingly a pointer to double; set allocated memory to zero
|
||||||
|
void d_zeros_align(double **pA, int row, int col);
|
||||||
|
// dynamically allocate size bytes of memory aligned to 64-byte boundaries and set accordingly a pointer to double; set allocated memory to zero
|
||||||
|
void d_zeros_align_bytes(double **pA, int size);
|
||||||
|
// free the memory allocated by d_zeros
|
||||||
|
void d_free(double *pA);
|
||||||
|
// free the memory allocated by d_zeros_align or d_zeros_align_bytes
|
||||||
|
void d_free_align(double *pA);
|
||||||
|
// print a column-major matrix
|
||||||
|
void d_print_mat(int m, int n, double *A, int lda);
|
||||||
|
// print the transposed of a column-major matrix
|
||||||
|
void d_print_tran_mat(int row, int col, double *A, int lda);
|
||||||
|
// print to file a column-major matrix
|
||||||
|
void d_print_to_file_mat(FILE *file, int row, int col, double *A, int lda);
|
||||||
|
// print to file a column-major matrix in exponential format
|
||||||
|
void d_print_to_file_exp_mat(FILE *file, int row, int col, double *A, int lda);
|
||||||
|
// print to string a column-major matrix
|
||||||
|
void d_print_to_string_mat(char **buf_out, int row, int col, double *A, int lda);
|
||||||
|
// print to file the transposed of a column-major matrix
|
||||||
|
void d_print_tran_to_file_mat(FILE *file, int row, int col, double *A, int lda);
|
||||||
|
// print to file the transposed of a column-major matrix in exponential format
|
||||||
|
void d_print_tran_to_file_exp_mat(FILE *file, int row, int col, double *A, int lda);
|
||||||
|
// print in exponential notation a column-major matrix
|
||||||
|
void d_print_exp_mat(int m, int n, double *A, int lda);
|
||||||
|
// print in exponential notation the transposed of a column-major matrix
|
||||||
|
void d_print_exp_tran_mat(int row, int col, double *A, int lda);
|
||||||
|
|
||||||
|
/* strmat and strvec */
|
||||||
|
|
||||||
|
// create a strmat for a matrix of size m*n by dynamically allocating memory
|
||||||
|
void blasfeo_allocate_dmat(int m, int n, struct blasfeo_dmat *sA);
|
||||||
|
// create a strvec for a vector of size m by dynamically allocating memory
|
||||||
|
void blasfeo_allocate_dvec(int m, struct blasfeo_dvec *sa);
|
||||||
|
// free the memory allocated by blasfeo_allocate_dmat
|
||||||
|
void blasfeo_free_dmat(struct blasfeo_dmat *sA);
|
||||||
|
// free the memory allocated by blasfeo_allocate_dvec
|
||||||
|
void blasfeo_free_dvec(struct blasfeo_dvec *sa);
|
||||||
|
// print a strmat
|
||||||
|
void blasfeo_print_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// print in exponential notation a strmat
|
||||||
|
void blasfeo_print_exp_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// print to file a strmat
|
||||||
|
void blasfeo_print_to_file_dmat(FILE *file, int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// print to file a strmat in exponential format
|
||||||
|
void blasfeo_print_to_file_exp_dmat(FILE *file, int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// print to string a strmat
|
||||||
|
void blasfeo_print_to_string_dmat(char **buf_out, int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// print the transposed of a strmat
|
||||||
|
void blasfeo_print_tran_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// print a strvec
|
||||||
|
void blasfeo_print_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print in exponential notation a strvec
|
||||||
|
void blasfeo_print_exp_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print to file a strvec
|
||||||
|
void blasfeo_print_to_file_dvec(FILE *file, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print to string a strvec
|
||||||
|
void blasfeo_print_to_string_dvec(char **buf_out, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print the transposed of a strvec
|
||||||
|
void blasfeo_print_tran_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print in exponential notation the transposed of a strvec
|
||||||
|
void blasfeo_print_exp_tran_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print to file the transposed of a strvec
|
||||||
|
void blasfeo_print_to_file_tran_dvec(FILE *file, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// print to string the transposed of a strvec
|
||||||
|
void blasfeo_print_to_string_tran_dvec(char **buf_out, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
|
||||||
|
#endif // EXT_DEP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_AUX_EXT_DEP_H_
|
||||||
84
third_party/acados/include/blasfeo/include/blasfeo_d_aux_ext_dep_ref.h
vendored
Normal file
84
third_party/acados/include/blasfeo/include/blasfeo_d_aux_ext_dep_ref.h
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* auxiliary algebra operation external dependancies header
|
||||||
|
*
|
||||||
|
* include/blasfeo_d_aux_ext_dep.h
|
||||||
|
*
|
||||||
|
* - dynamic memory allocation
|
||||||
|
* - print
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_AUX_EXT_DEP_REF_H_
|
||||||
|
#define BLASFEO_D_AUX_EXT_DEP_REF_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// expose reference BLASFEO for testing
|
||||||
|
// see blasfeo_d_aux_exp_dep.h for help
|
||||||
|
|
||||||
|
void blasfeo_print_dmat_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_allocate_dmat_ref(int m, int n, struct blasfeo_dmat_ref *sA);
|
||||||
|
void blasfeo_allocate_dvec_ref(int m, struct blasfeo_dvec_ref *sa);
|
||||||
|
void blasfeo_free_dmat_ref(struct blasfeo_dmat_ref *sA);
|
||||||
|
void blasfeo_free_dvec_ref(struct blasfeo_dvec_ref *sa);
|
||||||
|
void blasfeo_print_dmat_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_exp_dmat_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_to_file_dmat_ref(FILE *file, int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_to_file_exp_dmat_ref(FILE *file, int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_to_string_dmat_ref(char **buf_out, int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_exp_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_to_file_dvec(FILE *file, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_to_string_dvec(char **buf_out, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_tran_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_exp_tran_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_to_file_tran_dvec(FILE *file, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void blasfeo_print_to_string_tran_dvec(char **buf_out, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_AUX_EXT_DEP_REF_H_
|
||||||
75
third_party/acados/include/blasfeo/include/blasfeo_d_aux_old.h
vendored
Normal file
75
third_party/acados/include/blasfeo/include/blasfeo_d_aux_old.h
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ----------- TOMOVE
|
||||||
|
*
|
||||||
|
* expecting column major matrices
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
void dtrcp_l_lib(int m, double alpha, int offsetA, double *A, int sda, int offsetB, double *B, int sdb);
|
||||||
|
void dgead_lib(int m, int n, double alpha, int offsetA, double *A, int sda, int offsetB, double *B, int sdb);
|
||||||
|
// TODO remove ???
|
||||||
|
void ddiain_sqrt_lib(int kmax, double *x, int offset, double *pD, int sdd);
|
||||||
|
// TODO ddiaad1
|
||||||
|
void ddiareg_lib(int kmax, double reg, int offset, double *pD, int sdd);
|
||||||
|
|
||||||
|
|
||||||
|
void dgetr_lib(int m, int n, double alpha, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
void dtrtr_l_lib(int m, double alpha, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
void dtrtr_u_lib(int m, double alpha, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
void ddiaex_lib(int kmax, double alpha, int offset, double *pD, int sdd, double *x);
|
||||||
|
void ddiaad_lib(int kmax, double alpha, double *x, int offset, double *pD, int sdd);
|
||||||
|
void ddiain_libsp(int kmax, int *idx, double alpha, double *x, double *pD, int sdd);
|
||||||
|
void ddiaex_libsp(int kmax, int *idx, double alpha, double *pD, int sdd, double *x);
|
||||||
|
void ddiaad_libsp(int kmax, int *idx, double alpha, double *x, double *pD, int sdd);
|
||||||
|
void ddiaadin_libsp(int kmax, int *idx, double alpha, double *x, double *y, double *pD, int sdd);
|
||||||
|
void drowin_lib(int kmax, double alpha, double *x, double *pD);
|
||||||
|
void drowex_lib(int kmax, double alpha, double *pD, double *x);
|
||||||
|
void drowad_lib(int kmax, double alpha, double *x, double *pD);
|
||||||
|
void drowin_libsp(int kmax, double alpha, int *idx, double *x, double *pD);
|
||||||
|
void drowad_libsp(int kmax, int *idx, double alpha, double *x, double *pD);
|
||||||
|
void drowadin_libsp(int kmax, int *idx, double alpha, double *x, double *y, double *pD);
|
||||||
|
void dcolin_lib(int kmax, double *x, int offset, double *pD, int sdd);
|
||||||
|
void dcolad_lib(int kmax, double alpha, double *x, int offset, double *pD, int sdd);
|
||||||
|
void dcolin_libsp(int kmax, int *idx, double *x, double *pD, int sdd);
|
||||||
|
void dcolad_libsp(int kmax, double alpha, int *idx, double *x, double *pD, int sdd);
|
||||||
|
void dcolsw_lib(int kmax, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
void dvecin_libsp(int kmax, int *idx, double *x, double *y);
|
||||||
|
void dvecad_libsp(int kmax, int *idx, double alpha, double *x, double *y);
|
||||||
208
third_party/acados/include/blasfeo/include/blasfeo_d_aux_ref.h
vendored
Normal file
208
third_party/acados/include/blasfeo/include/blasfeo_d_aux_ref.h
vendored
Normal file
@@ -0,0 +1,208 @@
|
|||||||
|
|
||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_AUX_REF_H_
|
||||||
|
#define BLASFEO_D_AUX_REF_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
#include "blasfeo_d_aux_old.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// --- memory calculations
|
||||||
|
//
|
||||||
|
// returns the memory size (in bytes) needed for a dmat
|
||||||
|
size_t blasfeo_ref_memsize_dmat(int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for the diagonal of a dmat
|
||||||
|
size_t blasfeo_ref_memsize_diag_dmat(int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for a dvec
|
||||||
|
size_t blasfeo_ref_memsize_dvec(int m);
|
||||||
|
|
||||||
|
// --- creation
|
||||||
|
//
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_ref_create_dmat(int m, int n, struct blasfeo_dmat *sA, void *memory);
|
||||||
|
// create a strvec for a vector of size m by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_ref_create_dvec(int m, struct blasfeo_dvec *sA, void *memory);
|
||||||
|
|
||||||
|
// --- packing
|
||||||
|
// pack the column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_ref_pack_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// pack the lower-triangular column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_ref_pack_l_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// pack the upper-triangular column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_ref_pack_u_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// transpose and pack the column-major matrix A into the matrix struct B
|
||||||
|
void blasfeo_ref_pack_tran_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// pack the vector x into the vector structure y
|
||||||
|
void blasfeo_ref_pack_dvec(int m, double *x, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// unpack the matrix structure A into the column-major matrix B
|
||||||
|
void blasfeo_ref_unpack_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, double *B, int ldb);
|
||||||
|
// transpose and unpack the matrix structure A into the column-major matrix B
|
||||||
|
void blasfeo_ref_unpack_tran_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, double *B, int ldb);
|
||||||
|
// pack the vector structure x into the vector y
|
||||||
|
void blasfeo_ref_unpack_dvec(int m, struct blasfeo_dvec *sx, int xi, double *y, int yi);
|
||||||
|
|
||||||
|
// --- cast
|
||||||
|
//
|
||||||
|
void ref_d_cast_mat2strmat(double *A, struct blasfeo_dmat *sA); // TODO
|
||||||
|
void ref_d_cast_diag_mat2strmat(double *dA, struct blasfeo_dmat *sA); // TODO
|
||||||
|
void ref_d_cast_vec2vecmat(double *a, struct blasfeo_dvec *sx); // TODO
|
||||||
|
|
||||||
|
|
||||||
|
// ge
|
||||||
|
// --- insert/extract
|
||||||
|
//
|
||||||
|
// sA[ai, aj] <= a
|
||||||
|
void blasfeo_ref_dgein1(double a, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// <= sA[ai, aj]
|
||||||
|
double blasfeo_ref_dgeex1(struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// --- set
|
||||||
|
// A <= alpha
|
||||||
|
void blasfeo_ref_dgese(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// --- copy / scale
|
||||||
|
// B <= A
|
||||||
|
void blasfeo_ref_dgecp(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// A <= alpha*A
|
||||||
|
void blasfeo_ref_dgesc(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// B <= alpha*A
|
||||||
|
void blasfeo_ref_dgecpsc(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// B <= A, A lower triangular
|
||||||
|
void blasfeo_ref_dtrcp_l(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
void blasfeo_ref_dtrcpsc_l(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
void blasfeo_ref_dtrsc_l(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// --- sum
|
||||||
|
// B <= B + alpha*A
|
||||||
|
void blasfeo_ref_dgead(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int yi, int cj);
|
||||||
|
// y <= y + alpha*x
|
||||||
|
void blasfeo_ref_dvecad(int m, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
|
||||||
|
// --- traspositions
|
||||||
|
// B <= A'
|
||||||
|
void blasfeo_ref_dgetr(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// B <= A', A lower triangular
|
||||||
|
void blasfeo_ref_dtrtr_l(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
// B <= A', A upper triangular
|
||||||
|
void blasfeo_ref_dtrtr_u(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
|
||||||
|
// dia
|
||||||
|
// diag(A) += alpha
|
||||||
|
void blasfeo_ref_ddiare(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// diag(A) <= alpha*x
|
||||||
|
void blasfeo_ref_ddiain(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// diag(A)[idx] <= alpha*x
|
||||||
|
void blasfeo_ref_ddiain_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// x <= diag(A)
|
||||||
|
void blasfeo_ref_ddiaex(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// x <= diag(A)[idx]
|
||||||
|
void blasfeo_ref_ddiaex_sp(int kmax, double alpha, int *idx, struct blasfeo_dmat *sD, int di, int dj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// diag(A) += alpha*x
|
||||||
|
void blasfeo_ref_ddiaad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// diag(A)[idx] += alpha*x
|
||||||
|
void blasfeo_ref_ddiaad_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// diag(A)[idx] = y + alpha*x
|
||||||
|
void blasfeo_ref_ddiaadin_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// row
|
||||||
|
void blasfeo_ref_drowin(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_drowex(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
void blasfeo_ref_drowad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_drowad_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_drowsw(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_drowpe(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
void blasfeo_ref_drowpei(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
|
||||||
|
// col
|
||||||
|
void blasfeo_ref_dcolex(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
void blasfeo_ref_dcolin(int kmax, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_dcolad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_dcolsc(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_dcolsw(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_dcolpe(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
void blasfeo_ref_dcolpei(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
|
||||||
|
// vec
|
||||||
|
// a <= alpha
|
||||||
|
void blasfeo_ref_dvecse(int m, double alpha, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// sx[xi] <= a
|
||||||
|
void blasfeo_ref_dvecin1(double a, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// <= sx[xi]
|
||||||
|
double blasfeo_ref_dvecex1(struct blasfeo_dvec *sx, int xi);
|
||||||
|
// y <= x
|
||||||
|
void blasfeo_ref_dveccp(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// x <= alpha*x
|
||||||
|
void blasfeo_ref_dvecsc(int m, double alpha, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// y <= alpha*x
|
||||||
|
void blasfeo_ref_dveccpsc(int m, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
void blasfeo_ref_dvecad_sp(int m, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dvec *sz, int zi);
|
||||||
|
void blasfeo_ref_dvecin_sp(int m, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dvec *sz, int zi);
|
||||||
|
void blasfeo_ref_dvecex_sp(int m, double alpha, int *idx, struct blasfeo_dvec *sx, int x, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z += alpha * x[idx]
|
||||||
|
void blasfeo_ref_dvecexad_sp(int m, double alpha, int *idx, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
void blasfeo_ref_dveccl(int m,
|
||||||
|
struct blasfeo_dvec *sxm, int xim, struct blasfeo_dvec *sx, int xi,
|
||||||
|
struct blasfeo_dvec *sxp, int xip, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
void blasfeo_ref_dveccl_mask(int m,
|
||||||
|
struct blasfeo_dvec *sxm, int xim, struct blasfeo_dvec *sx, int xi,
|
||||||
|
struct blasfeo_dvec *sxp, int xip, struct blasfeo_dvec *sz, int zi,
|
||||||
|
struct blasfeo_dvec *sm, int mi);
|
||||||
|
|
||||||
|
void blasfeo_ref_dvecze(int m, struct blasfeo_dvec *sm, int mi, struct blasfeo_dvec *sv, int vi, struct blasfeo_dvec *se, int ei);
|
||||||
|
void blasfeo_ref_dvecnrm_inf(int m, struct blasfeo_dvec *sx, int xi, double *ptr_norm);
|
||||||
|
void blasfeo_ref_dvecpe(int kmax, int *ipiv, struct blasfeo_dvec *sx, int xi);
|
||||||
|
void blasfeo_ref_dvecpei(int kmax, int *ipiv, struct blasfeo_dvec *sx, int xi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_AUX_REF_H_
|
||||||
226
third_party/acados/include/blasfeo/include/blasfeo_d_aux_test.h
vendored
Normal file
226
third_party/acados/include/blasfeo/include/blasfeo_d_aux_test.h
vendored
Normal file
@@ -0,0 +1,226 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* auxiliary algebra operations header
|
||||||
|
*
|
||||||
|
* include/blasfeo_aux_lib*.h
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_AUX_TEST_H_
|
||||||
|
#define BLASFEO_D_AUX_TEST_H_
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// --- memory calculations
|
||||||
|
int test_blasfeo_memsize_dmat(int m, int n);
|
||||||
|
int test_blasfeo_memsize_diag_dmat(int m, int n);
|
||||||
|
int test_blasfeo_memsize_dvec(int m);
|
||||||
|
|
||||||
|
// --- creation
|
||||||
|
void test_blasfeo_create_dmat(int m, int n, struct blasfeo_dmat *sA, void *memory);
|
||||||
|
void test_blasfeo_create_dvec(int m, struct blasfeo_dvec *sA, void *memory);
|
||||||
|
|
||||||
|
// --- conversion
|
||||||
|
void test_blasfeo_pack_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_pack_dvec(int m, double *x, int xi, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void test_blasfeo_pack_tran_dmat(int m, int n, double *A, int lda, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_unpack_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, double *A, int lda);
|
||||||
|
void test_blasfeo_unpack_dvec(int m, struct blasfeo_dvec *sa, int ai, double *x, int xi);
|
||||||
|
void test_blasfeo_unpack_tran_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, double *A, int lda);
|
||||||
|
|
||||||
|
// --- cast
|
||||||
|
void test_d_cast_mat2strmat(double *A, struct blasfeo_dmat *sA);
|
||||||
|
void test_d_cast_diag_mat2strmat(double *dA, struct blasfeo_dmat *sA);
|
||||||
|
void test_d_cast_vec2vecmat(double *a, struct blasfeo_dvec *sa);
|
||||||
|
|
||||||
|
// ------ copy / scale
|
||||||
|
|
||||||
|
// B <= A
|
||||||
|
void test_blasfeo_dgecp(int m, int n,
|
||||||
|
struct blasfeo_dmat *sA, int ai, int aj,
|
||||||
|
struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
|
||||||
|
// A <= alpha*A
|
||||||
|
void test_blasfeo_dgesc(int m, int n,
|
||||||
|
double alpha,
|
||||||
|
struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// B <= alpha*A
|
||||||
|
void test_blasfeo_dgecpsc(int m, int n,
|
||||||
|
double alpha,
|
||||||
|
struct blasfeo_dmat *sA, int ai, int aj,
|
||||||
|
struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
|
||||||
|
// // --- insert/extract
|
||||||
|
// //
|
||||||
|
// // <= sA[ai, aj]
|
||||||
|
// void test_blasfeo_dgein1(double a, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// // <= sA[ai, aj]
|
||||||
|
// double blasfeo_dgeex1(struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// // sx[xi] <= a
|
||||||
|
// void test_blasfeo_dvecin1(double a, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// // <= sx[xi]
|
||||||
|
// double blasfeo_dvecex1(struct blasfeo_dvec *sx, int xi);
|
||||||
|
// // A <= alpha
|
||||||
|
|
||||||
|
// // --- set
|
||||||
|
// void test_blasfeo_dgese(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// // a <= alpha
|
||||||
|
// void test_blasfeo_dvecse(int m, double alpha, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// // B <= A
|
||||||
|
|
||||||
|
|
||||||
|
// // --- vector
|
||||||
|
// // y <= x
|
||||||
|
// void test_blasfeo_dveccp(int m, struct blasfeo_dvec *sa, int ai, struct blasfeo_dvec *sc, int ci);
|
||||||
|
// // x <= alpha*x
|
||||||
|
// void test_blasfeo_dvecsc(int m, double alpha, struct blasfeo_dvec *sa, int ai);
|
||||||
|
// // TODO
|
||||||
|
// // x <= alpha*x
|
||||||
|
// void test_blasfeo_dveccpsc(int m, double alpha, struct blasfeo_dvec *sa, int ai, struct blasfeo_dvec *sc, int ci);
|
||||||
|
|
||||||
|
|
||||||
|
// // B <= A, A lower triangular
|
||||||
|
// void test_blasfeo_dtrcp_l(int m,
|
||||||
|
// struct blasfeo_dmat *sA, int ai, int aj,
|
||||||
|
// struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
|
||||||
|
// void test_blasfeo_dtrcpsc_l(int m, double alpha,
|
||||||
|
// struct blasfeo_dmat *sA, int ai, int aj,
|
||||||
|
// struct blasfeo_dmat *sB, int bi, int bj);
|
||||||
|
|
||||||
|
// void test_blasfeo_dtrsc_l(int m, double alpha,
|
||||||
|
// struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
|
||||||
|
// // B <= B + alpha*A
|
||||||
|
// void test_blasfeo_dgead(int m, int n, double alpha,
|
||||||
|
// struct blasfeo_dmat *sA, int ai, int aj,
|
||||||
|
// struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
|
||||||
|
// // y <= y + alpha*x
|
||||||
|
// void test_blasfeo_dvecad(int m, double alpha,
|
||||||
|
// struct blasfeo_dvec *sa, int ai,
|
||||||
|
// struct blasfeo_dvec *sc, int ci);
|
||||||
|
|
||||||
|
// // --- traspositions
|
||||||
|
// void test_dgetr_lib(int m, int n, double alpha, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
// void test_blasfeo_dgetr(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
// void test_dtrtr_l_lib(int m, double alpha, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
// void test_blasfeo_dtrtr_l(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
// void test_dtrtr_u_lib(int m, double alpha, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
// void test_blasfeo_dtrtr_u(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
// void test_blasfeo_ddiare(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// void test_blasfeo_ddiain(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// void test_ddiaex_lib(int kmax, double alpha, int offset, double *pD, int sdd, double *x);
|
||||||
|
// void test_ddiaad_lib(int kmax, double alpha, double *x, int offset, double *pD, int sdd);
|
||||||
|
// void test_ddiain_libsp(int kmax, int *idx, double alpha, double *x, double *pD, int sdd);
|
||||||
|
// void test_blasfeo_ddiain_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// void test_ddiaex_libsp(int kmax, int *idx, double alpha, double *pD, int sdd, double *x);
|
||||||
|
// void test_blasfeo_ddiaex(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// void test_blasfeo_ddiaex_sp(int kmax, double alpha, int *idx, struct blasfeo_dmat *sD, int di, int dj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// void test_blasfeo_ddiaad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// void test_ddiaad_libsp(int kmax, int *idx, double alpha, double *x, double *pD, int sdd);
|
||||||
|
// void test_blasfeo_ddiaad_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// void test_ddiaadin_libsp(int kmax, int *idx, double alpha, double *x, double *y, double *pD, int sdd);
|
||||||
|
// void test_blasfeo_ddiaadin_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// void test_drowin_lib(int kmax, double alpha, double *x, double *pD);
|
||||||
|
// void test_blasfeo_drowin(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// void test_drowex_lib(int kmax, double alpha, double *pD, double *x);
|
||||||
|
// void test_blasfeo_drowex(int kmax, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// void test_drowad_lib(int kmax, double alpha, double *x, double *pD);
|
||||||
|
// void test_blasfeo_drowad(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// void test_drowin_libsp(int kmax, double alpha, int *idx, double *x, double *pD);
|
||||||
|
// void test_drowad_libsp(int kmax, int *idx, double alpha, double *x, double *pD);
|
||||||
|
// void test_blasfeo_drowad_sp(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// void test_drowadin_libsp(int kmax, int *idx, double alpha, double *x, double *y, double *pD);
|
||||||
|
// void test_drowsw_lib(int kmax, double *pA, double *pC);
|
||||||
|
// void test_blasfeo_drowsw(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
// void test_blasfeo_drowpe(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
// void test_blasfeo_dcolex(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// void test_dcolin_lib(int kmax, double *x, int offset, double *pD, int sdd);
|
||||||
|
// void test_blasfeo_dcolin(int kmax, struct blasfeo_dvec *sx, int xi, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
// void test_dcolad_lib(int kmax, double alpha, double *x, int offset, double *pD, int sdd);
|
||||||
|
// void test_dcolin_libsp(int kmax, int *idx, double *x, double *pD, int sdd);
|
||||||
|
// void test_dcolad_libsp(int kmax, double alpha, int *idx, double *x, double *pD, int sdd);
|
||||||
|
// void test_dcolsw_lib(int kmax, int offsetA, double *pA, int sda, int offsetC, double *pC, int sdc);
|
||||||
|
// void test_blasfeo_dcolsw(int kmax, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sC, int ci, int cj);
|
||||||
|
// void test_blasfeo_dcolpe(int kmax, int *ipiv, struct blasfeo_dmat *sA);
|
||||||
|
// void test_dvecin_libsp(int kmax, int *idx, double *x, double *y);
|
||||||
|
// void test_dvecad_libsp(int kmax, int *idx, double alpha, double *x, double *y);
|
||||||
|
// void test_blasfeo_dvecad_sp(int m, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// void test_blasfeo_dvecin_sp(int m, double alpha, struct blasfeo_dvec *sx, int xi, int *idx, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// void test_blasfeo_dvecex_sp(int m, double alpha, int *idx, struct blasfeo_dvec *sx, int x, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// void test_blasfeo_dveccl(int m, struct blasfeo_dvec *sxm, int xim, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sxp, int xip, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// void test_blasfeo_dveccl_mask(int m, struct blasfeo_dvec *sxm, int xim, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sxp, int xip, struct blasfeo_dvec *sz, int zi, struct blasfeo_dvec *sm, int mi);
|
||||||
|
// void test_blasfeo_dvecze(int m, struct blasfeo_dvec *sm, int mi, struct blasfeo_dvec *sv, int vi, struct blasfeo_dvec *se, int ei);
|
||||||
|
// void test_blasfeo_dvecnrm_inf(int m, struct blasfeo_dvec *sx, int xi, double *ptr_norm);
|
||||||
|
// void test_blasfeo_dvecpe(int kmax, int *ipiv, struct blasfeo_dvec *sx, int xi);
|
||||||
|
// void test_blasfeo_dvecpei(int kmax, int *ipiv, struct blasfeo_dvec *sx, int xi);
|
||||||
|
|
||||||
|
// ext_dep
|
||||||
|
|
||||||
|
void test_blasfeo_allocate_dmat(int m, int n, struct blasfeo_dmat *sA);
|
||||||
|
void test_blasfeo_allocate_dvec(int m, struct blasfeo_dvec *sa);
|
||||||
|
|
||||||
|
void test_blasfeo_free_dmat(struct blasfeo_dmat *sA);
|
||||||
|
void test_blasfeo_free_dvec(struct blasfeo_dvec *sa);
|
||||||
|
|
||||||
|
void test_blasfeo_print_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_print_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void test_blasfeo_print_tran_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
|
||||||
|
void test_blasfeo_print_to_file_dmat(FILE *file, int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_print_to_file_dvec(FILE *file, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void test_blasfeo_print_to_file_tran_dvec(FILE *file, int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
|
||||||
|
void test_blasfeo_print_exp_dmat(int m, int n, struct blasfeo_dmat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_print_exp_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
void test_blasfeo_print_exp_tran_dvec(int m, struct blasfeo_dvec *sa, int ai);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_AUX_TEST_H_
|
||||||
46
third_party/acados/include/blasfeo/include/blasfeo_d_blas.h
vendored
Normal file
46
third_party/acados/include/blasfeo/include/blasfeo_d_blas.h
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_BLAS_H_
|
||||||
|
#define BLASFEO_D_BLAS_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_d_blasfeo_api.h"
|
||||||
|
#include "blasfeo_d_blas_api.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_BLAS_H_
|
||||||
281
third_party/acados/include/blasfeo/include/blasfeo_d_blas_api.h
vendored
Normal file
281
third_party/acados/include/blasfeo/include/blasfeo_d_blas_api.h
vendored
Normal file
@@ -0,0 +1,281 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_BLAS_API_H_
|
||||||
|
#define BLASFEO_D_BLAS_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_target.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BLAS_API
|
||||||
|
#ifdef CBLAS_API
|
||||||
|
#ifndef BLASFEO_CBLAS_ENUM
|
||||||
|
#define BLASFEO_CBLAS_ENUM
|
||||||
|
#ifdef FORTRAN_BLAS_API
|
||||||
|
#ifndef CBLAS_H
|
||||||
|
enum CBLAS_LAYOUT {CblasRowMajor=101, CblasColMajor=102};
|
||||||
|
enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
|
||||||
|
enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
|
||||||
|
enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
|
||||||
|
enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
|
||||||
|
#define CBLAS_ORDER CBLAS_LAYOUT /* this for backward compatibility with CBLAS_ORDER */
|
||||||
|
#endif // CBLAS_H
|
||||||
|
#else // FORTRAN_BLAS_API
|
||||||
|
enum BLASFEO_CBLAS_LAYOUT {BlasfeoCblasRowMajor=101, BlasfeoCblasColMajor=102};
|
||||||
|
enum BLASFEO_CBLAS_TRANSPOSE {BlasfeoCblasNoTrans=111, BlasfeoCblasTrans=112, BlasfeoCblasConjTrans=113};
|
||||||
|
enum BLASFEO_CBLAS_UPLO {BlasfeoCblasUpper=121, BlasfeoCblasLower=122};
|
||||||
|
enum BLASFEO_CBLAS_DIAG {BlasfeoCblasNonUnit=131, BlasfeoCblasUnit=132};
|
||||||
|
enum BLASFEO_CBLAS_SIDE {BlasfeoCblasLeft=141, BlasfeoCblasRight=142};
|
||||||
|
#define BLASFEO_CBLAS_ORDER BLASFEO_CBLAS_LAYOUT /* this for backward compatibility with BLASFEO_CBLAS_ORDER */
|
||||||
|
#endif // FORTRAN_BLAS_API
|
||||||
|
#endif // BLASFEO_CBLAS_ENUM
|
||||||
|
#endif // CBLAS_API
|
||||||
|
#endif // BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FORTRAN_BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// BLAS 1
|
||||||
|
//
|
||||||
|
void daxpy_(int *n, double *alpha, double *x, int *incx, double *y, int *incy);
|
||||||
|
//
|
||||||
|
void dcopy_(int *n, double *x, int *incx, double *y, int *incy);
|
||||||
|
//
|
||||||
|
double ddot_(int *n, double *x, int *incx, double *y, int *incy);
|
||||||
|
|
||||||
|
// BLAS 2
|
||||||
|
//
|
||||||
|
void dgemv_(char *tran, int *m, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy);
|
||||||
|
//
|
||||||
|
void dsymv_(char *uplo, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy);
|
||||||
|
//
|
||||||
|
void dger_(int *m, int *n, double *alpha, double *x, int *incx, double *y, int *incy, double *A, int *lda);
|
||||||
|
|
||||||
|
// BLAS 3
|
||||||
|
//
|
||||||
|
void dgemm_(char *ta, char *tb, int *m, int *n, int *k, double *alpha, double *A, int *lda, double *B, int *ldb, double *beta, double *C, int *ldc);
|
||||||
|
//
|
||||||
|
void dsyrk_(char *uplo, char *ta, int *m, int *k, double *alpha, double *A, int *lda, double *beta, double *C, int *ldc);
|
||||||
|
//
|
||||||
|
void dtrmm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *A, int *lda, double *B, int *ldb);
|
||||||
|
//
|
||||||
|
void dtrsm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *A, int *lda, double *B, int *ldb);
|
||||||
|
//
|
||||||
|
void dsyr2k_(char *uplo, char *ta, int *m, int *k, double *alpha, double *A, int *lda, double *B, int *ldb, double *beta, double *C, int *ldc);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
void dgesv_(int *m, int *n, double *A, int *lda, int *ipiv, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void dgetrf_(int *m, int *n, double *A, int *lda, int *ipiv, int *info);
|
||||||
|
//
|
||||||
|
void dgetrf_np_(int *m, int *n, double *A, int *lda, int *info);
|
||||||
|
//
|
||||||
|
void dgetrs_(char *trans, int *m, int *n, double *A, int *lda, int *ipiv, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void dlaswp_(int *n, double *A, int *lda, int *k1, int *k2, int *ipiv, int *incx);
|
||||||
|
//
|
||||||
|
void dposv_(char *uplo, int *m, int *n, double *A, int *lda, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void dpotrf_(char *uplo, int *m, double *A, int *lda, int *info);
|
||||||
|
//
|
||||||
|
void dpotrs_(char *uplo, int *m, int *n, double *A, int *lda, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void dtrtrs_(char *uplo, char *trans, char *diag, int *m, int *n, double *A, int *lda, double *B, int *ldb, int *info);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// aux
|
||||||
|
void dgetr_(int *m, int *n, double *A, int *lda, double *B, int *ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// CBLAS 1
|
||||||
|
//
|
||||||
|
void cblas_daxpy(const int N, const double alpha, const double *X, const int incX, double *Y, const int incY);
|
||||||
|
//
|
||||||
|
void cblas_dswap(const int N, double *X, const int incX, double *Y, const int incY);
|
||||||
|
//
|
||||||
|
void cblas_dcopy(const int N, const double *X, const int incX, double *Y, const int incY);
|
||||||
|
|
||||||
|
// CBLAS 2
|
||||||
|
//
|
||||||
|
void cblas_dgemv(const enum CBLAS_LAYOUT layout, const enum CBLAS_TRANSPOSE TransA, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY);
|
||||||
|
|
||||||
|
// CBLAS 3
|
||||||
|
//
|
||||||
|
void cblas_dgemm(const enum CBLAS_LAYOUT layout, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc);
|
||||||
|
//
|
||||||
|
void cblas_dsyrk(const enum CBLAS_LAYOUT layout, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double beta, double *C, const int ldc);
|
||||||
|
//
|
||||||
|
void cblas_dtrmm(const enum CBLAS_LAYOUT layout, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb);
|
||||||
|
//
|
||||||
|
void cblas_dtrsm(const enum CBLAS_LAYOUT layout, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#else // BLASFEO_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// BLAS 1
|
||||||
|
//
|
||||||
|
void blasfeo_blas_daxpy(int *n, double *alpha, double *x, int *incx, double *y, int *incy);
|
||||||
|
//
|
||||||
|
double blasfeo_blas_ddot(int *n, double *x, int *incx, double *y, int *incy);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dcopy(int *n, double *x, int *incx, double *y, int *incy);
|
||||||
|
|
||||||
|
// BLAS 2
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dgemv(char *trans, int *m, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dsymv(char *uplo, int *n, double *alpha, double *A, int *lda, double *x, int *incx, double *beta, double *y, int *incy);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dger(int *m, int *n, double *alpha, double *x, int *incx, double *y, int *incy, double *A, int *lda);
|
||||||
|
|
||||||
|
// BLAS 3
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dgemm(char *ta, char *tb, int *m, int *n, int *k, double *alpha, double *A, int *lda, double *B, int *ldb, double *beta, double *C, int *ldc);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dsyrk(char *uplo, char *ta, int *m, int *k, double *alpha, double *A, int *lda, double *beta, double *C, int *ldc);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dtrmm(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *A, int *lda, double *B, int *ldb);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dtrsm(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *A, int *lda, double *B, int *ldb);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_dsyr2k(char *uplo, char *ta, int *m, int *k, double *alpha, double *A, int *lda, double *B, int *ldb, double *beta, double *C, int *ldc);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dgesv(int *m, int *n, double *A, int *lda, int *ipiv, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dgetrf(int *m, int *n, double *A, int *lda, int *ipiv, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dgetrf_np(int *m, int *n, double *A, int *lda, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dgetrs(char *trans, int *m, int *n, double *A, int *lda, int *ipiv, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dlaswp(int *n, double *A, int *lda, int *k1, int *k2, int *ipiv, int *incx);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dposv(char *uplo, int *m, int *n, double *A, int *lda, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dpotrf(char *uplo, int *m, double *A, int *lda, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dpotrs(char *uplo, int *m, int *n, double *A, int *lda, double *B, int *ldb, int *info);
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_dtrtrs(char *uplo, char *trans, char *diag, int *m, int *n, double *A, int *lda, double *B, int *ldb, int *info);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// aux
|
||||||
|
void blasfeo_blas_dgetr(int *m, int *n, double *A, int *lda, double *B, int *ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// CBLAS 1
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_daxpy(const int N, const double alpha, const double *X, const int incX, double *Y, const int incY);
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dswap(const int N, double *X, const int incX, double *Y, const int incY);
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dcopy(const int N, const double *X, const int incX, double *Y, const int incY);
|
||||||
|
|
||||||
|
// CBLAS 2
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dgemv(const enum BLASFEO_CBLAS_LAYOUT layout, const enum BLASFEO_CBLAS_TRANSPOSE TransA, const int M, const int N, const double alpha, const double *A, const int lda, const double *X, const int incX, const double beta, double *Y, const int incY);
|
||||||
|
|
||||||
|
// CBLAS 3
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dgemm(const enum BLASFEO_CBLAS_LAYOUT layout, const enum BLASFEO_CBLAS_TRANSPOSE TransA, const enum BLASFEO_CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const double alpha, const double *A, const int lda, const double *B, const int ldb, const double beta, double *C, const int ldc);
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dsyrk(const enum BLASFEO_CBLAS_LAYOUT layout, const enum BLASFEO_CBLAS_UPLO Uplo, const enum BLASFEO_CBLAS_TRANSPOSE Trans, const int N, const int K, const double alpha, const double *A, const int lda, const double beta, double *C, const int ldc);
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dtrmm(const enum BLASFEO_CBLAS_LAYOUT layout, const enum BLASFEO_CBLAS_SIDE Side, const enum BLASFEO_CBLAS_UPLO Uplo, const enum BLASFEO_CBLAS_TRANSPOSE TransA, const enum BLASFEO_CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb);
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_dtrsm(const enum BLASFEO_CBLAS_LAYOUT layout, const enum BLASFEO_CBLAS_SIDE Side, const enum BLASFEO_CBLAS_UPLO Uplo, const enum BLASFEO_CBLAS_TRANSPOSE TransA, const enum BLASFEO_CBLAS_DIAG Diag, const int M, const int N, const double alpha, const double *A, const int lda, double *B, const int ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLASFEO_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_BLAS_API_H_
|
||||||
364
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_api.h
vendored
Normal file
364
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_api.h
vendored
Normal file
@@ -0,0 +1,364 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_BLASFEO_API_H_
|
||||||
|
#define BLASFEO_D_BLASFEO_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 1 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// z = y + alpha*x
|
||||||
|
// z[zi:zi+n] = alpha*x[xi:xi+n] + y[yi:yi+n]
|
||||||
|
// NB: Different arguments semantic compare to equivalent standard BLAS routine
|
||||||
|
void blasfeo_daxpy(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z = beta*y + alpha*x
|
||||||
|
void blasfeo_daxpby(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z = x .* y
|
||||||
|
void blasfeo_dvecmul(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z += x .* y
|
||||||
|
void blasfeo_dvecmulacc(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z = x .* y, return sum(z) = x^T * y
|
||||||
|
double blasfeo_dvecmuldot(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// return x^T * y
|
||||||
|
double blasfeo_ddot(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// construct givens plane rotation
|
||||||
|
void blasfeo_drotg(double a, double b, double *c, double *s);
|
||||||
|
// apply plane rotation [a b] [c -s; s; c] to the aj0 and aj1 columns of A at row index ai
|
||||||
|
void blasfeo_dcolrot(int m, struct blasfeo_dmat *sA, int ai, int aj0, int aj1, double c, double s);
|
||||||
|
// apply plane rotation [c s; -s c] [a; b] to the ai0 and ai1 rows of A at column index aj
|
||||||
|
void blasfeo_drowrot(int m, struct blasfeo_dmat *sA, int ai0, int ai1, int aj, double c, double s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 2 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x
|
||||||
|
void blasfeo_dgemv_n(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A^T * x
|
||||||
|
void blasfeo_dgemv_t(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(n)
|
||||||
|
void blasfeo_dtrsv_lnn_mn(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A^T ) * x, A (m)x(n)
|
||||||
|
void blasfeo_dtrsv_ltn_mn(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, not_unit
|
||||||
|
void blasfeo_dtrsv_lnn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, unit
|
||||||
|
void blasfeo_dtrsv_lnu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A^T ) * x, A (m)x(m) lower, transposed, not_unit
|
||||||
|
void blasfeo_dtrsv_ltn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A^T ) * x, A (m)x(m) lower, transposed, unit
|
||||||
|
void blasfeo_dtrsv_ltu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A^T ) * x, A (m)x(m) upper, not_transposed, not_unit
|
||||||
|
void blasfeo_dtrsv_unn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A^T ) * x, A (m)x(m) upper, transposed, not_unit
|
||||||
|
void blasfeo_dtrsv_utn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular
|
||||||
|
void blasfeo_dtrmv_lnn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_dtrmv_lnu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A^T * x ; A lower triangular
|
||||||
|
void blasfeo_dtrmv_ltn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A^T * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_dtrmv_ltu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x ; A upper triangular
|
||||||
|
void blasfeo_dtrmv_unn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A^T * x ; A upper triangular
|
||||||
|
void blasfeo_dtrmv_utn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z_n <= beta_n * y_n + alpha_n * A * x_n
|
||||||
|
// z_t <= beta_t * y_t + alpha_t * A^T * x_t
|
||||||
|
void blasfeo_dgemv_nt(int m, int n, double alpha_n, double alpha_t, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx_n, int xi_n, struct blasfeo_dvec *sx_t, int xi_t, double beta_n, double beta_t, struct blasfeo_dvec *sy_n, int yi_n, struct blasfeo_dvec *sy_t, int yi_t, struct blasfeo_dvec *sz_n, int zi_n, struct blasfeo_dvec *sz_t, int zi_t);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the lower triangular patr of A is accessed
|
||||||
|
void blasfeo_dsymv_l(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
void blasfeo_dsymv_l_mn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the upper triangular patr of A is accessed
|
||||||
|
void blasfeo_dsymv_u(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// D = C + alpha * x * y^T
|
||||||
|
void blasfeo_dger(int m, int n, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x, A diagonal
|
||||||
|
void blasfeo_dgemv_d(int m, double alpha, struct blasfeo_dvec *sA, int ai, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 3 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// D <= beta * C + alpha * A * B
|
||||||
|
void blasfeo_dgemm_nn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T
|
||||||
|
void blasfeo_dgemm_nt(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_dgemm_tn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B^T
|
||||||
|
void blasfeo_dgemm_tt(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D lower triangular
|
||||||
|
void blasfeo_dsyrk_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_ln_mn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#if ( defined(LA_HIGH_PERFORMANCE) & defined(MF_COLMAJ) )
|
||||||
|
void blasfeo_dsyrk3_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#endif
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D lower triangular
|
||||||
|
void blasfeo_dsyrk_lt(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#if ( defined(LA_HIGH_PERFORMANCE) & defined(MF_COLMAJ) )
|
||||||
|
void blasfeo_dsyrk3_lt(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#endif
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D upper triangular
|
||||||
|
void blasfeo_dsyrk_un(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#if ( defined(LA_HIGH_PERFORMANCE) & defined(MF_COLMAJ) )
|
||||||
|
void blasfeo_dsyrk3_un(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#endif
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D upper triangular
|
||||||
|
void blasfeo_dsyrk_ut(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#if ( defined(LA_HIGH_PERFORMANCE) & defined(MF_COLMAJ) )
|
||||||
|
void blasfeo_dsyrk3_ut(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
#endif
|
||||||
|
// D <= alpha * A * B ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_llnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_llnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_lltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_lltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_lunn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_lunu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_lutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_lutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_rlnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_rlnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_rltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A lower triangular
|
||||||
|
void blasfeo_dtrmm_rltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_runn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_runu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_rutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A upper triangular
|
||||||
|
void blasfeo_dtrmm_rutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_llnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_llnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_lltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_lltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_lunn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_lunu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_lutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_lutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_rlnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_rlnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_rltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_rltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_runn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_runu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_dtrsm_rutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_dtrsm_rutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T; C, D lower triangular
|
||||||
|
void blasfeo_dsyr2k_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A; C, D lower triangular
|
||||||
|
void blasfeo_dsyr2k_lt(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T; C, D upper triangular
|
||||||
|
void blasfeo_dsyr2k_un(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A; C, D upper triangular
|
||||||
|
void blasfeo_dsyr2k_ut(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// D <= alpha * A * B + beta * C, with A diagonal (stored as strvec)
|
||||||
|
void dgemm_diag_left_lib(int m, int n, double alpha, double *dA, double *pB, int sdb, double beta, double *pC, int sdc, double *pD, int sdd);
|
||||||
|
void blasfeo_dgemm_dn(int m, int n, double alpha, struct blasfeo_dvec *sA, int ai, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B + beta * C, with B diagonal (stored as strvec)
|
||||||
|
void blasfeo_dgemm_nd(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sB, int bi, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
|
||||||
|
// D <= chol( C ) ; C, D lower triangular
|
||||||
|
void blasfeo_dpotrf_l(int m, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_dpotrf_l_mn(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= chol( C ) ; C, D upper triangular
|
||||||
|
void blasfeo_dpotrf_u(int m, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= chol( C + A * B' ) ; C, D lower triangular
|
||||||
|
// D <= chol( C + A * B^T ) ; C, D lower triangular
|
||||||
|
void blasfeo_dsyrk_dpotrf_ln(int m, int k, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_dpotrf_ln_mn(int m, int n, int k, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; no pivoting
|
||||||
|
void blasfeo_dgetrf_np(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; row pivoting
|
||||||
|
void blasfeo_dgetrf_rp(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, int *ipiv);
|
||||||
|
// D <= qr( C )
|
||||||
|
int blasfeo_dgeqrf_worksize(int m, int n); // in bytes
|
||||||
|
void blasfeo_dgeqrf(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
// D <= Q factor, where C is the output of the LQ factorization
|
||||||
|
int blasfeo_dorglq_worksize(int m, int n, int k); // in bytes
|
||||||
|
void blasfeo_dorglq(int m, int n, int k, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
// D <= lq( C )
|
||||||
|
void blasfeo_dgelqf(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
int blasfeo_dgelqf_worksize(int m, int n); // in bytes
|
||||||
|
// D <= lq( C ), positive diagonal elements
|
||||||
|
void blasfeo_dgelqf_pd(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
// [L, A] <= lq( [L, A] ), positive diagonal elements, array of matrices, with
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_dgelqf_pd_la(int m, int n1, struct blasfeo_dmat *sL, int li, int lj, struct blasfeo_dmat *sA, int ai, int aj, void *work);
|
||||||
|
// [L, L, A] <= lq( [L, L, A] ), positive diagonal elements, array of matrices, with:
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_dgelqf_pd_lla(int m, int n1, struct blasfeo_dmat *sL0, int l0i, int l0j, struct blasfeo_dmat *sL1, int l1i, int l1j, struct blasfeo_dmat *sA, int ai, int aj, void *work);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// BLAS API helper functions
|
||||||
|
//
|
||||||
|
|
||||||
|
#if ( defined(BLAS_API) & defined(MF_PANELMAJ) )
|
||||||
|
// BLAS 3
|
||||||
|
void blasfeo_cm_dgemm_nn(int m, int n, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dgemm_nt(int m, int n, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dgemm_tn(int m, int n, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dgemm_tt(int m, int n, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk_ln(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk_lt(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk_un(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk_ut(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk3_ln(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk3_lt(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk3_un(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyrk3_ut(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_llnn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_llnu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_lltn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_lltu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_lunn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_lunu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_lutn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_lutu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_rlnn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_rlnu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_rltn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_rltu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_runn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_runu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_rutn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrsm_rutu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_llnn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_llnu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_lltn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_lltu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_lunn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_lunu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_lutn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_lutu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_rlnn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_rlnu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_rltn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_rltu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_runn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_runu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_rutn(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dtrmm_rutu(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyr2k_ln(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyr2k_lt(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyr2k_un(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dsyr2k_ut(int m, int k, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dmat *sB, int bi, int bj, double beta, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
// BLAS 2
|
||||||
|
void blasfeo_cm_dgemv_n(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dvec *sx, int xi, double beta, struct blasfeo_cm_dvec *sy, int yi, struct blasfeo_cm_dvec *sz, int zi);
|
||||||
|
void blasfeo_cm_dgemv_t(int m, int n, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dvec *sx, int xi, double beta, struct blasfeo_cm_dvec *sy, int yi, struct blasfeo_cm_dvec *sz, int zi);
|
||||||
|
void blasfeo_cm_dsymv_l(int m, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dvec *sx, int xi, double beta, struct blasfeo_cm_dvec *sy, int yi, struct blasfeo_cm_dvec *sz, int zi);
|
||||||
|
void blasfeo_cm_dsymv_u(int m, double alpha, struct blasfeo_cm_dmat *sA, int ai, int aj, struct blasfeo_cm_dvec *sx, int xi, double beta, struct blasfeo_cm_dvec *sy, int yi, struct blasfeo_cm_dvec *sz, int zi);
|
||||||
|
void blasfeo_cm_dger(int m, int n, double alpha, struct blasfeo_cm_dvec *sx, int xi, struct blasfeo_cm_dvec *sy, int yi, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
// LAPACK
|
||||||
|
void blasfeo_cm_dpotrf_l(int m, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dpotrf_u(int m, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_dgetrf_rp(int m, int n, struct blasfeo_cm_dmat *sC, int ci, int cj, struct blasfeo_cm_dmat *sD, int di, int dj, int *ipiv);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_BLASFEO_API_H_
|
||||||
147
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_api_ref.h
vendored
Normal file
147
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_api_ref.h
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_BLASFEO_API_REF_H_
|
||||||
|
#define BLASFEO_D_BLASFEO_API_REF_H_
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// expose reference BLASFEO for testing
|
||||||
|
|
||||||
|
// --- level 1
|
||||||
|
|
||||||
|
void blasfeo_daxpy_ref(int kmax, double alpha, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_daxpby_ref(int kmax, double alpha, struct blasfeo_dvec_ref *sx, int xi, double beta, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dvecmul_ref(int m, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dvecmulacc_ref(int m, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
double blasfeo_dvecmuldot_ref(int m, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
double blasfeo_ddot_ref(int m, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sy, int yi);
|
||||||
|
void blasfeo_drotg_ref(double a, double b, double *c, double *s);
|
||||||
|
void blasfeo_dcolrot_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj0, int aj1, double c, double s);
|
||||||
|
void blasfeo_drowrot_ref(int m, struct blasfeo_dmat_ref *sA, int ai0, int ai1, int aj, double c, double s);
|
||||||
|
|
||||||
|
|
||||||
|
// --- level 2
|
||||||
|
|
||||||
|
// dense
|
||||||
|
void blasfeo_dgemv_n_ref(int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, double beta, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dgemv_t_ref(int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, double beta, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_lnn_mn_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_ltn_mn_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_lnn_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_lnu_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_ltn_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_ltu_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_unn_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrsv_utn_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrmv_unn_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrmv_utn_ref(int m, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrmv_lnn_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrmv_ltn_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrmv_lnu_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dtrmv_ltu_ref(int m, int n, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
void blasfeo_dgemv_nt_ref(int m, int n, double alpha_n, double alpha_t, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx_n, int xi_n, struct blasfeo_dvec_ref *sx_t, int xi_t, double beta_n, double beta_t, struct blasfeo_dvec_ref *sy_n, int yi_n, struct blasfeo_dvec_ref *sy_t, int yi_t, struct blasfeo_dvec_ref *sz_n, int zi_n, struct blasfeo_dvec_ref *sz_t, int zi_t);
|
||||||
|
void blasfeo_dsymv_l_ref(int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sx, int xi, double beta, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
void blasfeo_dgemv_d_ref(int m, double alpha, struct blasfeo_dvec_ref *sA, int ai, struct blasfeo_dvec_ref *sx, int xi, double beta, struct blasfeo_dvec_ref *sy, int yi, struct blasfeo_dvec_ref *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
// --- level 3
|
||||||
|
|
||||||
|
// dense
|
||||||
|
void blasfeo_dgemm_nn_ref( int m, int n, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgemm_nt_ref( int m, int n, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgemm_tn_ref(int m, int n, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgemm_tt_ref(int m, int n, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
void blasfeo_dsyrk_ln_mn_ref( int m, int n, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_ln_ref( int m, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_lt_ref( int m, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_un_ref( int m, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_ut_ref( int m, int k, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
void blasfeo_dtrmm_rutn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrmm_rlnn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
void blasfeo_dtrsm_lunu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_lunn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_lutu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_lutn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_llnu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_llnn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_lltu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_lltn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_runu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_runn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_rutu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_rutn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_rlnu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_rlnn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_rltu_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dtrsm_rltn_ref( int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
void dgemm_diag_left_lib_ref(int m, int n, double alpha, double *dA, double *pB, int sdb, double beta, double *pC, int sdc, double *pD, int sdd);
|
||||||
|
void blasfeo_dgemm_dn_ref(int m, int n, double alpha, struct blasfeo_dvec_ref *sA, int ai, struct blasfeo_dmat_ref *sB, int bi, int bj, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgemm_nd_ref(int m, int n, double alpha, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dvec_ref *sB, int bi, double beta, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
// --- lapack
|
||||||
|
|
||||||
|
void blasfeo_dgetrf_nopivot_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgetrf_rowpivot_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj, int *ipiv);
|
||||||
|
void blasfeo_dpotrf_l_ref(int m, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dpotrf_l_mn_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_dpotrf_ln_ref(int m, int k, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dsyrk_dpotrf_ln_mn_ref(int m, int n, int k, struct blasfeo_dmat_ref *sA, int ai, int aj, struct blasfeo_dmat_ref *sB, int bi, int bj, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgetrf_nopivot_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_dgetrf_rowpivot_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj, int *ipiv);
|
||||||
|
void blasfeo_dgeqrf_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj, void *work);
|
||||||
|
void blasfeo_dgelqf_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj, void *work);
|
||||||
|
void blasfeo_dgelqf_pd_ref(int m, int n, struct blasfeo_dmat_ref *sC, int ci, int cj, struct blasfeo_dmat_ref *sD, int di, int dj, void *work);
|
||||||
|
void blasfeo_dgelqf_pd_la_ref(int m, int n1, struct blasfeo_dmat_ref *sL, int li, int lj, struct blasfeo_dmat_ref *sA, int ai, int aj, void *work);
|
||||||
|
void blasfeo_dgelqf_pd_lla_ref(int m, int n1, struct blasfeo_dmat_ref *sL0, int l0i, int l0j, struct blasfeo_dmat_ref *sL1, int l1i, int l1j, struct blasfeo_dmat_ref *sA, int ai, int aj, void *work);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_BLASFEO_API_REF_H_
|
||||||
84
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_hp_api.h
vendored
Normal file
84
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_hp_api.h
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_BLASFEO_HP_API_H_
|
||||||
|
#define BLASFEO_D_BLASFEO_HP_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 3 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_hp_dgemm_tn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T; C, D lower triangular
|
||||||
|
void blasfeo_hp_dsyrk_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * A^T ; C, D lower triangular
|
||||||
|
void blasfeo_hp_dsyrk3_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular
|
||||||
|
void blasfeo_hp_dtrsm_rltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 2 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x
|
||||||
|
void blasfeo_hp_dgemv_n(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_BLASFEO_HP_API_H_
|
||||||
|
|
||||||
283
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_ref_api.h
vendored
Normal file
283
third_party/acados/include/blasfeo/include/blasfeo_d_blasfeo_ref_api.h
vendored
Normal file
@@ -0,0 +1,283 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_D_BLASFEO_REF_API_H_
|
||||||
|
#define BLASFEO_D_BLASFEO_REF_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 1 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// z = y + alpha*x
|
||||||
|
// z[zi:zi+n] = alpha*x[xi:xi+n] + y[yi:yi+n]
|
||||||
|
// NB: Different arguments semantic compare to equivalent standard BLAS routine
|
||||||
|
void blasfeo_ref_daxpy(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z = beta*y + alpha*x
|
||||||
|
void blasfeo_ref_daxpby(int kmax, double alpha, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z = x .* y
|
||||||
|
void blasfeo_ref_dvecmul(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z += x .* y
|
||||||
|
void blasfeo_ref_dvecmulacc(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z = x .* y, return sum(z) = x^T * y
|
||||||
|
double blasfeo_ref_dvecmuldot(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// return x^T * y
|
||||||
|
double blasfeo_ref_ddot(int m, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi);
|
||||||
|
// construct givens plane rotation
|
||||||
|
void blasfeo_ref_drotg(double a, double b, double *c, double *s);
|
||||||
|
// apply plane rotation [a b] [c -s; s; c] to the aj0 and aj1 columns of A at row index ai
|
||||||
|
void blasfeo_ref_dcolrot(int m, struct blasfeo_dmat *sA, int ai, int aj0, int aj1, double c, double s);
|
||||||
|
// apply plane rotation [c s; -s c] [a; b] to the ai0 and ai1 rows of A at column index aj
|
||||||
|
void blasfeo_ref_drowrot(int m, struct blasfeo_dmat *sA, int ai0, int ai1, int aj, double c, double s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 2 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x
|
||||||
|
void blasfeo_ref_dgemv_n(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A' * x
|
||||||
|
void blasfeo_ref_dgemv_t(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(n)
|
||||||
|
void blasfeo_ref_dtrsv_lnn_mn(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(n)
|
||||||
|
void blasfeo_ref_dtrsv_ltn_mn(int m, int n, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, not_unit
|
||||||
|
void blasfeo_ref_dtrsv_lnn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, unit
|
||||||
|
void blasfeo_ref_dtrsv_lnu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) lower, transposed, not_unit
|
||||||
|
void blasfeo_ref_dtrsv_ltn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) lower, transposed, unit
|
||||||
|
void blasfeo_ref_dtrsv_ltu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) upper, not_transposed, not_unit
|
||||||
|
void blasfeo_ref_dtrsv_unn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) upper, transposed, not_unit
|
||||||
|
void blasfeo_ref_dtrsv_utn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmv_lnn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_ref_dtrmv_lnu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A' * x ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmv_ltn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A' * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_ref_dtrmv_ltu(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmv_unn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= A' * x ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmv_utn(int m, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z_n <= beta_n * y_n + alpha_n * A * x_n
|
||||||
|
// z_t <= beta_t * y_t + alpha_t * A' * x_t
|
||||||
|
void blasfeo_ref_dgemv_nt(int m, int n, double alpha_n, double alpha_t, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx_n, int xi_n, struct blasfeo_dvec *sx_t, int xi_t, double beta_n, double beta_t, struct blasfeo_dvec *sy_n, int yi_n, struct blasfeo_dvec *sy_t, int yi_t, struct blasfeo_dvec *sz_n, int zi_n, struct blasfeo_dvec *sz_t, int zi_t);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the lower triangular patr of A is accessed
|
||||||
|
void blasfeo_ref_dsymv_l(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
void blasfeo_ref_dsymv_l_mn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the upper triangular patr of A is accessed
|
||||||
|
void blasfeo_ref_dsymv_u(int m, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
// D = C + alpha * x * y^T
|
||||||
|
void blasfeo_ref_dger(int m, int n, double alpha, struct blasfeo_dvec *sx, int xi, struct blasfeo_dvec *sy, int yi, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x, A diagonal
|
||||||
|
void blasfeo_ref_dgemv_d(int m, double alpha, struct blasfeo_dvec *sA, int ai, struct blasfeo_dvec *sx, int xi, double beta, struct blasfeo_dvec *sy, int yi, struct blasfeo_dvec *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 3 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// D <= beta * C + alpha * A * B
|
||||||
|
void blasfeo_ref_dgemm_nn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T
|
||||||
|
void blasfeo_ref_dgemm_nt(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_ref_dgemm_tn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B^T
|
||||||
|
void blasfeo_ref_dgemm_tt(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D lower triangular
|
||||||
|
void blasfeo_ref_dsyrk_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_dsyrk_ln_mn(int m, int n, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D lower triangular
|
||||||
|
void blasfeo_ref_dsyrk_lt(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D upper triangular
|
||||||
|
void blasfeo_ref_dsyrk_un(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D upper triangular
|
||||||
|
void blasfeo_ref_dsyrk_ut(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_llnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_llnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_lltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_lltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_lunn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_lunu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_lutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^T * B ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_lutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_rlnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_rlnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_rltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A lower triangular
|
||||||
|
void blasfeo_ref_dtrmm_rltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_runn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_runu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_rutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; A upper triangular
|
||||||
|
void blasfeo_ref_dtrmm_rutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_llnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_llnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_lltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_lltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_lunn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular withunit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_lunu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_lutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular withunit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_lutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_rlnn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_rlnu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_rltn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_rltu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_runn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_runu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_dtrsm_rutn(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_ref_dtrsm_rutu(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T ; C, D lower triangular
|
||||||
|
void blasfeo_ref_dsyr2k_ln(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A ; C, D lower triangular
|
||||||
|
void blasfeo_ref_dsyr2k_lt(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T ; C, D upper triangular
|
||||||
|
void blasfeo_ref_dsyr2k_un(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A ; C, D upper triangular
|
||||||
|
void blasfeo_ref_dsyr2k_ut(int m, int k, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// D <= alpha * A * B + beta * C, with A diagonal (stored as strvec)
|
||||||
|
void dgemm_diag_left_lib(int m, int n, double alpha, double *dA, double *pB, int sdb, double beta, double *pC, int sdc, double *pD, int sdd);
|
||||||
|
void blasfeo_ref_dgemm_dn(int m, int n, double alpha, struct blasfeo_dvec *sA, int ai, struct blasfeo_dmat *sB, int bi, int bj, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B + beta * C, with B diagonal (stored as strvec)
|
||||||
|
void blasfeo_ref_dgemm_nd(int m, int n, double alpha, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dvec *sB, int bi, double beta, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
|
||||||
|
// D <= chol( C ) ; C, D lower triangular
|
||||||
|
void blasfeo_ref_dpotrf_l(int m, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_dpotrf_l_mn(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= chol( C ) ; C, D upper triangular
|
||||||
|
void blasfeo_ref_dpotrf_u(int m, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= chol( C + A * B' ) ; C, D lower triangular
|
||||||
|
void blasfeo_ref_dsyrk_dpotrf_ln(int m, int k, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_dsyrk_dpotrf_ln_mn(int m, int n, int k, struct blasfeo_dmat *sA, int ai, int aj, struct blasfeo_dmat *sB, int bi, int bj, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; no pivoting
|
||||||
|
void blasfeo_ref_dgetrf_np(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; row pivoting
|
||||||
|
void blasfeo_ref_dgetrf_rp(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, int *ipiv);
|
||||||
|
// D <= qr( C )
|
||||||
|
int blasfeo_ref_dgeqrf_worksize(int m, int n); // in bytes
|
||||||
|
void blasfeo_ref_dgeqrf(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
// D <= Q factor, where C is the output of the LQ factorization
|
||||||
|
int blasfeo_ref_dorglq_worksize(int m, int n, int k); // in bytes
|
||||||
|
void blasfeo_ref_dorglq(int m, int n, int k, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
// D <= lq( C )
|
||||||
|
void blasfeo_ref_dgelqf(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
int blasfeo_ref_dgelqf_worksize(int m, int n); // in bytes
|
||||||
|
// D <= lq( C ), positive diagonal elements
|
||||||
|
void blasfeo_ref_dgelqf_pd(int m, int n, struct blasfeo_dmat *sC, int ci, int cj, struct blasfeo_dmat *sD, int di, int dj, void *work);
|
||||||
|
// [L, A] <= lq( [L, A] ), positive diagonal elements, array of matrices, with
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_ref_dgelqf_pd_la(int m, int n1, struct blasfeo_dmat *sL, int li, int lj, struct blasfeo_dmat *sA, int ai, int aj, void *work);
|
||||||
|
// [L, L, A] <= lq( [L, L, A] ), positive diagonal elements, array of matrices, with:
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_ref_dgelqf_pd_lla(int m, int n1, struct blasfeo_dmat *sL0, int l0i, int l0j, struct blasfeo_dmat *sL1, int l1i, int l1j, struct blasfeo_dmat *sA, int ai, int aj, void *work);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_D_BLASFEO_REF_API_H_
|
||||||
|
|
||||||
1321
third_party/acados/include/blasfeo/include/blasfeo_d_kernel.h
vendored
Normal file
1321
third_party/acados/include/blasfeo/include/blasfeo_d_kernel.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
69
third_party/acados/include/blasfeo/include/blasfeo_i_aux_ext_dep.h
vendored
Normal file
69
third_party/acados/include/blasfeo/include/blasfeo_i_aux_ext_dep.h
vendored
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_I_AUX_EXT_DEP_H_
|
||||||
|
#define BLASFEO_I_AUX_EXT_DEP_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_target.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef EXT_DEP
|
||||||
|
|
||||||
|
// i_aux_extern_depend_lib
|
||||||
|
void int_zeros(int **pA, int row, int col);
|
||||||
|
void int_zeros_align(int **pA, int row, int col);
|
||||||
|
void int_free(int *pA);
|
||||||
|
void int_free_align(int *pA);
|
||||||
|
void int_print_mat(int row, int col, int *A, int lda);
|
||||||
|
int int_print_to_string_mat(char **buf_out, int row, int col, int *A, int lda);
|
||||||
|
|
||||||
|
#endif // EXT_DEP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_I_AUX_EXT_DEP_H_
|
||||||
57
third_party/acados/include/blasfeo/include/blasfeo_m_aux.h
vendored
Normal file
57
third_party/acados/include/blasfeo/include/blasfeo_m_aux.h
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_M_AUX_H_
|
||||||
|
#define BLASFEO_M_AUX_H_
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void blasfeo_cvt_d2s_vec(int m, struct blasfeo_dvec *vd, int vdi, struct blasfeo_svec *vs, int vsi);
|
||||||
|
void blasfeo_cvt_s2d_vec(int m, struct blasfeo_svec *vs, int vsi, struct blasfeo_dvec *vd, int vdi);
|
||||||
|
void blasfeo_cvt_d2s_mat(int m, int n, struct blasfeo_dmat *Md, int mid, int nid, struct blasfeo_smat *Ms, int mis, int nis);
|
||||||
|
void blasfeo_cvt_s2d_mat(int m, int n, struct blasfeo_smat *Ms, int mis, int nis, struct blasfeo_dmat *Md, int mid, int nid);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_M_AUX_H_
|
||||||
62
third_party/acados/include/blasfeo/include/blasfeo_memory.h
vendored
Normal file
62
third_party/acados/include/blasfeo/include/blasfeo_memory.h
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2020 by Gianluca Frison. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BLASFEO_MEMORY_H_
|
||||||
|
#define BLASFEO_MEMORY_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
int blasfeo_is_init();
|
||||||
|
//
|
||||||
|
void blasfeo_init();
|
||||||
|
//
|
||||||
|
void blasfeo_quit();
|
||||||
|
//
|
||||||
|
void *blasfeo_get_buffer();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_MEMORY_H_
|
||||||
77
third_party/acados/include/blasfeo/include/blasfeo_naming.h
vendored
Normal file
77
third_party/acados/include/blasfeo/include/blasfeo_naming.h
vendored
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ----------- Naming conventions
|
||||||
|
*
|
||||||
|
* (precision)(data)
|
||||||
|
*
|
||||||
|
* 1) d(double)
|
||||||
|
* s(single)
|
||||||
|
*
|
||||||
|
* 2) ge(general)
|
||||||
|
* tr(triangular)
|
||||||
|
* vec(vector)
|
||||||
|
* row(row)
|
||||||
|
* col(column)
|
||||||
|
* dia(diagonal)
|
||||||
|
*
|
||||||
|
* 3) se(set)
|
||||||
|
* cp(copy)
|
||||||
|
* sc(scale)
|
||||||
|
* ad(add)
|
||||||
|
* tr(transpose)
|
||||||
|
* in(insert)
|
||||||
|
* ex(extract)
|
||||||
|
* pe(premute)
|
||||||
|
* sw(swap)
|
||||||
|
*
|
||||||
|
* f(factorization)
|
||||||
|
*
|
||||||
|
* lqf(LQ factorization)
|
||||||
|
* qrf (factorization)
|
||||||
|
* trf (LU factorization using partial pivoting with row interchanges.)
|
||||||
|
*
|
||||||
|
* 4) _l(lower) / _u(upper)
|
||||||
|
* _lib8 (hp implementation, 8 rows kernel)
|
||||||
|
* _lib4 (hp implementation, 4 rows kernel)
|
||||||
|
* _lib0 (hp interface with reference implentation)
|
||||||
|
* _lib (reference implementation)
|
||||||
|
* _libref (reference implementation with dedicated namespace)
|
||||||
|
*
|
||||||
|
* 5) _sp(sparse)
|
||||||
|
* _exp(exponential format)
|
||||||
|
*/
|
||||||
88
third_party/acados/include/blasfeo/include/blasfeo_processor_features.h
vendored
Normal file
88
third_party/acados/include/blasfeo/include/blasfeo_processor_features.h
vendored
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Ian McInerney *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_PROCESSOR_FEATURES_H_
|
||||||
|
#define BLASFEO_PROCESSOR_FEATURES_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flags to indicate the different processor features
|
||||||
|
*/
|
||||||
|
//enum
|
||||||
|
//{
|
||||||
|
// // x86-64 CPU features
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_AVX = 0x0001, /// AVX instruction set
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_AVX2 = 0x0002, /// AVX2 instruction set
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_FMA = 0x0004, /// FMA instruction set
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_SSE3 = 0x0008, /// SSE3 instruction set
|
||||||
|
//
|
||||||
|
// // ARM CPU features
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_VFPv3 = 0x0100, /// VFPv3 instruction set
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_NEON = 0x0100, /// NEON instruction set
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_VFPv4 = 0x0100, /// VFPv4 instruction set
|
||||||
|
// BLASFEO_PROCESSOR_FEATURE_NEONv2 = 0x0100, /// NEONv2 instruction set
|
||||||
|
//} BLASFEO_PROCESSOR_FEATURES;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the features that this processor provides against what the library was compiled with.
|
||||||
|
*
|
||||||
|
* @param features - Pointer to an integer to store the supported feature set (using the flags in the BLASFEO_PROCESSOR_FEATURES enum)
|
||||||
|
* @return 0 if current processor doesn't support all features required for this library, 1 otherwise
|
||||||
|
*/
|
||||||
|
int blasfeo_processor_cpu_features( int* features );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the features that this processor provides against what the library was compiled with.
|
||||||
|
*
|
||||||
|
* @param features - Pointer to an integer to store the supported feature set (using the flags in the BLASFEO_PROCESSOR_FEATURES enum)
|
||||||
|
* @return 0 if current processor doesn't support all features required for this library, 1 otherwise
|
||||||
|
*/
|
||||||
|
void blasfeo_processor_library_features( int* features );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a string listing the features the current processor supports.
|
||||||
|
*
|
||||||
|
* @param features - Flags from the BLASFEO_PROCESSOR_FEATURES enum indicating the features supported
|
||||||
|
* @param featureString - Character array to store the feature string in
|
||||||
|
*/
|
||||||
|
void blasfeo_processor_feature_string( int features, char* featureString );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a string listing the processor features that this library version needs to run.
|
||||||
|
*
|
||||||
|
* @param featureString - Character array to store the feature string in
|
||||||
|
*/
|
||||||
|
void blasfeo_processor_library_string( char* featureString );
|
||||||
|
|
||||||
|
#endif // BLASFEO_PROCESSOR_FEATURES_H_
|
||||||
168
third_party/acados/include/blasfeo/include/blasfeo_s_aux.h
vendored
Normal file
168
third_party/acados/include/blasfeo/include/blasfeo_s_aux.h
vendored
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_AUX_H_
|
||||||
|
#define BLASFEO_S_AUX_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "blasfeo_s_aux_old.h"
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* d_aux_lib.c
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// returns the memory size (in bytes) needed for a smat
|
||||||
|
size_t blasfeo_memsize_smat(int m, int n);
|
||||||
|
size_t blasfeo_memsize_smat_ps(int ps, int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for the diagonal of a smat
|
||||||
|
size_t blasfeo_memsize_diag_smat(int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for a svec
|
||||||
|
size_t blasfeo_memsize_svec(int m);
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_create_smat(int m, int n, struct blasfeo_smat *sA, void *memory);
|
||||||
|
void blasfeo_create_smat_ps(int ps, int m, int n, struct blasfeo_smat *sA, void *memory);
|
||||||
|
// create a strvec for a vector of size m by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_create_svec(int m, struct blasfeo_svec *sA, void *memory);
|
||||||
|
void blasfeo_pack_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_pack_l_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_pack_u_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_pack_tran_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_pack_svec(int m, float *x, int xi, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_unpack_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda);
|
||||||
|
void blasfeo_unpack_tran_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda);
|
||||||
|
void blasfeo_unpack_svec(int m, struct blasfeo_svec *sa, int ai, float *x, int xi);
|
||||||
|
//void s_cast_mat2strmat(float *A, struct blasfeo_smat *sA);
|
||||||
|
//void s_cast_diag_mat2strmat(float *dA, struct blasfeo_smat *sA);
|
||||||
|
//void s_cast_vec2vecmat(float *a, struct blasfeo_svec *sa);
|
||||||
|
|
||||||
|
// ge
|
||||||
|
void blasfeo_sgese(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_sgecpsc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_sgecp(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_sgesc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_sgein1(float a, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
float blasfeo_sgeex1(struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_sgead(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_sgetr(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// tr
|
||||||
|
void blasfeo_strcp_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_strtr_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_strtr_u(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// dia
|
||||||
|
void blasfeo_sdiare(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_sdiaex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_sdiain(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_sdiain_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_sdiaex_sp(int kmax, float alpha, int *idx, struct blasfeo_smat *sD, int di, int dj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_sdiaad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_sdiaad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_sdiaadin_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// row
|
||||||
|
void blasfeo_srowin(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_srowex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_srowad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_srowad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_srowsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_srowpe(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
void blasfeo_srowpei(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
// col
|
||||||
|
void blasfeo_scolex(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_scolin(int kmax, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_scolad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_scolsc(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_scolsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_scolpe(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
void blasfeo_scolpei(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
// vec
|
||||||
|
void blasfeo_svecse(int m, float alpha, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_sveccp(int m, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
void blasfeo_svecsc(int m, float alpha, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_sveccpsc(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
void blasfeo_svecad(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
void blasfeo_svecin1(float a, struct blasfeo_svec *sx, int xi);
|
||||||
|
float blasfeo_svecex1(struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_svecad_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_svecin_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_svecex_sp(int m, float alpha, int *idx, struct blasfeo_svec *sx, int x, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z += alpha * x[idx]
|
||||||
|
void blasfeo_svecexad_sp(int m, double alpha, int *idx, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_sveccl(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_sveccl_mask(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi, struct blasfeo_svec *sm, int mi);
|
||||||
|
void blasfeo_svecze(int m, struct blasfeo_svec *sm, int mi, struct blasfeo_svec *sv, int vi, struct blasfeo_svec *se, int ei);
|
||||||
|
void blasfeo_svecnrm_inf(int m, struct blasfeo_svec *sx, int xi, float *ptr_norm);
|
||||||
|
void blasfeo_svecnrm_2(int m, struct blasfeo_svec *sx, int xi, float *ptr_norm);
|
||||||
|
void blasfeo_svecpe(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_svecpei(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Explicitly panel-major matrix format
|
||||||
|
*/
|
||||||
|
|
||||||
|
// returns the memory size (in bytes) needed for a dmat
|
||||||
|
size_t blasfeo_pm_memsize_smat(int ps, int m, int n);
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_pm_create_smat(int ps, int m, int n, struct blasfeo_pm_smat *sA, void *memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Explicitly column-major matrix format
|
||||||
|
*/
|
||||||
|
|
||||||
|
// returns the memory size (in bytes) needed for a dmat
|
||||||
|
size_t blasfeo_cm_memsize_smat(int m, int n);
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_cm_create_smat(int m, int n, struct blasfeo_pm_smat *sA, void *memory);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_AUX_H_
|
||||||
141
third_party/acados/include/blasfeo/include/blasfeo_s_aux_ext_dep.h
vendored
Normal file
141
third_party/acados/include/blasfeo/include/blasfeo_s_aux_ext_dep.h
vendored
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_AUX_EXT_DEP_H_
|
||||||
|
#define BLASFEO_S_AUX_EXT_DEP_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef EXT_DEP
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* s_aux_extern_depend_lib.c
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
/* column-major matrices */
|
||||||
|
|
||||||
|
// dynamically allocate row*col floats of memory and set accordingly a pointer to float; set allocated memory to zero
|
||||||
|
void s_zeros(float **pA, int row, int col);
|
||||||
|
// dynamically allocate row*col floats of memory aligned to 64-byte boundaries and set accordingly a pointer to float; set allocated memory to zero
|
||||||
|
void s_zeros_align(float **pA, int row, int col);
|
||||||
|
// dynamically allocate size bytes of memory aligned to 64-byte boundaries and set accordingly a pointer to float; set allocated memory to zero
|
||||||
|
void s_zeros_align_bytes(float **pA, int size);
|
||||||
|
// free the memory allocated by d_zeros
|
||||||
|
void s_free(float *pA);
|
||||||
|
// free the memory allocated by d_zeros_align or d_zeros_align_bytes
|
||||||
|
void s_free_align(float *pA);
|
||||||
|
// print a column-major matrix
|
||||||
|
void s_print_mat(int m, int n, float *A, int lda);
|
||||||
|
// print the transposed of a column-major matrix
|
||||||
|
void s_print_tran_mat(int row, int col, float *A, int lda);
|
||||||
|
// print to file a column-major matrix
|
||||||
|
void s_print_to_file_mat(FILE *file, int row, int col, float *A, int lda);
|
||||||
|
// print to file a column-major matrix in exponential format
|
||||||
|
void s_print_to_file_exp_mat(FILE *file, int row, int col, float *A, int lda);
|
||||||
|
// print to string a column-major matrix
|
||||||
|
void s_print_to_string_mat(char **buf_out, int row, int col, float *A, int lda);
|
||||||
|
// print to file the transposed of a column-major matrix
|
||||||
|
void s_print_tran_to_file_mat(FILE *file, int row, int col, float *A, int lda);
|
||||||
|
// print to file the transposed of a column-major matrix in exponential format
|
||||||
|
void s_print_tran_to_file_exp_mat(FILE *file, int row, int col, float *A, int lda);
|
||||||
|
// print in exponential notation a column-major matrix
|
||||||
|
void s_print_exp_mat(int m, int n, float *A, int lda);
|
||||||
|
// print in exponential notation the transposed of a column-major matrix
|
||||||
|
void s_print_exp_tran_mat(int row, int col, float *A, int lda);
|
||||||
|
|
||||||
|
/* strmat and strvec */
|
||||||
|
|
||||||
|
// create a strmat for a matrix of size m*n by dynamically allocating memory
|
||||||
|
void blasfeo_allocate_smat(int m, int n, struct blasfeo_smat *sA);
|
||||||
|
// create a strvec for a vector of size m by dynamically allocating memory
|
||||||
|
void blasfeo_allocate_svec(int m, struct blasfeo_svec *sa);
|
||||||
|
// free the memory allocated by blasfeo_allocate_dmat
|
||||||
|
void blasfeo_free_smat(struct blasfeo_smat *sA);
|
||||||
|
// free the memory allocated by blasfeo_allocate_dvec
|
||||||
|
void blasfeo_free_svec(struct blasfeo_svec *sa);
|
||||||
|
// print a strmat
|
||||||
|
void blasfeo_print_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// print in exponential notation a strmat
|
||||||
|
void blasfeo_print_exp_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// print to file a strmat
|
||||||
|
void blasfeo_print_to_file_smat(FILE *file, int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// print to file a strmat in exponential format
|
||||||
|
void blasfeo_print_to_file_exp_smat(FILE *file, int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// print to string a strmat
|
||||||
|
void blasfeo_print_to_string_smat(char **buf_out, int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// print the transpose of a strmat
|
||||||
|
void blasfeo_print_tran_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// print a strvec
|
||||||
|
void blasfeo_print_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print in exponential notation a strvec
|
||||||
|
void blasfeo_print_exp_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print to file a strvec
|
||||||
|
void blasfeo_print_to_file_svec(FILE *file, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print to string a strvec
|
||||||
|
void blasfeo_print_to_string_svec(char **buf_out, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print the transposed of a strvec
|
||||||
|
void blasfeo_print_tran_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print in exponential notation the transposed of a strvec
|
||||||
|
void blasfeo_print_exp_tran_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print to file the transposed of a strvec
|
||||||
|
void blasfeo_print_to_file_tran_svec(FILE *file, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
// print to string the transposed of a strvec
|
||||||
|
void blasfeo_print_to_string_tran_svec(char **buf_out, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
|
||||||
|
#endif // EXT_DEP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_AUX_EXT_DEP_H_
|
||||||
82
third_party/acados/include/blasfeo/include/blasfeo_s_aux_ext_dep_ref.h
vendored
Normal file
82
third_party/acados/include/blasfeo/include/blasfeo_s_aux_ext_dep_ref.h
vendored
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_AUX_EXT_DEP_REF_H_
|
||||||
|
#define BLASFEO_S_AUX_EXT_DEP_REF_H_
|
||||||
|
|
||||||
|
#if defined(EXT_DEP)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// expose reference BLASFEO for testing
|
||||||
|
// see blasfeo_s_aux_exp_dep.h for help
|
||||||
|
|
||||||
|
void blasfeo_print_smat_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_allocate_smat_ref(int m, int n, struct blasfeo_smat_ref *sA);
|
||||||
|
void blasfeo_allocate_svec_ref(int m, struct blasfeo_svec_ref *sa);
|
||||||
|
void blasfeo_free_smat_ref(struct blasfeo_smat_ref *sA);
|
||||||
|
void blasfeo_free_svec_ref(struct blasfeo_svec_ref *sa);
|
||||||
|
void blasfeo_print_smat_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_exp_smat_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_to_file_smat_ref(FILE *file, int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_to_file_exp_smat_ref(FILE *file, int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_to_string_smat_ref(char **buf_out, int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj);
|
||||||
|
void blasfeo_print_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_exp_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_to_file_svec(FILE *file, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_to_string_svec(char **buf_out, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_tran_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_exp_tran_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_to_file_tran_svec(FILE *file, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_print_to_string_tran_svec(char **buf_out, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // EXT_DEP
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_AUX_EXT_DEP_REF_H_
|
||||||
64
third_party/acados/include/blasfeo/include/blasfeo_s_aux_old.h
vendored
Normal file
64
third_party/acados/include/blasfeo/include/blasfeo_s_aux_old.h
vendored
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
// TODO remove
|
||||||
|
//
|
||||||
|
void strcp_l_lib(int m, float alpha, int offsetA, float *A, int sda, int offsetB, float *B, int sdb);
|
||||||
|
void sgead_lib(int m, int n, float alpha, int offsetA, float *A, int sda, int offsetB, float *B, int sdb);
|
||||||
|
void sgetr_lib(int m, int n, float alpha, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
void strtr_l_lib(int m, float alpha, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
void strtr_u_lib(int m, float alpha, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
void sdiareg_lib(int kmax, float reg, int offset, float *pD, int sdd);
|
||||||
|
void sdiain_sqrt_lib(int kmax, float *x, int offset, float *pD, int sdd);
|
||||||
|
void sdiaex_lib(int kmax, float alpha, int offset, float *pD, int sdd, float *x);
|
||||||
|
void sdiaad_lib(int kmax, float alpha, float *x, int offset, float *pD, int sdd);
|
||||||
|
void sdiain_libsp(int kmax, int *idx, float alpha, float *x, float *pD, int sdd);
|
||||||
|
void sdiaex_libsp(int kmax, int *idx, float alpha, float *pD, int sdd, float *x);
|
||||||
|
void sdiaad_libsp(int kmax, int *idx, float alpha, float *x, float *pD, int sdd);
|
||||||
|
void sdiaadin_libsp(int kmax, int *idx, float alpha, float *x, float *y, float *pD, int sdd);
|
||||||
|
void srowin_lib(int kmax, float alpha, float *x, float *pD);
|
||||||
|
void srowex_lib(int kmax, float alpha, float *pD, float *x);
|
||||||
|
void srowad_lib(int kmax, float alpha, float *x, float *pD);
|
||||||
|
void srowin_libsp(int kmax, float alpha, int *idx, float *x, float *pD);
|
||||||
|
void srowad_libsp(int kmax, int *idx, float alpha, float *x, float *pD);
|
||||||
|
void srowadin_libsp(int kmax, int *idx, float alpha, float *x, float *y, float *pD);
|
||||||
|
void srowsw_lib(int kmax, float *pA, float *pC);
|
||||||
|
void scolin_lib(int kmax, float *x, int offset, float *pD, int sdd);
|
||||||
|
void scolad_lib(int kmax, float alpha, float *x, int offset, float *pD, int sdd);
|
||||||
|
void scolin_libsp(int kmax, int *idx, float *x, float *pD, int sdd);
|
||||||
|
void scolad_libsp(int kmax, float alpha, int *idx, float *x, float *pD, int sdd);
|
||||||
|
void scolsw_lib(int kmax, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
void svecin_libsp(int kmax, int *idx, float *x, float *y);
|
||||||
|
void svecad_libsp(int kmax, int *idx, float alpha, float *x, float *y);
|
||||||
147
third_party/acados/include/blasfeo/include/blasfeo_s_aux_ref.h
vendored
Normal file
147
third_party/acados/include/blasfeo/include/blasfeo_s_aux_ref.h
vendored
Normal file
@@ -0,0 +1,147 @@
|
|||||||
|
|
||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_AUX_REF_H_
|
||||||
|
#define BLASFEO_S_AUX_REF_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "blasfeo_s_aux_old.h"
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* d_aux_lib.c
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
// returns the memory size (in bytes) needed for a smat
|
||||||
|
size_t blasfeo_ref_memsize_smat(int m, int n);
|
||||||
|
size_t blasfeo_ref_memsize_smat_ps(int ps, int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for the diagonal of a smat
|
||||||
|
size_t blasfeo_ref_memsize_diag_smat(int m, int n);
|
||||||
|
// returns the memory size (in bytes) needed for a svec
|
||||||
|
size_t blasfeo_ref_memsize_svec(int m);
|
||||||
|
// create a strmat for a matrix of size m*n by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_ref_create_smat(int m, int n, struct blasfeo_smat *sA, void *memory);
|
||||||
|
void blasfeo_ref_create_smat_ps(int ps, int m, int n, struct blasfeo_smat *sA, void *memory);
|
||||||
|
// create a strvec for a vector of size m by using memory passed by a pointer (pointer is not updated)
|
||||||
|
void blasfeo_ref_create_svec(int m, struct blasfeo_svec *sA, void *memory);
|
||||||
|
void blasfeo_ref_pack_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_pack_l_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sB, int bi, int bj);
|
||||||
|
void blasfeo_ref_pack_l_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sB, int bi, int bj);
|
||||||
|
void blasfeo_ref_pack_tran_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_pack_svec(int m, float *x, int xi, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_ref_unpack_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda);
|
||||||
|
void blasfeo_ref_unpack_tran_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda);
|
||||||
|
void blasfeo_ref_unpack_svec(int m, struct blasfeo_svec *sa, int ai, float *x, int xi);
|
||||||
|
void ref_s_cast_mat2strmat(float *A, struct blasfeo_smat *sA);
|
||||||
|
void ref_s_cast_diag_mat2strmat(float *dA, struct blasfeo_smat *sA);
|
||||||
|
void ref_s_cast_vec2vecmat(float *a, struct blasfeo_svec *sa);
|
||||||
|
|
||||||
|
// ge
|
||||||
|
void blasfeo_ref_sgese(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_sgecpsc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_sgecp(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_sgesc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_sgein1(float a, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
float blasfeo_ref_sgeex1(struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_sgead(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_sgetr(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// tr
|
||||||
|
void blasfeo_ref_strcp_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_strtr_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_strtr_u(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// dia
|
||||||
|
void blasfeo_ref_sdiare(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_sdiaex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_sdiain(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_sdiain_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_sdiaex_sp(int kmax, float alpha, int *idx, struct blasfeo_smat *sD, int di, int dj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_sdiaad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_sdiaad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_sdiaadin_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// row
|
||||||
|
void blasfeo_ref_srowin(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_srowex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_srowad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_srowad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_srowsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_srowpe(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
void blasfeo_ref_srowpei(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
// col
|
||||||
|
void blasfeo_ref_scolex(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_scolin(int kmax, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_scolad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_scolsc(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void blasfeo_ref_scolsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void blasfeo_ref_scolpe(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
void blasfeo_ref_scolpei(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
// vec
|
||||||
|
void blasfeo_ref_svecse(int m, float alpha, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_sveccp(int m, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
void blasfeo_ref_svecsc(int m, float alpha, struct blasfeo_svec *sa, int ai);
|
||||||
|
void blasfeo_ref_sveccpsc(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
void blasfeo_ref_svecad(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
void blasfeo_ref_svecin1(float a, struct blasfeo_svec *sx, int xi);
|
||||||
|
float blasfeo_ref_svecex1(struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_svecad_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_ref_svecin_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_ref_svecex_sp(int m, float alpha, int *idx, struct blasfeo_svec *sx, int x, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z += alpha * x[idx]
|
||||||
|
void blasfeo_ref_svecexad_sp(int m, double alpha, int *idx, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_ref_sveccl(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_ref_sveccl_mask(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi, struct blasfeo_svec *sm, int mi);
|
||||||
|
void blasfeo_ref_svecze(int m, struct blasfeo_svec *sm, int mi, struct blasfeo_svec *sv, int vi, struct blasfeo_svec *se, int ei);
|
||||||
|
void blasfeo_ref_svecnrm_inf(int m, struct blasfeo_svec *sx, int xi, float *ptr_norm);
|
||||||
|
void blasfeo_ref_svecpe(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi);
|
||||||
|
void blasfeo_ref_svecpei(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_AUX_REF_H_
|
||||||
|
|
||||||
177
third_party/acados/include/blasfeo/include/blasfeo_s_aux_test.h
vendored
Normal file
177
third_party/acados/include/blasfeo/include/blasfeo_s_aux_test.h
vendored
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_AUX_TEST_H_
|
||||||
|
#define BLASFEO_S_AUX_TEST_H_
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* d_aux_lib.c
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
int test_blasfeo_memsize_smat(int m, int n);
|
||||||
|
int test_blasfeo_memsize_diag_smat(int m, int n);
|
||||||
|
int test_blasfeo_memsize_svec(int m);
|
||||||
|
|
||||||
|
void test_blasfeo_create_smat(int m, int n, struct blasfeo_smat *sA, void *memory);
|
||||||
|
void test_blasfeo_create_svec(int m, struct blasfeo_svec *sA, void *memory);
|
||||||
|
|
||||||
|
void test_blasfeo_pack_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_pack_svec(int m, float *x, int xi, struct blasfeo_svec *sa, int ai);
|
||||||
|
void test_blasfeo_pack_tran_smat(int m, int n, float *A, int lda, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_unpack_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda);
|
||||||
|
void test_blasfeo_unpack_svec(int m, struct blasfeo_svec *sa, int ai, float *x, int xi);
|
||||||
|
void test_blasfeo_unpack_tran_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj, float *A, int lda);
|
||||||
|
|
||||||
|
void test_s_cast_mat2strmat(float *A, struct blasfeo_smat *sA);
|
||||||
|
void test_s_cast_diag_mat2strmat(float *dA, struct blasfeo_smat *sA);
|
||||||
|
void test_s_cast_vec2vecmat(float *a, struct blasfeo_svec *sa);
|
||||||
|
// copy and scale
|
||||||
|
void test_blasfeo_sgecpsc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void test_blasfeo_sgecp(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
void test_blasfeo_sgesc(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
|
||||||
|
// void test_blasfeo_sgein1(float a, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// float test_blasfeo_sgeex1(struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// void test_blasfeo_svecin1(float a, struct blasfeo_svec *sx, int xi);
|
||||||
|
// float test_blasfeo_svecex1(struct blasfeo_svec *sx, int xi);
|
||||||
|
|
||||||
|
// // A <= alpha
|
||||||
|
// void test_blasfeo_sgese(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// // a <= alpha
|
||||||
|
// void test_blasfeo_svecse(int m, float alpha, struct blasfeo_svec *sx, int xi);
|
||||||
|
|
||||||
|
|
||||||
|
// void test_blasfeo_sveccp(int m, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
// void test_blasfeo_svecsc(int m, float alpha, struct blasfeo_svec *sa, int ai);
|
||||||
|
|
||||||
|
// void test_strcp_l_lib(int m, float alpha, int offsetA, float *A, int sda, int offsetB, float *B, int sdb);
|
||||||
|
// void test_blasfeo_strcp_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
|
||||||
|
// void test_sgead_lib(int m, int n, float alpha, int offsetA, float *A, int sda, int offsetB, float *B, int sdb);
|
||||||
|
// void test_blasfeo_sgead(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// void test_blasfeo_svecad(int m, float alpha, struct blasfeo_svec *sa, int ai, struct blasfeo_svec *sc, int ci);
|
||||||
|
|
||||||
|
// void test_sgetr_lib(int m, int n, float alpha, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
// void test_blasfeo_sgetr(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
|
||||||
|
// void test_strtr_l_lib(int m, float alpha, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
// void test_blasfeo_strtr_l(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// void test_strtr_u_lib(int m, float alpha, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
// void test_blasfeo_strtr_u(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
|
||||||
|
// void test_sdiareg_lib(int kmax, float reg, int offset, float *pD, int sdd);
|
||||||
|
// void test_blasfeo_sdiaex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
// void test_blasfeo_sdiain(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// void test_sdiain_sqrt_lib(int kmax, float *x, int offset, float *pD, int sdd);
|
||||||
|
// void test_sdiaex_lib(int kmax, float alpha, int offset, float *pD, int sdd, float *x);
|
||||||
|
// void test_sdiaad_lib(int kmax, float alpha, float *x, int offset, float *pD, int sdd);
|
||||||
|
// void test_sdiain_libsp(int kmax, int *idx, float alpha, float *x, float *pD, int sdd);
|
||||||
|
// void test_blasfeo_sdiain_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// void test_sdiaex_libsp(int kmax, int *idx, float alpha, float *pD, int sdd, float *x);
|
||||||
|
// void test_blasfeo_sdiaex_sp(int kmax, float alpha, int *idx, struct blasfeo_smat *sD, int di, int dj, struct blasfeo_svec *sx, int xi);
|
||||||
|
// void test_blasfeo_sdiaad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// void test_sdiaad_libsp(int kmax, int *idx, float alpha, float *x, float *pD, int sdd);
|
||||||
|
// void test_blasfeo_sdiaad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// void test_sdiaadin_libsp(int kmax, int *idx, float alpha, float *x, float *y, float *pD, int sdd);
|
||||||
|
// void test_blasfeo_sdiaadin_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// void test_srowin_lib(int kmax, float alpha, float *x, float *pD);
|
||||||
|
// void test_blasfeo_srowin(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// void test_srowex_lib(int kmax, float alpha, float *pD, float *x);
|
||||||
|
// void test_blasfeo_srowex(int kmax, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi);
|
||||||
|
// void test_srowad_lib(int kmax, float alpha, float *x, float *pD);
|
||||||
|
// void test_blasfeo_srowad(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// void test_srowin_libsp(int kmax, float alpha, int *idx, float *x, float *pD);
|
||||||
|
// void test_srowad_libsp(int kmax, int *idx, float alpha, float *x, float *pD);
|
||||||
|
// void test_blasfeo_srowad_sp(int kmax, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// void test_srowadin_libsp(int kmax, int *idx, float alpha, float *x, float *y, float *pD);
|
||||||
|
// void test_srowsw_lib(int kmax, float *pA, float *pC);
|
||||||
|
// void test_blasfeo_srowsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// void test_blasfeo_srowpe(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
// void test_scolin_lib(int kmax, float *x, int offset, float *pD, int sdd);
|
||||||
|
// void test_blasfeo_scolin(int kmax, struct blasfeo_svec *sx, int xi, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
// void test_scolad_lib(int kmax, float alpha, float *x, int offset, float *pD, int sdd);
|
||||||
|
// void test_scolin_libsp(int kmax, int *idx, float *x, float *pD, int sdd);
|
||||||
|
// void test_scolad_libsp(int kmax, float alpha, int *idx, float *x, float *pD, int sdd);
|
||||||
|
// void test_scolsw_lib(int kmax, int offsetA, float *pA, int sda, int offsetC, float *pC, int sdc);
|
||||||
|
// void test_blasfeo_scolsw(int kmax, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sC, int ci, int cj);
|
||||||
|
// void test_blasfeo_scolpe(int kmax, int *ipiv, struct blasfeo_smat *sA);
|
||||||
|
// void test_svecin_libsp(int kmax, int *idx, float *x, float *y);
|
||||||
|
// void test_svecad_libsp(int kmax, int *idx, float alpha, float *x, float *y);
|
||||||
|
// void test_blasfeo_svecad_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi);
|
||||||
|
// void test_blasfeo_svecin_sp(int m, float alpha, struct blasfeo_svec *sx, int xi, int *idx, struct blasfeo_svec *sz, int zi);
|
||||||
|
// void test_blasfeo_svecex_sp(int m, float alpha, int *idx, struct blasfeo_svec *sx, int x, struct blasfeo_svec *sz, int zi);
|
||||||
|
// void test_blasfeo_sveccl(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi);
|
||||||
|
// void test_blasfeo_sveccl_mask(int m, struct blasfeo_svec *sxm, int xim, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sxp, int xip, struct blasfeo_svec *sz, int zi, struct blasfeo_svec *sm, int mi);
|
||||||
|
// void test_blasfeo_svecze(int m, struct blasfeo_svec *sm, int mi, struct blasfeo_svec *sv, int vi, struct blasfeo_svec *se, int ei);
|
||||||
|
// void test_blasfeo_svecnrm_inf(int m, struct blasfeo_svec *sx, int xi, float *ptr_norm);
|
||||||
|
// void test_blasfeo_svecpe(int kmax, int *ipiv, struct blasfeo_svec *sx, int xi);
|
||||||
|
|
||||||
|
|
||||||
|
// ext_dep
|
||||||
|
|
||||||
|
void test_blasfeo_allocate_smat(int m, int n, struct blasfeo_smat *sA);
|
||||||
|
void test_blasfeo_allocate_svec(int m, struct blasfeo_svec *sa);
|
||||||
|
|
||||||
|
void test_blasfeo_free_smat(struct blasfeo_smat *sA);
|
||||||
|
void test_blasfeo_free_svec(struct blasfeo_svec *sa);
|
||||||
|
|
||||||
|
void test_blasfeo_print_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_print_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void test_blasfeo_print_tran_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
|
||||||
|
void test_blasfeo_print_to_file_smat(FILE *file, int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_print_to_file_svec(FILE *file, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void test_blasfeo_print_to_file_tran_svec(FILE *file, int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
|
||||||
|
void test_blasfeo_print_exp_smat(int m, int n, struct blasfeo_smat *sA, int ai, int aj);
|
||||||
|
void test_blasfeo_print_exp_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
void test_blasfeo_print_exp_tran_svec(int m, struct blasfeo_svec *sa, int ai);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_AUX_TEST_H_
|
||||||
46
third_party/acados/include/blasfeo/include/blasfeo_s_blas.h
vendored
Normal file
46
third_party/acados/include/blasfeo/include/blasfeo_s_blas.h
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_BLAS_H_
|
||||||
|
#define BLASFEO_S_BLAS_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_s_blasfeo_api.h"
|
||||||
|
#include "blasfeo_s_blas_api.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_BLAS_H_
|
||||||
182
third_party/acados/include/blasfeo/include/blasfeo_s_blas_api.h
vendored
Normal file
182
third_party/acados/include/blasfeo/include/blasfeo_s_blas_api.h
vendored
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_BLAS_API_H_
|
||||||
|
#define BLASFEO_S_BLAS_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_target.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BLAS_API
|
||||||
|
#ifdef CBLAS_API
|
||||||
|
#ifndef BLASFEO_CBLAS_ENUM
|
||||||
|
#define BLASFEO_CBLAS_ENUM
|
||||||
|
#ifdef FORTRAN_BLAS_API
|
||||||
|
#ifndef CBLAS_H
|
||||||
|
enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
|
||||||
|
enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
|
||||||
|
enum CBLAS_UPLO {CblasUpper=121, CblasLower=122};
|
||||||
|
enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
|
||||||
|
enum CBLAS_SIDE {CblasLeft=141, CblasRight=142};
|
||||||
|
#endif // CBLAS_H
|
||||||
|
#else // FORTRAN_BLAS_API
|
||||||
|
enum BLASFEO_CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102};
|
||||||
|
enum BLASFEO_CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113};
|
||||||
|
enum BLASFEO_CBLAS_UPLO {CblasUpper=121, CblasLower=122};
|
||||||
|
enum BLASFEO_CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132};
|
||||||
|
enum BLASFEO_CBLAS_SIDE {CblasLeft=141, CblasRight=142};
|
||||||
|
#endif // FORTRAN_BLAS_API
|
||||||
|
#endif // BLASFEO_CBLAS_ENUM
|
||||||
|
#endif // CBLAS_API
|
||||||
|
#endif // BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FORTRAN_BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// BLAS 1
|
||||||
|
//
|
||||||
|
void saxpy_(int *n, float *alpha, float *x, int *incx, float *y, int *incy);
|
||||||
|
//
|
||||||
|
float sdot_(int *n, float *x, int *incx, float *y, int *incy);
|
||||||
|
|
||||||
|
// BLAS 3
|
||||||
|
//
|
||||||
|
void sgemm_(char *ta, char *tb, int *m, int *n, int *k, float *alpha, float *A, int *lda, float *B, int *ldb, float *beta, float *C, int *ldc);
|
||||||
|
//
|
||||||
|
void strsm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, float *alpha, float *A, int *lda, float *B, int *ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
void spotrf_(char *uplo, int *m, float *A, int *lda, int *info);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// CBLAS 1
|
||||||
|
//
|
||||||
|
void cblas_saxpy(const int N, const float alpha, const float *X, const int incX, float *Y, const int incY);
|
||||||
|
|
||||||
|
// CBLAS 3
|
||||||
|
//
|
||||||
|
void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc);
|
||||||
|
//
|
||||||
|
void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#else // BLASFEO_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// BLAS 1
|
||||||
|
//
|
||||||
|
void blasfeo_blas_saxpy(int *n, float *alpha, float *x, int *incx, float *y, int *incy);
|
||||||
|
//
|
||||||
|
float blasfeo_blas_sdot(int *n, float *x, int *incx, float *y, int *incy);
|
||||||
|
|
||||||
|
// BLAS 3
|
||||||
|
//
|
||||||
|
void blasfeo_blas_sgemm(char *ta, char *tb, int *m, int *n, int *k, float *alpha, float *A, int *lda, float *B, int *ldb, float *beta, float *C, int *ldc);
|
||||||
|
//
|
||||||
|
void blasfeo_blas_strsm(char *side, char *uplo, char *transa, char *diag, int *m, int *n, float *alpha, float *A, int *lda, float *B, int *ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
void blasfeo_lapack_spotrf(char *uplo, int *m, float *A, int *lda, int *info);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// CBLAS 1
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_saxpy(const int N, const float alpha, const float *X, const int incX, float *Y, const int incY);
|
||||||
|
|
||||||
|
// CBLAS 3
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_sgemm(const enum BLASFEO_CBLAS_ORDER Order, const enum BLASFEO_CBLAS_TRANSPOSE TransA, const enum BLASFEO_CBLAS_TRANSPOSE TransB, const int M, const int N, const int K, const float alpha, const float *A, const int lda, const float *B, const int ldb, const float beta, float *C, const int ldc);
|
||||||
|
//
|
||||||
|
void blasfeo_cblas_strsm(const enum BLASFEO_CBLAS_ORDER Order, const enum BLASFEO_CBLAS_SIDE Side, const enum BLASFEO_CBLAS_UPLO Uplo, const enum BLASFEO_CBLAS_TRANSPOSE TransA, const enum BLASFEO_CBLAS_DIAG Diag, const int M, const int N, const float alpha, const float *A, const int lda, float *B, const int ldb);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CBLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLASFEO_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif // BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_BLAS_API_H_
|
||||||
284
third_party/acados/include/blasfeo/include/blasfeo_s_blasfeo_api.h
vendored
Normal file
284
third_party/acados/include/blasfeo/include/blasfeo_s_blasfeo_api.h
vendored
Normal file
@@ -0,0 +1,284 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_BLASFEO_API_H_
|
||||||
|
#define BLASFEO_S_BLASFEO_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 1 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// z = y + alpha*x
|
||||||
|
void blasfeo_saxpy(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z = beta*y + alpha*x
|
||||||
|
void blasfeo_saxpby(int kmax, float alpha, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z = x .* y
|
||||||
|
void blasfeo_svecmul(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z += x .* y
|
||||||
|
void blasfeo_svecmulacc(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z = x .* y, return sum(z) = x^T * y
|
||||||
|
float blasfeo_svecmuldot(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// return x^T * y
|
||||||
|
float blasfeo_sdot(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi);
|
||||||
|
// construct givens plane rotation
|
||||||
|
void blasfeo_srotg(float a, float b, float *c, float *s);
|
||||||
|
// apply plane rotation [a b] [c -s; s; c] to the aj0 and aj1 columns of A at row index ai
|
||||||
|
void blasfeo_scolrot(int m, struct blasfeo_smat *sA, int ai, int aj0, int aj1, float c, float s);
|
||||||
|
// apply plane rotation [c s; -s c] [a; b] to the ai0 and ai1 rows of A at column index aj
|
||||||
|
void blasfeo_srowrot(int m, struct blasfeo_smat *sA, int ai0, int ai1, int aj, float c, float s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 2 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x
|
||||||
|
void blasfeo_sgemv_n(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A' * x
|
||||||
|
void blasfeo_sgemv_t(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(n)
|
||||||
|
void blasfeo_strsv_lnn_mn(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(n)
|
||||||
|
void blasfeo_strsv_ltn_mn(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, not_unit
|
||||||
|
void blasfeo_strsv_lnn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, unit
|
||||||
|
void blasfeo_strsv_lnu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) lower, transposed, not_unit
|
||||||
|
void blasfeo_strsv_ltn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) lower, transposed, unit
|
||||||
|
void blasfeo_strsv_ltu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) upper, not_transposed, not_unit
|
||||||
|
void blasfeo_strsv_unn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) upper, transposed, not_unit
|
||||||
|
void blasfeo_strsv_utn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular
|
||||||
|
void blasfeo_strmv_lnn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_strmv_lnu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A' * x ; A lower triangular
|
||||||
|
void blasfeo_strmv_ltn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A' * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_strmv_ltu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x ; A upper triangular
|
||||||
|
void blasfeo_strmv_unn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A' * x ; A upper triangular
|
||||||
|
void blasfeo_strmv_utn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z_n <= beta_n * y_n + alpha_n * A * x_n
|
||||||
|
// z_t <= beta_t * y_t + alpha_t * A' * x_t
|
||||||
|
void blasfeo_sgemv_nt(int m, int n, float alpha_n, float alpha_t, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx_n, int xi_n, struct blasfeo_svec *sx_t, int xi_t, float beta_n, float beta_t, struct blasfeo_svec *sy_n, int yi_n, struct blasfeo_svec *sy_t, int yi_t, struct blasfeo_svec *sz_n, int zi_n, struct blasfeo_svec *sz_t, int zi_t);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the lower triangular patr of A is accessed
|
||||||
|
void blasfeo_ssymv_l(int m, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_ssymv_l_mn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the upper triangular patr of A is accessed
|
||||||
|
void blasfeo_ssymv_u(int m, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// D = C + alpha * x * y^T
|
||||||
|
void blasfeo_sger(int m, int n, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x, A diagonal
|
||||||
|
void blasfeo_sgemv_d(int m, float alpha, struct blasfeo_svec *sA, int ai, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 3 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// D <= beta * C + alpha * A * B
|
||||||
|
void blasfeo_sgemm_nn(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T
|
||||||
|
void blasfeo_sgemm_nt(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_sgemm_tn(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_sgemm_tt(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D lower triangular
|
||||||
|
void blasfeo_ssyrk_ln(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_ln_mn(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D lower triangular
|
||||||
|
void blasfeo_ssyrk_lt(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D upper triangular
|
||||||
|
void blasfeo_ssyrk_un(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D upper triangular
|
||||||
|
void blasfeo_ssyrk_ut(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; B upper triangular
|
||||||
|
void blasfeo_strmm_rutn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A lower triangular
|
||||||
|
void blasfeo_strmm_rlnn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_llnn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_strsm_llnu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_lltn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_strsm_lltu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_lunn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular withunit diagonal
|
||||||
|
void blasfeo_strsm_lunu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_lutn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular withunit diagonal
|
||||||
|
void blasfeo_strsm_lutu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_rlnn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_strsm_rlnu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_rltn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_strsm_rltu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_runn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_strsm_runu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_strsm_rutn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_strsm_rutu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T; C, D lower triangular
|
||||||
|
void blasfeo_ssyr2k_ln(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A; C, D lower triangular
|
||||||
|
void blasfeo_ssyr2k_lt(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T; C, D upper triangular
|
||||||
|
void blasfeo_ssyr2k_un(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A; C, D upper triangular
|
||||||
|
void blasfeo_ssyr2k_ut(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// D <= alpha * A * B + beta * C, with A diagonal (stored as strvec)
|
||||||
|
void sgemm_diag_left_ib(int m, int n, float alpha, float *dA, float *pB, int sdb, float beta, float *pC, int sdc, float *pD, int sdd);
|
||||||
|
void blasfeo_sgemm_dn(int m, int n, float alpha, struct blasfeo_svec *sA, int ai, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B + beta * C, with B diagonal (stored as strvec)
|
||||||
|
void blasfeo_sgemm_nd(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sB, int bi, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
|
||||||
|
// D <= chol( C ) ; C, D lower triangular
|
||||||
|
void blasfeo_spotrf_l(int m, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_spotrf_l_mn(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= chol( C ) ; C, D upper triangular
|
||||||
|
void blasfeo_spotrf_u(int m, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= chol( C + A * B' ) ; C, D lower triangular
|
||||||
|
void blasfeo_ssyrk_spotrf_ln(int m, int k, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_spotrf_ln_mn(int m, int n, int k, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; no pivoting
|
||||||
|
void blasfeo_sgetrf_np(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; row pivoting
|
||||||
|
void blasfeo_sgetrf_rp(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, int *ipiv);
|
||||||
|
// D <= qr( C )
|
||||||
|
void blasfeo_sgeqrf(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
int blasfeo_sgeqrf_worksize(int m, int n); // in bytes
|
||||||
|
// D <= Q factor, where C is the output of the LQ factorization
|
||||||
|
int blasfeo_sorglq_worksize(int m, int n, int k); // in bytes
|
||||||
|
void blasfeo_sorglq(int m, int n, int k, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
// D <= lq( C )
|
||||||
|
void blasfeo_sgelqf(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
int blasfeo_sgelqf_worksize(int m, int n); // in bytes
|
||||||
|
// D <= lq( C ), positive diagonal elements
|
||||||
|
void blasfeo_sgelqf_pd(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
// [L, A] <= lq( [L, A] ), positive diagonal elements, array of matrices, with
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_sgelqf_pd_la(int m, int n1, struct blasfeo_smat *sL, int li, int lj, struct blasfeo_smat *sA, int ai, int aj, void *work);
|
||||||
|
// [L, L, A] <= lq( [L, L, A] ), positive diagonal elements, array of matrices, with:
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_sgelqf_pd_lla(int m, int n1, struct blasfeo_smat *sL0, int l0i, int l0j, struct blasfeo_smat *sL1, int l1i, int l1j, struct blasfeo_smat *sA, int ai, int aj, void *work);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// BLAS API helper functions
|
||||||
|
//
|
||||||
|
|
||||||
|
#if ( defined(BLAS_API) & defined(MF_PANELMAJ) )
|
||||||
|
// BLAS 3
|
||||||
|
void blasfeo_cm_sgemm_nn(int m, int n, int k, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, float beta, struct blasfeo_cm_smat *sC, int ci, int cj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_sgemm_nt(int m, int n, int k, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, float beta, struct blasfeo_cm_smat *sC, int ci, int cj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_sgemm_tn(int m, int n, int k, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, float beta, struct blasfeo_cm_smat *sC, int ci, int cj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_sgemm_tt(int m, int n, int k, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, float beta, struct blasfeo_cm_smat *sC, int ci, int cj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_llnn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_llnu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_lltn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_lltu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_lunn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_lunu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_lutn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_lutu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_rlnn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_rlnu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_rltn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_rltu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_runn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_runu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_rutn(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_strsm_rutu(int m, int n, float alpha, struct blasfeo_cm_smat *sA, int ai, int aj, struct blasfeo_cm_smat *sB, int bi, int bj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
// LAPACK
|
||||||
|
void blasfeo_cm_spotrf_l(int m, struct blasfeo_cm_smat *sC, int ci, int cj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_cm_spotrf_u(int m, struct blasfeo_cm_smat *sC, int ci, int cj, struct blasfeo_cm_smat *sD, int di, int dj);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_BLASFEO_API_H_
|
||||||
135
third_party/acados/include/blasfeo/include/blasfeo_s_blasfeo_api_ref.h
vendored
Normal file
135
third_party/acados/include/blasfeo/include/blasfeo_s_blasfeo_api_ref.h
vendored
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_BLASFEO_API_REF_H_
|
||||||
|
#define BLASFEO_S_BLASFEO_API_REF_H_
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// expose reference BLASFEO for testing
|
||||||
|
|
||||||
|
// --- level 1
|
||||||
|
|
||||||
|
void blasfeo_saxpy_ref(int kmax, float alpha, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_saxpby_ref(int kmax, float alpha, struct blasfeo_svec_ref *sx, int xi, float beta, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_svecmul_ref(int m, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_svecmulacc_ref(int m, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
float blasfeo_svecmuldot_ref(int m, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
float blasfeo_sdot_ref(int m, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sy, int yi);
|
||||||
|
void blasfeo_srotg_ref(float a, float b, float *c, float *s);
|
||||||
|
void blasfeo_scolrot_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj0, int aj1, float c, float s);
|
||||||
|
void blasfeo_srowrot_ref(int m, struct blasfeo_smat_ref *sA, int ai0, int ai1, int aj, float c, float s);
|
||||||
|
|
||||||
|
|
||||||
|
// --- level 2
|
||||||
|
|
||||||
|
// dense
|
||||||
|
void blasfeo_sgemv_n_ref(int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, float beta, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_sgemv_t_ref(int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, float beta, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_lnn_mn_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_ltn_mn_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_lnn_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_lnu_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_ltn_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_ltu_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_unn_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strsv_utn_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strmv_unn_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strmv_utn_ref(int m, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strmv_lnn_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strmv_ltn_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strmv_lnu_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_strmv_ltu_ref(int m, int n, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
void blasfeo_sgemv_nt_ref(int m, int n, float alpha_n, float alpha_t, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx_n, int xi_n, struct blasfeo_svec_ref *sx_t, int xi_t, float beta_n, float beta_t, struct blasfeo_svec_ref *sy_n, int yi_n, struct blasfeo_svec_ref *sy_t, int yi_t, struct blasfeo_svec_ref *sz_n, int zi_n, struct blasfeo_svec_ref *sz_t, int zi_t);
|
||||||
|
void blasfeo_ssymv_l_ref(int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sx, int xi, float beta, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
void blasfeo_sgemv_d_ref(int m, float alpha, struct blasfeo_svec_ref *sA, int ai, struct blasfeo_svec_ref *sx, int xi, float beta, struct blasfeo_svec_ref *sy, int yi, struct blasfeo_svec_ref *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
// --- level 3
|
||||||
|
|
||||||
|
// dense
|
||||||
|
void blasfeo_sgemm_nn_ref( int m, int n, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgemm_nt_ref( int m, int n, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgemm_tn_ref(int m, int n, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgemm_tt_ref(int m, int n, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
void blasfeo_ssyrk_ln_mn_ref( int m, int n, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_ln_ref( int m, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_lt_ref( int m, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_un_ref( int m, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_ut_ref( int m, int k, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
void blasfeo_strmm_rutn_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_strmm_rlnn_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_strsm_rltn_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_strsm_rltu_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_strsm_rutn_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_strsm_llnu_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_strsm_lunn_ref( int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
void dgemm_diag_left_lib_ref(int m, int n, float alpha, float *dA, float *pB, int sdb, float beta, float *pC, int sdc, float *pD, int sdd);
|
||||||
|
void blasfeo_sgemm_dn_ref(int m, int n, float alpha, struct blasfeo_svec_ref *sA, int ai, struct blasfeo_smat_ref *sB, int bi, int bj, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgemm_nd_ref(int m, int n, float alpha, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_svec_ref *sB, int bi, float beta, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
|
||||||
|
// --- lapack
|
||||||
|
|
||||||
|
void blasfeo_sgetrf_nopivot_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgetrf_rowpivot_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj, int *ipiv);
|
||||||
|
void blasfeo_spotrf_l_ref(int m, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_spotrf_l_mn_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_dpotrf_ln_ref(int m, int k, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_ssyrk_dpotrf_ln_mn_ref(int m, int n, int k, struct blasfeo_smat_ref *sA, int ai, int aj, struct blasfeo_smat_ref *sB, int bi, int bj, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgetrf_nopivot_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj);
|
||||||
|
void blasfeo_sgetrf_rowpivot_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj, int *ipiv);
|
||||||
|
void blasfeo_sgeqrf_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj, void *work);
|
||||||
|
void blasfeo_sgelqf_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj, void *work);
|
||||||
|
void blasfeo_sgelqf_pd_ref(int m, int n, struct blasfeo_smat_ref *sC, int ci, int cj, struct blasfeo_smat_ref *sD, int di, int dj, void *work);
|
||||||
|
void blasfeo_sgelqf_pd_la_ref(int m, int n1, struct blasfeo_smat_ref *sL, int li, int lj, struct blasfeo_smat_ref *sA, int ai, int aj, void *work);
|
||||||
|
void blasfeo_sgelqf_pd_lla_ref(int m, int n1, struct blasfeo_smat_ref *sL0, int l0i, int l0j, struct blasfeo_smat_ref *sL1, int l1i, int l1j, struct blasfeo_smat_ref *sA, int ai, int aj, void *work);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_BLASFEO_API_REF_H_
|
||||||
252
third_party/acados/include/blasfeo/include/blasfeo_s_blasfeo_ref_api.h
vendored
Normal file
252
third_party/acados/include/blasfeo/include/blasfeo_s_blasfeo_ref_api.h
vendored
Normal file
@@ -0,0 +1,252 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_BLASFEO_REF_API_H_
|
||||||
|
#define BLASFEO_S_BLASFEO_REF_API_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "blasfeo_common.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 1 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// z = y + alpha*x
|
||||||
|
void blasfeo_ref_saxpy(int kmax, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z = beta*y + alpha*x
|
||||||
|
void blasfeo_ref_saxpby(int kmax, float alpha, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z = x .* y
|
||||||
|
void blasfeo_ref_svecmul(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z += x .* y
|
||||||
|
void blasfeo_ref_svecmulacc(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z = x .* y, return sum(z) = x^T * y
|
||||||
|
float blasfeo_ref_svecmuldot(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// return x^T * y
|
||||||
|
float blasfeo_ref_sdot(int m, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi);
|
||||||
|
// construct givens plane rotation
|
||||||
|
void blasfeo_ref_srotg(float a, float b, float *c, float *s);
|
||||||
|
// apply plane rotation [a b] [c -s; s; c] to the aj0 and aj1 columns of A at row index ai
|
||||||
|
void blasfeo_ref_scolrot(int m, struct blasfeo_smat *sA, int ai, int aj0, int aj1, float c, float s);
|
||||||
|
// apply plane rotation [c s; -s c] [a; b] to the ai0 and ai1 rows of A at column index aj
|
||||||
|
void blasfeo_ref_srowrot(int m, struct blasfeo_smat *sA, int ai0, int ai1, int aj, float c, float s);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 2 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x
|
||||||
|
void blasfeo_ref_sgemv_n(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A' * x
|
||||||
|
void blasfeo_ref_sgemv_t(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(n)
|
||||||
|
void blasfeo_ref_strsv_lnn_mn(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(n)
|
||||||
|
void blasfeo_ref_strsv_ltn_mn(int m, int n, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, not_unit
|
||||||
|
void blasfeo_ref_strsv_lnn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A ) * x, A (m)x(m) lower, not_transposed, unit
|
||||||
|
void blasfeo_ref_strsv_lnu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) lower, transposed, not_unit
|
||||||
|
void blasfeo_ref_strsv_ltn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) lower, transposed, unit
|
||||||
|
void blasfeo_ref_strsv_ltu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) upper, not_transposed, not_unit
|
||||||
|
void blasfeo_ref_strsv_unn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= inv( A' ) * x, A (m)x(m) upper, transposed, not_unit
|
||||||
|
void blasfeo_ref_strsv_utn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular
|
||||||
|
void blasfeo_ref_strmv_lnn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_ref_strmv_lnu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A' * x ; A lower triangular
|
||||||
|
void blasfeo_ref_strmv_ltn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A' * x ; A lower triangular, unit diagonal
|
||||||
|
void blasfeo_ref_strmv_ltu(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x ; A upper triangular
|
||||||
|
void blasfeo_ref_strmv_unn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= A' * x ; A upper triangular
|
||||||
|
void blasfeo_ref_strmv_utn(int m, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z_n <= beta_n * y_n + alpha_n * A * x_n
|
||||||
|
// z_t <= beta_t * y_t + alpha_t * A' * x_t
|
||||||
|
void blasfeo_ref_sgemv_nt(int m, int n, float alpha_n, float alpha_t, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx_n, int xi_n, struct blasfeo_svec *sx_t, int xi_t, float beta_n, float beta_t, struct blasfeo_svec *sy_n, int yi_n, struct blasfeo_svec *sy_t, int yi_t, struct blasfeo_svec *sz_n, int zi_n, struct blasfeo_svec *sz_t, int zi_t);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the lower triangular patr of A is accessed
|
||||||
|
void blasfeo_ref_ssymv_l(int m, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
void blasfeo_ref_ssymv_l_mn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// z <= beta * y + alpha * A * x, where A is symmetric and only the upper triangular patr of A is accessed
|
||||||
|
void blasfeo_ref_ssymv_u(int m, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
// D = C + alpha * x * y^T
|
||||||
|
void blasfeo_ref_sger(int m, int n, float alpha, struct blasfeo_svec *sx, int xi, struct blasfeo_svec *sy, int yi, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// z <= beta * y + alpha * A * x, A diagonal
|
||||||
|
void blasfeo_ref_sgemv_d(int m, float alpha, struct blasfeo_svec *sA, int ai, struct blasfeo_svec *sx, int xi, float beta, struct blasfeo_svec *sy, int yi, struct blasfeo_svec *sz, int zi);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// level 3 BLAS
|
||||||
|
//
|
||||||
|
|
||||||
|
// dense
|
||||||
|
|
||||||
|
// D <= beta * C + alpha * A * B
|
||||||
|
void blasfeo_ref_sgemm_nn(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T
|
||||||
|
void blasfeo_ref_sgemm_nt(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_ref_sgemm_tn(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B
|
||||||
|
void blasfeo_ref_sgemm_tt(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D lower triangular
|
||||||
|
void blasfeo_ref_ssyrk_ln(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_ssyrk_ln_mn(int m, int n, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D lower triangular
|
||||||
|
void blasfeo_ref_ssyrk_lt(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T ; C, D upper triangular
|
||||||
|
void blasfeo_ref_ssyrk_un(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B ; C, D upper triangular
|
||||||
|
void blasfeo_ref_ssyrk_ut(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^T ; B upper triangular
|
||||||
|
void blasfeo_ref_strmm_rutn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A ; A lower triangular
|
||||||
|
void blasfeo_ref_strmm_rlnn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_llnn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_strsm_llnu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular employint explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_lltn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_strsm_lltu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_lunn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-1} * B , with A upper triangular withunit diagonal
|
||||||
|
void blasfeo_ref_strsm_lunu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_lutn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A^{-T} * B , with A upper triangular withunit diagonal
|
||||||
|
void blasfeo_ref_strsm_lutu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_rlnn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_strsm_rlnu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_rltn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A lower triangular with unit diagonal
|
||||||
|
void blasfeo_ref_strsm_rltu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_runn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-1} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_ref_strsm_runu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular employing explicit inverse of diagonal
|
||||||
|
void blasfeo_ref_strsm_rutn(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * B * A^{-T} , with A upper triangular with unit diagonal
|
||||||
|
void blasfeo_ref_strsm_rutu(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T ; C, D lower triangular
|
||||||
|
void blasfeo_ref_ssyr2k_ln(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A ; C, D lower triangular
|
||||||
|
void blasfeo_ref_ssyr2k_lt(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A * B^T + alpha * B * A^T ; C, D upper triangular
|
||||||
|
void blasfeo_ref_ssyr2k_un(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= beta * C + alpha * A^T * B + alpha * B^T * A ; C, D upper triangular
|
||||||
|
void blasfeo_ref_ssyr2k_ut(int m, int k, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
|
||||||
|
// diagonal
|
||||||
|
|
||||||
|
// D <= alpha * A * B + beta * C, with A diagonal (stored as strvec)
|
||||||
|
void sgemm_diag_left_ib(int m, int n, float alpha, float *dA, float *pB, int sdb, float beta, float *pC, int sdc, float *pD, int sdd);
|
||||||
|
void blasfeo_ref_sgemm_dn(int m, int n, float alpha, struct blasfeo_svec *sA, int ai, struct blasfeo_smat *sB, int bi, int bj, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= alpha * A * B + beta * C, with B diagonal (stored as strvec)
|
||||||
|
void blasfeo_ref_sgemm_nd(int m, int n, float alpha, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_svec *sB, int bi, float beta, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// LAPACK
|
||||||
|
//
|
||||||
|
|
||||||
|
// D <= chol( C ) ; C, D lower triangular
|
||||||
|
void blasfeo_ref_spotrf_l(int m, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_spotrf_l_mn(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= chol( C ) ; C, D upper triangular
|
||||||
|
void blasfeo_ref_spotrf_u(int m, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= chol( C + A * B' ) ; C, D lower triangular
|
||||||
|
void blasfeo_ref_ssyrk_spotrf_ln(int m, int k, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
void blasfeo_ref_ssyrk_spotrf_ln_mn(int m, int n, int k, struct blasfeo_smat *sA, int ai, int aj, struct blasfeo_smat *sB, int bi, int bj, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; no pivoting
|
||||||
|
void blasfeo_ref_sgetrf_np(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj);
|
||||||
|
// D <= lu( C ) ; row pivoting
|
||||||
|
void blasfeo_ref_sgetrf_rp(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, int *ipiv);
|
||||||
|
// D <= qr( C )
|
||||||
|
void blasfeo_ref_sgeqrf(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
int blasfeo_ref_sgeqrf_worksize(int m, int n); // in bytes
|
||||||
|
// D <= Q factor, where C is the output of the LQ factorization
|
||||||
|
int blasfeo_ref_sorglq_worksize(int m, int n, int k); // in bytes
|
||||||
|
void blasfeo_ref_sorglq(int m, int n, int k, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
// D <= lq( C )
|
||||||
|
void blasfeo_ref_sgelqf(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
int blasfeo_ref_sgelqf_worksize(int m, int n); // in bytes
|
||||||
|
// D <= lq( C ), positive diagonal elements
|
||||||
|
void blasfeo_ref_sgelqf_pd(int m, int n, struct blasfeo_smat *sC, int ci, int cj, struct blasfeo_smat *sD, int di, int dj, void *work);
|
||||||
|
// [L, A] <= lq( [L, A] ), positive diagonal elements, array of matrices, with
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_ref_sgelqf_pd_la(int m, int n1, struct blasfeo_smat *sL, int li, int lj, struct blasfeo_smat *sA, int ai, int aj, void *work);
|
||||||
|
// [L, L, A] <= lq( [L, L, A] ), positive diagonal elements, array of matrices, with:
|
||||||
|
// L lower triangular, of size (m)x(m)
|
||||||
|
// A full, of size (m)x(n1)
|
||||||
|
void blasfeo_ref_sgelqf_pd_lla(int m, int n1, struct blasfeo_smat *sL0, int l0i, int l0j, struct blasfeo_smat *sL1, int l1i, int l1j, struct blasfeo_smat *sA, int ai, int aj, void *work);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_BLASFEO_REF_API_H_
|
||||||
|
|
||||||
692
third_party/acados/include/blasfeo/include/blasfeo_s_kernel.h
vendored
Normal file
692
third_party/acados/include/blasfeo/include/blasfeo_s_kernel.h
vendored
Normal file
@@ -0,0 +1,692 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_S_KERNEL_H_
|
||||||
|
#define BLASFEO_S_KERNEL_H_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// utils
|
||||||
|
void blasfeo_align_2MB(void *ptr, void **ptr_align);
|
||||||
|
void blasfeo_align_4096_byte(void *ptr, void **ptr_align);
|
||||||
|
void blasfeo_align_64_byte(void *ptr, void **ptr_align);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// lib8
|
||||||
|
//
|
||||||
|
|
||||||
|
// 24x4
|
||||||
|
void kernel_sgemm_nt_24x4_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_nt_24x4_vs_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_sgemm_nt_24x4_gen_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_sgemm_nn_24x4_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_nn_24x4_vs_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_sgemm_nn_24x4_gen_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_ssyrk_nt_l_24x4_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_ssyrk_nt_l_24x4_vs_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_ssyrk_nt_l_20x4_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_ssyrk_nt_l_20x4_vs_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_spotrf_nt_l_24x4_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_24x4_vs_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_spotrf_nt_l_20x4_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_20x4_vs_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_strsm_nt_rl_inv_24x4_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_24x4_vs_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_24x4_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_24x4_vs_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_20x4_vs_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_20x4_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_24x4_vs_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_24x4_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_strmm_nn_rl_24x4_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *D, int sdd);
|
||||||
|
void kernel_strmm_nn_rl_24x4_vs_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *D, int sdd, int km, int kn);
|
||||||
|
|
||||||
|
// 16x8
|
||||||
|
void kernel_sgemm_nt_16x8_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *spil);
|
||||||
|
|
||||||
|
// 16x4
|
||||||
|
void kernel_sgemm_nt_16x4_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_nt_16x4_vs_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_sgemm_nt_16x4_gen_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_sgemm_nn_16x4_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_nn_16x4_vs_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_sgemm_nn_16x4_gen_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_ssyrk_nt_l_16x4_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_ssyrk_nt_l_16x4_vs_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_ssyrk_nt_l_12x4_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_ssyrk_nt_l_12x4_vs_lib8(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_spotrf_nt_l_16x4_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_16x4_vs_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_spotrf_nt_l_12x4_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_12x4_vs_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_strsm_nt_rl_inv_16x4_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_16x4_vs_lib8(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_16x4_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_16x4_vs_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_12x4_vs_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_12x4_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_16x4_vs_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_16x4_lib8(int kp, float *Ap, int sdap, float *Bp, int km_, float *Am, int sdam, float *Bm, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_strmm_nn_rl_16x4_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *D, int sdd);
|
||||||
|
void kernel_strmm_nn_rl_16x4_vs_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *D, int sdd, int km, int kn);
|
||||||
|
void kernel_strmm_nn_rl_16x4_gen_lib8(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nt_8x8_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_nt_8x8_vs_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_sgemm_nt_8x8_gen_lib8(int k, float *alpha, float *A, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_sgemm_nn_8x8_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_nn_8x8_vs_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_sgemm_nn_8x8_gen_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_ssyrk_nt_l_8x8_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_ssyrk_nt_l_8x8_vs_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_spotrf_nt_l_8x8_lib8(int k, float *A, float *B, float *C, float *D, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_8x8_vs_lib8(int k, float *A, float *B, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x8_lib8(int k, float *A, float *B, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x8_vs_lib8(int k, float *A, float *B, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_8x8_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_8x8_vs_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_8x8_vs_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_8x8_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *inv_diag_D);
|
||||||
|
|
||||||
|
// 8x4
|
||||||
|
void kernel_sgemm_nt_8x4_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_nt_8x4_vs_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_sgemm_nt_8x4_gen_lib8(int k, float *alpha, float *A, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_sgemm_nn_8x4_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_nn_8x4_vs_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_sgemm_nn_8x4_gen_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
//void kernel_ssyrk_nt_l_8x4_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_ssyrk_nt_l_8x4_vs_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_spotrf_nt_l_8x4_lib8(int k, float *A, float *B, float *C, float *D, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_8x4_vs_lib8(int k, float *A, float *B, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x4_lib8(int k, float *A, float *B, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x4_vs_lib8(int k, float *A, float *B, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_8x4_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_8x4_vs_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_8x4_vs_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_8x4_lib8(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *inv_diag_D);
|
||||||
|
void kernel_strmm_nn_rl_8x4_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *D);
|
||||||
|
void kernel_strmm_nn_rl_8x4_vs_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *D, int km, int kn);
|
||||||
|
void kernel_strmm_nn_rl_8x4_gen_lib8(int k, float *alpha, float *A, int offsetB, float *B, int sdb, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_strmm_nt_ru_8x4_lib8(int k, float *alpha, float *A, float *B, float *D);
|
||||||
|
void kernel_strmm_nt_ru_8x4_vs_lib8(int k, float *alpha, float *A, float *B, float *D, int km, int kn);
|
||||||
|
|
||||||
|
// 4x8
|
||||||
|
void kernel_sgemm_nt_4x8_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_nt_4x8_vs_lib8(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn);
|
||||||
|
void kernel_sgemm_nt_4x8_gen_lib8(int k, float *alpha, float *A, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x8_lib8(int k, float *A, float *B, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x8_vs_lib8(int k, float *A, float *B, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
|
||||||
|
// 8
|
||||||
|
void kernel_sgemv_n_8_lib8(int k, float *alpha, float *A, float *x, float *beta, float *y, float *z);
|
||||||
|
void kernel_sgemv_n_8_vs_lib8(int k, float *alpha, float *A, float *x, float *beta, float *y, float *z, int k1);
|
||||||
|
void kernel_sgemv_n_8_gen_lib8(int kmax, float *alpha, float *A, float *x, float *beta, float *y, float *z, int k0, int k1);
|
||||||
|
void kernel_sgemv_t_8_lib8(int k, float *alpha, int offsetA, float *A, int sda, float *x, float *beta, float *y, float *z);
|
||||||
|
void kernel_sgemv_t_8_vs_lib8(int k, float *alpha, int offsetA, float *A, int sda, float *x, float *beta, float *y, float *z, int k1);
|
||||||
|
void kernel_sgemv_t_4_lib8(int k, float *alpha, int offsetA, float *A, int sda, float *x, float *beta, float *y, float *z);
|
||||||
|
void kernel_sgemv_t_4_vs_lib8(int k, float *alpha, int offsetA, float *A, int sda, float *x, float *beta, float *y, float *z, int k1);
|
||||||
|
void kernel_strsv_ln_inv_8_lib8(int k, float *A, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strsv_ln_inv_8_vs_lib8(int k, float *A, float *inv_diag_A, float *x, float *y, float *z, int km, int kn);
|
||||||
|
void kernel_strsv_lt_inv_8_lib8(int k, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strsv_lt_inv_8_vs_lib8(int k, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z, int km, int kn);
|
||||||
|
void kernel_sgemv_nt_4_lib8(int kmax, float *alpha_n, float *alpha_t, float *A, int sda, float *x_n, float *x_t, float *beta_t, float *y_t, float *z_n, float *z_t);
|
||||||
|
void kernel_sgemv_nt_4_vs_lib8(int kmax, float *alpha_n, float *alpha_t, float *A, int sda, float *x_n, float *x_t, float *beta_t, float *y_t, float *z_n, float *z_t, int km);
|
||||||
|
void kernel_ssymv_l_4l_lib8(int kmax, float *alpha, float *A, int sda, float *x, float *z);
|
||||||
|
void kernel_ssymv_l_4r_lib8(int kmax, float *alpha, float *A, int sda, float *x, float *z);
|
||||||
|
void kernel_ssymv_l_4l_gen_lib8(int kmax, float *alpha, int offA, float *A, int sda, float *x, float *z, int km);
|
||||||
|
void kernel_ssymv_l_4r_gen_lib8(int kmax, float *alpha, int offA, float *A, int sda, float *x, float *z, int km);
|
||||||
|
|
||||||
|
// -------- aux
|
||||||
|
|
||||||
|
// ---- copy
|
||||||
|
|
||||||
|
// lib4
|
||||||
|
//
|
||||||
|
void kernel_sgecpsc_4_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgecp_4_0_lib4(int kmax, float *A, float *B);
|
||||||
|
|
||||||
|
void kernel_sgecpsc_4_1_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecp_4_1_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_4_2_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecp_4_2_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_4_3_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecp_4_3_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
|
||||||
|
void kernel_sgecpsc_3_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgecp_3_0_lib4(int kmax, float *A, float *B);
|
||||||
|
void kernel_sgecpsc_3_2_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecp_3_2_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_3_3_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecp_3_3_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
|
||||||
|
void kernel_sgecpsc_2_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgecp_2_0_lib4(int kmax, float *A, float *B);
|
||||||
|
void kernel_sgecpsc_2_3_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgecp_2_3_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
|
||||||
|
void kernel_sgecpsc_1_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgecp_1_0_lib4(int kmax, float *A, float *B);
|
||||||
|
|
||||||
|
// lib8
|
||||||
|
//
|
||||||
|
void kernel_sgecp_8_0_lib8(int m, float *A, float *B);
|
||||||
|
void kernel_sgecp_8_0_gen_lib8(int m, float *A, float *B, int m1);
|
||||||
|
void kernel_sgecp_8_0_gen_u_lib8(int m, float *A, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgesc_8_0_lib8(int m, float *alpha, float *A);
|
||||||
|
void kernel_sgesc_8_0_gen_lib8(int m, float *alpha, float *A, int m1);
|
||||||
|
void kernel_sgesc_8_0_gen_u_lib8(int m, float *alpha, float *A, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecpsc_8_0_lib8(int m, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgecpsc_8_0_gen_lib8(int m, float *alpha, float *A, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_0_gen_u_lib8(int m, float *alpha, float *A, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_1_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_1_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_1_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_1_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_2_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_2_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_2_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_2_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_3_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_3_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_3_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_3_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_4_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_4_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_4_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_4_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_5_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_5_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_5_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_5_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_6_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_6_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_6_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_6_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
void kernel_sgecp_8_7_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecp_8_7_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgecpsc_8_7_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgecpsc_8_7_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
// transpose
|
||||||
|
//
|
||||||
|
void kernel_sgetr_8_0_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_0_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_1_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_1_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_2_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_2_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_3_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_3_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_4_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_4_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_5_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_5_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_6_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_6_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgetr_8_7_lib8(int m, float *A, int sda, float *B);
|
||||||
|
void kernel_sgetr_8_7_gen_lib8(int m, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
// add
|
||||||
|
//
|
||||||
|
void kernel_sgead_8_0_lib8(int m, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgead_8_0_gen_lib8(int m, float *alpha, float *A, float *B, int m1);
|
||||||
|
void kernel_sgead_8_1_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_1_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgead_8_2_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_2_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgead_8_3_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_3_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgead_8_4_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_4_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgead_8_5_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_5_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgead_8_6_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_6_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
void kernel_sgead_8_7_lib8(int m, float *alpha, float *A, int sda, float *B);
|
||||||
|
void kernel_sgead_8_7_gen_lib8(int m, float *alpha, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// lib4
|
||||||
|
//
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// level 2 BLAS
|
||||||
|
// 4
|
||||||
|
void kernel_sgemv_n_4_lib4(int k, float *alpha, float *A, float *x, float *beta, float *y, float *z);
|
||||||
|
void kernel_sgemv_n_4_vs_lib4(int k, float *alpha, float *A, float *x, float *beta, float *y, float *z, int k1);
|
||||||
|
void kernel_sgemv_n_4_gen_lib4(int kmax, float *alpha, float *A, float *x, float *beta, float *y, float *z, int k0, int k1);
|
||||||
|
void kernel_sgemv_t_4_lib4(int k, float *alpha, int offsetA, float *A, int sda, float *x, float *beta, float *y, float *z);
|
||||||
|
void kernel_sgemv_t_4_vs_lib4(int k, float *alpha, int offsetA, float *A, int sda, float *x, float *beta, float *y, float *z, int k1);
|
||||||
|
void kernel_strsv_ln_inv_4_lib4(int k, float *A, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strsv_ln_inv_4_vs_lib4(int k, float *A, float *inv_diag_A, float *x, float *y, float *z, int km, int kn);
|
||||||
|
void kernel_strsv_lt_inv_4_lib4(int k, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strsv_lt_inv_3_lib4(int k, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strsv_lt_inv_2_lib4(int k, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strsv_lt_inv_1_lib4(int k, float *A, int sda, float *inv_diag_A, float *x, float *y, float *z);
|
||||||
|
void kernel_strmv_un_4_lib4(int k, float *A, float *x, float *z);
|
||||||
|
void kernel_strmv_ut_4_lib4(int k, float *A, int sda, float *x, float *z);
|
||||||
|
void kernel_strmv_ut_4_vs_lib4(int k, float *A, int sda, float *x, float *z, int km);
|
||||||
|
void kernel_sgemv_nt_6_lib4(int kmax, float *alpha_n, float *alpha_t, float *A, int sda, float *x_n, float *x_t, float *beta_t, float *y_t, float *z_n, float *z_t);
|
||||||
|
void kernel_sgemv_nt_4_lib4(int kmax, float *alpha_n, float *alpha_t, float *A, int sda, float *x_n, float *x_t, float *beta_t, float *y_t, float *z_n, float *z_t);
|
||||||
|
void kernel_sgemv_nt_4_vs_lib4(int kmax, float *alpha_n, float *alpha_t, float *A, int sda, float *x_n, float *x_t, float *beta_t, float *y_t, float *z_n, float *z_t, int km);
|
||||||
|
void kernel_ssymv_l_4_lib4(int kmax, float *alpha, float *A, int sda, float *x_n, float *z_n);
|
||||||
|
void kernel_ssymv_l_4_gen_lib4(int kmax, float *alpha, int offA, float *A, int sda, float *x_n, float *z_n, int km);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// level 3 BLAS
|
||||||
|
// 12x4
|
||||||
|
void kernel_sgemm_nt_16x4_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_sgemm_nt_16x4_vs_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int m1, int n1); //
|
||||||
|
void kernel_strsm_nt_rl_inv_16x4_lib4(int k, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_16x4_vs_lib4(int k, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int m1, int n1);
|
||||||
|
// 12x4
|
||||||
|
void kernel_sgemm_nt_12x4_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_sgemm_nt_12x4_vs_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int m1, int n1); //
|
||||||
|
void kernel_strsm_nt_rl_inv_12x4_lib4(int k, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_12x4_vs_lib4(int k, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int m1, int n1);
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nt_8x8_lib4(int k, float *alpha, float *A, int sda, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_sgemm_nt_8x8_vs_lib4(int k, float *alpha, float *A, int sda, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd, int m1, int n1); //
|
||||||
|
void kernel_sgemm_nn_8x8_lib4(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_sgemm_nn_8x8_vs_lib4(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd, int m1, int n1); //
|
||||||
|
// 8x4
|
||||||
|
void kernel_sgemm_nt_8x4_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_sgemm_nt_8x4_vs_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int m1, int n1); //
|
||||||
|
void kernel_sgemm_nn_8x4_lib4(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_sgemm_nn_8x4_vs_lib4(int k, float *alpha, float *A, int sda, int offsetB, float *B, int sdb, float *beta, float *C, int sdc, float *D, int sdd, int m1, int n1); //
|
||||||
|
void kernel_ssyrk_nt_l_8x4_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd); //
|
||||||
|
void kernel_ssyrk_nt_l_8x4_vs_lib4(int k, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, int km, int kn); //
|
||||||
|
void kernel_strsm_nt_rl_inv_8x4_lib4(int k, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x4_vs_lib4(int k, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd, float *E, float *inv_diag_E, int m1, int n1);
|
||||||
|
// 4x4
|
||||||
|
void kernel_sgemm_nt_4x4_lib4(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D); //
|
||||||
|
void kernel_sgemm_nt_4x4_vs_lib4(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn); //
|
||||||
|
void kernel_sgemm_nt_4x4_gen_lib4(int k, float *alpha, float *A, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int k0, int k1);
|
||||||
|
void kernel_sgemm_nn_4x4_lib4(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, float *C, float *D); //
|
||||||
|
void kernel_sgemm_nn_4x4_vs_lib4(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, float *C, float *D, int km, int kn); //
|
||||||
|
void kernel_sgemm_nn_4x4_gen_lib4(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1); //
|
||||||
|
void kernel_ssyrk_nt_l_4x4_lib4(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D); //
|
||||||
|
void kernel_ssyrk_nt_l_4x4_vs_lib4(int k, float *alpha, float *A, float *B, float *beta, float *C, float *D, int km, int kn); //
|
||||||
|
void kernel_ssyrk_nt_l_4x4_gen_lib4(int k, float *alpha, float *A, float *B, float *beta, int offsetC, float *C, int sdc, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_strmm_nt_ru_4x4_lib4(int k, float *alpha, float *A, float *B, float *D); //
|
||||||
|
void kernel_strmm_nt_ru_4x4_vs_lib4(int k, float *alpha, float *A, float *B, float *D, int km, int kn); //
|
||||||
|
void kernel_strmm_nn_rl_4x4_lib4(int k, float *alpha, float *A, int offsetB, float *B, int sdb, float *D);
|
||||||
|
void kernel_strmm_nn_rl_4x4_gen_lib4(int k, float *alpha, float *A, int offsetB, float *B, int sdb, int offsetD, float *D, int sdd, int m0, int m1, int n0, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_vs_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_vs_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E, int km, int kn);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_vs_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_vs_lib4(int k, float *A, float *B, float *beta, float *C, float *D, float *E, int km, int kn);
|
||||||
|
void kernel_strsm_nn_ru_inv_4x4_lib4(int k, float *A, float *B, int sdb, float *beta, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nn_ru_inv_4x4_vs_lib4(int k, float *A, float *B, int sdb, float *beta, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_strsm_nn_ll_one_4x4_lib4(int k, float *A, float *B, int sdb, float *C, float *D, float *E);
|
||||||
|
void kernel_strsm_nn_ll_one_4x4_vs_lib4(int k, float *A, float *B, int sdb, float *C, float *D, float *E, int km, int kn);
|
||||||
|
void kernel_strsm_nn_lu_inv_4x4_lib4(int kmax, float *A, float *B, int sdb, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_strsm_nn_lu_inv_4x4_vs_lib4(int kmax, float *A, float *B, int sdb, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
// diag
|
||||||
|
void kernel_sgemm_diag_right_4_a0_lib4(int kmax, float *alpha, float *A, int sda, float *B, float *D, int sdd);
|
||||||
|
void kernel_sgemm_diag_right_4_lib4(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_diag_right_3_lib4(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_diag_right_2_lib4(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_diag_right_1_lib4(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int sdc, float *D, int sdd);
|
||||||
|
void kernel_sgemm_diag_left_4_a0_lib4(int kmax, float *alpha, float *A, float *B, float *D);
|
||||||
|
void kernel_sgemm_diag_left_4_lib4(int kmax, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_diag_left_3_lib4(int kmax, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_diag_left_2_lib4(int kmax, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
void kernel_sgemm_diag_left_1_lib4(int kmax, float *alpha, float *A, float *B, float *beta, float *C, float *D);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// LAPACK
|
||||||
|
// 16x4
|
||||||
|
void kernel_spotrf_nt_l_16x4_lib4(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_16x4_vs_lib4(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int m1, int n1);
|
||||||
|
// 12x4
|
||||||
|
void kernel_spotrf_nt_l_12x4_lib4(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_12x4_vs_lib4(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int m1, int n1);
|
||||||
|
// 8x4
|
||||||
|
void kernel_spotrf_nt_l_8x4_lib4(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_8x4_vs_lib4(int k, float *A, int sda, float *B, float *C, int sdc, float *D, int sdd, float *inv_diag_D, int m1, int n1);
|
||||||
|
// 4x4
|
||||||
|
void kernel_spotrf_nt_l_4x4_lib4(int k, float *A, float *B, float *C, float *D, float *inv_diag_D);
|
||||||
|
void kernel_spotrf_nt_l_4x4_vs_lib4(int k, float *A, float *B, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_sgetrf_nn_4x4_lib4(int k, float *A, float *B, int sdb, float *C, float *D, float *inv_diag_D);
|
||||||
|
void kernel_sgetrf_nn_4x4_vs_lib4(int k, float *A, float *B, int sdb, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_sgetrf_pivot_4_lib4(int m, float *pA, int sda, float *inv_diag_A, int* ipiv);
|
||||||
|
void kernel_sgetrf_pivot_4_vs_lib4(int m, int n, float *pA, int sda, float *inv_diag_A, int* ipiv);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// merged routines
|
||||||
|
// 4x4
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_4x4_lib4(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *E, float *inv_diag_E);
|
||||||
|
void kernel_sgemm_strsm_nt_rl_inv_4x4_vs_lib4(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *E, float *inv_diag_E, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_4x4_vs_lib4(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *inv_diag_D, int km, int kn);
|
||||||
|
void kernel_ssyrk_spotrf_nt_l_4x4_lib4(int kp, float *Ap, float *Bp, int km_, float *Am, float *Bm, float *C, float *D, float *inv_diag_D);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// auxiliary routines
|
||||||
|
void kernel_strcp_l_4_0_lib4(int kmax, float *A, float *B);
|
||||||
|
void kernel_strcp_l_4_1_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_strcp_l_4_2_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_strcp_l_4_3_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_strcp_l_3_0_lib4(int kmax, float *A, float *B);
|
||||||
|
void kernel_strcp_l_3_2_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_strcp_l_3_3_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_strcp_l_2_0_lib4(int kmax, float *A, float *B);
|
||||||
|
void kernel_strcp_l_2_3_lib4(int kmax, float *A0, int sda, float *B);
|
||||||
|
void kernel_strcp_l_1_0_lib4(int kmax, float *A, float *B);
|
||||||
|
void kernel_sgead_4_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgead_4_1_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgead_4_2_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgead_4_3_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgead_3_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgead_3_2_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgead_3_3_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgead_2_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
void kernel_sgead_2_3_lib4(int kmax, float *alpha, float *A0, int sda, float *B);
|
||||||
|
void kernel_sgead_1_0_lib4(int kmax, float *alpha, float *A, float *B);
|
||||||
|
// TODO
|
||||||
|
void kernel_sgeset_4_lib4(int kmax, float alpha, float *A);
|
||||||
|
void kernel_strset_4_lib4(int kmax, float alpha, float *A);
|
||||||
|
void kernel_sgetr_4_lib4(int tri, int kmax, int kna, float alpha, float *A, float *C, int sdc);
|
||||||
|
void kernel_sgetr_3_lib4(int tri, int kmax, int kna, float alpha, float *A, float *C, int sdc);
|
||||||
|
void kernel_sgetr_2_lib4(int tri, int kmax, int kna, float alpha, float *A, float *C, int sdc);
|
||||||
|
void kernel_sgetr_1_lib4(int tri, int kmax, int kna, float alpha, float *A, float *C, int sdc);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// pack
|
||||||
|
// 24 lib 8
|
||||||
|
void kernel_spack_nn_24_lib8(int kmax, float *A, int lda, float *B, int sdb);
|
||||||
|
void kernel_spack_nn_24_vs_lib8(int kmax, float *A, int lda, float *B, int sdb, int m1);
|
||||||
|
// 16 lib 8
|
||||||
|
void kernel_spack_nn_16_lib8(int kmax, float *A, int lda, float *B, int sdb);
|
||||||
|
void kernel_spack_nn_16_vs_lib8(int kmax, float *A, int lda, float *B, int sdb, int m1);
|
||||||
|
// 8 lib 8
|
||||||
|
void kernel_spack_nn_8_lib8(int kmax, float *A, int lda, float *B);
|
||||||
|
void kernel_spack_nn_8_vs_lib8(int kmax, float *A, int lda, float *B, int m1);
|
||||||
|
void kernel_spack_tn_8_lib8(int kmax, float *A, int lda, float *B);
|
||||||
|
void kernel_spack_tn_8_vs_lib8(int kmax, float *A, int lda, float *B, int m1);
|
||||||
|
void kernel_spack_tt_8_lib8(int kmax, float *A, int lda, float *B, int sdb);
|
||||||
|
void kernel_spack_tt_8_vs_lib8(int kmax, float *A, int lda, float *B, int sdb, int m1);
|
||||||
|
// 8 lib 4
|
||||||
|
void kernel_spack_nn_8_lib4(int kmax, float *A, int lda, float *B, int sdb);
|
||||||
|
void kernel_spack_nn_8_vs_lib4(int kmax, float *A, int lda, float *B, int sdb, int m1);
|
||||||
|
//void kernel_spack_tt_8_lib4(int kmax, float *A, int lda, float *B, int sdb);
|
||||||
|
// 4
|
||||||
|
void kernel_spack_nn_4_lib4(int kmax, float *A, int lda, float *B);
|
||||||
|
void kernel_spack_nn_4_vs_lib4(int kmax, float *A, int lda, float *B, int m1);
|
||||||
|
void kernel_spack_tn_4_lib4(int kmax, float *A, int lda, float *B);
|
||||||
|
void kernel_spack_tn_4_vs_lib4(int kmax, float *A, int lda, float *B, int m1);
|
||||||
|
void kernel_spack_tt_4_lib4(int kmax, float *A, int lda, float *B, int sdb);
|
||||||
|
void kernel_spack_tt_4_vs_lib4(int kmax, float *A, int lda, float *B, int sdb, int m1);
|
||||||
|
// unpack
|
||||||
|
// 8
|
||||||
|
void kernel_sunpack_nn_8_lib4(int kmax, float *A, int sda, float *B, int ldb);
|
||||||
|
void kernel_sunpack_nn_8_vs_lib4(int kmax, float *A, int sda, float *B, int ldb, int m1);
|
||||||
|
//void kernel_sunpack_tt_8_lib4(int kmax, float *A, int sda, float *B, int ldb);
|
||||||
|
// 4
|
||||||
|
void kernel_sunpack_nn_4_lib4(int kmax, float *A, float *B, int ldb);
|
||||||
|
void kernel_sunpack_nn_4_vs_lib4(int kmax, float *A, float *B, int ldb, int m1);
|
||||||
|
void kernel_sunpack_nt_4_lib4(int kmax, float *A, float *B, int ldb);
|
||||||
|
void kernel_sunpack_nt_4_vs_lib4(int kmax, float *A, float *B, int ldb, int m1);
|
||||||
|
void kernel_sunpack_tt_4_lib4(int kmax, float *A, int sda, float *B, int ldb);
|
||||||
|
|
||||||
|
// panel copy
|
||||||
|
// 4
|
||||||
|
void kernel_spacp_nt_4_lib4(int kmax, float *A, int offsetB, float *B, int sdb);
|
||||||
|
void kernel_spacp_tn_4_lib4(int kmax, int offsetA, float *A, int sda, float *B);
|
||||||
|
void kernel_spacp_nn_4_lib4(int kmax, int offsetA, float *A, int sda, float *B);
|
||||||
|
void kernel_spacp_nn_4_vs_lib4(int kmax, int offsetA, float *A, int sda, float *B, int m1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************
|
||||||
|
* BLAS API kernels
|
||||||
|
************************************************/
|
||||||
|
|
||||||
|
//#if defined(BLAS_API)
|
||||||
|
|
||||||
|
// A, B panel-major bs=8; C, D column-major
|
||||||
|
// 24x4
|
||||||
|
void kernel_sgemm_nt_24x4_lib88cc(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_24x4_vs_lib88cc(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 16x4
|
||||||
|
void kernel_sgemm_nt_16x4_lib88cc(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_16x4_vs_lib88cc(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nt_8x8_lib88cc(int kmax, float *alpha, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x8_vs_lib88cc(int kmax, float *alpha, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_spotrf_nt_l_8x8_lib88cc(int kmax, float *A, float *B, float *C, int ldc, float *D, int ldd, float *dD);
|
||||||
|
void kernel_spotrf_nt_l_8x8_vs_lib88cc(int kmax, float *A, float *B, float *C, int ldc, float *D, int ldd, float *dD, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x8_lib88ccc(int kmax, float *A, float *B, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x8_vs_lib88ccc(int kmax, float *A, float *B, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
// 8x4
|
||||||
|
void kernel_sgemm_nt_8x4_lib88cc(int kmax, float *alpha, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x4_vs_lib88cc(int kmax, float *alpha, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
|
||||||
|
// A, B panel-major bs=4; C, D column-major
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nt_8x8_lib44cc(int kmax, float *alpha, float *A, int sda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
// 8x4
|
||||||
|
void kernel_sgemm_nt_8x4_lib44cc(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x4_vs_lib44cc(int kmax, float *alpha, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_spotrf_nt_l_8x4_lib44cc(int kmax, float *A, int sda, float *B, float *C, int ldc, float *D, int ldd, float *dD);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x4_lib44ccc(int kmax, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_rl_inv_8x4_vs_lib44ccc(int kmax, float *A, int sda, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
// 4x4
|
||||||
|
void kernel_sgemm_nt_4x4_lib44cc(int kmax, float *alpha, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x4_vs_lib44cc(int kmax, float *alpha, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, float *dE);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_vs_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_lib44ccc(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_vs_lib44ccc(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_vs_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, float *dE);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_vs_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_vs_lib44cc4(int kmax, float *A, float *B, float *beta, float *C, int ldc, float *D, int ldd, float *E, int m1, int n1);
|
||||||
|
void kernel_spotrf_nt_l_4x4_lib44cc(int kmax, float *A, float *B, float *C, int ldc, float *D, int ldd, float *dD);
|
||||||
|
void kernel_spotrf_nt_l_4x4_vs_lib44cc(int kmax, float *A, float *B, float *C, int ldc, float *D, int ldd, float *dD, int m1, int n1);
|
||||||
|
|
||||||
|
// B panel-major bs=8; A, C, D column-major
|
||||||
|
// 4x24
|
||||||
|
void kernel_sgemm_nt_4x24_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x24_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_4x24_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_4x24_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 4x16
|
||||||
|
void kernel_sgemm_nt_4x16_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x16_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_4x16_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_4x16_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nt_8x8_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x8_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_8x8_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_8x8_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 4x8
|
||||||
|
void kernel_sgemm_nt_4x8_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x8_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_4x8_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_4x8_vs_libc8cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
|
||||||
|
// B panel-major bs=4; A, C, D column-major
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nt_8x8_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x8_vs_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_8x8_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_8x8_vs_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 4x8
|
||||||
|
void kernel_sgemm_nt_4x8_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x8_vs_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_4x8_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_4x8_vs_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 4x4
|
||||||
|
void kernel_sgemm_nt_4x4_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x4_vs_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_4x4_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_4x4_vs_libc4cc(int kmax, float *alpha, float *A, int lda, float *B, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
|
||||||
|
// A panel-major bs=8; B, C, D column-major
|
||||||
|
// 24x4
|
||||||
|
void kernel_sgemm_nn_24x4_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_24x4_vs_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_24x4_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_24x4_vs_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 16x4
|
||||||
|
void kernel_sgemm_nn_16x4_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_16x4_vs_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_16x4_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_16x4_vs_lib8ccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nn_8x8_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_8x8_vs_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_8x8_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x8_vs_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 8x4
|
||||||
|
void kernel_sgemm_nn_8x4_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_8x4_vs_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_8x4_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x4_vs_lib8ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
|
||||||
|
// A panel-major bs=4; B, C, D column-major
|
||||||
|
// 8x8
|
||||||
|
void kernel_sgemm_nn_8x8_lib4ccc(int kmax, float *alpha, float *A, int sda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x8_lib4ccc(int kmax, float *alpha, float *A, int sda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
// 8x4
|
||||||
|
void kernel_sgemm_nn_8x4_lib4ccc(int kmax, float *alpha, float *A, int sda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_8x4_vs_lib4ccc(int kmax, float *alpha, float *A, int sda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_8x4_lib4ccc(int kmax, float *alpha, float *A, int sda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_8x4_vs_lib4ccc(int kmax, float *alpha, float *A, int sda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
// 4x4
|
||||||
|
void kernel_sgemm_nn_4x4_lib4ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_4x4_vs_lib4ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_4x4_lib4ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x4_vs_lib4ccc(int kmax, float *alpha, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_rl_inv_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nn_rl_inv_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_rl_one_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde);
|
||||||
|
void kernel_strsm_nn_rl_one_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_ru_inv_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nn_ru_inv_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_ru_one_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde);
|
||||||
|
void kernel_strsm_nn_ru_one_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_vs_lib4cccc(int kmax, float *A, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, float *E, int lde, int m1, int n1);
|
||||||
|
|
||||||
|
// A, C, D panel-major; B, E column-major
|
||||||
|
// TODO merge with above
|
||||||
|
// 4x4
|
||||||
|
void kernel_strsm_nn_rl_inv_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nn_rl_inv_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_rl_one_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde);
|
||||||
|
void kernel_strsm_nn_rl_one_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_ru_inv_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nn_ru_inv_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nn_ru_one_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde);
|
||||||
|
void kernel_strsm_nn_ru_one_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_rl_inv_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde);
|
||||||
|
void kernel_strsm_nt_rl_one_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE);
|
||||||
|
void kernel_strsm_nt_ru_inv_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, float *dE, int m1, int n1);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde);
|
||||||
|
void kernel_strsm_nt_ru_one_4x4_vs_lib4c44c(int kmax, float *A, float *B, int ldb, float *beta, float *C, float *D, float *E, int lde, int m1, int n1);
|
||||||
|
|
||||||
|
// A, B, C, D column-major
|
||||||
|
void kernel_sgemm_nn_4x4_libcccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nn_4x4_vs_libcccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_nt_4x4_libcccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_nt_4x4_vs_libcccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
void kernel_sgemm_tt_4x4_libcccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd);
|
||||||
|
void kernel_sgemm_tt_4x4_vs_libcccc(int kmax, float *alpha, float *A, int lda, float *B, int ldb, float *beta, float *C, int ldc, float *D, int ldd, int m1, int n1);
|
||||||
|
|
||||||
|
// vector
|
||||||
|
void kernel_sdot_11_lib(int n, float *x, float *y, float *res);
|
||||||
|
void kernel_saxpy_11_lib(int n, float *alpha, float *x, float *y);
|
||||||
|
|
||||||
|
|
||||||
|
//#endif // BLAS_API
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// larger kernels
|
||||||
|
// 24
|
||||||
|
void kernel_sgemm_nt_24xn_p0_lib88cc(int n, int k, float *alpha, float *A, int sda, float *B, int sdb, float *beta, float *C, int ldc, float *D, int ldd, float *A_p, float *B_p);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_S_KERNEL_H_
|
||||||
62
third_party/acados/include/blasfeo/include/blasfeo_stdlib.h
vendored
Normal file
62
third_party/acados/include/blasfeo/include/blasfeo_stdlib.h
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/**************************************************************************************************
|
||||||
|
* *
|
||||||
|
* This file is part of BLASFEO. *
|
||||||
|
* *
|
||||||
|
* BLASFEO -- BLAS For Embedded Optimization. *
|
||||||
|
* Copyright (C) 2019 by Gianluca Frison. *
|
||||||
|
* Developed at IMTEK (University of Freiburg) under the supervision of Moritz Diehl. *
|
||||||
|
* All rights reserved. *
|
||||||
|
* *
|
||||||
|
* The 2-Clause BSD License *
|
||||||
|
* *
|
||||||
|
* Redistribution and use in source and binary forms, with or without *
|
||||||
|
* modification, are permitted provided that the following conditions are met: *
|
||||||
|
* *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice, this *
|
||||||
|
* list of conditions and the following disclaimer. *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice, *
|
||||||
|
* this list of conditions and the following disclaimer in the documentation *
|
||||||
|
* and/or other materials provided with the distribution. *
|
||||||
|
* *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND *
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED *
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
|
||||||
|
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES *
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; *
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND *
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
|
||||||
|
* *
|
||||||
|
* Author: Gianluca Frison, gianluca.frison (at) imtek.uni-freiburg.de *
|
||||||
|
* *
|
||||||
|
**************************************************************************************************/
|
||||||
|
|
||||||
|
#ifndef BLASFEO_STDLIB_H_
|
||||||
|
#define BLASFEO_STDLIB_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
void blasfeo_malloc(void **ptr, size_t size);
|
||||||
|
//
|
||||||
|
void blasfeo_malloc_align(void **ptr, size_t size);
|
||||||
|
//
|
||||||
|
void blasfeo_free(void *ptr);
|
||||||
|
//
|
||||||
|
void blasfeo_free_align(void *ptr);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // BLASFEO_STDLIB_H_
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user