Commit ca1f5f73 authored by Sébastien Timmermans's avatar Sébastien Timmermans
Browse files

Merge branch '252-impact-of-cleaning-invynared-dirdynared-flags' into 'dev'

Resolve "Impact of cleaning INVYNARED/DIRDYNARED flags"

Closes #252

See merge request robotran/mbsysc!390
parents 3ed1cd35 7169b618
......@@ -161,20 +161,6 @@ MbsAux * initMbsAux(MbsData *s)
mbs_aux->Rruc = get_dvec_1(nquc);
mbs_aux->Rred = get_dvec_1(nqu);
#ifndef MBS_SIMULINK
mbs_aux->y = get_dvec_1(2 * nqu);
mbs_aux->dydx = get_dvec_1(2 * nqu);
for (i = 1; i <= s->nqu; i++)
{
mbs_aux->y[i - 1] = s->q[s->qu[i]];
mbs_aux->y[i + s->nqu - 1] = s->qd[s->qu[i]];
mbs_aux->dydx[i - 1] = s->qd[s->qu[i]];
mbs_aux->dydx[i + s->nqu - 1] = s->udd[i];
}
#endif
/**/
return mbs_aux;
}
......@@ -260,12 +246,5 @@ void freeMbsAux(MbsAux *mbs_aux, MbsData *s)
free_dvec_1(mbs_aux->Rruc);
free_dvec_1(mbs_aux->Rred);
#ifndef MBS_SIMULINK
free_dvec_1(mbs_aux->y);
free_dvec_1(mbs_aux->dydx);
#endif
free(mbs_aux);
}
......@@ -24,7 +24,7 @@ typedef struct MbsAux_tag
double NRerr;
int MAX_NR_ITER; //!< max number of iteration for NR procedure
int n_iter_close_loop; //!< number of iterations after closing loop procedure in mbs_close_geo
//!< initialized at 0; if n_iter_close_loop<0 => en error has occured !
//!< initialized at 0; if n_iter_close_loop<0 => en error has occured !
double *h, **Jac;
double *huserc, **Juserc;
......@@ -86,9 +86,6 @@ typedef struct MbsAux_tag
double *Rruc; //!< vector of size [nqu+nqc x 1] that contains the reduced residue for the equations of motions after the first reduction (dependent variables)
double *Rred; //!< vector of size [nqu x 1] that contains the reduced residue of the equations of motion after the second reduction (driven variables)
#ifndef MBS_SIMULINK
double x, *y, *dydx;
#endif
} MbsAux;
......
# -*- coding: utf-8 -*-
"""
-------------------------------
(c) Universite catholique de Louvain, 2019
"""Definition of CFUNCTYPE needed for callback functions."""
# (c) Universite catholique de Louvain, 2019
Creation : 2019 by O. Lantsoght
Last update : 2019
version MBsysC v1.11.2
-------------------------------
Portable Python interface to MBsysC using Ctypes.
Definition of CFUNCTYPE needed for callback functions.
"""
import ctypes
# importing MBsysC related classes
from .forward_decl import MbsData_c
from .forward_decl import MbsDirdyn_c
from .forward_decl import MbsInvdyn_c
from .forward_decl import MbsEquil_c
from .forward_decl import UserIoInfo_c
from .forward_decl import UserIO_c
......@@ -28,21 +17,24 @@ from .forward_decl import MbsInfos_c
from .forward_decl import MbsSensor_c
#==============================================================================
# =============================================================================
# Global parameter of the current module
#==============================================================================
# =============================================================================
__DEBUG__ = False
#==============================================================================
# =============================================================================
# Declaration of function to be linked with the libraries
#==============================================================================
# =============================================================================
# User
user_JointForces_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.c_double)
user_load_post_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c))
user_dirdyn_init_wrap = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsDirdyn_c))
user_dirdyn_loop_wrap = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsDirdyn_c))
user_dirdyn_finish_wrap = ctypes.CFUNCTYPE(ctypes.c_void_p, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsDirdyn_c))
user_invdyn_init_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsInvdyn_c))
user_invdyn_loop_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsInvdyn_c))
user_invdyn_finish_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsInvdyn_c))
user_equil_init_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsEquil_c))
user_equil_loop_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsEquil_c))
user_equil_finish_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsData_c), ctypes.POINTER(MbsEquil_c))
......@@ -63,11 +55,11 @@ mbs_new_user_model_wrap = ctypes.CFUNCTYPE(ctypes.POINTER(UserModel_c))
mbs_delete_user_model_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(UserModel_c))
mbs_delete_user_IO_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(UserIO_c))
mbs_get_user_IO_size_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int), ctypes.POINTER(ctypes.c_int))
mbs_load_user_model_xml_wrap= ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsInfos_c), ctypes.POINTER(UserModel_c))
mbs_load_user_model_xml_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsInfos_c), ctypes.POINTER(UserModel_c))
mbs_bind_user_model_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(MbsInfos_c), ctypes.POINTER(UserModel_c))
mbs_print_user_model_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(UserModel_c))
mbs_get_user_model_size_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_int))
mbs_get_user_model_list_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_int))
mbs_get_user_model_list_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.c_int))
# Symbolic
mbs_link_wrap = ctypes.CFUNCTYPE(None, ctypes.POINTER(ctypes.POINTER(ctypes.c_double)), ctypes.POINTER(ctypes.POINTER(ctypes.c_double)), ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double), ctypes.POINTER(ctypes.c_double), ctypes.POINTER(MbsData_c), ctypes.c_double)
......
# -*- coding: utf-8 -*-
"""
-------------------------------
(c) Universite catholique de Louvain, 2019
Creation : 2019 by O. Lantsoght
Last update : 2019
version MBsysC v1.11.2
-------------------------------
Portable Python interface to MBsysC using Ctypes.
Forward declaration of all required MBsysC structure.
"""
"""Forward declaration of all required MBsysC structure."""
# (c) Universite catholique de Louvain, 2019
import ctypes
#==============================================================================
# =============================================================================
# Global parameter of the current module
#==============================================================================
# =============================================================================
__DEBUG__ = False
#==============================================================================
# =============================================================================
# forward declaration of structures (C) as class
#==============================================================================
# =============================================================================
class MbsInfos_c(ctypes.Structure):
pass
class MbsInfoBase_c(ctypes.Structure):
......@@ -103,6 +90,8 @@ class MbsGrowingBuffer_c(ctypes.Structure):
pass
class MbsAux_c(ctypes.Structure):
pass
class MbsInvdyn_c(ctypes.Structure):
pass
class MbsEquil_c(ctypes.Structure):
pass
class MbsEquilOptions_c(ctypes.Structure):
......@@ -120,4 +109,4 @@ class AnimInfo_c(ctypes.Structure):
class MbsLpk_c(ctypes.Structure):
pass
class MbsSS_c(ctypes.Structure):
pass
\ No newline at end of file
pass
# -*- coding: utf-8 -*-
"""
-------------------------------
(c) Universite catholique de Louvain, 2019
Creation : 2019 by O. Lantsoght
Last update : 2019
version MBsysC v1.11.2
-------------------------------
Portable Python interface to MBsysC using Ctypes.
While generating the libraries:
- SENSORKIN MUST BE UNDEFINED
- REALTIME MUST BE UNDEFINED
- ACCELRED MUST BE UNDEFINED
- MBS_SIMULINK MUST BE UNDEFINED
- PRJ_FCT_PTR MUST BE DEFINED
- DIRDYNARED MUST BE DEFINED
- INVDYNARED MUST BE DEFINED
Declaration of MBsysC structure related to mbs_aux.h file in MBsysC.
"""
"""Declaration of MBsysC structure related to mbs_aux.h file in MBsysC."""
# (c) Universite catholique de Louvain, 2019
import ctypes
......@@ -31,86 +9,82 @@ from .forward_decl import MbsAux_c
from .forward_decl import MbsSensor_c
#==============================================================================
# =============================================================================
# Global parameter of the current module
#==============================================================================
__DEBUG__ = True
# =============================================================================
__DEBUG__ = False
#==============================================================================
# =============================================================================
# MbsAux
#==============================================================================
# =============================================================================
MbsAux_c._fields_ = [
("norm_h", ctypes.c_double),
("NRerr", ctypes.c_double),
("norm_h", ctypes.c_double),
("NRerr", ctypes.c_double),
("MAX_NR_ITER", ctypes.c_int),
("h", ctypes.POINTER(ctypes.c_double)),
("Jac", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("huserc", ctypes.POINTER(ctypes.c_double)),
("Juserc", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("mJv", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("ind_mJv", ctypes.POINTER(ctypes.c_int)),
("Qc", ctypes.POINTER(ctypes.c_double)),
("h", ctypes.POINTER(ctypes.c_double)),
("Jac", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("huserc", ctypes.POINTER(ctypes.c_double)),
("Juserc", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("mJv", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("ind_mJv", ctypes.POINTER(ctypes.c_int)),
("Qc", ctypes.POINTER(ctypes.c_double)),
("mJv_h", ctypes.POINTER(ctypes.c_double)),
("mJv_h", ctypes.POINTER(ctypes.c_double)),
("nquc", ctypes.c_int),
("iquc", ctypes.POINTER(ctypes.c_int)),
("Juct", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("nquc", ctypes.c_int),
("iquc", ctypes.POINTER(ctypes.c_int)),
("Juct", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Bvuc", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Bvuc", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Jvtlambda", ctypes.POINTER(ctypes.c_double)),
("Jvt", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("ind_Jvt", ctypes.POINTER(ctypes.c_int)),
("Jvtlambda", ctypes.POINTER(ctypes.c_double)),
("Jvt", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("ind_Jvt", ctypes.POINTER(ctypes.c_int)),
("jdqd", ctypes.POINTER(ctypes.c_double)),
("jdqduserc", ctypes.POINTER(ctypes.c_double)),
("jdqd", ctypes.POINTER(ctypes.c_double)),
("jdqduserc", ctypes.POINTER(ctypes.c_double)),
("bp", ctypes.POINTER(ctypes.c_double)),
("bp", ctypes.POINTER(ctypes.c_double)),
("psens", ctypes.POINTER(MbsSensor_c)),
("psens", ctypes.POINTER(MbsSensor_c)),
("q_save", ctypes.POINTER(ctypes.c_double)),
("close_anim", ctypes.c_int),
("c", ctypes.POINTER(ctypes.c_double)),
("M", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("F", ctypes.POINTER(ctypes.c_double)),
("q_save", ctypes.POINTER(ctypes.c_double)),
("close_anim", ctypes.c_int),
("BtMvu", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("BtMvv", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("BtMB", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("BtFv", ctypes.POINTER(ctypes.c_double)),
("MBMb", ctypes.POINTER(ctypes.c_double)),
("c", ctypes.POINTER(ctypes.c_double)),
("M", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("F", ctypes.POINTER(ctypes.c_double)),
("Mruc", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Fruc", ctypes.POINTER(ctypes.c_double)),
("BtMvu", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("BtMvv", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("BtMB", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("BtFv", ctypes.POINTER(ctypes.c_double)),
("MBMb", ctypes.POINTER(ctypes.c_double)),
("Mr", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Fr", ctypes.POINTER(ctypes.c_double)),
("Mruc", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Fruc", ctypes.POINTER(ctypes.c_double)),
("p_Mr", ctypes.POINTER(ctypes.c_double)),
("Mr", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("Fr", ctypes.POINTER(ctypes.c_double)),
("p_Mr", ctypes.POINTER(ctypes.c_double)),
("compute_Qc_vec", ctypes.POINTER(ctypes.c_int)),
("Qact", ctypes.POINTER(ctypes.c_double)),
("A", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("ind_A", ctypes.POINTER(ctypes.c_int)),
("b", ctypes.POINTER(ctypes.c_double)),
("w", ctypes.POINTER(ctypes.c_double)),
("v", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("phi", ctypes.POINTER(ctypes.c_double)),
("R", ctypes.POINTER(ctypes.c_double)),
("Rruc", ctypes.POINTER(ctypes.c_double)),
("Rred", ctypes.POINTER(ctypes.c_double)),
("x", ctypes.c_double),
("y", ctypes.POINTER(ctypes.c_double)),
("dydx", ctypes.POINTER(ctypes.c_double))]
("Qact", ctypes.POINTER(ctypes.c_double)),
("A", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("ind_A", ctypes.POINTER(ctypes.c_int)),
("b", ctypes.POINTER(ctypes.c_double)),
("w", ctypes.POINTER(ctypes.c_double)),
("v", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("phi", ctypes.POINTER(ctypes.c_double)),
("R", ctypes.POINTER(ctypes.c_double)),
("Rruc", ctypes.POINTER(ctypes.c_double)),
("Rred", ctypes.POINTER(ctypes.c_double)), ]
# -*- coding: utf-8 -*-
"""
-------------------------------
(c) Universite catholique de Louvain, 2019
Creation : 2019 by O. Lantsoght
Last update : 2019
version MBsysC v1.11.2
-------------------------------
Portable Python interface to MBsysC using Ctypes.
While generating the libraries:
- SENSORKIN MUST BE UNDEFINED
- REALTIME MUST BE UNDEFINED
- PRJ_FCT_PTR MUST BE DEFINED
Declaration of MBsysC structure related to mbs_data.h header file in MBsysC.
"""
"""Declaration of MBsysC structure related to mbs_data.h header file in MBsysC."""
# (c) Universite catholique de Louvain, 2019
import ctypes
......@@ -39,6 +20,9 @@ from .callback import user_load_post_wrap
from .callback import user_dirdyn_init_wrap
from .callback import user_dirdyn_loop_wrap
from .callback import user_dirdyn_finish_wrap
from .callback import user_invdyn_init_wrap
from .callback import user_invdyn_loop_wrap
from .callback import user_invdyn_finish_wrap
from .callback import user_equil_init_wrap
from .callback import user_equil_loop_wrap
from .callback import user_equil_finish_wrap
......@@ -73,186 +57,193 @@ from .callback import mbs_sensor_wrap
from .callback import mbs_gensensor_wrap
#==============================================================================
# =============================================================================
# user_c
#==============================================================================
user_c._fields_ =[# REAL_TIME cannot be defined
("user_JointForces", user_JointForces_wrap),
# user load
("user_load_post", user_load_post_wrap),
# user dirdyn
("user_dirdyn_init", user_dirdyn_init_wrap),
("user_dirdyn_loop", user_dirdyn_loop_wrap),
("user_dirdyn_finish", user_dirdyn_finish_wrap),
# user equil
("user_equil_init", user_equil_init_wrap),
("user_equil_loop", user_equil_loop_wrap),
("user_equil_finish", user_equil_finish_wrap),
("user_equil_fxe", user_equil_fxe_wrap),
# Generalities
("user_Derivative", user_Derivative_wrap),
("user_DrivenJoints", user_DrivenJoints_wrap),
("user_cons_hJ", user_cons_hJ_wrap),
("user_cons_jdqd", user_cons_jdqd_wrap),
("user_LinkForces", user_LinkForces_wrap),
("user_Link3DForces", user_Link3DForces_wrap),
("user_ExtForces", user_ExtForces_wrap),
# data exchange
("mbs_new_user_IO", mbs_new_user_IO_wrap),
("mbs_new_user_model", mbs_new_user_model_wrap),
("mbs_delete_user_model", mbs_delete_user_model_wrap),
("mbs_delete_user_IO", mbs_delete_user_IO_wrap),
("mbs_get_user_IO_size", mbs_get_user_IO_size_wrap),
("mbs_load_user_model_xml", mbs_load_user_model_xml_wrap),
("mbs_bind_user_model", mbs_bind_user_model_wrap),
("mbs_print_user_model", mbs_print_user_model_wrap),
("mbs_get_user_model_size", mbs_get_user_model_size_wrap),
("mbs_get_user_model_list", mbs_get_user_model_list_wrap)
]
#==============================================================================
# =============================================================================
user_c._fields_ = [
("user_JointForces", user_JointForces_wrap),
# user load
("user_load_post", user_load_post_wrap),
# user dirdyn
("user_dirdyn_init", user_dirdyn_init_wrap),
("user_dirdyn_loop", user_dirdyn_loop_wrap),
("user_dirdyn_finish", user_dirdyn_finish_wrap),
# user invdyn
("user_invdyn_init", user_invdyn_init_wrap),
("user_invdyn_loop", user_invdyn_loop_wrap),
("user_invdyn_finish", user_invdyn_finish_wrap),
# user equil
("user_equil_init", user_equil_init_wrap),
("user_equil_loop", user_equil_loop_wrap),
("user_equil_finish", user_equil_finish_wrap),
("user_equil_fxe", user_equil_fxe_wrap),
# Generalities
("user_Derivative", user_Derivative_wrap),
("user_DrivenJoints", user_DrivenJoints_wrap),
("user_cons_hJ", user_cons_hJ_wrap),
("user_cons_jdqd", user_cons_jdqd_wrap),
("user_LinkForces", user_LinkForces_wrap),
("user_Link3DForces", user_Link3DForces_wrap),
("user_ExtForces", user_ExtForces_wrap),
# data exchange
("mbs_new_user_IO", mbs_new_user_IO_wrap),
("mbs_new_user_model", mbs_new_user_model_wrap),
("mbs_delete_user_model", mbs_delete_user_model_wrap),
("mbs_delete_user_IO", mbs_delete_user_IO_wrap),
("mbs_get_user_IO_size", mbs_get_user_IO_size_wrap),
("mbs_load_user_model_xml", mbs_load_user_model_xml_wrap),
("mbs_bind_user_model", mbs_bind_user_model_wrap),
("mbs_print_user_model", mbs_print_user_model_wrap),
("mbs_get_user_model_size", mbs_get_user_model_size_wrap),
("mbs_get_user_model_list", mbs_get_user_model_list_wrap)
]
# =============================================================================
# symb_c
#==============================================================================
symb_c._fields_ =[# REAL_TIME cannot be defined
("mbs_link", mbs_link_wrap),
("mbs_link3D", mbs_link3D_wrap),
("mbs_extforces", mbs_extforces_wrap),
("mbs_accelred", mbs_accelred_wrap),
("mbs_dirdyna", mbs_dirdyna_wrap),
("mbs_invdyna", mbs_invdyna_wrap),
("mbs_cons_hJ", mbs_cons_hJ_wrap),
("mbs_cons_jdqd", mbs_cons_jdqd_wrap),
("mbs_sensor", mbs_sensor_wrap),
("mbs_gensensor", mbs_gensensor_wrap)]
#==============================================================================
# =============================================================================
symb_c._fields_ = [
("mbs_link", mbs_link_wrap),
("mbs_link3D", mbs_link3D_wrap),
("mbs_extforces", mbs_extforces_wrap),
("mbs_accelred", mbs_accelred_wrap),
("mbs_dirdyna", mbs_dirdyna_wrap),
("mbs_invdyna", mbs_invdyna_wrap),
("mbs_cons_hJ", mbs_cons_hJ_wrap),
("mbs_cons_jdqd", mbs_cons_jdqd_wrap),
("mbs_sensor", mbs_sensor_wrap),
("mbs_gensensor", mbs_gensensor_wrap)
]
# =============================================================================
# Functions_c
#==============================================================================
Functions_c._anonymous_ = ("user","symb")
Functions_c._fields_ =[
("symbolicLibHandle", ctypes.POINTER(MbsDataLibInfo_c)),
("userfctLibHandle", ctypes.POINTER(MbsDataLibInfo_c)),
("symb", symb_c),
("user", user_c)]
#==============================================================================
# =============================================================================
Functions_c._anonymous_ = ("user", "symb")
Functions_c._fields_ = [
("symbolicLibHandle", ctypes.POINTER(MbsDataLibInfo_c)),
("userfctLibHandle", ctypes.POINTER(MbsDataLibInfo_c)),
("symb", symb_c),
("user", user_c)
]
# =============================================================================
# MbsData_c
#==============================================================================
# =============================================================================
MbsData_c._anonymous_ = ("fct",)
MbsData_c._fields_ =[
MbsData_c._fields_ = [
# Geometric and dynamic datas
("npt", ctypes.c_int),
("dpt", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("l", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("m", ctypes.POINTER(ctypes.c_double)),
("In", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("g", ctypes.c_double*(3+1)),
("nbody", ctypes.c_int),
("njoint", ctypes.c_int),
("npt", ctypes.c_int),
("dpt", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("l", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("m", ctypes.POINTER(ctypes.c_double)),
("In", ctypes.POINTER(ctypes.POINTER(ctypes.c_double))),
("g", ctypes.c_double * (3 + 1)),
("nbody", ctypes.c_int),
("njoint", ctypes.c_int),
# Coordinate partiotionning datas
("nqu", ctypes.c_int),
("nqc", ctypes.c_int),
("nqlocked",ctypes.c_int),
("nqdriven",ctypes.c_int),
("nqa", ctypes.c_int),
("nqv", ctypes.c_int),
("nhu", ctypes.c_int),
("qu", ctypes.POINTER(ctypes.c_int)),
("qc", ctypes.POINTER(ctypes.c_int)),
("nqu", ctypes.c_int),
("nqc", ctypes.c_int),
("nqlocked", ctypes.c_int),
("nqdriven", ctypes.c_int),
("nqa", ctypes.c_int),
("nqv", ctypes.c_int),
("nhu", ctypes.c_int),
("qu", ctypes.POINTER(ctypes.c_int)),
("qc", ctypes.POINTER(ctypes.c_int)),
("qlocked", ctypes.POINTER(ctypes.c_int)),
("qdriven", ctypes.POINTER(ctypes.c_int)),
("qa", ctypes.POINTER(ctypes.c_int)),
("qv", ctypes.POINTER(ctypes.c_int)),
("hu", ctypes.POINTER(ctypes.c_int)),
("qa", ctypes.POINTER(ctypes.c_int)),
("qv", ctypes.POINTER(ctypes.c_int)),
("hu", ctypes.POINTER(ctypes.c_int)),