/*
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Copyright  2019  Gianluca  Frison ,  Dimitris  Kouzoupis ,  Robin  Verschueren , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Andrea  Zanelli ,  Niels  van  Duijkeren ,  Jonathan  Frey ,  Tommaso  Sartor , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Branimir  Novoselnik ,  Rien  Quirynen ,  Rezart  Qelibari ,  Dang  Doan , 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  Jonas  Koenemann ,  Yutao  Chen ,  Tobias  Schöls ,  Jonas  Schlagenhauf ,  Moritz  Diehl 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  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 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								// ** 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_casadi  * impl_dae_fun ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  * impl_dae_fun_jac_x_xdot_z ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  * impl_dae_jac_x_xdot_u_z ; 
 
							 
						 
					
						
							
								
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ %  if  solver_options . hessian_approx  = =  " EXACT "  % } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  * impl_dae_hess ; 
 
							 
						 
					
						
							
								
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ % -  endif  % } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								{ %  elif  solver_options . integrator_type  = =  " LIFTED_IRK "  % } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  * impl_dae_fun ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  * 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  = =  " 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  = =  " 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  = =  " 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 ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  * nl_constr_h_fun_jac_hess ; 
 
							 
						 
					
						
							
								
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ % -  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 ; 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    external_function_param_casadi  nl_constr_h_e_fun_jac_hess ; 
 
							 
						 
					
						
							
								
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								{ % -  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 ) ; 
							 
						 
					
						
							
								
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/**
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  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_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  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_