Robotran C Documentation
mbs_w_methods.h
Go to the documentation of this file.
1 
16  #ifndef MBS_W_METHODS_H_INCLUDED
17 #define MBS_W_METHODS_H_INCLUDED
18 
19 #include "mbs_project_interface.h"
20 
21 #define W_S 2 // order of the method, 2 per default
22 
24  //#define W_A21 (2.0/3.0)
25  //#define W_C1 0.0
26  //#define W_C2 0.0
27  //#define W_B1 1.0
28  //#define W_B2 0.0
29  //#define W_GAMMA11 1.0
30  //#define W_GAMMA22 0.0
31  //#define W_GAMMA21 0.0
32 
34 #define W_A21 0.66666666666667
35 #define W_C1 0.0
36 #define W_C2 0.66666666666667
37 #define W_B1 (0.25)
38 #define W_B2 (0.75)
39 #define W_GAMMA11 0.788675134594813 //(0.5 + (sqrt(3.0)/6.0))
40 #define W_GAMMA22 0.788675134594813 // (0.5 + (sqrt(3.0)/6.0))
41 #define W_GAMMA21 -1.051566846126417 //(-2.0 * W_A21 * W_GAMMA22)
42 
46 typedef struct MbsDirdynWMethods
47 {
48 
49  double **dfdy;
50  double *dfdx;
51  double *dysav;
52  double *ysav;
53 
54  double *f;
55  int *indx;
56 
57  // To freeze jacobian
60 
61  // internal vectors/matrices
62  double **A;
63  double *B;
64  double *sum_alpha_gamma;
66  double *jpxv;
67  double **delta_p;
68  double **delta_v;
69  double *intermediate_y;
70 
71  double *A_param;
72  double *B_param;
73  double *C_param;
74  double **GAM_param;
75 
76  int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *);
78  void (*loop_fct)(MbsData *, MbsDirdyn *);
80  int (*save_realtime_update)(MbsDirdyn* dd, MbsData* mbs_data);
82 
90 void initialize_w_methods(MbsData *mbs_data, MbsDirdyn *mbs_dd,
91  int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *),
92  void (*loop_fct)(MbsData *, MbsDirdyn *),
93  int (*save_realtime_update)(MbsDirdyn* dd, MbsData* mbs_data));
94 
104 int loop_w_methods(double t0, double tf, MbsData *mbs_data, MbsDirdyn *mbs_dd);
105 
111 void finish_w_methods(MbsData *mbs_data, MbsDirdyn *mbs_dd);
112 
120 void error_w_methods(MbsData *mbs_data, MbsDirdyn *dd, int err);
121 
122 #endif // MBS_W_METHODS_H_INCLUDED
MbsDirdynWMethods::Freeze_dfdx
double * Freeze_dfdx
Definition: mbs_w_methods.h:58
MbsDirdynOptions::flag_precise_dynamics
int flag_precise_dynamics
= 1 to call the direct dynamics at the beginning of each time step of integration.
Definition: mbs_dirdyn_struct.h:118
mbs_msg
void mbs_msg(const char *msg,...)
Send a message.
Definition: mbs_message.c:87
MbsDirdynWMethods::jpxv
double * jpxv
useful vector to store Jnp * xv [1 x nqu]
Definition: mbs_w_methods.h:66
error_w_methods
void error_w_methods(MbsData *mbs_data, MbsDirdyn *dd, int err)
If an error occurs during time integration, this function prints the error message and call finish_w_...
Definition: mbs_w_methods.c:220
mbs_w_methods.h
This header defines global functions for W methods integrator in C.
MbsDirdynWMethods::Freeze_dfdy
double ** Freeze_dfdy
Definition: mbs_w_methods.h:58
MbsData::tsim
double tsim
The time value.
Definition: mbs_data.h:305
MbsDirdyn::y
double * y
Pointer to the state vector, this is a dvec_0 of size nState.
Definition: mbs_dirdyn_struct.h:175
MbsDirdynWMethods::loop_fct
void(* loop_fct)(MbsData *, MbsDirdyn *)
The function to be called at the end of each time step, or waypoints.
Definition: mbs_w_methods.h:78
MbsDirdynWMethods::derivs
int(* derivs)(double, double[], double[], MbsData *, MbsDirdyn *)
The function computing the derivative of the system.
Definition: mbs_w_methods.h:76
W_S
#define W_S
Definition: mbs_w_methods.h:21
MbsDirdyn::nState
int nState
size of the state vector
Definition: mbs_dirdyn_struct.h:174
mbs_dirdyn_struct.h
loop_w_methods
int loop_w_methods(double t0, double tf, MbsData *mbs_data, MbsDirdyn *mbs_dd)
Integrate the motion from t0 to tf.
Definition: mbs_w_methods.c:86
MbsData::nqu
int nqu
Number of independent articulations.
Definition: mbs_data.h:262
get_dvec_0
double * get_dvec_0(int l_v)
create (with memory allocation) a vector (length l_v) of doubles, starting at index 0
Definition: mbs_1D_array.c:955
MbsDirdyn::yd
double * yd
Pointers to the derivative vector (dvec_0) of size nState.
Definition: mbs_dirdyn_struct.h:182
MbsDirdynWMethods::dysav
double * dysav
vector save dydx from previous step [1xn]
Definition: mbs_w_methods.h:51
MbsDirdynWMethods::dfdy
double ** dfdy
vector of derivatives of f by y [nxn]
Definition: mbs_w_methods.h:49
mbs_project_interface.h
Declaration of functions that are project dependent.
free_ivec_0
void free_ivec_0(int *vec)
release memory for a vector of integers, starting with index 0
Definition: mbs_1D_array.c:490
MbsDirdynWMethods::B_param
double * B_param
Parameter B.
Definition: mbs_w_methods.h:72
free_dmat_0
void free_dmat_0(double **mat)
release memory for a matrix of doubles, starting at index 0
Definition: mbs_matrix.c:332
MbsDirdynWMethods::save_realtime_update
int(* save_realtime_update)(MbsDirdyn *dd, MbsData *mbs_data)
Definition: mbs_w_methods.h:80
MbsDirdyn::yout
double * yout
Allocation of a vector (dvec_0) of size nState.
Definition: mbs_dirdyn_struct.h:177
MbsDirdynWMethods::A
double ** A
left side of the equation, at step i [nqu x nqu]
Definition: mbs_w_methods.h:62
mbs_matrix.h
mbs_warning_msg
void mbs_warning_msg(const char *msg,...)
Send a warning message.
Definition: mbs_message.c:100
mbs_1D_array.h
error_w_methods
void error_w_methods(MbsData *mbs_data, MbsDirdyn *dd, int err)
If an error occurs during time integration, this function prints the error message and call finish_w_...
Definition: mbs_w_methods.c:220
finish_w_methods
void finish_w_methods(MbsData *mbs_data, MbsDirdyn *mbs_dd)
Finalize and clear memory allocated for W Methods integrator.
Definition: mbs_w_methods.c:165
MbsDirdynWMethods::partial_right_hand_term
double * partial_right_hand_term
partial rigth hand step variable [1 x nqu]
Definition: mbs_w_methods.h:65
MbsDirdyn::integrator_struct
void * integrator_struct
pointer to store integrator structure
Definition: mbs_dirdyn_struct.h:205
MbsDirdynWMethods::B
double * B
right side of the equation, at step i [1 x nqu]
Definition: mbs_w_methods.h:63
MbsDirdynWMethods::C_param
double * C_param
Parameter C.
Definition: mbs_w_methods.h:73
get_dmat_0
double ** get_dmat_0(int nb_r, int nb_c)
create (with memory allocation) a [nb_r times nb_c] matrix of doubles, starting at index 0
Definition: mbs_matrix.c:277
MbsDirdyn::tsim
double tsim
current simulation time
Definition: mbs_dirdyn_struct.h:171
initialize_w_methods
void initialize_w_methods(MbsData *mbs_data, MbsDirdyn *mbs_dd, int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *), void(*loop_fct)(MbsData *, MbsDirdyn *), int(*save_realtime_update)(MbsDirdyn *dd, MbsData *mbs_data))
Initialize all needed fields in MbsDirdyn for W Methods integrator.
Definition: mbs_w_methods.c:27
W_GAMMA11
#define W_GAMMA11
Definition: mbs_w_methods.h:39
MbsDirdynWMethods::sum_alpha_gamma
double * sum_alpha_gamma
internal step variable [1 x nqu]
Definition: mbs_w_methods.h:64
W_C1
#define W_C1
Definition: mbs_w_methods.h:35
MbsDirdynWMethods::GAM_param
double ** GAM_param
Parameter Gamma.
Definition: mbs_w_methods.h:74
MbsDirdynWMethods::dfdx
double * dfdx
vector of derivatives of f by x [1xn]
Definition: mbs_w_methods.h:50
W_B2
#define W_B2
Definition: mbs_w_methods.h:38
W_GAMMA21
#define W_GAMMA21
Definition: mbs_w_methods.h:41
MbsDirdynWMethods::Freeze_dydx
double * Freeze_dydx
Definition: mbs_w_methods.h:58
W_GAMMA22
#define W_GAMMA22
Definition: mbs_w_methods.h:40
save_realtime_update
int save_realtime_update(MbsDirdyn *dd, MbsData *mbs_data)
update the real-time and saving modules if requested
Definition: mbs_dirdyn.c:1252
initialize_w_methods
void initialize_w_methods(MbsData *mbs_data, MbsDirdyn *mbs_dd, int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *), void(*loop_fct)(MbsData *, MbsDirdyn *), int(*save_realtime_update)(MbsDirdyn *dd, MbsData *mbs_data))
Initialize all needed fields in MbsDirdyn for W Methods integrator.
Definition: mbs_w_methods.c:27
MbsDirdynWMethods::ysav
double * ysav
vector save y from previous step [1xn]
Definition: mbs_w_methods.h:52
mbs_message.h
MbsDirdynWMethods
W Methods structure for dirdyn.
Definition: mbs_w_methods.h:46
get_ivec_0
int * get_ivec_0(int l_v)
create (with memory allocation) a vector (length l_v) of integers, starting at index 0
Definition: mbs_1D_array.c:474
MbsDirdynWMethods::Freeze_jacobian_index
int Freeze_jacobian_index
Definition: mbs_w_methods.h:59
MbsData
Definition: mbs_data.h:246
DIRDYN_INTEGRATOR_WAYPOINT_TIME_ERROR_max
#define DIRDYN_INTEGRATOR_WAYPOINT_TIME_ERROR_max
Definition: mbs_dirdyn_struct.h:32
MbsDirdynWMethods::A_param
double * A_param
Parameter A.
Definition: mbs_w_methods.h:71
W_B1
#define W_B1
Definition: mbs_w_methods.h:37
MbsDirdynWMethods::intermediate_y
double * intermediate_y
useful vector to store y [1xnqu]
Definition: mbs_w_methods.h:69
loop_w_methods
int loop_w_methods(double t0, double tf, MbsData *mbs_data, MbsDirdyn *mbs_dd)
Integrate the motion from t0 to tf.
Definition: mbs_w_methods.c:86
integrator.h
This header defines specific integrators functions in C.
w_methods
int w_methods(double y[], double dydx[], int n, double x, double h, double yout[], int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *), MbsData *s, MbsDirdyn *mbs_dd)
W Methods integrator implementation.
Definition: w_methods.c:25
MbsDirdynWMethods::f
double * f
vector to store the call of f' [1xn]
Definition: mbs_w_methods.h:54
MbsData::flag_stop
int flag_stop
stop the simulation. For dirdyn, equil, invdyn and solvekin only.
Definition: mbs_data.h:397
W_A21
#define W_A21
first order parameters
Definition: mbs_w_methods.h:34
free_dvec_0
void free_dvec_0(double *vec)
release memory for a vector of doubles, starting at index 0
Definition: mbs_1D_array.c:971
MbsDirdynOptions::flag_solout_wp
int flag_solout_wp
1 to call solout only at required waypoints (only if flag_waypoint activated), default = 0
Definition: mbs_dirdyn_struct.h:128
MbsDirdyn
General structure of the direct dynamic module.
Definition: mbs_dirdyn_struct.h:166
MbsDirdyn::dt
double dt
current integration step size
Definition: mbs_dirdyn_struct.h:172
MbsDirdyn::options
MbsDirdynOptions * options
structure defining the option of a direct dynamic
Definition: mbs_dirdyn_struct.h:168
MbsDirdynWMethods::delta_p
double ** delta_p
to store delta p
Definition: mbs_w_methods.h:67
MbsDirdynWMethods::delta_v
double ** delta_v
to store delta v
Definition: mbs_w_methods.h:68
finish_w_methods
void finish_w_methods(MbsData *mbs_data, MbsDirdyn *dd)
Finalize and clear memory allocated for W Methods integrator.
Definition: mbs_w_methods.c:165
W_C2
#define W_C2
Definition: mbs_w_methods.h:36
MbsDirdynWMethods::indx
int * indx
index for LU decomp and system resolution
Definition: mbs_w_methods.h:55