-
Notifications
You must be signed in to change notification settings - Fork 27
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Strain conventions #115
Comments
Sure. See : ImageD11/docs/DeformationGradientTensor.ipynb |
This test was patched : ImageD11/test/eps_sig/test_eps.py |
Sorry the infinitesimal displacement condition went right out of my mind. So maybe the only optional enhancement to make here is adding stress prediction from strain in the case of elastic law as it is the most common case.
By the way, how to label something in GitHub as an enhancement rather than issue? |
There's a menu on the right for tags. I think your existing code does the fully anisotropic case via the FitAllB formstiffnessMV thing? This can also be interesting for #77 - fitting an average stress state for a sample seems more physical than an average strain state. |
I started looking at the DeformationGradient notebooks tonight and I think there is something wrong in the Eulerian strains. There is a comment that "The finite strain page has the opposite sign for the Eulerian strain." It is not just the sign that is different, there is also an inverse on the term with the deformation gradients. I think the correct expression for the Eulerian strain is e=1/2*(I-F^(-T)F^(-1)). I haven't checked if that expression is used in the code somewhere, but it is at least not correct in the strains_from_deformation function in DeformationGradientTensor.ipynb |
Thanks Johan!
So if we are lucky there is a way to get this out somehow, but I have no idea how to check it. Do you have any reference numbers to use for testing and validation? I guess these things are well known in engineering mechanics but with small strains and small rotations I find it very hard to see if the numbers are right or wrong. I am kind of hoping to validate/fix this stuff before doing a new release (which is getting a bit overdue now - the version on pypi is pretty dated) |
To me it looks like the finite_strain_lab with m=-1 will be correct, assuming that the np.linalg.matrix_power works with negative exponents. I can try to dig out some old continuum mechanics book and look for examples with Eulerian strains. I can also do some testing, if I find something suitable. |
I haven't checked with a text book example yet, but I can verify that finite_strain_lab with m=-1 gives the same result as a my expression above ( e=1/2*(I-F^(-T)F^(-1))) on my data, and so it seem to be the correct Eulerian strain. Another comment: Perhaps it would be better to default to m=1 in the finite_strain_ref (Green-Lagrange strain tensor) and m=-1 in finite_strain_lab (Almansi strain tensor). |
That sounds promising - it would be good to document this better. There are some testcases in test/test_finite_strain.py which contains the wonderfully cryptic comment "this is a bit misleading - negative m puts you in the other frame". Sadly I no longer remember what I had in mind when I wrote that, but it sounds like the thing you have run into? The 0.5 was picked as a default in grain.py with an intention to try to pick the one which matches xfab/FitAllB more closely (where strain appears to get defined here https://github.com/FABLE-3DXRD/xfab/blob/fd3015dbd4145daf6a471765887c3aa139eb8bab/xfab/tools.py#L539). It seemed like it should be closer to the 0.5 power, but maybe I was confused. Manually testing now, I see that (m=1) is different to (m=0.5) from the xfab point of view, and xfab is apparently matching (m=0.5) for the example in the test_xfab_strain. |
Hi @jonwright - I believe this has ramifications for stress tensors too. |
Hi @jadball - I think @AxelHenningsson has been putting some of this into xfab recently here: FABLE-3DXRD/xfab#42 Google could find a couple of relevant papers: Acta Mech, S. N. Korobeynikov, "Basis-free expressions for families of objective strain tensors, their rates, and conjugate stress tensors" doi: 10.1007/s00707-017-1972-7 IJSS, Guo & Man, Conjugate stress and tensor equation My thinking on this is that any 'stress' measure depends on an accurate estimate for 'd-zero'. For typical metallurgy experiments: if the choice of 'm' for the strain tensor choice gives an important difference, then perhaps the d-zero is incorrect. These are usually small strains. For cases where there is a large finite strain, then you might also need to account for non-linearity in the elastic constants? Perhaps this comes up for high pressure community (@smerkel ?). Going from 'strain' to 'stress' for a sample in a diamond anvil cell could be one example where the finite strain effects come up. I guess the lattice parameters and equation of state are more independent from the various finite strain measure definitions. |
It looks to me that For different stress measures you are correct @jadball. For each strain measure,
|
@jonwright thanks for your advice here - it's reassuring to know any associated error is small for small applied strains. @AxelHenningsson I'm not sure about your interpretation here. V,R,S = self.VRS # == F
Um = np.linalg.matrix_power(S, m2)
Em = (Um - np.eye(3))/m2
return Em Given that m2 = 1: V,R,S = self.VRS # == F
Um = S
Em = Um - np.eye(3) This formula matches the Biot strain tensor definition here. The challenge then is to calculate S (the right stretch tensor, also called U on the finite strain wiki) from F.
It's good to know that the stress tensor conjugates are also all slightly different! I think for small strains it should be negligible. |
Ah. Yeah. Sorry. I mistook the stretch, U, for the right Cauchy green. M=0.5 should be Biot like you say. 🙂 |
Hi @AxelHenningsson : there should be some check in the code that (2m) is an integer, otherwise I wasn't sure how to compute these things. Going back to the points from @jhektor above - I have a feeling there is still something in the code here that might not be right - but I don't know what it is. Something about the sign of the strain in the lab convention perhaps? It would be good to clean up whatever else is wrong and then close this issue... |
Hi, Regarding large strains as we would get in the high pressure community, John is correct that estimating d-zero is a key element. We try to separate the stress (strain) tensors into an hydrostatic and non hydrostatic component as follows
This procedure is safer than trying to use second order elastic constants and trying to account for "large strains". Deducing "hydrostatic" unit cell parameters, is not always straightforward. It works if we can make simple assumptions on the shape of the stress / strain tensor. Sébastien |
I compared strains from DeformationGradientTensor to strains from xfab/tools/ubi_to_u_and_eps.
It fails even in the reference co-ordinate system. Below is an example of my 1st test.
The text was updated successfully, but these errors were encountered: