yade-users team mailing list archive
Mailing list archive
Re: Elastic energy
Janek Kozicki <janek_listy@xxxxx>
Sun, 4 Jul 2010 18:38:38 +0200
chiara modenese said: (by the date of Sun, 4 Jul 2010 09:15:03 +0000)
> Thanks Janek for explanation! And thanks Bruno for remind me I should set to
> True the bool traceEnergy ;) I did it. But I do not understand the results.
> You can also reproduce them setting traceEnergy=True in the script I
> attached in this thread. Please just see the attached plot. The code of
> plasticDissipation() I am sure it is correct. There is sliding as expected
> in fact. But what is wrong now?
hmm. I remember calculating internal work, and in fact I remember
that we stumbled upon this problem.
(I hope that your UTF-8 works good, because I'm using UTF below)
What is the work of a typical spring?
W=∫k*x*dx = k*x²/2
, see that squared distance factor?
But we need to integrate that in a little different manner, because
we are summing from one iteration to another. Let us make a plot of
force versus displacement and calculate the surface area below the
force. To make it simple we are integrating using the Trapezoidal Rule:
Wᵢ = (Fᵢ+Fᵢ₋₁)*Δxᵢ⁄2
, where ᵢ is the iteration, Fᵢ₋₁ is previous force, Fᵢ is
current force, Δxᵢ=xᵢ-xᵢ₋₁ is the displacement that happened from
iteration ᵢ₋₁ to ᵢ. Now if we perform summation over all
iterations, like that:
W += Wᵢ
we would get:
W = ∑ (Fᵢ+Fᵢ₋₁)*(xᵢ-xᵢ₋₁)⁄2
In the end we were using that formula for all DOFs, to get a total
work, as a sum of normal, shearing and rotational displacements over
respective forces (and moment).
Wn =∑ (Fnᵢ+Fnᵢ₋₁)*(xᵢ-xᵢ₋₁)⁄2
Ws =∑ (Fsᵢ+Fsᵢ₋₁)*(sᵢ-sᵢ₋₁)⁄2
Wr =∑ (Mᵢ+Mᵢ₋₁)*quaternion_to_Euler_angle(qᵢ*(qᵢ₋₁)⁻¹).angle_in_radians⁄2
I don't have the implementation at hand right now, I'll find it
tomorrow. I might have made some mistake above, but you should get
the general idea.
If I find a mistake I'll let you know :)
Janek Kozicki http://janek.kozicki.pl/ |