MechMicroMan / DefDAP

A python library for correlating EBSD and HRDIC data
Apache License 2.0
36 stars 18 forks source link

Green lagrange strain definition #81

Closed Tijmenvermeij closed 3 years ago

Tijmenvermeij commented 3 years ago

Hi all,

Not sure if I can post this as an "issue", but I'm not very experienced with GitHub :)

I'm playing with some of the HRDIC data from "Harte et al, Acta, A statistical study of the relationship between plastic strain and lattice misorientation on the surface of a deformed Ni-based superalloy", and I was trying to reproduce the effective shear strain maps (using Matlab).

I didn't get the same effective shear strain magnitudes, so I started looking into the DefDAP code to see how the strains are exactly calculated (see below), and I don't understand how the "Green Strain" (which I assume to be Green Lagrange Strains, or "E") are computed. The definition of E should be: E = 0.5(Ft F - 1), with Ft the transposed of deformation gradient tensor F.

Shouldn't E11 for example then be: 0.5 (self.f11 self.f11 + self.f21 * self.f21 - 1) ? Or am I missing something?

Many thanks for the response!

Best regards, Tijmen Vermeij Eindhoven University of Technology

line 162 of hrdic.py:

    # Deformation gradient
    self.f11 = xDispGrad[1] + 1
    self.f22 = yDispGrad[0] + 1
    self.f12 = xDispGrad[0]
    self.f21 = yDispGrad[1]

    # Green strain
    self.e11 = xDispGrad[1] + \
               0.5*(xDispGrad[1]*xDispGrad[1] + yDispGrad[1]*yDispGrad[1])
    self.e22 = yDispGrad[0] + \
               0.5*(xDispGrad[0]*xDispGrad[0] + yDispGrad[0]*yDispGrad[0])
    self.e12 = 0.5*(xDispGrad[0] + yDispGrad[1] +
                    xDispGrad[1]*xDispGrad[0] + yDispGrad[1]*yDispGrad[0])

    # max shear component
    self.eMaxShear = np.sqrt(((self.e11 - self.e22) / 2.)**2 + self.e12**2)
mikesmic commented 3 years ago

Hi Tijmen, thanks for the question.

I think the values in defdap are consistent with the definition of the Green-Lagrangian strain tensor you quote but expressed in terms of the displacement gradient (ui,j) not the deformation gradient (Fij), which are related by Fij = ui,j + 𝛿ij. So for your example of E11:

E11 = (F11F11 + F21F21 - 1)/2 = [(u1,1 + 1)(u1,1 + 1) + u2,1u2,1 - 1]/2 = u1,1 + (u1,1u1,1 + u2,1*u2,1)/2

which is what is defined in defdap (note because the arrays are defined y then x, xDispGrad[1] is the x displacement differentiated wrt x direction and xDispGrad[0] wrt y). So I don't think this is why you are getting different values.

What method did you use to calculate the gradients in matlab? We use a simple finite difference approach (see https://numpy.org/doc/stable/reference/generated/numpy.gradient.html). The strain values could be significantly lower at slip bands if the gradient is calculated over a larger sample. If you are comparing to figures in the paper, it could be that we previously used the infinitesimal strain tensor to define max shear strain but I don't think that would change the values significantly.

Tijmenvermeij commented 3 years ago

Hi Mike,

thanks for the thorough answer, which makes complete sense! I use the similar “gradient” operator in Matlab, which is also based on finite differences.

I think I was using the wrong spacing/pixel size to calculate the gradient, which results in different gradient/strain magnitudes.

Thanks again! Tijmen