%% Elasticity (Elastic constants)
% Define Cartesian Tensor crystal symmetry & framecsEC = 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 MM =.... [[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 CC = stiffnessTensor(M,csEC);
% orientations of phase/grain from ebsdgo=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 coordiantesyc=inv(go).*xvector;% compute Young's modulus as a directional dependend functionE = C.YoungsModulus;% which can be evaluated at a given directionYy = E.eval(yc);
% now you can for example plot itfigureplot(grains(1),Yy)mtexColorbarYy
% set some colormap well suited for tensor visualisationsetMTEXpref('defaultColorMap',blue2redColorMap);figureplot(C.YoungsModulus,'complete','upper')mtexColorbar
--
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.
To unsubscribe from this group and stop receiving emails from it, send an email to mtexmail+u...@googlegroups.com.
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.
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.
% M as stiffness tensor CC = 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)
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?
You are defining a homogeneous/ directionally averaged texture.
Got it, thank you. :)