Calculating averaged Young's modulus for poly-crystal?

201 views
Skip to first unread message

MTEXNewbie

unread,
Aug 7, 2018, 9:44:51 AM8/7/18
to MTEX
Hi All,

I have been calculating Young's modulus for a single grain using the code below.

I was wondering how to calculate Young's modulus for all the grains in the poly-crystal section (Z-axis) and take the average of it.

Thank you.


%% Elasticity (Elastic constants)

% Define Cartesian Tensor crystal symmetry & frame
csEC = crystalSymmetry('m-3m',[3.6599 3.6599 3.6599],[90.0000 90.0000 90.0000]*degree,'x||a','z||c','mineral','Iron fcc', 'color', 'light blue');

% elastic Cij stiffness tensor (GPa) as matrix M
M =....
[[260    111    111    0.00    0.00    0.00];...
[111    260    111    0.00    0.00    0.00];...
[111    111    260    0.00    0.00    0.00];...
[0.00    0.00    0.00    77    0.00    0.00];...
[0.00    0.00    0.00    0.00    77    0.00];...
[0.00    0.00    0.00    0.00    0.00    77]];

% M as stiffness tensor C
C = stiffnessTensor(M,csEC);

% orientations of phase/grain from ebsd
go=grains(1).meanOrientation;

% % assuming both your ebsd and CS above have not the same reference
% % frame use transformReferenceFrame
% go = transformReferenceFrame(go,csEC); % in case 
% % other wise

% rotate the tensile direction which is xvector in this case, into crystal coordiantes
yc=inv(go).*xvector;
% compute Young's modulus as a directional dependend function
E = C.YoungsModulus;
% which can be evaluated at a given direction
Yy = E.eval(yc);

% now you can for example plot it
figure
plot(grains(1),Yy)
mtexColorbar
Yy

% set some colormap well suited for tensor visualisation
setMTEXpref('defaultColorMap',blue2redColorMap);
figure
plot(C.YoungsModulus,'complete','upper')
mtexColorbar



Sergey Philippov

unread,
Aug 8, 2018, 5:35:56 AM8/8/18
to mtex...@googlegroups.com
Hi

Young's modulus makes no sense for a single crystal. This parameter can be used only for isotropic material.

Sergey

--
If you want to reduce the number of emails you get through this forum login to https://groups.google.com/forum/?fromgroups=#!forum/mtexmail, click "My membership" and select "Don't send me email updates". You can still get emails on selected topics by staring them.
---
You received this message because you are subscribed to the Google Groups "MTEX" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mtexmail+unsubscribe@googlegroups.com.
Visit this group at https://groups.google.com/group/mtexmail.
For more options, visit https://groups.google.com/d/optout.

David Mainprice

unread,
Aug 8, 2018, 6:00:51 AM8/8/18
to mtex...@googlegroups.com
Not true as you can have anisotropic Young’s modulus which varies with axial direction of compression or extension

You should look at the equation that defines Young’s modulus

All the best David

To unsubscribe from this group and stop receiving emails from it, send an email to mtexmail+u...@googlegroups.com.

Sergey Philippov

unread,
Aug 8, 2018, 7:30:24 AM8/8/18
to mtex...@googlegroups.com
To describe elastic behavior of monocrystal you have to use elastic tensor that has from 3 (for cubic crystals) up to 21 elastic constants.
And for isotropic material (after averaging over all grains if it's perfect polycrystal without texture), there are only 2 constants that could be, for example, Young’s modulus and Poisson ratio.

Sergey Philippov

unread,
Aug 8, 2018, 7:31:09 AM8/8/18
to mtex...@googlegroups.com
With best regards,

Sergey

2018-08-08 13:00 GMT+03:00 David Mainprice <david.m...@gmail.com>:

MTEXNewbie

unread,
Aug 8, 2018, 11:26:17 AM8/8/18
to MTEX
Hi Sergey,

The three anisotropic elastic constants, C11, C12 and C44 describe the elastic behavior of mono-crystal (cubic).

And for isotropic material (after averaging over all grains if it's perfect polycrystal without texture), there are only 2 constants that could be, for example, Young’s modulus and Poisson ratio.

Exactly, all I am asking is how to code for the averaging procedure over all grains (in the loading direction for a true polycrystal without texture). It is an MTEX/MATLAB coding related question, not conceptual.

grandr...@gmail.com

unread,
Aug 8, 2018, 12:28:44 PM8/8/18
to MTEX
Is this helpful? It's from the next rev of my Mtex manual (not distributed yet)

Working with tensors

Tensors are useful for doing things like plotting directional material properties of a crystal (such as the directional Young's modulus which is based on S the compliance tensor), and using the texture to determine what the average values of the property will be relative to the material axes.  All of the following work was done for Mg, and it is important to recall that for this element the default reference frame is X||a*, Y||b, Z||c, which can always be seen by typing ebsd('Magnesium').CS into MTEX.  Essentially, the tensor is defined in terms of Crystal Directions, and we want to convert these values into properties relative to the sample directions, given the known orientations of the texture involved.

 

First we enter the stiffness tensor (note spaces may be used instead of commas)

Mg_C =[59.3,25.7,21.4,0,0,0

     25.7,59.3,21.4,0,0,0

     21.4,21.4,61.5,0,0,0

      0,0,0,16.4,0,0

     0,0,0,0,16.4,0

     0,0,0,0,0,16.8];

 

The compliance in an arbitrary direction (for HCP) can be calculated from

, where theta is the angle between the direction of interest and crystal [0001] axis.  This can be used to calculate the compliance in any direction as shown below.

A gist showing how to calculate the stiffness tensor in 3D for HCP is available online, and gives the following outputs for Mg.  The C





 

We can use mtex tensor functions as well.  Let's say we have the anisotropic Mg tensor above, and want to calculate E and nu (poisson's ratio)

cs=ebsd('Magnesium').CS;

 

C = tensor(Mg_C,cs)

%to calculate the magnitude in various directions (matlab inverts the

%square C matrix to get the S matrix and then takes 1/S(11) or 1/S(33)

%depending on direction (per Tromans)

E = YoungsModulus(C,xvector)

E = YoungsModulus(C,yvector)

E = YoungsModulus(C,zvector)

%to calculate the poisson's ratios per Tromans

%for stress in direction 1

nu1=-(Mg_S(1,2)+Mg_S(1,3))/(2*Mg_S(1,1))

nu2=-(Mg_S(1,2)+Mg_S(1,3))/(2*Mg_S(1,1))

nu3=-(Mg_S(1,3)+Mg_S(1,3))/(2*Mg_S(3,3))

 

let's say we want to know what the macroscopic tensor will look like given certain textures in the material.  Using a loaded EBSD map,

o=ebsd('Magnesium').orientations;

[CVoigt, CReuss, CHill] = calcTensor(o,C)

We can then get the elastic modulus in any direction for the macromaterial

YoungsModulus(CHill,zvector)

Now let's say we want to calculate the equivalent isotropic tensor.

 

%for completely even odf function

odf = uniformODF(cs);

[CVoigt, CReuss, CHill] = calcTensor(odf,C)

YoungsModulus(CHill,zvector)

 

The young's modulus and poisson's ratio will now be constant in any direction.

 

MTEXNewbie

unread,
Aug 8, 2018, 2:13:27 PM8/8/18
to MTEX
Hi Jessica,

Thanks for the codes, I have adapted it as given below.

1. I have used grains instead of orientations, I hope that its okay?

2. CHill is giving a reasonable result, but the other two are not. What is the reason for that?

3. By the command uniformODF(csEC), we are explicitly defining no texture?


% M as stiffness tensor C
C = stiffnessTensor(M,csEC);

% orientations of phase/grain from ebsd
o=grains('Iron fcc').meanOrientation;

% Average Tensor from EBSD Data in a given direction
[CVoigt, CReuss, CHill] = calcTensor(o,C);
YoungsModulus(CHill,zvector)

% for completely even odf function (equivalent isotropic tensor)
odf = uniformODF(csEC);
[CVoigt, CReuss, CHill] = calcTensor(odf,C);
YoungsModulus(CHill,zvector)

grandr...@gmail.com

unread,
Aug 8, 2018, 3:37:04 PM8/8/18
to MTEX

1. I have used grains instead of orientations, I hope that its okay?
Sure, but that's essentially having one orientation per grain - it eliminates area weighting of the grain data.

2. CHill is giving a reasonable result, but the other two are not. What is the reason for that?
No clue, take a look at the math

3. By the command uniformODF(csEC), we are explicitly defining no texture?
You are defining a homogeneous/ directionally averaged texture.


MTEXNewbie

unread,
Aug 8, 2018, 7:02:45 PM8/8/18
to MTEX
Got it, thank you. :)

latm...@gmail.com

unread,
Aug 17, 2018, 2:37:15 PM8/17/18
to MTEX
> CHill is giving a reasonable result, but the other two are not. What is the reason for that?
Voigt and Reuss are upper and lower bounds, respectively. They are based on (i) iso-strain and (ii) iso-stress assumptions (sometimes referred to as Taylor and Sachs models in polycrystal plasticity). When you deform a polycrystalline aggregate, in the first case, you assume that all grains undergo the same strain equal to that of the polycrystal (which is known if you impose strain). In the second case, when you load the polycrystal, you assume all grains undergo the same stress equal to that of the polycrystal (which can be known if you impose stress). Then, for elasticity, you can find either strains or stresses in each grain using Hooke's law and then average them to get either unknown stress or strain of the polycrystal. Once you know both stress and strain of the polycrystal, you can find stiffness of the polycrystal (e.g., Young's modulus and Poisson ratio for isotropic material) again using elastic constitutive equation (i.e. Hooke's law).

CHill is simply an average of Voigt and Reuss bounds, which has no physical basis. It is mainly used out of convenience and simplicity. If you want a better physics-based estimate, you can use self-consistent approaches or RVE-based FE simulations. You can find more on the topic by looking for papers using "homogenization" keyword.

Hope it helps,
Marat


On Wednesday, August 8, 2018 at 4:02:45 PM UTC-7, MTEXNewbie wrote:
Got it, thank you. :)

MTEXNewbie

unread,
Aug 17, 2018, 11:50:44 PM8/17/18
to MTEX
Thanks for the explanation Marat, it was useful.
Reply all
Reply to author
Forward
0 new messages