Open Matlab File in the Editor MTEX

Grain Boundaries

Overview about colorizing grain boundaries

On this page ...
The grain boundary
Visualizing special grain boundaries
Phase boundaries
Subboundaries
Misorientation
Classifing special boundaries

Lets import some EBSD data and compute the grains.

close all
mtexdata forsterite
plotx2east

ebsd = ebsd('indexed');
[grains,ebsd.grainId] = calcGrains(ebsd)
 
grains = grain2d  
 
 Phase  Grains     Mineral  Symmetry  Crystal reference frame  Phase
     1    1080  Forsterite       mmm                                
     2     515   Enstatite       mmm                                
     3    1496    Diopside     12/m1       X||a*, Y||b*, Z||c       
 
 Properties: GOS, meanRotation
 
 
ebsd = EBSD  
 
 Phase  Orientations     Mineral        Color  Symmetry  Crystal reference frame
     1  152345 (81%)  Forsterite   light blue       mmm                         
     2   26058 (14%)   Enstatite  light green       mmm                         
     3   9064 (4.8%)    Diopside    light red     12/m1       X||a*, Y||b*, Z||c
 
 Properties: bands, bc, bs, error, mad, x, y, grainId
 Scan unit : um
 

The grain boundary

The grain boundary of a list of grains can be extracted by

gB = grains.boundary

plot(gB)
 
gB = grainBoundary  
 
 Segments   mineral 1   mineral 2
     1363  notIndexed  Forsterite
      205  notIndexed   Enstatite
       68  notIndexed    Diopside
    15974  Forsterite  Forsterite
    11814  Forsterite   Enstatite
     8185  Forsterite    Diopside
      663   Enstatite   Enstatite
     4235   Enstatite    Diopside
     1405    Diopside    Diopside

Accordingly we can access the grain boundary of a specific grain by

grains(931).boundary

plot(grains(931).boundary)
 
ans = grainBoundary  
 
 Segments   mineral 1   mineral 2
      331  Forsterite  Forsterite
      147  Forsterite   Enstatite
      241  Forsterite    Diopside
        1   Enstatite    Diopside

lets combine it with the orientation measurements inside

% define the colorcoding such that the meanorientation becomes white
oM = ipdfHSVOrientationMapping(grains(931));
oM.inversePoleFigureDirection = grains(931).meanOrientation * oM.whiteCenter;
oM.colorStretching = 50;

% get the ebsd data of grain 931
ebsd_931 = ebsd(grains(931));

% plot the orientation data
hold on
plot(ebsd_931,oM.orientation2color(ebsd_931.orientations))
hold off
 
  Hint: You might want to use the point group
  "222" for colorcoding!
 

Visualizing special grain boundaries

Phase boundaries

For multi-phase system, the location of specific phase transistions may be of interest. The following plot highlights all Forsterite to Enstatite phase transitions

close all
plot(grains,'faceAlpha',.3)
hold on
plot(grains.boundary('Fo','En'),'linecolor','r','linewidth',1.5)
hold off

Subboundaries

Another type of boundaries, are boundaries between measurements that belong to the same grain. This happens if a grain has a texture gradient that loops around these two measurements.

close all
plot(grains.boundary)
hold on
plot(grains.innerBoundary,'linecolor','r','linewidth',2)

Misorientation

Basicly there are two ways to visualize misorientations along grain boundary. The most simplest way is to colorize the grain boundaries with respect to the misorientation angle.

close all
gB_Fo = grains.boundary('Fo','Fo');
plot(grains,'translucent',.3)
legend off
hold on
plot(gB_Fo,gB_Fo.misorientation.angle./degree,'linewidth',1.5)
hold off
colorbar

The more sophisticated way is to colorize the misorientation space and apply the color to the respective grain boundaries. TODO: apply here patala colorcoding!!!

close all
plot(grains,'translucent',.3)
legend off
hold on

oM = axisAngleOrientationMapping(gB_Fo);
oM.maxAngle = 180*degree;

plot(grains.boundary)
hold on

plot(gB_Fo,oM.orientation2color(gB_Fo.misorientation),'linewidth',1.5)

hold off

% plot the colorcoding
% plot(oM)
 
  Hint: You might want to use the point group
  "222" for colorcoding!
 

Classifing special boundaries

Actually, it might be more informative, if we classify the grain boundaries after some special property. This is done by the command specialBoundary, which will be invoked by the plotting routine.

We can mark grain boundaries after its misorientation angle is in a certain range

close all

mAngle = gB_Fo.misorientation.angle./ degree;
hist(mAngle)

[~,id] = histc(mAngle,0:30:120);
plot(gB,'linecolor','k')

hold on
plot(gB_Fo(id==1),'linecolor','b','linewidth',2)
plot(gB_Fo(id==2),'linecolor','g','linewidth',2)
plot(gB_Fo(id==3),'linecolor','r','linewidth',2)
plot(gB_Fo(id==4),'linecolor','r','linewidth',2)

legend('>40^\circ',...
  '20^\circ-40^\circ',...
  '10^\circ-20^\circ',...
  '< 10^\circ')

hold off
Warning: Plot empty. 

Or we mark the rotation axis of the misorientation.

close all
plot(gB)
hold on

ind = angle(gB_Fo.misorientation.axis,xvector)<5*degree;

plot(gB_Fo(ind),'linecolor','b','linewidth',2)

legend('>5^\circ','[100]')
Warning: Plot empty. 

Or we mark a special rotation between neighboured grains. If a linecolor is not specified, then the boundary is colorcoded after its angular difference to the given rotation.

rot = rotation('axis',vector3d(1,1,1),'angle',60*degree);
ind = angle(gB_Fo.misorientation,rot)<10*degree;

close all
plot(gB)
hold on
plot(gB_Fo(ind),'linewidth',1.5,'linecolor','r')

legend('>2^\circ','60^\circ/[001]')
Warning: Plot empty. 

In the same manner, we can classify after predefined special rotations, e.g. coincident site lattice (CSL) for cubic crystalls. Additionaly we specify a searching radius with the option 'delta', in this way, we control how far the misorientation of the boundary segment is actuall away from the specified rotation. TODO

% close all
% plot(gB)
%
%
% hold on
% plot(gB_Fo(angle(gB_Fo.misorientation,CSL(3))<2*degree),...
%   'linecolor','b','linewidth',2)
% plot(gB_Fo(angle(gB_Fo.misorientation,CSL(5))<4*degree),...
%   'linecolor','m','linewidth',2)
% plot(gB_Fo(angle(gB_Fo.misorientation,CSL(7))<4*degree),...
%   'linecolor','g','linewidth',2)
% plot(gB_Fo(angle(gB_Fo.misorientation,CSL(11))<4*degree),...
%   'linecolor','r','linewidth',2)
%
% legend('>2^\circ',...
%   '\Sigma 3',...
%   '\Sigma 5',...
%   '\Sigma 7',...
%   '\Sigma 11')

Another kind of special boundaries are tilt and twist boundaries. We can find a tilt boundary by specifing the crystal form, which is tilted, i.e. the misorientation maps a lattice plane of on grain onto the others grain lattice plane.

where are neighbored orientations. TODO

%close all
%plot(grains.boundary)
%hold on
%plot(grains.boundary,'property',Miller(1,1,1),'delta',2*degree,...
%  'linecolor','r','linewidth',1.5)
%plot(grains.boundary,'property',Miller(0,0,1),'delta',2*degree,...
%  'linecolor','b','linewidth',1.5)
%
%legend('>2^\circ',...
%  '\{111\}',...
%  '\{001\}')