Robotran C Documentation
mbs_euler_implicit.h
Go to the documentation of this file.
1 
16  #ifndef MBS_EULERIM_H_INCLUDED
17 #define MBS_EULERIM_H_INCLUDED
18 
19 #include "mbs_project_interface.h"
20 
24 typedef struct MbsDirdynEulerIm
25 {
26  double **dfdy;
27  double *dfdx;
28  double *ysav;
29  double *dysav;
30 
31  double *delta_p;
32  double *delta_v;
33 
34  double **A;
35  double *B;
36  double *jpxv;
37 
38  int *indx;
39 
40  // To freeze jacobian
43 
44  int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *);
46  void (*loop_fct)(MbsData *, MbsDirdyn *);
48  int (*save_realtime_update)(MbsDirdyn* dd, MbsData* mbs_data);
50 
58 void initialize_euler_implicit(MbsData *mbs_data, MbsDirdyn *mbs_dd,
59  int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *),
60  void (*loop_fct)(MbsData *, MbsDirdyn *),
61  int (*save_realtime_update)(MbsDirdyn* dd, MbsData* mbs_data));
62 
72 int loop_euler_implicit(double t0, double tf, MbsData *mbs_data, MbsDirdyn *mbs_dd);
73 
79 void finish_euler_implicit(MbsData *mbs_data, MbsDirdyn *mbs_dd);
80 
88 void error_euler_implicit(MbsData *mbs_data, MbsDirdyn *dd, int err);
89 
90 #endif // MBS_EULERIM_H_INCLUDED
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
initialize_euler_implicit
void initialize_euler_implicit(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 Euler Implicit integrator.
Definition: mbs_euler_implicit.c:26
mbs_euler_implicit.h
This header defines global functions for Euler Implicit integrator in C.
MbsDirdynEulerIm::Freeze_dfdy
double ** Freeze_dfdy
Definition: mbs_euler_implicit.h:41
MbsDirdynEulerIm::jpxv
double * jpxv
useful vector to store Jnp * xv [1xnqu]
Definition: mbs_euler_implicit.h:36
finish_euler_implicit
void finish_euler_implicit(MbsData *mbs_data, MbsDirdyn *mbs_dd)
Finalize and clear memory allocated for Euler Implicit integrator.
Definition: mbs_euler_implicit.c:140
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
MbsDirdynEulerIm::B
double * B
right side of the equation [1xnqu]
Definition: mbs_euler_implicit.h:35
MbsDirdyn::nState
int nState
size of the state vector
Definition: mbs_dirdyn_struct.h:174
mbs_dirdyn_struct.h
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
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
MbsDirdynEulerIm::delta_v
double * delta_v
to store delta v [1xnqu]
Definition: mbs_euler_implicit.h:32
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
MbsDirdyn::yout
double * yout
Allocation of a vector (dvec_0) of size nState.
Definition: mbs_dirdyn_struct.h:177
mbs_matrix.h
mbs_warning_msg
void mbs_warning_msg(const char *msg,...)
Send a warning message.
Definition: mbs_message.c:100
error_euler_implicit
void error_euler_implicit(MbsData *mbs_data, MbsDirdyn *dd, int err)
If an error occurs during time integration, this function prints the error message and call finish_eu...
Definition: mbs_euler_implicit.c:177
mbs_1D_array.h
error_euler_implicit
void error_euler_implicit(MbsData *mbs_data, MbsDirdyn *dd, int err)
If an error occurs during time integration, this function prints the error message and call finish_eu...
Definition: mbs_euler_implicit.c:177
loop_euler_implicit
int loop_euler_implicit(double t0, double tf, MbsData *mbs_data, MbsDirdyn *mbs_dd)
Integrate the motion from t0 to tf.
Definition: mbs_euler_implicit.c:65
MbsDirdyn::integrator_struct
void * integrator_struct
pointer to store integrator structure
Definition: mbs_dirdyn_struct.h:205
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
finish_euler_implicit
void finish_euler_implicit(MbsData *mbs_data, MbsDirdyn *dd)
Finalize and clear memory allocated for Euler Implicit integrator.
Definition: mbs_euler_implicit.c:140
MbsDirdyn::tsim
double tsim
current simulation time
Definition: mbs_dirdyn_struct.h:171
MbsDirdynEulerIm::A
double ** A
left side of the equation [nquxnqu]
Definition: mbs_euler_implicit.h:34
MbsDirdynEulerIm::Freeze_jacobian_index
int Freeze_jacobian_index
Definition: mbs_euler_implicit.h:42
MbsDirdynEulerIm::delta_p
double * delta_p
to store delta p [1xnqu]
Definition: mbs_euler_implicit.h:31
MbsDirdynEulerIm::loop_fct
void(* loop_fct)(MbsData *, MbsDirdyn *)
The function to be called at the end of each time step, or waypoints.
Definition: mbs_euler_implicit.h:46
MbsDirdynEulerIm::ysav
double * ysav
vector save y from previous step [1xn]
Definition: mbs_euler_implicit.h:28
loop_euler_implicit
int loop_euler_implicit(double t0, double tf, MbsData *mbs_data, MbsDirdyn *mbs_dd)
Integrate the motion from t0 to tf.
Definition: mbs_euler_implicit.c:65
MbsDirdynEulerIm::Freeze_dfdx
double * Freeze_dfdx
Definition: mbs_euler_implicit.h:41
MbsDirdynEulerIm::dfdx
double * dfdx
vector of derivatives of f by x [1xn]
Definition: mbs_euler_implicit.h:27
initialize_euler_implicit
void initialize_euler_implicit(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 Euler Implicit integrator.
Definition: mbs_euler_implicit.c:26
MbsDirdynEulerIm::derivs
int(* derivs)(double, double[], double[], MbsData *, MbsDirdyn *)
The function computing the derivative of the system.
Definition: mbs_euler_implicit.h:44
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
MbsDirdynEulerIm::save_realtime_update
int(* save_realtime_update)(MbsDirdyn *dd, MbsData *mbs_data)
Definition: mbs_euler_implicit.h:48
mbs_message.h
MbsDirdynEulerIm::dysav
double * dysav
vector save dy from previous step [1xn]
Definition: mbs_euler_implicit.h:29
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
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
MbsDirdynEulerIm::indx
int * indx
index for LU decomp and system resolution
Definition: mbs_euler_implicit.h:38
MbsDirdynEulerIm::Freeze_dydx
double * Freeze_dydx
Definition: mbs_euler_implicit.h:41
integrator.h
This header defines specific integrators functions in C.
MbsData::flag_stop
int flag_stop
stop the simulation. For dirdyn, equil, invdyn and solvekin only.
Definition: mbs_data.h:397
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
euler_implicit
int euler_implicit(double y[], double dydx[], int n, double *x, double h, double yout[], int(*derivs)(double, double[], double[], MbsData *, MbsDirdyn *), MbsData *s, MbsDirdyn *mbs_dd)
Euler Implicit integrator implementation.
Definition: euler_implicit.c:25
MbsDirdynEulerIm
Euler Implicit structure for dirdyn.
Definition: mbs_euler_implicit.h:24
MbsDirdyn::options
MbsDirdynOptions * options
structure defining the option of a direct dynamic
Definition: mbs_dirdyn_struct.h:168
MbsDirdynEulerIm::dfdy
double ** dfdy
matrix of derivatives of f by y [nxn]
Definition: mbs_euler_implicit.h:26