basic settings
display pole figure plots with RD on top and ND west
plotx2north
% store old annotation style
storepfA = getMTEXpref('pfAnnotations');
% set new annotation style to display RD and ND
pfAnnotations = @(varargin) text(-[vector3d.X,vector3d.Y],{'RD','ND'},...
'BackgroundColor','w','tag','axesLabels',varargin{:});
setMTEXpref('pfAnnotations',pfAnnotations);
Set up
consider cubic crystal symmetry
cs = crystalSymmetry('432');
% define a family of slip systems
sS = slipSystem.bcc(cs);
% some plane strain
q = 0;
epsilon = strainTensor(diag([1 -q -(1-q)]))
% define a crystal orientation
ori = orientation.byEuler(0,30*degree,15*degree,cs)
% compute the Taylor factor
[M,b,W] = calcTaylor(inv(ori)*epsilon,sS.symmetrise);
epsilon = strainTensor (xyz)
type: Lagrange
rank: 2 (3 x 3)
1 0 0
0 0 0
0 0 -1
ori = orientation (432 → xyz)
Bunge Euler angles in degree
phi1 Phi phi2
0 30 15
The orientation dependence of the Taylor factor
For a fixed strain tensor epsilon
and slip systems sS
the Taylor factor
% The following code reproduces Fig. 5 of the paper of Bunge, H. J. (1970).
% Some applications of the Taylor theory of polycrystal plasticity.
% Kristall Und Technik, 5(1), 145-175.
% http://doi.org/10.1002/crat.19700050112
% set up an phi1 section plot
sP = phi1Sections(cs,specimenSymmetry('222'));
sP.phi1 = (0:10:90)*degree;
% generate an orientations grid
oriGrid = sP.makeGrid('resolution',2.5*degree);
oriGrid.SS = specimenSymmetry;
% compute Taylor factor for all orientations
tic
[M,~,W] = calcTaylor(inv(oriGrid)*epsilon,sS.symmetrise);
toc
% plot the taylor factor
sP.plot(M,'smooth')
mtexColorbar
Elapsed time is 17.796326 seconds.

Lets precompute the Taylor factor as SO3Fun
and the spin tensor as SO3VectorField
. Hence we can evaluate them very fast for several times in mush more orientations.
% compute the Taylor factor independent from the orientations
tic
[TaylorF,~,Spin] = calcTaylor(epsilon,sS.symmetrise,'bandwidth',32);
toc
% plot the Taylor factor
plotSection(TaylorF,'phi1',(0:10:90)*degree)
mtexColorbar
Elapsed time is 48.215846 seconds.

The orientation dependence of the spin
Compare Fig. 8 of the above paper
sP.plot(W.angle./degree,'smooth')
mtexColorbar

Display the crystallographic spin in sigma sections
sP = sigmaSections(cs,specimenSymmetry);
oriGrid = sP.makeGrid('resolution',2.5*degree);
W = Spin.eval(oriGrid(:));
sP.plot(spinTensor(W.').angle./degree,'smooth')
mtexColorbar

Most active slip direction
Next we consider a real world data set.
mtexdata csl
% compute grains
grains = calcGrains(ebsd('indexed'));
grains = smooth(grains,5);
% remove small grains
grains(grains.grainSize <= 2) = []
ebsd = EBSD
Phase Orientations Mineral Color Symmetry Crystal reference frame
-1 154107 (100%) iron LightSkyBlue m-3m
Properties: ci, error, iq, x, y
Scan unit : um
grains = grain2d
Phase Grains Pixels Mineral Symmetry Crystal reference frame
-1 527 153693 iron m-3m
boundary segments: 21937 (17946 µm)
inner boundary segments: 93 (71 µm)
triple points: 1451
Properties: meanRotation, GOS
Next we apply the Taylor model to each grain of our data set
% some strain
q = 0;
epsilon = strainTensor(diag([1 -q -(1-q)]))
% consider fcc slip systems
sS = symmetrise(slipSystem.fcc(grains.CS));
% apply Taylor model
[M,b,W] = calcTaylor(inv(grains.meanOrientation)*epsilon,sS);
epsilon = strainTensor (xyz)
type: Lagrange
rank: 2 (3 x 3)
1 0 0
0 0 0
0 0 -1
% colorize grains according to Taylor factor
plot(grains,M)
mtexColorMap white2black
mtexColorbar
% index of the most active slip system - largest b
[~,bMaxId] = max(b,[],2);
% rotate the moste active slip system in specimen coordinates
sSGrains = grains.meanOrientation .* sS(bMaxId);
% visualize slip direction and slip plane for each grain
hold on
quiver(grains,sSGrains.b,'autoScaleFactor',0.5,'displayName','Burgers vector')
hold on
quiver(grains,sSGrains.trace,'autoScaleFactor',0.5,'displayName','slip plane trace')
hold off

plot the most active slip directions observe that they point all towards the lower hemisphere - why? they do change if q is changed
figure(2)
plot(sSGrains.b)

Texture evolution during rolling
% define some random orientations
rng(0)
ori = orientation.rand(1e5,grains.CS);
% 30 percent plane strain
q = 0;
epsilon = 0.3 * strainTensor(diag([1 -q -(1-q)]));
numIter = 100;
% compute the Taylor factors and the orientation gradients
[~,~,Spin] = calcTaylor(epsilon ./ numIter, sS.symmetrise);
progress(0,numIter);
for sas=1:numIter
% compute the Taylor factors and the orientation gradients
W = spinTensor(Spin.eval(ori).').';
% rotate the individual orientations
ori = ori .* orientation(-W);
progress(sas,numIter);
end
% plot the resulting pole figures
% set new annotation style to display RD and ND
pfAnnotations = @(varargin) text([vector3d.X,vector3d.Y,vector3d.Z],{'RD','TD','ND'},...
'BackgroundColor','w','tag','axesLabels',varargin{:});
setMTEXpref('pfAnnotations',pfAnnotations);
plotPDF(ori,Miller({0,0,1},{1,1,1},cs),'contourf')
mtexColorbar

restore MTEX preferences
setMTEXpref('pfAnnotations',storepfA);
Inverse Taylor
Use with care!
oS = axisAngleSections(cs,cs,'antipodal');
oS.angles = 10*degree;
ori = oS.makeGrid;
[M,b,eps] = calcInvTaylor(ori,sS.symmetrise);
plot(oS,M,'contourf')
