yade-dev team mailing list archive
-
yade-dev team
-
Mailing list archive
-
Message #02853
Re: velgrad
written by
my boss, so that page is certainly right ;-) )
Hehe. There is a french saying like "the world is small" (le monde est
petit).
Yes, this page looks serious.
Current Matrix3r strain:
Δx/x₀ δx/y₀ δx/z₀
δy/x₀ Δy/y₀ δy/z₀
δz/x₀ δz/y₀ Δz/z₀
Ok, this is the usual gradient of displacement (alternatively, gradient
of velocity if you replace δx by dx/dt - in answer to your last email -
the same theories hold).
And this is really F - Id.
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.
I agree. Another way to explain why we "can" is we assume a homogeneous
cell deformation and, therefore, a linear expression for disp. u(x,y,z).
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?
Yes for the product. The tricky part is defining "strain" is not
straightforward, it is easier to consider it as a result of the integration.
In order to keep a complex case in mind, you can imagine a rotational
"strain" (in fact disp/vel gradient) with exy=-eyx=pi/100 rad/second.
After 100 seconds, Hsize will be
0,y₀,0
-x₀,0,0
0,0,z₀
after 50 seconds it would be :
x₀/sqrt2,x₀/sqrt2,0
-y₀/sqrt2,y₀/sqrt2,0
0,0,z₀
If the code can handle this, then we can consider it general enough
IMHO. The diagonal multiplication cannot do that probably.
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.
Only if you assume no rotation?
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).
I think it can be correct to decompose the transformation as the product
of rotation and strain (polar decomposition in the wiki page) but
spliting shear and stretch into a sum is weird, and I'm afraid it could
mislead us to wrong maths.
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).
Yes, detF is V/V0.
5. Way to directly prescribe cell normal&shear strain (like what the
strain matrix has now).
One way could be to add members like this :
void setStrainRate(int i, Real value) {gradVel[i][i]=value;}
void setSize(int i, Real value) {Hsize[i][i]=value;} //Fixes the problem
of Hsize initialisation at the same time
It would make the interface simple for users using no complex
deformations, others could just access data gradVel/Hsize directly, or
with additional members.
Ugh, I am writing in a little confusing way. Better to continue
tomorrow. Hope this doesn't make more mess than there was.
That's ok, I think we are very close to a good solution now. :-)
Bruno
--
_______________
Chareyre Bruno
Maître de Conférences
Grenoble INP
Laboratoire 3SR - bureau E145
BP 53 - 38041, Grenoble cedex 9 - France
Tél : 33 4 56 52 86 21
Fax : 33 4 76 82 70 43
________________
Follow ups
References