Taylor Model edit page

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')