Tutorial script for using the GND Code by Skippon

This script was made to show a simplified/straightforward approach to using the GND script written by Travis Skippon for the Queen's University Nuclear Materials Research Group. The code can be downloaded from https://github.com/tskippon/GND

Contents

Specify Crystal and Specimen Symmetries

Define the symmetries and load the data. You can use the MTEX data import functionality to read in the EBSD data if you find that more straightforward. If you use the 'save to m-file' option in the data_import dialog, it will produce some code that looks like the first section here.

% crystal symmetry
CS = {...
    'notIndexed',...
  crystalSymmetry('6/mmm', [3.232 3.232 5.148], 'X||a*', 'Y||b', 'Z||c', 'mineral', 'Zirconium - alpha', 'color', 'light blue'),...
  crystalSymmetry('m-3m', [3.62 3.62 3.62], 'mineral', 'Zirconium beta', 'color', 'light green'),...
  crystalSymmetry('m-3m', [4.51 4.51 4.51], 'mineral', 'ZrH-delta', 'color', 'light red'),...
  crystalSymmetry('4/m', [4.596 4.51 4.51], 'mineral', 'ZrH-gamma-2', 'color', 'cyan')};

% plotting convention
setMTEXpref('xAxisDirection','west');
setMTEXpref('zAxisDirection','outOfPlane');

% path to files
% pname = '/home/chris/Zhouyao/';

% which files to be imported
fname = ['EBSDofN2Sample-Step1-bigMap.ctf'];

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

Produce the grain map

This will clean up the input data (removing all non-Zr Alpha data points) and then determine the grain structure. Grain boundaries are defined here as regions where the misorientation is greater than 5 degrees.

ebsd(ebsd.phase>1) = [];
[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd,'angle',5*degree);
plot(ebsd)
hold on
plot(grains.boundary,'linewidth',1.5)

Clean up the grain map

Depending on how well the indexing goes during the scan, there may be some small areas of unindexed or incorrectly indexed pixels. We want to remove those areas because they do not represent the actual microstructure. Here we remove any grains with a grainSize less than 3.

ebsd(grains(grains.grainSize<3))=[];
[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd,'angle',5*degree);
plot(ebsd)
hold on
plot(grains.boundary,'linewidth',1.5)

Smooth the EBSD data to reduce some of the measurement noise.

We want to smooth the data slightly so that the GND calculation is not affected by measurement noise.

ebsd=smooth(ebsd,infimalConvolutionFilter);

Run the GND energy minimization code and produce the GND structure

[disArray systems]=GND_auto(ebsd,4,[0.34]);
GND=sum_dislocations(disArray,systems,ebsd);
Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
Calculating Curvatures...
Curvature calculations complete!
Minimizing dislocation energy...
Estimated time to completion: 00:05:46.
Minimization complete!
Actual time taken was 01:40:53.  Estimate was off by -1647.6%

Save the results and output a summary

It's a good idea to save your matlab state at this stage. The GND code takes a long time to run, so you don't want the results to all disappear if MATLAB crashes or your computer decides it needs to restart to install updates.

save('Step1.mat');

% Having a quick summary of the results is good for identifying what your
% next steps should be.  This loops through the GND structure and outputs
% the name and total average density of each slip system.  We use the
% geometric mean (geomean) because dislocation density is log-normally
% distributed.

fprintf(' --- Summary of GND Results --- \n');
for i = 1:length(GND)
    fprintf('%10s - %15s: %f\n',ebsd(ebsd.phase==GND(i).phase).mineral,GND(i).name,geomean(GND(i).data(GND(i).data>0)));
end
 --- Summary of GND Results --- 
Zirconium - alpha -        Prism<a>: 0.419954
Zirconium - alpha -        screw<a>: 1.661605
Zirconium - alpha -        basal<a>: 0.481719
Zirconium - alpha -  Pyramidal<c+a>: 2.163750
Zirconium - alpha - Pyramidal2<c+a>: NaN
Zirconium - alpha -      screw<c+a>: 0.510771
Zirconium - alpha -           total: 3.579552