Distinguishing Tilt and Twist walls

328 views
Skip to first unread message

penny....@gmail.com

unread,
May 13, 2018, 6:50:07 AM5/13/18
to MTEX
Hi,
I am trying to determine between tilt and twist walls for subgrain boundaries in olivine. I have tried to follow https://groups.google.com/forum/#!searchin/mtexmail/plane$20of$20boundary%7Csort:date/mtexmail/Y5aX4XOygBg/RW2nbp7mBgAJ  but haven't had much success - I'm not sure we are trying to do the same thing anyway.


For a tilt wall, the rotation axis is in the boundary plane, for a twist wall, the rotation axis is perpendicular to the boundary plane.

I  currently have a code in which I calculate smoothed grain boundaries, and then select two points in two separate grains to calculate the rotation axis. 

I then want to calculate whether the trace of the boundary between the two grains is more compatible with a twist or tilt wall.

Thanks so much!

Penny 

My code:

clear all 
close all
%% Import Script for EBSD Data
%
% This script was automatically created by the import wizard. You should
% run the whoole script or parts of it in order to import your data. There
% is no problem in making any changes to this script.

%% Specify Crystal and Specimen Symmetries

% crystal symmetry
CS = {... 
  'notIndexed',...
  crystalSymmetry('mmm', [4.762 10.225 5.994], 'mineral', 'Forsterite', 'color', 'light blue'),...
  crystalSymmetry('m-3m', [8.358 8.358 8.358], 'mineral', 'Chromite', 'color', 'light green')};

% plotting convention
setMTEXpref('xAxisDirection','east');
setMTEXpref('zAxisDirection','intoPlane');

%% Specify File Names

% path to files
pname = 'C:\Users\penny\Documents\!!!!!!PHD\Matlab\EBSD';


% which files to be imported
fname = [pname '\Kil_2_L2_284.ctf'];
a=3
%% Import the5Data

% create an EBSD variable containing the data
ebsd = loadEBSD(fname,CS,'interface','ctf',...
  'convertEuler2SpatialReferenceFrame');

ebsd01 = ebsd('Forsterite');
 

b=3.8% maha parameter -3.8 best so far
[grains, ebsd01.grainId]= calcGrains(ebsd01,'FMC',b)
grains=smooth(grains)

 gB = grains.boundary

 plot(grains,grains.meanOrientation)
 
% select grain using the a curser on the phase map
disp(' ') 
disp('Select grain with cursor and one mouse click')
disp(' ')
[x, y]=ginput(1); 
 
% identify selected grains in the subset grainsForsterite
selectedgrain1 = findByLocation(grains,[x y])

 
oM = ipdfHSVOrientationMapping(ebsd01);


oM.inversePoleFigureDirection = orientation(grains(selectedgrain1).meanOrientation) * oM.whiteCenter;

%%

figure
oM.maxAngle = a*degree;
plot(ebsd01,oM.orientation2color(ebsd01.orientations))
hold on
plot(gB)
disp(' ') 



disp('Select grain with cursor and one mouse click')
disp(' ')
[x2, y2, button]=ginput(1); 
selectedgrain2 = findByLocation(grains,[x2 y2])
disp(' ') 
disp('Select grain with cursor and one mouse click')
disp(' ')
[x3, y3]=ginput(1); 
selectedgrain3 = findByLocation(grains,[x3 y3])


% define the cryastallographic direction d of the selected grain symmetry
d100  = Miller({1,0,0},grains(selectedgrain1).CS)
d010  = Miller({0,1,0},grains(selectedgrain1).CS)
d001  = Miller({0,0,1},grains(selectedgrain1).CS)

% define the orientation of the selected grains in Euler angles ori1 and
% ori2
ori2 = orientation(grains(selectedgrain2).meanOrientation)
ori3 = orientation(grains(selectedgrain3).meanOrientation) 
 
% define the specific crystallographic direction of the specific selected
% grains
grainMiller2_100 = ori2 * d100
grainMiller3_100 = ori3 * d100
grainMiller2_010 = ori2 * d010
grainMiller3_010 = ori3 * d010
grainMiller2_001 = ori2 * d001
grainMiller3_001 = ori3 * d001

% calculates the angle between the two selected crystallographic directions
% of the two selected grains
angle_100 = angle(grainMiller2_100,grainMiller3_100) / degree
angle_010 = angle(grainMiller2_010,grainMiller3_010) / degree
angle_001 = angle(grainMiller2_001,grainMiller3_001) / degree

testangle = angle(grains(selectedgrain2).meanOrientation,grains(selectedgrain3).meanOrientation)/ degree



mori=inv(ori2).*ori3;
axis_crystal = mori.axis.project2FundamentalRegion('antipodal')
angle_146b=mori.angle('antipodal')/degree
antipodalOutput_146b =[angle_100, angle_010, angle_001, testangle]


antipodal_axis_Crystal_146b=[axis_crystal]
antipodal_angle_146b=[angle_146b]


ruediger Kilian

unread,
May 13, 2018, 8:55:59 AM5/13/18
to mtex...@googlegroups.com
Hi Penny,

this is one possibility for tilt boundaries: https://groups.google.com/d/msg/mtexmail/Y5aX4XOygBg/v1v6sEHIBQAJ

If you'r misorientation axis (in specimen coords) is parallel to the trend of the boundary in section it could be a tilt boundary. This also means that you will have to choose a threshold angle above which you need to discard this decision. For twist boundaries, I'd say this can't be determined so easily as long as you have no information about the inclination of your boundary within the section.

hope this helps,
Rüdiger



Message has been deleted

Rüdiger Kilian

unread,
May 16, 2018, 4:49:13 AM5/16/18
to mtex...@googlegroups.com
Hi,
how does this do:

cs = ebsd('Fo').CS
gb_C=grains.boundary('Fo', 'Fo')
o=ebsd(gb_C.ebsdId).orientations
a = axis(o(:,1),o(:,2));
%Condition 1 - grain boundaries within 10 degree of misorientation axis in SS
cond1=angle(gb_C.direction, a, 'antipodal') <10*degree;
%Condition 2 - Misorientation axis in CS within 10 degrees of forsterite c axis
cond2=angle(gb_C.misorientation.axis, Miller(0,0,1,cs))<10*degree;
potentialATiltBoundaries = gb_C(cond1&cond2)

Cheers,
Rüdiger

penny....@gmail.com

unread,
May 16, 2018, 5:07:01 AM5/16/18
to MTEX
Thanks so much, I accidently deleted my previous post while checking this on my phone >< sorry about that.

The only problem I am having now is that I want to plot all the possible tilt types on one diagram with different colors. However, some of the variables "potentialAtiltboundaries" are empty, which causes errors to go on and calculate the axis for these. I would normally use an If statement to proceed if length = 0 it was a simple variable type like a vector but how should I phrase If a grainboundary is empty as such?  

Thanks so much.

ruediger Kilian

unread,
May 16, 2018, 5:42:22 AM5/16/18
to 'Dwayne' via MTEX
For example
a) length(grainboundary)
or
b) any(cond1&cond2)
should do.

Cheers,
Rüdiger

penny....@gmail.com

unread,
May 20, 2018, 3:50:34 PM5/20/18
to MTEX
Hi Rudiger, 
I have had more of a think about this, If you take the schematics often drawn in the literature for tilt and twist walls (e.g. Reddy et al. 2007), then I'm not convinced the following conditions I have work for all scenarios:

cs = ebsd('Fo').CS
gb_C=grains.boundary('Fo', 'Fo')
o=ebsd(gb_C.ebsdId).orientations
a = axis(o(:,1),o(:,2));
%Condition 1 - grain boundaries within 10 degree of misorientation axis
condtilt=angle(gb_C.direction, a, 'antipodal')<15*degree
condtwist=angle(gb_C.direction, a, 'antipodal')>30*degree

This is comparing the angle of the grain boundary with the rotation axis. I can see that this works for scenario c and d in the attached picture. However, if you have a side on view of the boundary (e), so that the rotation axis is coming out of the 2D map, then the boundary trace and rotation axis are now perpendicular. Using the condition above,  would this type of boundary would come under "condtwist" even though its actually  a tilt wall? 

Is there a way to resolve this "sectioning problem", e.g. could the comparison between the rotation axis and grain boundary take place after the rotation axis is projected into the 2D plane, and then discard rotation axis in this projection below a certain length?

Thanks so much
Penny
Tiltvstwist.pdf

Rüdiger Kilian

unread,
May 21, 2018, 7:19:44 AM5/21/18
to mtex...@googlegroups.com
Hi Penny,

since one only knows the trace of the boundary from a 2D section, the condition for a tilt boundary (trace parallel to rotation axis) is just a special situation and there will certainly be tilt boundaries which are no identified this way, so this would underestimate the number of tilt boundaries.

With regard to twist boundaries, I'd be skeptical with that condition you use.
A similar special situation would be if the rotation axis is close to perpendicular to the boundary trace and one has a good reason to assume that the boundary isn't cut a a very small angle to the surface. All other other situations (e.g  10-80°) are ambiguous and cannot be uniquely determined from a 2D section as far as I can imagine. If there'd be a way to get the 3D direction of your boundary it'll be a different situation.

I think what you are suggesting - discard rotation axes with a short projection length - also translates to comparing those axes sub-parallel to the boundary trace (a fraction of tilt boundaries), sub-perpendicular (potentially tilt boundaries) to the boundary trace and those in between (general type); i.e. considering only boundaries with axis.theta within an narrow interval around pi/2.

Hope this helps.
Cheers,
Rüdiger

penny....@gmail.com

unread,
May 21, 2018, 9:14:11 PM5/21/18
to MTEX
Hi Rudiger,
I think another way to solve this tilt/twist dichotomy would be to have a way to plot the trace of the grain boundary on a pole figure - this would allow boundaries to be examined....
 I have a code so far that selects a given region of a grain boundary and plots the misorientation axis on a pole figure in sample co-ordinates. Is there a way to get MTEX to draw a plane that has a "strike" determined by the trace of the grain boundary (in the case here, N-S), and a dip so that it intercepts the average rotation axis? If there was then a way to get MTEX to plot a pole to this plane, this could be compared to slip direction information from other means (ie Weighted Burgers Vector; Wheeler et al. 2009) to determine twist vs tilt walls? Is any of this currently possible with MTEX?

Thanks so much.  
tracePF.pdf

ruediger Kilian

unread,
May 22, 2018, 5:29:24 AM5/22/18
to mtex...@googlegroups.com
Hi,
how would you get the dip of the plane?

to draw great circles, have a look at vector3d/circle, the vector parallel to the trace of your boundary segment (strike) is grainBoundary.direction from which you could get the normal of course.

Cheers,
Rüdiger

penny....@gmail.com

unread,
May 22, 2018, 7:12:08 AM5/22/18
to MTEX
The dip of the plane would be defined such that the plane intercepts the mean of the cluster of rotation axes (in the case of a perfect tilt wall - see stereonet attached in figure). Then if the pole to this plane makes sense in terms of the burgers vector/slip system expected, it is a tilt wall, if not, it isn't. I plan to make this check using WBV method which gives a burgers vector, but it could also be made by plotting known slip systems for olivine in sample coordinates as well? 
Thanks
Penny

ruediger Kilian

unread,
May 25, 2018, 11:44:08 AM5/25/18
to mtex...@googlegroups.com
Hi,
here's an example to look at misorientation axes in crystal and specimen coordinates in combination. You can of course easily add the traces of the boundary as well - also showing on the selected grain the ambiguity of the boundary trace analysis approach.
https://gist.github.com/kilir/e5fd1ad77600c4948631a7cb8477766a

Cheers,
Rüdiger



Reply all
Reply to author
Forward
0 new messages