An anisotropic material responds differently when the loading direction changes. A single elastic modulus can therefore describe only one loading geometry.
The fourth-order stiffness tensor \(C\) collects the complete linear elastic response. MTEX represents it as a stiffnessTensor. This page loads one measured tensor, applies Hooke's law, and then queries its response for chosen directions and planes.
plottingConvention.default('y↑→x');Load the olivine stiffness tensor
A stiffness tensor can be constructed from a symmetric 6-by-6 matrix. It can also be imported from a file, as in this example. The data are the olivine measurements of Abramson et al. (1997).
fname = fullfile(mtexDataPath,'tensor','Olivine1997PC.GPa');
% orthorhombic crystal symmetry and crystal frame
cs = crystalSymmetry('mmm',[4.7646 10.2296 5.9942],...
'mineral','Olivine');
% stiffness tensor in GPa
C = stiffnessTensor.load(fname,cs)C = stiffnessTensor (Olivine)
unit: GPa
rank: 4 (3 × 3 × 3 × 3)
tensor in Voigt matrix representation:
320.5 68.2 71.6 0 0 0
68.2 196.5 76.8 0 0 0
71.6 76.8 233.5 0 0 0
0 0 0 64 0 0
0 0 0 0 77 0
0 0 0 0 0 78.7A general anisotropic stiffness has as many as 21 independent numbers. The orthorhombic symmetry of olivine reduces this matrix to nine. The zero entries in the displayed matrix are imposed by that symmetry. The two-number isotropic limit was developed in Isotropic Theory.
Apply Hooke's law
Stress is force per unit area, including its direction on each plane. Strain records the corresponding fractional change of shape. Linear elasticity maps a given strain to stress with \(C\).
Start with a diagonal strain tensor.
eps = strainTensor(diag([1,1.1,0.9]),cs)eps = strainTensor (Olivine)
type: Lagrange
rank: 2 (3 × 3)
1 0 0
0 1.1 0
0 0 0.9Hooke's law is the double contraction of stiffness and strain.
sigma = C : epssigma = stressTensor (Olivine)
rank: 2 (3 × 3)
459.9 0 0
0 353.4 0
0 0 366.2The compliance tensor \(S=C^{-1}\) performs the reverse mapping. Applying it to the stress recovers the original strain.
S = inv(C);
eps_recovered = S : sigmaeps_recovered = strainTensor (Olivine)
type: Lagrange
rank: 2 (3 × 3)
1 0 0
0 1.1 0
0 0 0.9Compute the elastic energy
The elastic energy of this strain can be computed in three equivalent ways. The first contracts the stress with the strain.
U_contraction = sigma : epsU_contraction =
1.1783e+03The second writes every contraction index explicitly.
U_Einstein = EinsteinSum(C,[-1 -2 -3 -4],...
eps,[-1 -2],eps,[-3 -4])U_Einstein =
1.1783e+03The third applies Hooke's law first and then contracts with the strain.
U_Hooke = (C : eps) : epsU_Hooke =
1.1783e+03Young's modulus by loading direction
Isotropic Theory defines Young's modulus as the ratio of axial stress to axial strain. In an anisotropic crystal it depends on the loading direction \(d\). Passing one direction to YoungsModulus returns one value.
d = vector3d.X;
E_x = C.YoungsModulus(d)E_x =
286.9284Omitting \(d\) returns the complete directional dependence as an S2FunHarmonic.
E = C.YoungsModulus
% evaluate the same spherical function along x
E.eval(d)
% plot every loading direction
newMtexFigure
plot(E,'complete','upper')
mtexColorMap blue2red
mtexColorbar('title','Young''s modulus in GPa')E = S2FunHarmonicSym (Olivine)
bandwidth: 128
antipodal: true
ans =
286.9284
Each point on the hemisphere is a possible loading direction. The changing colours and non-circular contours show why one Young's modulus cannot describe this crystal.
Linear compressibility by direction
Linear compressibility is the fractional length change along a direction caused by an increase in hydrostatic pressure. Contracting the compliance tensor with the pressure gives a second-rank tensor, whose directional values form another spherical function.
linearCompressibility returns that function when the direction is omitted.
beta = linearCompressibility(C)
newMtexFigure
plot(beta,'complete','upper')
mtexColorMap blue2red
mtexColorbar('title','linear compressibility in 1/GPa')beta = S2FunHarmonicSym (Olivine)
bandwidth: 2
antipodal: true
The map answers a different question from Young's modulus. It shows the length response to pressure applied from every direction, rather than the axial response to one uniaxial load.
Evaluate the function along the same \(x\) direction.
beta_x = beta.eval(d)beta_x =
0.0018Poisson's ratio around a pulling direction
Isotropic Theory defines Poisson's ratio from the axial and transverse strains. An anisotropic value needs a pulling direction \(p\) and a transverse direction \(n\) perpendicular to it.
% pulling direction
p = vector3d.Z;
% two transverse directions
n = [vector3d.X,vector3d.Y];
% one value for each transverse direction
nu_xy = C.PoissonRatio(p,n)nu_xy =
0.1515 0.3383Omitting \(n\) from PoissonRatio leaves a spherical function of possible transverse directions.
nu = C.PoissonRatio(p)nu = S2FunHarmonic (Olivine)
bandwidth: 16
antipodal: trueOnly directions perpendicular to \(p\) are physically meaningful. A section plot restricts the function to that plane, which is the \(xy\) plane for the chosen \(z\) pulling direction.
newMtexFigure
plotSection(nu,p,'color','interp','linewidth',5)
axis off
mtexColorMap blue2red
mtexColorbar('title','Poisson''s ratio')
Read around the circle rather than across its interior. The colour change around the circle shows that transverse contraction depends on which perpendicular direction is observed.
Shear modulus for a plane and direction
Isotropic Theory defines the shear modulus as the ratio of shear stress to shear strain. An anisotropic value needs the normal \(h\) of the shear plane and a shear direction \(u\) within that plane.
Passing both directions to shearModulus returns one number.
% unit shear-plane normal
h = Miller(0,0,1,cs).normalize;
% unit shear direction within that plane
u = Miller(1,0,0,cs,'uvw').normalize;
G = C.shearModulus(h,u)G =
77Omitting the shear direction leaves a spherical function of \(u\). Only directions within the shear plane are meaningful. Plot a section for each of three different plane normals.
newMtexFigure('layout',[1,3])
hMiller = Miller(1,0,0,cs);
h = hMiller.normalize;
plotSection(C.shearModulus(h),h,'color','interp','linewidth',5)
mtexTitle(char(hMiller))
axis off
nextAxis
hMiller = Miller(1,1,0,cs);
h = hMiller.normalize;
plotSection(C.shearModulus(h),h,'color','interp','linewidth',5)
mtexTitle(char(hMiller))
axis off
nextAxis
hMiller = Miller(1,1,1,cs);
h = hMiller.normalize;
plotSection(C.shearModulus(h),h,'color','interp','linewidth',5)
mtexTitle(char(hMiller))
axis off
setColorRange('equal')
mtexColorMap blue2red
mtexColorbar('title','shear modulus in GPa')
drawNow(gcm,'figSize','large')
The common colour range makes the three sections directly comparable. Both the colour variation within a circle and the differences between circles belong to the anisotropic shear response.
The maths behind the shear modulus
Write the compliance tensor as \(S=C^{-1}\). For a unit plane normal \(h\) and a perpendicular unit direction \(u\), the directional shear modulus is
\[G(h,u)=\frac{1}{4\,S_{ijkl}\,h_i u_j h_k u_l}.\]
Fixing \(h\) while varying \(u\) gives the section plots above. Passing both directions evaluates the same expression as a number.
References
- E. H. Abramson, J. M. Brown, L. J. Slutsky, and J. Zaug, The elastic constants of San Carlos olivine to 17 GPa, Journal of Geophysical Research 102(B6) (1997), 12253-12263, provides the olivine stiffness tensor used here.
- J. F. Nye, Physical Properties of Crystals: Their Representation by Tensors and Matrices, Oxford University Press, 1985, develops the symmetry constraints and tensor contractions used for anisotropic physical properties.
Next
Wave Velocities combines this stiffness tensor with density. It solves for the three wave speeds and their polarisation directions for every propagation direction.
Citing this page.
This page is part of the documentation of
MTEX, a free and open
source MATLAB toolbox for analyzing and modeling crystallographic textures.
It was written by The MTEX Developers and is published at
https://mtex-toolbox.github.io/AnisotropicTheory.html.
If you use MTEX, or reuse text or figures from this page, in your research,
please cite
F. Bachmann, R. Hielscher, H. Schaeben: Texture Analysis with MTEX - Free and Open Source Software Toolbox, Solid State Phenomena 160 (2010), 63-68. 10.4028/www.scientific.net/SSP.160.63
BibTeX
@article{bachmann2010mtex,
author = {F. Bachmann and R. Hielscher and H. Schaeben},
title = {Texture Analysis with MTEX - Free and Open Source Software Toolbox},
journal = {Solid State Phenomena},
volume = {160},
pages = {63-68},
year = {2010},
doi = {10.4028/www.scientific.net/SSP.160.63},
url = {https://doi.org/10.4028/www.scientific.net/SSP.160.63}
}
Other papers describing specific MTEX methods are listed under Publications — please cite the one that best fits your application. The MTEX source code is licensed under the GNU General Public License v2.0; the text and figures of this documentation are licensed under CC BY 4.0, which permits reuse — including by automated systems — provided The MTEX Developers and this page are credited.