yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #02849
Re: velgrad
> I'll try to review that and make suggestions in the comming days (and
> again : no shearIncr is not strainIncr, it is really the displacement
> increment gradient for step dt, best name perhaps : "trsfIncr").
> > I removed VELGRAD and unified both approaches. You can set
> > strain/refSize directly,
> What is strain? What is the difference between size and refSize?
> What is the meaning of this? :
> _shearTrsfMatrix[0][0]=_shearTrsfMatrix[1][1]=_shearTrsfMatrix[2][2]=1.;
A more complete description of the current way (with no claim it is
right; we can use the http://en.wikipedia.org/wiki/Finite_strain_theory
notation in the future to know what we talk about; after all, they quote
http://en.wikipedia.org/wiki/Finite_strain_theory#cite_note-0 written by
my boss, so that page is certainly right ;-) )
Current Matrix3r strain:
Δx/x₀ δx/y₀ δx/z₀
δy/x₀ Δy/y₀ δy/z₀
δz/x₀ δz/y₀ Δz/z₀
where Δx=x-x₀ and x is current cell size along (unsheared) x axis. δx/y₀
is shear of the cell top in the +x sense perpendicular to +y, i.e. tan
φyx. (I am not sure if I didn't transpose the matrix, sorry).
I think we can really decribe any transformation by a Matrix3, since we
always map box to a parallelepiped, i.e. 3 points to 3 points (9
coordinates, exactly number of elements of a 3x3 matrix): e.g.
0,y₀,0 → 0+y₀*εyx,y₀+y₀*εyy,0+z₀*εyz
(similar for x₀,0,0 and 0,0,z₀). (This is not bound to small strains in
any way, as far as I see). It seems then that Hsize is the product of
x₀,0,0
0,y₀,0 * strain
0,0,z₀
right?
The strain matrix can be "decomposed" in its diagonal and non-diagonal.
The diagonal (Δx/x₀, Δy/y₀, Δz/z₀) is normal (extensional) strain.
Multiplying refSize by normal strain (by components) gives _size.
shear matrix (_shearTrsfMatrix) is strain matrix non-diagonal terms, but
with 1s on the diagonal:
1 δx/y₀ δx/z₀
δy/x₀ 1 δy/z₀
δz/x₀ δz/y₀ 1
This matrix is used frequently, since collisions etc are detected in
scaled but UNsheared coordinates (positions are in scaled and sheared
coordinates).
Relative volume difference is det(strain); if it is upper-triangular or
lower-triangular, this determinant is product of the diagonal terms;
therefore applying pure shear doesn't change volume (since it doesn't
change _size).
OK, this is how I meant it in the past. I will study that wiki page and
your code to see what should we do. I am totally free to change
anything, but I need (names might differ, I refer to the current ones):
1. Have a refSize vector, with the ability to change it directly.
2. Have a _size vector, giving current cell size along all 3 axes
(needed for wrapping points in the collider)
3. Have a matrix to shear/unshear a point (without scaling by normal
strain).
4. Way to compute cosines of inclination of cell walls (for Aabb
functors)
5. Way to directly prescribe cell normal&shear strain (like what the
strain matrix has now).
We want to keep:
6. velGrad matrix + incremental integration of transformations.
Ugh, I am writing in a little confusing way. Better to continue
tomorrow. Hope this doesn't make more mess than there was.
v
Follow ups
References