[ODE] Damage calculation
Erwin de Vries
erwin at vo.com
Fri Aug 30 09:15:02 2002
Isnt this exactly the same as the stuff added to CVS yesterday?
Erwin
----- Original Message -----
From: "Tomas Sakalauskas" <Tomas.Sakalauskas@axel-group.com>
To: <ode@q12.org>
Sent: Friday, August 30, 2002 17:12
Subject: [ODE] Damage calculation
> Hi,
>
> I saw quite old thread about damage calculation with some hints on
> implementation, but was digging analyzing ODE to actually implement it.
> Maybe this simple solution will save some time for others.
>
> I save constraint force in step function for each joint as dReal[8]
vector.
> Indices 0-3 store force, 4-6 - torque. Contacts generated during collision
> are filled with this information after dWorldStep.
>
> Please comment if you know a better way of handling it.
>
> 1. Add constaint force information to joint structure (add this line to
end
> of dxJoint declaration in joint.h):
> dReal cforce[8];
>
> 2. Define additional matrix multiplication function in step.cpp
>
> static void Multiply1_8q1 (dReal *A, dReal *B, dReal *C, int q)
> {
> int k;
> dReal sum;
> dIASSERT (q>0 && A && B && C);
> sum = 0;
> for (k=0; k<q; k++) sum += B[k*8] * C[k];
> A[0] = sum;
> sum = 0;
> for (k=0; k<q; k++) sum += B[1+k*8] * C[k];
> A[1] = sum;
> sum = 0;
> for (k=0; k<q; k++) sum += B[2+k*8] * C[k];
> A[2] = sum;
> sum = 0;
> for (k=0; k<q; k++) sum += B[4+k*8] * C[k];
> A[4] = sum;
> sum = 0;
> for (k=0; k<q; k++) sum += B[5+k*8] * C[k];
> A[5] = sum;
> sum = 0;
> for (k=0; k<q; k++) sum += B[6+k*8] * C[k];
> A[6] = sum;
> }
>
> 3. Save constaint force by adding the following line to step.cpp,
> dInternalStepIsland_x2 in block starting with comment // compute cforce =
> J'*lambda:
>
> // compute cforce = J'*lambda
> for (i=0; i<nj; i++) {
> dReal *JJ = J + 2*8*ofs[i];
>
> //TS: begin
> Multiply1_8q1(_joint[i]->cforce,JJ, lambda+ofs[i], info[i].m);
> //TS: end
>
> MultiplyAdd1_8q1 (cforce + 8*joint[i]->node[0].body->tag,JJ,
> lambda+ofs[i], info[i].m);
> if (joint[i]->node[1].body) {
> MultiplyAdd1_8q1 (cforce + 8*joint[i]->node[1].body->tag,
> JJ + 8*info[i].m, lambda+ofs[i], info[i].m);
> }
> }
> }
>
>
>
> Tomas
> _______________________________________________
> ODE mailing list
> ODE@q12.org
> http://q12.org/mailman/listinfo/ode
>
>