The Sachs Model selects one slip system in each grain but describes only a strength bound. A single-slip texture model follows the next consequence: slip rotates every crystal, so the population of orientations changes during deformation.
This page starts from an isotropic texture, which assigns equal density to every orientation. One prescribed slip system supplies the entire lattice spin. The worked sequence predicts the resulting orientation distribution function (ODF), reads its pole figures, and checks the analytical result against numerical time stepping.
Choose the crystal, slip system, and strain
Use olivine with its three orthorhombic basis slip systems. A slip system is a lattice plane together with a direction in that plane along which the crystal shears plastically.
plottingConvention.default('y↑→x');
csOli = crystalSymmetry('222',[4.779 10.277 5.995], ...
'mineral','olivine');
sSOli = slipSystem( ...
Miller({1,0,0},{1,0,0},{0,0,1},csOli,'uvw'), ...
Miller({0,1,0},{0,0,1},{0,1,0},csOli,'hkl'))sSOli = slipSystem (olivine)
size: 1 × 3
u v w | h k l CRSS
1 0 0 0 1 0 1
1 0 0 0 0 1 1
0 0 1 0 1 0 1Rows of the display pair each slip direction \(\mathbf b\) with its plane normal \(\mathbf n\). The example below follows the second system, \([100](001)\).
Impose extension along specimen \(x\), no strain along \(y\), and equal shortening along \(z\). The factor 0.3 is the finite strain magnitude.
E = 0.3 * strainRateTensor([1 0 0; 0 0 0; 0 0 -1])E = strainRateTensor (y↑→x)
rank: 2 (3 × 3)
*10^-2
30 0 0
0 0 0
0 0 -30Compute the analytical texture
SO3FunSBF evaluates the analytical ODF for one slip system and the imposed strain. Compute one structural basis function for each of the three olivine systems.
odf1 = SO3FunSBF(sSOli(1),E)
odf2 = SO3FunSBF(sSOli(2),E)
odf3 = SO3FunSBF(sSOli(3),E)odf1 = SO3FunSBF (olivine → y↑→x)
slip system: (010)[100]
strain: 0.3 0 -0.3
odf2 = SO3FunSBF (olivine → y↑→x)
slip system: (001)[100]
strain: 0.3 0 -0.3
odf3 = SO3FunSBF (olivine → y↑→x)
slip system: (010)[001]
strain: 0.3 0 -0.3Sigma sections expose the full three-dimensional orientation dependence of the second basis function.
plotSection(odf2,'sigma')
mtexColorbar
High density is concentrated at orientations that align the olivine \(c\)-axis with specimen \(z\). This is the preferred orientation predicted for \([100](001)\) slip under the imposed extension and shortening.
Read the same result in pole figures
Pole figures show which crystal axes develop preferred specimen directions. Plot the \(a\)-, \(b\)-, and \(c\)-axis distributions together.
h = Miller({1,0,0},{0,1,0},{0,0,1},csOli);
plotPDF(odf2,h,'resolution',2*degree,'colorRange','equal')
mtexColorbar
The \(c\)-axis pole figure has its strongest maximum at specimen \(z\), as anticipated from the sigma sections. The \(a\)-axis panel shows how that axis is arranged around the preferred direction. The \(b\)-axis panel is flat and featureless: this single system leaves the \(b\)-axis with no preferred specimen direction at all.
Compare the other basis functions
Each active system produces its own basis texture. The first and third systems provide the two remaining olivine end members.
plotPDF(odf1,h,'resolution',2*degree,'colorRange','equal')
mtexColorbar
This is the texture generated by the first system, \([100](010)\).
plotPDF(odf3,h,'resolution',2*degree,'colorRange','equal')
mtexColorbar
This is the texture generated by the third system, \([001](010)\). In each single-slip solution, the pole figure for \(\mathbf n\times\mathbf b\) is uniform. That direction is unchanged by shear on the chosen system.
Combine active systems
A practical model can represent simultaneous activity as a linear combination of the single-slip basis functions. Convert each analytical function to the same harmonic representation before combining it. Equal weights give the normalized mixture below; measured or modelled activities may be used instead.
odfMix = (SO3FunHarmonic(odf1,'bandwidth',24) + ...
SO3FunHarmonic(odf2,'bandwidth',24) + ...
SO3FunHarmonic(odf3,'bandwidth',24)) ./ 3;
plotPDF(odfMix,h,'resolution',2*degree,'colorRange','equal')
mtexColorbar
The mixed pole figures retain features from all three end members and are less concentrated than any one-system prediction. This superposition is how the analytical model builds a full ODF from its basis textures.
Apply the construction to another phase
The same constructor accepts a phase-specific system. For example, orthopyroxene \([001](100)\) slip under the same strain gives another basis function without changing the workflow.
csOrtho = crystalSymmetry('222',[18.384,8.878,5.226], ...
'mineral','orthopyroxene');
sSOrtho = slipSystem(Miller(0,0,1,csOrtho,'uvw'), ...
Miller(1,0,0,csOrtho,'hkl'));
odfOrtho = SO3FunSBF(sSOrtho,E)odfOrtho = SO3FunSBF (orthopyroxene → y↑→x)
slip system: (100)[001]
strain: 0.3 0 -0.3Construct the orientation-dependent spin
The deformation tensor describes the shear generated by each olivine slip system. Select the second tensor to match odf2.
S = sSOli.deformationTensor;The function below rotates that tensor into the specimen frame, fits its activity to E, and converts the result into crystallographic spin. The minus sign follows the tangent-vector convention used for ODF transport.
spinFun = @(ori) -2 * SO3TangentVector(spinTensor( ...
((ori * S(2)) : E) .* (ori * S(2))),ori);
Omega = SO3VectorFieldHarmonic.quadrature(spinFun,csOli)Omega = SO3VectorFieldHarmonic (olivine → y↑→x)
bandwidth: 3
tangent space: leftVectorSee where orientation density moves
The divergence of \(\Omega\) measures whether the orientation flow expands or contracts locally. Arrows show the direction of that flow.
plotSection(div(Omega),'sigma','noGrid')
mtexColorMap blue2red
mtexColorbar
hold on
plot(Omega,'add2all','linewidth',1,'color','k')
hold off
Negative blue regions gain orientation density, while positive red regions lose it. The arrows feed the blue regions whose orientations place the \(c\)-axis near specimen \(z\), predicting the concentration already seen in odf2.
Check the analytical result numerically
doEulerStep transports an initial ODF through an orientation-dependent spin field. Start from the uniform ODF and use 40 explicit steps over the same total deformation.
odf0 = uniformODF(csOli);
odfNumeric = doEulerStep(Omega,odf0,40)
plotSection(odfNumeric,'sigma')
mtexColorbarodfNumeric = SO3FunHarmonic (olivine → y↑→x)
bandwidth: 28
weight: 1
The numerical sections reproduce the analytical concentration. Their mean absolute difference is 0.0011. This small value quantifies the remaining discretization error.
meanError = mean(abs(odfNumeric - odf2))meanError =
0.0011Check for steady state
An ODF is stationary under this spin when the divergence of its density flux, \(\mathrm{div}(f\Omega)\), is zero. Plot that residual for the analytical solution.
plotSection(div(odf2 .* Omega),'sigma')
mtexColorMap blue2red
mtexColorbar
setColorRange(max(abs(clim))*[-1,1])
Values near zero show where odf2 is already stationary. Positive and negative lobes identify orientations at which the chosen spin would still remove or add density.
The maths behind the model
Let \(f(g,t)\) be the ODF at orientation \(g\) and time \(t\), and let \(\Omega(g)\) be the crystallographic spin. Conservation of orientation density gives the continuity equation
\[\frac{\partial f}{\partial t} + \nabla f\cdot\Omega + f\,\mathrm{div}\,\Omega = 0.\]
The initial isotropic texture is \(f(g,0)=1\). For deformation tensor \(S(g)\) and scalar slip activity \(\gamma(g)\), the single-slip ansatz is
\[e(g)=\gamma(g)S(g).\]
Fitting this local strain rate to the macroscopic tensor \(E\) minimizes
\[\int_{SO(3)}\sum_{i,j}\left(e_{ij}(g)-E_{ij}\right)^2\,dg.\]
The minimizing field and its crystallographic spin are
\[e(g)=2\langle S(g),E\rangle S(g), \qquad \Omega_i(g)=\epsilon_{ijk}e_{jk}(g).\]
These equations are the specimen-coordinate construction implemented by spinFun above. An equivalent implementation can map the spin into each crystal frame instead. SO3FunSBF supplies the finite-strain analytical solution, while doEulerStep integrates the same continuity equation.
References
- N. M. Ribe, R. Hielscher and O. Castelnau, An Analytical Finite-Strain Parametrization for Texture Evolution in Deforming Olivine Polycrystals, Geophysical Journal International 216 (2019), 486--514, derives the single-slip structural basis functions and their analytical finite-strain ODFs.
Next
This page treats orientation evolution inside independently slipping crystals. Continue with Slip Transmission to ask whether a slip system can transfer deformation across a grain boundary.
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/SingleSlipModel.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.