My Project: dynamics.mod/NewtonDynamics/source/physics/dgWorldDynamicUpdate.h Source File

My Project

dgWorldDynamicUpdate.h
Go to the documentation of this file.
1 /* Copyright (c) <2003-2011> <Julio Jerez, Newton Game Dynamics>
2 *
3 * This software is provided 'as-is', without any express or implied
4 * warranty. In no event will the authors be held liable for any damages
5 * arising from the use of this software.
6 *
7 * Permission is granted to anyone to use this software for any purpose,
8 * including commercial applications, and to alter it and redistribute it
9 * freely, subject to the following restrictions:
10 *
11 * 1. The origin of this software must not be misrepresented; you must not
12 * claim that you wrote the original software. If you use this software
13 * in a product, an acknowledgment in the product documentation would be
14 * appreciated but is not required.
15 *
16 * 2. Altered source versions must be plainly marked as such, and must not be
17 * misrepresented as being the original software.
18 *
19 * 3. This notice may not be removed or altered from any source distribution.
20 */
21
22 #ifndef _DG_WORLD_DYNAMICS_H_
23 #define _DG_WORLD_DYNAMICS_H_
24
25
26 #include "dgPhysicsStdafx.h"
27
28
29 //#define DG_PSD_DAMP_TOL dgFloat32 (1.0e-2f)
30 #define DG_PSD_DAMP_TOL dgFloat32 (1.0e-3f)
31 //#define DG_PSD_DAMP_TOL dgFloat32 (1.0e-4f)
32
33
34 #define DG_BODY_LRU_STEP 2
35 #define DG_SMALL_ISLAND_COUNT 2
36
37 #define DG_FREEZZING_VELOCITY_DRAG dgFloat32 (0.9f)
38 #define DG_SOLVER_MAX_ERROR (DG_FREEZE_MAG * dgFloat32 (0.5f))
39
40 #ifdef _MAC_IPHONE
41 #define LINEAR_SOLVER_SUB_STEPS 2
42 #else
43 #define LINEAR_SOLVER_SUB_STEPS 3
44 #endif
45
46 #define DG_BASE_ITERATION_COUNT 4
47
48
49 // the solver is a RK order, but instead of weighting the intermediate derivative by the usual 1/6, 1/3, 1/3, 1/6 coefficients
50 // I am using 1/4, 1/4, 1/4, 1/4.
51 // This is absolutely correct. the weighting coefficients of any RK method comes for fixing arbitrary criteria
52 // solving a set of linear equation on the coefficients.
53 // the standard coefficients just happen to lead to a accurate result because they are optimal with reset to a second order solution.
54 // However a different set of coefficient generates results that are not much different than the optimal set, but it allows
55 // for simpler calculation of the intermediate derivatives and also for less intermediate memory.
56 // for more detail on the derivation of the Runge Kutta coefficients you can go to:
57 // http://pathfinder.scar.utoronto.ca/~dyer/csca57/book_P/node51.html
58
59
60 #define DG_MAX_CONTINUE_COLLISON_STEPS 8
61
62 class dgBody;
63 class dgDynamicBody;
64 class dgParallelSolverSyncData;
65 class dgWorldDynamicUpdateSyncDescriptor;
66
67
68 class dgIslandCallbackStruct
69 {
70 public:
71 dgWorld* m_world;
72 dgInt32 m_count;
73 dgInt32 m_strideInByte;
74 void* m_bodyArray;
75 };
76
77 class dgBodyInfo
78 {
79 public:
80 dgBody* m_body;
81 dgInt32 m_index;
82 };
83
84 class dgIsland
85 {
86 public:
87 dgInt32 m_bodyCount;
88 dgInt32 m_bodyStart;
89 dgInt32 m_jointCount;
90 dgInt32 m_jointStart;
91 dgInt32 m_rowsCount;
92 dgInt32 m_rowsStart;
93 dgUnsigned32 m_isContinueCollision : 1;
94 dgUnsigned32 m_hasExactSolverJoints : 1;
95 };
96
97
98 class dgJointInfo
99 {
100 public:
101 dgConstraint* m_joint;
102 dgInt32 m_autoPairstart;
103 dgInt32 m_autoPaircount;
104 dgInt32 m_autoPairActiveCount;
105 dgInt32 m_m0;
106 dgInt32 m_m1;
107 dgInt32 m_color;
108 };
109
110
111
112 class dgParallelJointMap
113 {
114 public:
115 dgInt32 m_bashIndex;
116 dgInt32 m_jointIndex;
117 };
118
119 class dgParallelSolverSyncData
120 {
121 public:
122 class JointsBashes
123 {
124 public:
125 dgInt32 m_start;
126 dgInt32 m_count;
127 };
128
129 dgParallelSolverSyncData()
130 {
131 memset (this, 0, sizeof (dgParallelSolverSyncData));
132 }
133
134 dgVector m_accelNorm[DG_MAX_THREADS_HIVE_COUNT];
135
136 dgFloat32 m_timestep;
137 dgFloat32 m_invTimestep;
138 dgFloat32 m_invStepRK;
139 dgFloat32 m_timestepRK;
140 dgFloat32 m_invTimestepRK;
141 dgFloat32 m_firstPassCoef;
142
143 dgInt32 m_maxPasses;
144 dgInt32 m_bodyCount;
145 dgInt32 m_jointCount;
146 dgInt32 m_rowCount;
147 dgInt32 m_batchesCount;
148 dgInt32 m_atomicIndex;
149 dgInt32 m_jointsInBatch;
150 dgInt32 m_islandCount;
151 dgInt32 m_islandCountCounter;
152 dgInt32 m_jacobianMatrixRowAtomicIndex;
153
154 const dgIsland* m_islandArray;
155 dgBody** m_bodyInfoMap;
156 dgParallelJointMap* m_jointInfoMap;
157 JointsBashes m_jointBatches[64];
158 dgInt32 m_hasJointFeeback[DG_MAX_THREADS_HIVE_COUNT];
159 };
160
161
162 template<class T>
163 class dgQueue
164 {
165 public:
166 dgQueue (T* const pool, dgInt32 size)
167 :m_pool (pool)
168 {
169 m_mod = size;
170 m_lastIndex = 0;
171 m_firstIndex = 0;
172 }
173
174 void Insert (T info)
175 {
176 m_pool[m_firstIndex] = info;
177 m_firstIndex ++;
178 if (m_firstIndex >= m_mod) {
179 m_firstIndex = 0;
180 }
181 dgAssert (m_firstIndex != m_lastIndex);
182 }
183
184 T Remove ()
185 {
186 dgAssert (m_firstIndex != m_lastIndex);
187
188 T element = m_pool[m_lastIndex];
189 m_lastIndex ++;
190 if (m_lastIndex >= m_mod) {
191 m_lastIndex = 0;
192 }
193
194 return element;
195 }
196
197 void Reset ()
198 {
199 m_lastIndex = m_firstIndex;
200 }
201
202 bool IsEmpty () const
203 {
204 return (m_firstIndex == m_lastIndex);
205 }
206
207 dgInt32 m_mod;
208 dgInt32 m_firstIndex;
209 dgInt32 m_lastIndex;
210 T* m_pool;
211 };
212
213 DG_MSC_VECTOR_ALIGMENT
214 class dgJacobianMatrixElement
215 {
216 public:
217 dgJacobianPair m_Jt;
218 // dgJacobianPair m_JMinv;
219
220 dgFloat32 m_force;
221 dgFloat32 m_accel;
222 dgFloat32 m_deltaAccel;
223 dgFloat32 m_deltaForce;
224
225 dgFloat32 m_diagDamp;
226 dgFloat32 m_invDJMinvJt;
227 dgFloat32 m_restitution;
228 dgFloat32 m_penetration;
229
230 dgFloat32 m_coordenateAccel;
231 dgFloat32 m_penetrationStiffness;
232 dgFloat32 m_lowerBoundFrictionCoefficent;
233 dgFloat32 m_upperBoundFrictionCoefficent;
234
235 dgFloat32 m_maxImpact;
236
237 dgForceImpactPair* m_jointFeebackForce;
238 dgInt32 m_normalForceIndex;
239 bool m_accelIsMotor;
240 } DG_GCC_VECTOR_ALIGMENT;
241
242 class dgJacobianMemory
243 {
244 public:
245 void Init (dgWorld* const world, dgInt32 rowsCount, dgInt32 bodyCount);
246
247 //dgJacobian* m_internalVeloc;
248 dgJacobian* m_internalForces;
249 dgJacobianMatrixElement* m_memory;
250 };
251
252 class dgWorldDynamicUpdate
253 {
254 dgWorldDynamicUpdate();
255 void UpdateDynamics (dgFloat32 timestep);
256
257 private:
258 void SpanningTree (dgDynamicBody* const body, dgFloat32 timestep);
259 //void BuildIsland (dgQueue<dgDynamicBody*>& queue, dgInt32 jountCount, dgInt32 rowsCount, dgInt32 isContinueCollisionIsland, dgInt32 forceExactSolver);
260 void BuildIsland (dgQueue<dgDynamicBody*>& queue, dgFloat32 timestep, dgInt32 jountCount, dgInt32 forceExactSolver);
261
262 static dgInt32 CompareIslands (const dgIsland* const islandA, const dgIsland* const islandB, void* notUsed);
263 static void CalculateIslandReactionForcesKernel (void* const context, void* const worldContext, dgInt32 threadID);
264
265 static void IntegrateInslandParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
266 static void InitializeBodyArrayParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
267 static void BuildJacobianMatrixParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
268 static void SolverInitInternalForcesParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
269 static void CalculateJointsForceParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
270 static void CalculateJointsAccelParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
271 static void CalculateJointsVelocParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
272 static void KinematicCallbackUpdateParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
273 static void CalculateJointsImpulseVelocParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
274 static void UpdateFeedbackForcesParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
275 static void UpdateBodyVelocityParallelKernel (void* const context, void* const worldContext, dgInt32 threadID);
276 static void FindActiveJointAndBodies (void* const context, void* const worldContext, dgInt32 threadID);
277 static dgInt32 SortJointInfoByColor (const dgParallelJointMap* const indirectIndexA, const dgParallelJointMap* const indirectIndexB, void* const constraintArray);
278
279 void GetJacobianDerivativesParallel (dgJointInfo* const jointInfo, dgInt32 threadID, dgInt32 rowBase, dgFloat32 timestep) const;
280 void CreateParallelArrayBatchArrays (dgParallelSolverSyncData* const solverSyncData, dgJointInfo* const constraintArray, const dgIsland* const island) const;
281
282 void FindActiveJointAndBodies (dgIsland* const island);
283 void IntegrateInslandParallel(dgParallelSolverSyncData* const syncData) const;
284 void InitilizeBodyArrayParallel (dgParallelSolverSyncData* const syncData) const;
285 void BuildJacobianMatrixParallel (dgParallelSolverSyncData* const syncData) const;
286 void SolverInitInternalForcesParallel (dgParallelSolverSyncData* const syncData) const;
287 void CalculateForcesGameModeParallel (dgParallelSolverSyncData* const syncData) const;
288
289 void CalculateReactionForcesParallel (const dgIsland* const island, dgFloat32 timestep) const;
290 dgFloat32 CalculateJointForces (const dgIsland* const island, dgInt32 rowStart, dgInt32 joint, dgFloat32* const forceStep, dgFloat32 maxAccNorm, const dgJacobianPair* const JMinv) const;
291 void CalculateForcesSimulationMode (const dgIsland* const island, dgInt32 threadID, dgFloat32 timestep, dgFloat32 maxAccNorm) const;
292 void CalculateIslandReactionForces (dgIsland* const island, dgFloat32 timestep, dgInt32 threadID) const;
293 void BuildJacobianMatrix (dgIsland* const island, dgInt32 threadID, dgFloat32 timestep) const;
294 void CalculateForcesGameMode (const dgIsland* const island, dgInt32 threadID, dgFloat32 timestep, dgFloat32 maxAccNorm) const;
295 void CalculateReactionsForces(const dgIsland* const island, dgInt32 threadID, dgFloat32 timestep, dgFloat32 maxAccNorm) const;
296 void ApplyExternalForcesAndAcceleration(const dgIsland* const island, dgInt32 threadID, dgFloat32 timestep, dgFloat32 maxAccNorm) const;
297 void CalculateSimpleBodyReactionsForces (const dgIsland* const island, dgInt32 rowStart, dgInt32 threadID, dgFloat32 timestep, dgFloat32 maxAccNorm) const;
298 void IntegrateArray (const dgIsland* const island, dgFloat32 accelTolerance, dgFloat32 timestep, dgInt32 threadID) const;
299 void GetJacobianDerivatives (const dgIsland* const island, dgInt32 threadID, dgInt32 rowCount, dgFloat32 timestep) const;
300 void CalculateIslandContacts (dgIsland* const island, dgFloat32 timestep, dgInt32 currLru, dgInt32 threadID) const;
301
302
303 dgInt32 m_bodies;
304 dgInt32 m_joints;
305 dgInt32 m_islands;
306 dgUnsigned32 m_markLru;
307 dgJacobianMemory m_solverMemory;
308 dgThread::dgCriticalSection m_softBodyCriticalSectionLock;
309 dgBody* m_sentinelBody;
310 static dgVector m_velocTol;
311
312 friend class dgWorld;
313 friend class dgAmpInstance;
314 friend class dgJacobianMemory;
315 friend class dgSolverWorlkerThreads;
316 };
317
318 #endif
319
dgQueue::Remove
T Remove()
Definition: dgWorldDynamicUpdate.h:184
dgJointInfo::m_m0
dgInt32 m_m0
Definition: dgWorldDynamicUpdate.h:105
dgParallelSolverSyncData::m_jointCount
dgInt32 m_jointCount
Definition: dgWorldDynamicUpdate.h:145
dgParallelSolverSyncData::m_invTimestep
dgFloat32 m_invTimestep
Definition: dgWorldDynamicUpdate.h:137
dgBodyInfo::m_body
dgBody * m_body
Definition: dgWorldDynamicUpdate.h:80
dgIslandCallbackStruct::m_bodyArray
void * m_bodyArray
Definition: dgWorldDynamicUpdate.h:74
dgAmpInstance
Definition: dgAmpInstance.h:143
dgJacobianMatrixElement::m_penetration
dgFloat32 m_penetration
Definition: dgWorldDynamicUpdate.h:228
dgQueue::Insert
void Insert(T info)
Definition: dgWorldDynamicUpdate.h:174
dgParallelSolverSyncData::m_bodyCount
dgInt32 m_bodyCount
Definition: dgWorldDynamicUpdate.h:144
dgJointInfo::m_color
dgInt32 m_color
Definition: dgWorldDynamicUpdate.h:107
dgForceImpactPair
Definition: dgConstraint.h:73
dgJacobianMatrixElement::m_coordenateAccel
dgFloat32 m_coordenateAccel
Definition: dgWorldDynamicUpdate.h:230
dgBody
Definition: dgBody.h:44
dgJacobianMatrixElement::m_accel
dgFloat32 m_accel
Definition: dgWorldDynamicUpdate.h:221
DG_GCC_VECTOR_ALIGMENT
DG_MSC_VECTOR_ALIGMENT class dgJacobianMatrixElement DG_GCC_VECTOR_ALIGMENT
dgJacobianMatrixElement::m_lowerBoundFrictionCoefficent
dgFloat32 m_lowerBoundFrictionCoefficent
Definition: dgWorldDynamicUpdate.h:232
dgParallelSolverSyncData::m_rowCount
dgInt32 m_rowCount
Definition: dgWorldDynamicUpdate.h:146
dgQueue::Reset
void Reset()
Definition: dgWorldDynamicUpdate.h:197
dgParallelSolverSyncData::m_timestep
dgFloat32 m_timestep
Definition: dgWorldDynamicUpdate.h:136
dgAssert
#define dgAssert(x)
Definition: dgTypes.h:158
dgFloat32
float dgFloat32
Definition: dgTypes.h:233
dgInt32
int dgInt32
Definition: dgTypes.h:218
dgJacobianMemory::m_memory
dgJacobianMatrixElement * m_memory
Definition: dgWorldDynamicUpdate.h:249
dgJacobianMemory
Definition: dgWorldDynamicUpdate.h:242
dgVector
Definition: dgVector.h:639
dgJointInfo
Definition: dgWorldDynamicUpdate.h:98
dgParallelSolverSyncData::m_invTimestepRK
dgFloat32 m_invTimestepRK
Definition: dgWorldDynamicUpdate.h:140
dgJacobianMatrixElement::m_diagDamp
dgFloat32 m_diagDamp
Definition: dgWorldDynamicUpdate.h:225
dgParallelJointMap::m_jointIndex
dgInt32 m_jointIndex
Definition: dgWorldDynamicUpdate.h:116
dgIsland::m_bodyStart
dgInt32 m_bodyStart
Definition: dgWorldDynamicUpdate.h:88
dgParallelSolverSyncData::JointsBashes::m_count
dgInt32 m_count
Definition: dgWorldDynamicUpdate.h:126
dgJacobianMatrixElement::m_normalForceIndex
dgInt32 m_normalForceIndex
Definition: dgWorldDynamicUpdate.h:238
dgJointInfo::m_autoPairstart
dgInt32 m_autoPairstart
Definition: dgWorldDynamicUpdate.h:102
dgParallelSolverSyncData
Definition: dgWorldDynamicUpdate.h:119
dgQueue::IsEmpty
bool IsEmpty() const
Definition: dgWorldDynamicUpdate.h:202
dgParallelJointMap::m_bashIndex
dgInt32 m_bashIndex
Definition: dgWorldDynamicUpdate.h:115
dgParallelSolverSyncData::JointsBashes::m_start
dgInt32 m_start
Definition: dgWorldDynamicUpdate.h:125
dgIsland::m_rowsCount
dgInt32 m_rowsCount
Definition: dgWorldDynamicUpdate.h:91
dgJointInfo::m_m1
dgInt32 m_m1
Definition: dgWorldDynamicUpdate.h:106
dgParallelSolverSyncData::m_bodyInfoMap
dgBody ** m_bodyInfoMap
Definition: dgWorldDynamicUpdate.h:155
dgBodyInfo
Definition: dgWorldDynamicUpdate.h:77
dgJacobianMatrixElement::m_jointFeebackForce
dgForceImpactPair * m_jointFeebackForce
Definition: dgWorldDynamicUpdate.h:237
dgWorldDynamicUpdate
Definition: dgWorldDynamicUpdate.h:252
DG_MSC_VECTOR_ALIGMENT
#define DG_MSC_VECTOR_ALIGMENT
Definition: dgTypes.h:194
dgParallelSolverSyncData::dgParallelSolverSyncData
dgParallelSolverSyncData()
Definition: dgWorldDynamicUpdate.h:129
DG_MAX_THREADS_HIVE_COUNT
#define DG_MAX_THREADS_HIVE_COUNT
Definition: dgTypes.h:164
dgParallelSolverSyncData::m_jointsInBatch
dgInt32 m_jointsInBatch
Definition: dgWorldDynamicUpdate.h:149
dgIsland::m_bodyCount
dgInt32 m_bodyCount
Definition: dgWorldDynamicUpdate.h:87
dgQueue::m_mod
dgInt32 m_mod
Definition: dgWorldDynamicUpdate.h:207
dgQueue::m_lastIndex
dgInt32 m_lastIndex
Definition: dgWorldDynamicUpdate.h:209
dgJacobianMatrixElement::m_penetrationStiffness
dgFloat32 m_penetrationStiffness
Definition: dgWorldDynamicUpdate.h:231
dgJacobianMatrixElement::m_Jt
dgJacobianPair m_Jt
Definition: dgWorldDynamicUpdate.h:217
dgJacobianMatrixElement::m_deltaAccel
dgFloat32 m_deltaAccel
Definition: dgWorldDynamicUpdate.h:222
dgIsland::m_jointStart
dgInt32 m_jointStart
Definition: dgWorldDynamicUpdate.h:90
dgParallelSolverSyncData::m_invStepRK
dgFloat32 m_invStepRK
Definition: dgWorldDynamicUpdate.h:138
dgJacobianMatrixElement::m_deltaForce
dgFloat32 m_deltaForce
Definition: dgWorldDynamicUpdate.h:223
dgJacobian
Definition: dgConstraint.h:90
dgJacobianPair
Definition: dgConstraint.h:98
dgParallelJointMap
Definition: dgWorldDynamicUpdate.h:112
dgIslandCallbackStruct::m_world
dgWorld * m_world
Definition: dgWorldDynamicUpdate.h:71
dgParallelSolverSyncData::m_timestepRK
dgFloat32 m_timestepRK
Definition: dgWorldDynamicUpdate.h:139
dgJointInfo::m_autoPairActiveCount
dgInt32 m_autoPairActiveCount
Definition: dgWorldDynamicUpdate.h:104
dgUnsigned32
unsigned dgUnsigned32
Definition: dgTypes.h:219
dgIslandCallbackStruct::m_strideInByte
dgInt32 m_strideInByte
Definition: dgWorldDynamicUpdate.h:73
dgJacobianMatrixElement::m_accelIsMotor
bool m_accelIsMotor
Definition: dgWorldDynamicUpdate.h:239
dgIslandCallbackStruct
Definition: dgWorldDynamicUpdate.h:68
dgJacobianMatrixElement
Definition: dgWorldDynamicUpdate.h:214
dgParallelSolverSyncData::m_jointInfoMap
dgParallelJointMap * m_jointInfoMap
Definition: dgWorldDynamicUpdate.h:156
dgJacobianMatrixElement::m_upperBoundFrictionCoefficent
dgFloat32 m_upperBoundFrictionCoefficent
Definition: dgWorldDynamicUpdate.h:233
timestep
dgFloat32 timestep
Definition: dgBallConstraint.h:34
dgJacobianMatrixElement::m_restitution
dgFloat32 m_restitution
Definition: dgWorldDynamicUpdate.h:227
dgJointInfo::m_autoPaircount
dgInt32 m_autoPaircount
Definition: dgWorldDynamicUpdate.h:103
dgIsland::m_jointCount
dgInt32 m_jointCount
Definition: dgWorldDynamicUpdate.h:89
dgPhysicsStdafx.h
dgJointInfo::m_joint
dgConstraint * m_joint
Definition: dgWorldDynamicUpdate.h:101
dgIslandCallbackStruct::m_count
dgInt32 m_count
Definition: dgWorldDynamicUpdate.h:72
dgQueue::dgQueue
dgQueue(T *const pool, dgInt32 size)
Definition: dgWorldDynamicUpdate.h:166
dgQueue
Definition: dgWorldDynamicUpdate.h:163
dgQueue::m_firstIndex
dgInt32 m_firstIndex
Definition: dgWorldDynamicUpdate.h:208
dgJacobianMatrixElement::m_force
dgFloat32 m_force
Definition: dgWorldDynamicUpdate.h:220
dgConstraint
Definition: dgConstraint.h:140
dgParallelSolverSyncData::m_islandCountCounter
dgInt32 m_islandCountCounter
Definition: dgWorldDynamicUpdate.h:151
dgWorld
Definition: dgWorld.h:129
dgIsland::m_rowsStart
dgInt32 m_rowsStart
Definition: dgWorldDynamicUpdate.h:92
dgParallelSolverSyncData::m_jacobianMatrixRowAtomicIndex
dgInt32 m_jacobianMatrixRowAtomicIndex
Definition: dgWorldDynamicUpdate.h:152
dgJacobianMemory::m_internalForces
dgJacobian * m_internalForces
Definition: dgWorldDynamicUpdate.h:248
dgWorldDynamicUpdateSyncDescriptor
Definition: dgWorldDynamicUpdate.cpp:46
dgQueue::m_pool
T * m_pool
Definition: dgWorldDynamicUpdate.h:210
dgParallelSolverSyncData::m_atomicIndex
dgInt32 m_atomicIndex
Definition: dgWorldDynamicUpdate.h:148
dgThread::dgCriticalSection
Definition: dgThread.h:35
dgParallelSolverSyncData::JointsBashes
Definition: dgWorldDynamicUpdate.h:122
dgDynamicBody
Definition: dgDynamicBody.h:40
dgJacobianMatrixElement::m_maxImpact
dgFloat32 m_maxImpact
Definition: dgWorldDynamicUpdate.h:235
dgIsland
Definition: dgWorldDynamicUpdate.h:84
dgParallelSolverSyncData::m_firstPassCoef
dgFloat32 m_firstPassCoef
Definition: dgWorldDynamicUpdate.h:141
dgParallelSolverSyncData::m_islandArray
const dgIsland * m_islandArray
Definition: dgWorldDynamicUpdate.h:154
dgParallelSolverSyncData::m_batchesCount
dgInt32 m_batchesCount
Definition: dgWorldDynamicUpdate.h:147
dgBodyInfo::m_index
dgInt32 m_index
Definition: dgWorldDynamicUpdate.h:81
dgJacobianMatrixElement::m_invDJMinvJt
dgFloat32 m_invDJMinvJt
Definition: dgWorldDynamicUpdate.h:226
dgParallelSolverSyncData::m_maxPasses
dgInt32 m_maxPasses
Definition: dgWorldDynamicUpdate.h:143
dgParallelSolverSyncData::m_islandCount
dgInt32 m_islandCount
Definition: dgWorldDynamicUpdate.h:150