tslider.h - slidergrid - grid of elastic sliders on a frictional surface
HTML git clone git://src.adamsgaard.dk/slidergrid
DIR Log
DIR Files
DIR Refs
DIR README
DIR LICENSE
---
tslider.h (3234B)
---
1 #ifndef SLIDER_H_
2 #define SLIDER_H_
3
4 #include "typedefs.h"
5
6 #define MAX_NEIGHBORS 32
7
8 typedef struct {
9
10 // linear position, velocity, acceleration of this slider
11 Float3 pos_future; // [m]
12 Float3 pos; // [m]
13 Float3 vel; // [m/s]
14 Float3 acc; // [m/(s*s)]
15
16 // angular position, velocity, acceleration of this slider
17 Float3 angpos_future; // [rad]
18 Float3 angpos; // [rad]
19 Float3 angvel; // [rad/s]
20 Float3 angacc; // [rad/(s*s)]
21
22 // sum of forces acting on this slider [N]
23 Float3 force;
24
25 // sum of torques acting on this slider [N*m]
26 Float3 torque;
27
28 // slider mass [kg]
29 Float mass;
30
31 // moment of inertia [kg m*m]
32 Float moment_of_inertia;
33
34 // Macroscopic mechanical properties
35 Float youngs_modulus;
36 Float shear_modulus;
37 Float torsion_stiffness;
38
39 // inter-slider bond-parallel Kelvin-Voigt contact model parameters
40 Float bond_parallel_kv_stiffness; // Hookean elastic stiffness [N/m]
41 Float bond_parallel_kv_viscosity; // viscosity [N/(m*s)]
42
43 // inter-slider bond-shear Kelvin-Voigt contact model parameters
44 Float bond_shear_kv_stiffness; // Hookean elastic stiffness [N/m]
45 Float bond_shear_kv_viscosity; // viscosity [N/(m*s)]
46
47 // inter-slider bond-twist Kelvin-Voigt contact model parameters
48 Float bond_twist_kv_stiffness; // Hookean elastic stiffness [N/m]
49 Float bond_twist_kv_viscosity; // viscosity [N/(m*s)]
50
51 // inter-slider bond-bend Kelvin-Voigt contact model parameters
52 Float bond_bend_kv_stiffness; // Hookean elastic stiffness [N/m]
53 Float bond_bend_kv_viscosity; // viscosity [N/(m*s)]
54
55 // Damping parameters
56 Float damping_viscosity_linear; // Linear velocity damping [N/(m/s)]
57 Float damping_viscosity_angular; // Angular velocity damping [N*m/(rad/s)]
58 Float damping_coefficient; // Dimensionless damping [-]
59
60 // The uniquely identifying indexes of the slider neighbors which are bonded
61 // to this slider. A value of -1 denotes an empty field. Preallocated for
62 // speed.
63 int neighbors[MAX_NEIGHBORS];
64
65 // relative spatial movement between this slider and its neighbors
66 Float3 neighbor_distance[MAX_NEIGHBORS];
67 Float neighbor_relative_distance_displacement[MAX_NEIGHBORS];
68 Float3 neighbor_relative_distance_velocity[MAX_NEIGHBORS]; // Float?
69 Float3 neighbor_relative_tangential_displacement[MAX_NEIGHBORS];
70 Float3 neighbor_relative_tangential_velocity[MAX_NEIGHBORS];
71 Float neighbor_relative_twist[MAX_NEIGHBORS];
72 Float neighbor_relative_twist_velocity[MAX_NEIGHBORS];
73 Float3 neighbor_relative_bend[MAX_NEIGHBORS];
74 Float3 neighbor_relative_bend_velocity[MAX_NEIGHBORS];
75 } slider;
76
77
78 void print_slider_position(slider s);
79 void initialize_slider_values(slider* s);
80
81 void project_slider_position(slider* s, Float dt, long int iteration);
82 void zero_slider_force_torque(slider* s);
83 void update_kinematics(slider* s, Float dt, long int iteration);
84
85 void slider_neighbor_interaction(
86 slider* s,
87 const slider* sliders,
88 const int N,
89 const int iteration,
90 const Float dt);
91
92 void slider_viscous_damping(slider* s);
93 void slider_nonviscous_damping(slider* s);
94
95 #endif