← Back to team overview

yade-users team mailing list archive

Re: Elastic energy


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 :)

best regards
Janek Kozicki                               http://janek.kozicki.pl/  |

Follow ups