diff --git a/images/ClusterDemo_01.png b/images/ClusterDemo_01.png index 7fc2ddbda..c9b0ca7fd 100644 Binary files a/images/ClusterDemo_01.png and b/images/ClusterDemo_01.png differ diff --git a/images/CombinedPlots_03.png b/images/CombinedPlots_03.png index faac676a0..52a90c1b4 100644 Binary files a/images/CombinedPlots_03.png and b/images/CombinedPlots_03.png differ diff --git a/images/EBSDProfile_01.png b/images/EBSDProfile_01.png index 7d2afcc4c..3c059f4a4 100644 Binary files a/images/EBSDProfile_01.png and b/images/EBSDProfile_01.png differ diff --git a/images/EBSDProfile_02.png b/images/EBSDProfile_02.png index 8ea848b50..470e54725 100644 Binary files a/images/EBSDProfile_02.png and b/images/EBSDProfile_02.png differ diff --git a/images/GrainGraphBasedReconstruction_11.png b/images/GrainGraphBasedReconstruction_11.png index d99b5698a..67d776e28 100644 Binary files a/images/GrainGraphBasedReconstruction_11.png and b/images/GrainGraphBasedReconstruction_11.png differ diff --git a/images/GrainGraphBasedReconstruction_15.png b/images/GrainGraphBasedReconstruction_15.png index 4a4d2c4e5..ad71a590a 100644 Binary files a/images/GrainGraphBasedReconstruction_15.png and b/images/GrainGraphBasedReconstruction_15.png differ diff --git a/images/OrientationInversePoleFigure_03.png b/images/OrientationInversePoleFigure_03.png index 50a24c260..af72aab25 100644 Binary files a/images/OrientationInversePoleFigure_03.png and b/images/OrientationInversePoleFigure_03.png differ diff --git a/images/OrientationInversePoleFigure_04.png b/images/OrientationInversePoleFigure_04.png index 3152f98d1..3e88b4610 100644 Binary files a/images/OrientationInversePoleFigure_04.png and b/images/OrientationInversePoleFigure_04.png differ diff --git a/images/OrientationPoleFigure_03.png b/images/OrientationPoleFigure_03.png index 57abaad31..b1fd7e1eb 100644 Binary files a/images/OrientationPoleFigure_03.png and b/images/OrientationPoleFigure_03.png differ diff --git a/images/ParentChildVariants_01.png b/images/ParentChildVariants_01.png index 8736d0d07..a84081647 100644 Binary files a/images/ParentChildVariants_01.png and b/images/ParentChildVariants_01.png differ diff --git a/images/PlotTypes_03.png b/images/PlotTypes_03.png index 88531200f..9d3547083 100644 Binary files a/images/PlotTypes_03.png and b/images/PlotTypes_03.png differ diff --git a/images/TiltAndTwistBoundaries_01.png b/images/TiltAndTwistBoundaries_01.png index 202f054ff..693b6d574 100644 Binary files a/images/TiltAndTwistBoundaries_01.png and b/images/TiltAndTwistBoundaries_01.png differ diff --git a/images/TransformationTexture_01.png b/images/TransformationTexture_01.png index 088450188..d42304814 100644 Binary files a/images/TransformationTexture_01.png and b/images/TransformationTexture_01.png differ diff --git a/images/TransformationTexture_02.png b/images/TransformationTexture_02.png index 14c79c945..01a3fabde 100644 Binary files a/images/TransformationTexture_02.png and b/images/TransformationTexture_02.png differ diff --git a/images/VectorsAxes_03.png b/images/VectorsAxes_03.png index 67a68b355..0dbe1da72 100644 Binary files a/images/VectorsAxes_03.png and b/images/VectorsAxes_03.png differ diff --git a/images/VectorsAxes_04.png b/images/VectorsAxes_04.png index b470fbbb2..175030009 100644 Binary files a/images/VectorsAxes_04.png and b/images/VectorsAxes_04.png differ diff --git a/pages/documentation_matlab/CrystalReferenceSystem.html b/pages/documentation_matlab/CrystalReferenceSystem.html index d329544f7..e1d3fb39d 100644 --- a/pages/documentation_matlab/CrystalReferenceSystem.html +++ b/pages/documentation_matlab/CrystalReferenceSystem.html @@ -102,9 +102,9 @@

Trigonal and hexagonal materials

close all figure(1) -plot(cS_x2a,'figSize','small') +plot(cS_x2a,'figSize','small','colored') hold on -arrow3d(0.5*[xvector,yvector,zvector],'labeled') +arrow3d(0.6*[xvector,yvector,zvector],'labeled') hold off {% endhighlight %}
@@ -114,9 +114,9 @@

Trigonal and hexagonal materials

cS_y2a = crystalShape.quartz(cs_y2a); figure(2) -plot(cS_y2a,'figSize','small') +plot(cS_y2a,'figSize','small','colored') hold on -arrow3d(0.5*[xvector,yvector,zvector],'labeled') +arrow3d(0.6*[xvector,yvector,zvector],'labeled') hold off {% endhighlight %}
diff --git a/pages/documentation_matlab/CrystalShapes.html b/pages/documentation_matlab/CrystalShapes.html index db822968c..d3bafa5d2 100644 --- a/pages/documentation_matlab/CrystalShapes.html +++ b/pages/documentation_matlab/CrystalShapes.html @@ -274,23 +274,23 @@

Defining complicated crystal shapes

{% include inline_image.html file="CrystalShapes_09.png" %}
-

i.e. we see only the positive and negative rhomboedrons, but the hexagonal prism are to far away from the origin to cut the shape. We may decrease the distance, by multiplying the corresponding normal with a factor larger then 1.

+

i.e. we see only the positive and negative rhododendrons, but the hexagonal prism are to far away from the origin to cut the shape. We may decrease the distance, by multiplying the corresponding normal with a factor larger then 1.

{% highlight matlab %} N = [2*m,r,z]; cS = crystalShape(N); -plot(cS) +plot(cS,'colored') {% endhighlight %}
{% include inline_image.html file="CrystalShapes_10.png" %}
-

Next in a typical Quartz crystal the negative rhomboedron is a bit smaller then the positive rhomboedron. Lets correct for this.

+

Next in a typical Quartz crystal the negative rhododendron is a bit smaller then the positive rhododendron. Lets correct for this.

{% highlight matlab %} % collect the face normal with the right scaling N = [2*m,r,0.9*z]; cS = crystalShape(N); -plot(cS) +plot(cS,'colored') {% endhighlight %}
{% include inline_image.html file="CrystalShapes_11.png" %} @@ -301,33 +301,12 @@

Defining complicated crystal shapes

N = [2*m,r,0.9*z,0.7*s1,0.3*x1]; cS = crystalShape(N); -plot(cS) -{% endhighlight %} -
-{% include inline_image.html file="CrystalShapes_12.png" %} -
-

Marking crystal faces

-

We may colorize the faces according to their lattice planes using the command

-{% highlight matlab %} plot(cS,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_13.png" %} -
-

or even label the faces directly

-{% highlight matlab %} -plot(cS) -N = unique(cS.N.symmetrise,'noSymmetry','stable'); -fC = cS.faceCenter; - -for i = 1:length(N) - text3(fC(i),char(round(N(i)),'latex'),'scaling',1.1,'interpreter','latex') -end -{% endhighlight %} -
-{% include inline_image.html file="CrystalShapes_14.png" %} +{% include inline_image.html file="CrystalShapes_12.png" %}
-

Defining complicated crystals more simple

+

Defining complicated crystals more simple

We see that defining a complicated crystal shape is a tedious work. To this end MTEX allows to model the shape with a habitus and a extension parameter. This approach has been developed by J. Enderlein in A package for displaying crystal morphology. Mathematical Journal, 7(1), 1997. The two parameters are used to model the distance of a face from the origin. Setting all parameters to one we obtain

{% highlight matlab %} % take the face normals unscaled @@ -339,16 +318,16 @@

Defining complicated crystals more simple

plot(cS,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_15.png" %} +{% include inline_image.html file="CrystalShapes_13.png" %}
-

The scale parameter models the inverse extension of the crystal in each dimension. In order to make the crystal a bit longer and the negative rhomboedrons smaller we could do

+

The scale parameter models the inverse extension of the crystal in each dimension. In order to make the crystal a bit longer and the negative rhododendrons smaller we could do

{% highlight matlab %} -extension = [0.9 1.1 1]; +extension = [1 1.2 1.1]; cS = crystalShape(N,habitus,extension); plot(cS,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_16.png" %} +{% include inline_image.html file="CrystalShapes_14.png" %}

Next the habitus parameter describes how close faces with mixed hkl are to the origin. If we increase the habitus parameter the trapezohedron and the bipyramid become more and more dominant

{% highlight matlab %} @@ -365,49 +344,52 @@

Defining complicated crystals more simple

plot(cS,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_17.png" %} +{% include inline_image.html file="CrystalShapes_15.png" %}
-{% include inline_image.html file="CrystalShapes_18.png" %} +{% include inline_image.html file="CrystalShapes_16.png" %}
-{% include inline_image.html file="CrystalShapes_19.png" %} +{% include inline_image.html file="CrystalShapes_17.png" %}
-

Select faces

+

Select faces

A specific face of the crystal shape may be selected by its normal vector

{% highlight matlab %} plot(cS) hold on plot(cS(Miller(0,-1,1,0,cs)),'FaceColor','DarkRed') hold off + +% zoom a bit out to fit the screen +camzoom(0.7) {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_20.png" %} +{% include inline_image.html file="CrystalShapes_18.png" %}
-

Gallery of hardcoded crystal shapes

+

Gallery of hardcoded crystal shapes

{% highlight matlab %} plot(crystalShape.olivine,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_21.png" %} +{% include inline_image.html file="CrystalShapes_19.png" %}
{% highlight matlab %} plot(crystalShape.garnet,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_22.png" %} +{% include inline_image.html file="CrystalShapes_20.png" %}
{% highlight matlab %} plot(crystalShape.topaz,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_23.png" %} +{% include inline_image.html file="CrystalShapes_21.png" %}
{% highlight matlab %} plot(crystalShape.plagioclase,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_24.png" %} +{% include inline_image.html file="CrystalShapes_22.png" %}
diff --git a/pages/documentation_matlab/EBSDIPFMap.html b/pages/documentation_matlab/EBSDIPFMap.html index 8757e422a..94a9f2734 100644 --- a/pages/documentation_matlab/EBSDIPFMap.html +++ b/pages/documentation_matlab/EBSDIPFMap.html @@ -136,7 +136,7 @@

Basic Properties

{% include inline_image.html file="EBSDIPFMap_07.png" %}
-

Instead of colorizing which crystal axis is pointing out of the specimen surface we may also colorizing which crystal axis is pointing towards the rolling or folliation direction or any other specimen fixed direction. This reference direction is stored as the property inversePoleFigureDirection in the color key.

+

Instead of colorizing which crystal axis is pointing out of the specimen surface we may also colorizing which crystal axis is pointing towards the rolling or foliation direction or any other specimen fixed direction. This reference direction is stored as the property inversePoleFigureDirection in the color key.

{% highlight matlab %} % set the reference direction to X ipfKey.inversePoleFigureDirection = vector3d.X; diff --git a/pages/documentation_matlab/EBSDOrientationAnalysis.html b/pages/documentation_matlab/EBSDOrientationAnalysis.html index 1a7387c2c..482350612 100644 --- a/pages/documentation_matlab/EBSDOrientationAnalysis.html +++ b/pages/documentation_matlab/EBSDOrientationAnalysis.html @@ -23,12 +23,11 @@
-

Here we discuss tools for the analysis of EBSD data which are independent of its spatial coordinates. For spatial analysis, we refer to this page. Let us first import some EBSD data:

+

Here we discuss tools for the analysis of EBSD data which are independent of its spatial coordinates. For spatial analysis, we refer to this page. Let us first import some EBSD data:

{% highlight matlab %} -plotx2east -ebsd = EBSD.load(fullfile(mtexDataPath,'EBSD','Forsterite.ctf'),... - 'convertEuler2SpatialReferenceFrame'); +mtexdata forsterite silent +plotx2east plot(ebsd) {% endhighlight %}
@@ -69,9 +68,7 @@

Orientation plot

rOrth = perp(r) % output -hold on -plot(rOrth) -hold off +plot(rOrth,'add2all','Marker','square','markerColor','DarkRed') {% endhighlight %} {% highlight plaintext %} @@ -89,7 +86,15 @@

Orientation plot

{% include inline_image.html file="EBSDOrientationAnalysis_03.png" %}
-

we can check how large is the number of orientations that are in the (100) pole figure within a 10-degree fibre around the great circle with center rOrth. The following line gives the result in percent

+

we can check how large is the number of orientations that are in the (100) pole figure within a 10-degree fibre around the great circle with center rOrth, i.e., in the region bounded by the two small circles

+{% highlight matlab %} +nextAxis(1) +circle(rOrth,80 * degree,'lineColor','darkred','linewidth',5,'EdgeAlpha',0.5) +{% endhighlight %} +
+{% include inline_image.html file="EBSDOrientationAnalysis_04.png" %} +
+

The following line gives the result in percent

{% highlight matlab %} 100 * sum(angle(r,rOrth)>80*degree) / length(ori) {% endhighlight %} @@ -104,13 +109,10 @@

Orientation plot

mtexColorbar {% endhighlight %}
-{% include inline_image.html file="EBSDOrientationAnalysis_04.png" %} +{% include inline_image.html file="EBSDOrientationAnalysis_05.png" %}
+

From the inverse pole figure, it becomes clear that the orientations are close to the fibre Miller(0,1,0), rOrth. Let's check this by computing the fibre volume in percent

{% highlight matlab %} -%From the inverse pole figure, it becomes clear that the orientations are -% close to the fibre |Miller(0,1,0)|, |rOrth|. Let's check this by computing -% the fibre volume in percent - % define the fibre f = fibre(Miller(0,1,0,cs),rOrth); @@ -127,7 +129,7 @@

Orientation plot

odf = calcDensity(ebsd('Forsterite').orientations) % plot the odf along the fibre -plot(odf,f) +plot(odf,f,'linewidth',2) ylim([0,26]) {% endhighlight %} @@ -137,7 +139,7 @@

Orientation plot

weight: 1 {% endhighlight %}
-{% include inline_image.html file="EBSDOrientationAnalysis_05.png" %} +{% include inline_image.html file="EBSDOrientationAnalysis_06.png" %}

We see that to ODF is far from being constant along the fibre. Thus, together with an observation about the small fibre volume, we would reject the hypothesis of a fibre texture.

Let's finally plot the ODF in orientation space to verify our decision

@@ -145,7 +147,7 @@

Orientation plot

plot(odf,'sigma') {% endhighlight %}
-{% include inline_image.html file="EBSDOrientationAnalysis_06.png" %} +{% include inline_image.html file="EBSDOrientationAnalysis_07.png" %}

Here we see the typical large individual spots that are typical for large grains. Thus the ODF estimated from the EBSD data and all our previous analysis suffer from the fact that too few grains have been measured. For texture analysis, it would have been favorable to measure at a lower resolution but a larger region.

diff --git a/pages/documentation_matlab/GrainGraphBasedReconstruction.html b/pages/documentation_matlab/GrainGraphBasedReconstruction.html index 13ef24a1b..0bcc579cd 100644 --- a/pages/documentation_matlab/GrainGraphBasedReconstruction.html +++ b/pages/documentation_matlab/GrainGraphBasedReconstruction.html @@ -322,6 +322,9 @@

Merge similar grains and inclusions

% plot the result plot(job.parentGrains,job.parentGrains.meanOrientation) {% endhighlight %} +
+{% include inline_image.html file="GrainGraphBasedReconstruction_10.png" %} +

We may be still a bit unsatisfied with the result as the large parent grains contain many poorly indexed inclusions where we failed to assign to a parent orientation. We may use the command mergeInclusions to merge all inclusions with fever pixels then a certain threshold into the surrounding parent grains.

{% highlight matlab %} job.mergeInclusions('maxSize',50); @@ -330,7 +333,7 @@

Merge similar grains and inclusions

plot(job.parentGrains,job.parentGrains.meanOrientation) {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_10.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_11.png" %}

Compute Child Variants

Knowing the parent grain orientations we may compute the variants and packets of each child grain using the command calcVariants. The values are stored with the properties job.transformedGrains.variantId and job.transformedGrains.packetId. The packetId is defined as the closest {111} plane in austenite to the (011) plane in martensite.

@@ -353,7 +356,7 @@

Compute Child Variants

hold off {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_11.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_12.png" %}

We can also directly identify the child grains belonging to the selected parent grains. Remember that the initial grains are stored in job.grainsPrior and that the vector job.mergeId stores for every initial grain the id of the corresponding parent grain. Combining these two information we do

{% highlight matlab %} @@ -369,7 +372,7 @@

Compute Child Variants

hold off {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_12.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_13.png" %}

In order to check our parent grain reconstruction we chose the single parent grain outlined in the above map and plot all child variants of its reconstructed parent orientation together with the actually measured child orientations inside the parent grain. In order to compute the variantId and packetId we use the command calcVariantId.

{% highlight matlab %} @@ -397,7 +400,7 @@

Compute Child Variants

hold off {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_13.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_14.png" %}

Parent EBSD reconstruction

So far our analysis was at the grain level. However, once parent grain orientations have been computed we may also use them to compute parent orientations of each pixel in our original EBSD map. This is done by the command calcParentEBSD @@ -409,7 +412,7 @@

Parent EBSD reconstruction

plot(parentEBSD('Iron fcc'),parentEBSD('Iron fcc').orientations,'figSize','large') {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_14.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_15.png" %}

We obtain even a measure parentEBSD.fit for the correspondence between the parent orientation reconstructed from the single pixel and the parent orientation of the grain. Lets visualize this fit

{% highlight matlab %} @@ -425,7 +428,7 @@

Parent EBSD reconstruction

hold off {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_15.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_16.png" %}

Denoise the parent map

Finally, we may apply filtering to the parent map to fill non indexed or not reconstructed pixels. To this end we first run grain reconstruction on the parent map

@@ -446,7 +449,7 @@

Denoise the parent map

hold off {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_16.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_17.png" %}

and then use the command smooth to fill the holes in the reconstructed parent map

{% highlight matlab %} @@ -463,7 +466,7 @@

Denoise the parent map

hold off {% endhighlight %}
-{% include inline_image.html file="GrainGraphBasedReconstruction_17.png" %} +{% include inline_image.html file="GrainGraphBasedReconstruction_18.png" %}
diff --git a/pages/documentation_matlab/IsotropicTheory.html b/pages/documentation_matlab/IsotropicTheory.html index d232f498d..74d84e6b1 100644 --- a/pages/documentation_matlab/IsotropicTheory.html +++ b/pages/documentation_matlab/IsotropicTheory.html @@ -302,9 +302,7 @@

Hashin Shtrikman Bounds

{% endhighlight %} {% highlight plaintext %} -Warning: Tensor is not positive definite -Warning: Tensor is not positive definite -Elapsed time is 2.440417 seconds. +Elapsed time is 2.234683 seconds. {% endhighlight %}
{% include inline_image.html file="IsotropicTheory_01.png" %} diff --git a/pages/documentation_matlab/OrientationFundamentalRegion.html b/pages/documentation_matlab/OrientationFundamentalRegion.html index 4231f7921..c89211ac3 100644 --- a/pages/documentation_matlab/OrientationFundamentalRegion.html +++ b/pages/documentation_matlab/OrientationFundamentalRegion.html @@ -89,6 +89,7 @@

Crystal Symmetries

close all plot(oR_all) +axis off hold on plot(oR,'color','r') hold off diff --git a/pages/documentation_matlab/ProjectionBasedParameters.html b/pages/documentation_matlab/ProjectionBasedParameters.html index e1595c930..ccfc43078 100644 --- a/pages/documentation_matlab/ProjectionBasedParameters.html +++ b/pages/documentation_matlab/ProjectionBasedParameters.html @@ -68,6 +68,9 @@ plot(grains(ind).boundary,'lineWidth',5,'linecolor','blue') hold off {% endhighlight %} +
+{% include inline_image.html file="ProjectionBasedParameters_01.png" %} +

The most well known projection based parameter is the diameter which refers to the longest distance between any two boundary points and is given in µm.

{% highlight matlab %} grains(ind).diameter @@ -88,7 +91,7 @@ xlim([0,180]) {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_01.png" %} +{% include inline_image.html file="ProjectionBasedParameters_02.png" %}

We observe that that maximum caliper is about 7000 while the minimum caliper is about 2000. We may compute the exact direction and length of the maximum or minimum by passing the options 'longest' or 'shortest' to the function caliper. In this case the the output is of type vector3d indicating the direction. The norm of the vector coincides with the caliper for this projection direction. Hence, the norm(grains.caliper('longest')) coincides with the diameter.

{% highlight matlab %} @@ -111,7 +114,7 @@ 1.6308e+03 {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_02.png" %} +{% include inline_image.html file="ProjectionBasedParameters_03.png" %}

The difference between the longest and the shortest caliper can be taken as a measure how round a grain is.

{% highlight matlab %} @@ -122,7 +125,7 @@ mtexColorbar('title','c_{max} - c_{min}') {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_03.png" %} +{% include inline_image.html file="ProjectionBasedParameters_04.png" %}

This longest and shortest caliper are comparable to grains.longAxis and grains.shortAxis computed from an ellipse fitted to the grain. In the case of rectangular particles, one might not primarily be interested in the longest caliper of a grain but rather in the direction normal to the shortest caliper. This is computed when specifying the option 'shortestPerp'. If we imagine a very strong alignment of the long axes of orthorhombic particles, the maximum diameter may show a bimodal distribution (the two, roughly equally distributed diagonals of the particle).

{% highlight matlab %} @@ -144,7 +147,7 @@ legend('Location','east') {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_04.png" %} +{% include inline_image.html file="ProjectionBasedParameters_05.png" %}

PAROR and SURFOR

Another way of quantifying shape fabrics is by making use of the cumulative projection function of the grains or the grain boundary segments. These methods are heavily inspired by Edwin A. Abbotts 'Flatland - A romance of many dimensions' (1884) and based on Panozzo, R., 1983, "Two-dimensional analysis of shape fabric using projections of digitized lines in a plane". Tectonophysics 95, 279-294. and Panozzo, R., 1984, "Two-dimensional strain from the orientation of lines in a plane." J. Struct. Geol. 6, 215-221. implemented in MTEX as grains.paror and grainBoudnary.surfor @@ -177,7 +180,7 @@

PAROR and SURFOR

hold off {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_05.png" %} +{% include inline_image.html file="ProjectionBasedParameters_06.png" %}

The above averaged caliper can be computed more directly by the function grains.paror which returns the cumulative particle projection function normalized to 1. The projection angles can be regarded as the rotation angle of the particle (counterclockwise) while projecting from the y-axis onto the x-axis.

{% highlight matlab %} @@ -192,7 +195,7 @@

PAROR and SURFOR

polarplot(omega,cumplE,'LineWidth',3,'color','k') {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_06.png" %} +{% include inline_image.html file="ProjectionBasedParameters_07.png" %}

We can interpret the results in the following way. The minimum of the curve is a measure of the amplitude of the projection function and can be compared to an averaged axial ratio \(b/a\) of the entire fabric; isotropic fabrics would have a \(b/a\) close to 1 while highly anisotropic fabrics can be identified by small \(b/a\) values.

{% highlight matlab %} @@ -251,7 +254,7 @@

PAROR and SURFOR

legend('Location','southoutside','Orientation','horizontal') {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_07.png" %} +{% include inline_image.html file="ProjectionBasedParameters_08.png" %}

We can see that Forsterite-Forsterite boundaries form a fabric slightly more inclined with respect to the other phase boundaries and that the phase boundaries between the two pyroxenes (Enstatite and Diopside) show the lowest anisotropy.

Characteristic Shape

@@ -281,7 +284,7 @@

Characteristic Shape

vertices: 1024 {% endhighlight %}
-{% include inline_image.html file="ProjectionBasedParameters_08.png" %} +{% include inline_image.html file="ProjectionBasedParameters_09.png" %}

The output of the command characteristicShape is a shape2d object which behaves very similar to a grain2d object. Hence it is easy to derive things such as a long axis or e.g. the angle between the longest and the shortest caliper which can be regarded as a measure of asymmetry.

{% highlight matlab %} @@ -292,11 +295,11 @@

Characteristic Shape

{% highlight plaintext %} ans = - 78.7774 + 78.7824 ans = - 86.8311 + 86.9587 ans = - 79.7408 + 79.7618 {% endhighlight %} diff --git a/pages/documentation_matlab/SingleSlipModel.html b/pages/documentation_matlab/SingleSlipModel.html index cdf90799a..1af26a89b 100644 --- a/pages/documentation_matlab/SingleSlipModel.html +++ b/pages/documentation_matlab/SingleSlipModel.html @@ -208,23 +208,20 @@

Solutions of the Continuity Equation

ans = 0.0011 {% endhighlight %} -
-{% include inline_image.html file="SingleSlipModel_05.png" %} -

For completeness the pole figures of the other two basis functions.

{% highlight matlab %} plotPDF(odf1,h,'resolution',2*degree,'colorRange','equal') mtexColorbar {% endhighlight %}
-{% include inline_image.html file="SingleSlipModel_06.png" %} +{% include inline_image.html file="SingleSlipModel_05.png" %}
{% highlight matlab %} plotPDF(odf3,h,'resolution',2*degree,'colorRange','equal') mtexColorbar {% endhighlight %}
-{% include inline_image.html file="SingleSlipModel_07.png" %} +{% include inline_image.html file="SingleSlipModel_06.png" %}

We observe that the pole figure with respect to \(n \times b\) is always uniform, where \(n\) is the slip normal and \(b\) is the slip direction.

Since in practice all three slip systems are active we can model the resulting ODF as a linear combination of the different basis functions

@@ -233,7 +230,7 @@

Solutions of the Continuity Equation

mtexColorbar {% endhighlight %}
-{% include inline_image.html file="SingleSlipModel_08.png" %} +{% include inline_image.html file="SingleSlipModel_07.png" %}

Checking the for steady state

We may also check for which orientations an ODF is already in a steady state of the continuity equation, i.e., the time derivative \(\text{div}(f \Omega) = 0\) is zero.

@@ -244,7 +241,7 @@

Checking the for steady state

setColorRange(max(abs(clim))*[-1,1]) {% endhighlight %}
-{% include inline_image.html file="SingleSlipModel_09.png" %} +{% include inline_image.html file="SingleSlipModel_08.png" %}
diff --git a/pages/documentation_matlab/TiltAndTwistBoundaries.html b/pages/documentation_matlab/TiltAndTwistBoundaries.html index f1917c090..9d272e077 100644 --- a/pages/documentation_matlab/TiltAndTwistBoundaries.html +++ b/pages/documentation_matlab/TiltAndTwistBoundaries.html @@ -38,23 +38,23 @@ % set up the ipf coloring cKey = ipfColorKey(ebsd('fo').CS.properGroup); -cKey.inversePoleFigureDirection = xvector; +cKey.inversePoleFigureDirection = yvector; color = cKey.orientation2color(ebsd('fo').orientations); % plot the forsterite phase -plot(ebsd('fo'),color,'faceAlpha',0.5,'figSize','large') +plot(ebsd('fo'),color,'faceAlpha',0.8,'figSize','large') % init override mode hold on -% plot grain boundares +% plot grain boundaries plot(grains.boundary,'linewidth',2) % compute transparency from misorientation angle alpha = grains('fo').innerBoundary.misorientation.angle / (5*degree); % plot the subgrain boundaries -plot(grains('fo').innerBoundary,'linewidth',1.5,'edgeAlpha',alpha,'linecolor','b'); +plot(grains('fo').innerBoundary,'linewidth',1.5,'edgeAlpha',alpha,'edgeColor','blue'); % stop override mode hold off @@ -64,7 +64,7 @@

In the above plot we have marked all subgrain boundaries in blue and adjusted the transparency value according to the misorientation angle.

Misorientation Axes

-

When analysing the misorientation axes of the subgrain boundary misorientations we need to distinguish whether we look at the misorientation axes in crystal coordinates or in specimen coordinates. Lets start with the misorientation axes in crystal coordinates which can directly be computed by the command axis.

+

When analyzing the misorientation axes of the subgrain boundary misorientations we need to distinguish whether we look at the misorientation axes in crystal coordinates or in specimen coordinates. Lets start with the misorientation axes in crystal coordinates which can directly be computed by the command axis.

{% highlight matlab %} % extract the Forsterite subgrain boundaries subGB = grains('fo').innerBoundary; @@ -75,7 +75,7 @@

Misorientation Axes

{% include inline_image.html file="TiltAndTwistBoundaries_02.png" %}
-

Obviously from the above plot it is not easy to judge about prefered misorientation axes. We get more insight if we compute the density distribution of the misorientation axes and look for local extrema.

+

Obviously from the above plot it is not easy to judge about preferred misorientation axes. We get more insight if we compute the density distribution of the misorientation axes and look for local extrema.

{% highlight matlab %} % compute the density distribution of misorientation axes density = calcDensity(subGB.misorientation.axis,'halfwidth',3*degree); @@ -84,7 +84,7 @@

Misorientation Axes

plot(density,'figSize','small') mtexColorbar -% find the two prefered misorientation axes +% find the two preferred misorientation axes [~,hkl] = max(density,'numLocal',2); round(hkl) {% endhighlight %} @@ -101,7 +101,7 @@

Misorientation Axes

We find two preferred misorientation axes - (001) and (071). TODO: can this be interpreted?

The misorientation axis in specimen coordinates

-

The computation of the misorientation axis in specimen coordinates is a little bit more complicated as it is impossible using only the misoriention. In fact we require the adjacent orientations on both sides of the subgrain boundaries. We can find those by making use of the ebsdId stored in the grain boundaries. The command

+

The computation of the misorientation axis in specimen coordinates is a little bit more complicated as it is impossible using only the misorientation. In fact we require the adjacent orientations on both sides of the subgrain boundaries. We can find those by making use of the ebsdId stored in the grain boundaries. The command

{% highlight matlab %} oriGB = ebsd('id',subGB.ebsdId).orientations {% endhighlight %} @@ -147,15 +147,15 @@

The misorientation axis in specimen coordinates

{% include inline_image.html file="TiltAndTwistBoundaries_05.png" %}

Tilt and Twist Boundaries

-

Subgrain boundaries are often assumed to form during deformation by the accumulation of edge or screw dislocations. In the first extremal case of exclusive edge dislocations the misorientation axis is parallel to the deformation line and within the boundary plane. Such boundaries are called tilt boundaries. In the second extremal case of exclusive screw dislocations the misorientation axis is the screw axis and is parallel to the boundary normal. Such boundaries are called twist boundaries.

-

In the case of 2d EBSD data one usually has not the full boundary information, but only the trace of the boundary with the measurement surface. Hence, it is impossible to distinguish tilt and twist boundaries. However, for twist boundaries misorientation axis must be normal to the boundary trace. This means, if the misorientation axis lays in the measurement plane and normal to the boundary trace, the boundary is quite likely to be a twist boundary. At the other hand, if the misorientation axis is parallel to the trace of a boundary, the boundary is quite likely to be a tilt boundary. We can be easily check the latter situation from our EBSD data, which allows us to exclude certain boundaries to be twist boundaries and to be most likely tilt boundaries To do so, we colorize in the following plot all subgrain boundaries according to the angle between the boundary trace and the misorientation axis. Blue subgrain boundaries are very likely tilt boundaries, while red subgrain boundaries are can be either tilt or twist boundaries.

+

Subgrain boundaries are often assumed to form during deformation by the accumulation of edge or screw dislocations. In the first extreme case of exclusive edge dislocations the misorientation axis is parallel to the deformation line and within the boundary plane. Such boundaries are called tilt boundaries. In the second extreme case of exclusive screw dislocations the misorientation axis is the screw axis and is parallel to the boundary normal. Such boundaries are called twist boundaries.

+

In the case of 2d-EBSD data one usually has not the full boundary information, but only the trace of the boundary with the measurement surface. Hence, it is impossible to distinguish tilt and twist boundaries. However, for twist boundaries misorientation axis must be normal to the boundary trace. This means, if the misorientation axis lays in the measurement plane and normal to the boundary trace, the boundary is quite likely to be a twist boundary. At the other hand, if the misorientation axis is parallel to the trace of a boundary, the boundary is quite likely to be a tilt boundary. We can be easily check the latter situation from our EBSD data, which allows us to exclude certain boundaries to be twist boundaries and to be most likely tilt boundaries To do so, we colorize in the following plot all subgrain boundaries according to the angle between the boundary trace and the misorientation axis. Blue subgrain boundaries are very likely tilt boundaries, while red subgrain boundaries are can be either tilt or twist boundaries.

{% highlight matlab %} plot(ebsd('fo'),color,'faceAlpha',0.5,'figSize','large') % init override mode hold on -% plot grain boundares +% plot grain boundaries plot(grains.boundary,'linewidth',2) % colorize the subgrain boundaries according the angle between boundary diff --git a/pages/documentation_matlab/TriplePointBasedReconstruction.html b/pages/documentation_matlab/TriplePointBasedReconstruction.html index 95ee80c68..e5cad3a87 100644 --- a/pages/documentation_matlab/TriplePointBasedReconstruction.html +++ b/pages/documentation_matlab/TriplePointBasedReconstruction.html @@ -41,7 +41,7 @@ Properties: bands, bc, bs, error, mad, reliabilityindex Scan unit : um - X x Y x Z : [0 1568] x [-1175 0] x [0 1.4e-13] + X x Y x Z : [0 1568] x [-1175 0] x [0 0] Normal vector: (0,0,-1) {% endhighlight %}
@@ -66,9 +66,6 @@

Setting up the parent grain reconstructor

[grains,ebsd.grainId] = calcGrains(ebsd('indexed'),'threshold',1.5*degree,... 'removeQuadruplePoints'); {% endhighlight %} -
-{% include inline_image.html file="TriplePointBasedReconstruction_02.png" %} -

As our reconstruction will be based on triple junctions we compute the child grains using the option removeQuadruplePoints which turns all quadruple junctions into 2 triple junctions. Furthermore, we choose a very small threshold of 1.5 degree for the identification of grain boundaries to avoid alpha orientations that belong to different beta grains get merged into the same alpha grain.

Now we are ready to set up the parent grain reconstruction job.

{% highlight matlab %} @@ -83,11 +80,11 @@

Setting up the parent grain reconstructor

phase mineral symmetry grains area reconstructed parent Ti (BETA) 432 430 0.23% 0% - child Ti (alpha) 622 50317 100% + child Ti (alpha) 622 49120 100% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 0.84°, 1.2°, 1.6°, 3° (quintiles) - c2c fit: 0.7°, 0.97°, 1.3°, 1.7° (quintiles) + p2c fit: 0.83°, 1.2°, 1.7°, 3.2° (quintiles) + c2c fit: 0.7°, 0.99°, 1.3°, 1.7° (quintiles) {% endhighlight %}

Compute parent orientations from triple junctions

In present datas set we have very little and unreliable parent measurements. Therefore, we use triple junctions as germ cells for the parent parent grains. In a first step we identify triple junctions that have misorientations that are compatible with a common parent orientation using the command calcTPVotes. The option 'minFit' tells the MTEX that the only those triple junctions are considered where the fit to the common parent orientation does not exceed 2.5 degree.

@@ -100,13 +97,13 @@

Compute parent orientations from triple junctions

phase mineral symmetry grains area reconstructed parent Ti (BETA) 432 430 0.23% 0% - child Ti (alpha) 622 50317 100% + child Ti (alpha) 622 49120 100% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 0.84°, 1.2°, 1.6°, 3° (quintiles) - c2c fit: 0.71°, 1°, 1.3°, 1.7° (quintiles) + p2c fit: 0.83°, 1.2°, 1.7°, 3.2° (quintiles) + c2c fit: 0.7°, 0.98°, 1.3°, 1.7° (quintiles) - votes: 42320 x 1 + votes: 41427 x 1 probabilities: 93%, 88%, 82%, 69% (quintiles) {% endhighlight %}

The above command does not only compute the best fitting but also the second best fitting parent orientation. This allows us to ignore ambigues triple points which may vote equally well for different parent orientations. In the above command we did this by the option 'maxFit' which tells MTEX to ignore all triple points where the fit to the second best parent orientation is below 5 degree.

@@ -116,7 +113,7 @@

Compute parent orientations from triple junctions

mtexColorbar {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_03.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_02.png" %}

We observe that for most of the grains the probability is above 70 percent. We may use this percentage as threshold to decide which child grains we turn into parent grains. This can be done by the command command calcParentFromVote

@@ -128,15 +125,15 @@

Compute parent orientations from triple junctions

ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 34009 84% 67% - child Ti (alpha) 622 16738 16% + parent Ti (BETA) 432 33307 84% 67% + child Ti (alpha) 622 16243 16% OR: (110) || (0001) [1-11] || [-2110] p2c fit: 0.95°, 1.4°, 1.8°, 2.3° (quintiles) - c2c fit: 0.99°, 1.5°, 1.9°, 2.7° (quintiles) + c2c fit: 1°, 1.6°, 2°, 2.8° (quintiles) - votes: 8741 x 1 - probabilities: 66%, 61%, 54%, 44% (quintiles) + votes: 8550 x 1 + probabilities: 66%, 61%, 54%, 43% (quintiles) {% endhighlight %}

We observe that after this step more then 66 percent of the grains became parent grains. Lets visualize these reconstructed beta grains

{% highlight matlab %} @@ -149,7 +146,7 @@

Compute parent orientations from triple junctions

plot(job.parentGrains, color, 'figSize', 'large') {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_04.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_03.png" %}

Grow parent grains at grain boundaries

Next we may grow the reconstructed parent grains into the regions of the remaining child grains. To this end we use the command calcGBVotes with the option 'p2c' to compute votes from parent to child grain boundaries. Next we use the exact same command calcParentFromVote to recover parent orientations from the votes. As threshold for the growing the parent grains into the child grains we use 2.5 degree, 5 degree and 7.5 degree. This can be easily accomblished by the following small loop.

@@ -168,12 +165,12 @@

Grow parent grains at grain boundaries

ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 49108 99% 97% - child Ti (alpha) 622 1639 1.1% + parent Ti (BETA) 432 47995 99% 97% + child Ti (alpha) 622 1555 1% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 6.7°, 34°, 36°, 42° (quintiles) - c2c fit: 1.1°, 2°, 9.2°, 25° (quintiles) + p2c fit: 16°, 34°, 39°, 42° (quintiles) + c2c fit: 1.5°, 2.8°, 11°, 25° (quintiles) votes: 2 x 1 probabilities: 0%, 0%, 0%, 0% (quintiles) @@ -182,29 +179,32 @@

Grow parent grains at grain boundaries

ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 49626 99% 98% - child Ti (alpha) 622 1121 0.64% + parent Ti (BETA) 432 48440 99% 98% + child Ti (alpha) 622 1110 0.66% OR: (110) || (0001) [1-11] || [-2110] p2c fit: 33°, 35°, 41°, 42° (quintiles) - c2c fit: 2.8°, 11°, 18°, 24° (quintiles) + c2c fit: 2.1°, 9.9°, 19°, 25° (quintiles) - votes: 1 x 1 + votes: 2 x 1 probabilities: 0%, 0%, 0%, 0% (quintiles) ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 49646 99% 98% - child Ti (alpha) 622 1101 0.62% + parent Ti (BETA) 432 48458 99% 98% + child Ti (alpha) 622 1092 0.65% OR: (110) || (0001) [1-11] || [-2110] p2c fit: 34°, 35°, 41°, 42° (quintiles) - c2c fit: 1.6°, 9.8°, 18°, 20° (quintiles) + c2c fit: 1.6°, 9.2°, 19°, 29° (quintiles) + + votes: 2 x 1 + probabilities: 0%, 0%, 0%, 0% (quintiles) {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_05.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_04.png" %}

Merge parent grains

After the previous steps we are left with many very similar parent grains. In order to merge all similarly oriented grains into large parent grains one can use the command mergeSimilar. It takes as an option the threshold below which two parent grains should be considered a a single grain.

@@ -220,15 +220,18 @@

Merge parent grains

ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 144 99% 98% - child Ti (alpha) 622 1090 0.62% + parent Ti (BETA) 432 155 99% 98% + child Ti (alpha) 622 1074 0.65% OR: (110) || (0001) [1-11] || [-2110] p2c fit: 33°, 35°, 41°, 42° (quintiles) - c2c fit: 9.7°, 17°, 19°, 24° (quintiles) + c2c fit: 9.2°, 18°, 19°, 25° (quintiles) + + votes: 2 x 1 + probabilities: 0%, 0%, 0%, 0% (quintiles) {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_06.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_05.png" %}

Merge inclusions

We may be still a bit unsatisfied with the result as the large parent grains contain a lot of poorly indexed inclusions where we failed to assign a parent orientation. We use the command mergeInclusions to merge all inclusions that have fever pixels then a certain threshold into the surrounding parent grains.

@@ -243,16 +246,19 @@

Merge inclusions

{% highlight plaintext %} ans = parentGrainReconstructor - phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 56 100% 100% - child Ti (alpha) 622 62 0.05% + phase mineral symmetry grains area reconstructed + parent Ti (BETA) 432 66 100% 100% + child Ti (alpha) 622 70 0.093% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 24°, 30°, 33°, 35° (quintiles) - c2c fit: 9.8°, 13°, 19°, 24° (quintiles) + p2c fit: 23°, 29°, 33°, 35° (quintiles) + c2c fit: 4.1°, 9.8°, 19°, 32° (quintiles) + + votes: 2 x 1 + probabilities: 0%, 0%, 0%, 0% (quintiles) {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_07.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_06.png" %}

Reconstruct beta orientations in EBSD map

Until now we have only recovered the beta orientations as the mean orientations of the beta grains. In this section we want to set up the EBSD variable parentEBSD to contain for each pixel a reconstruction of the parent phase orientation. This is done by the command calcParentEBSD @@ -265,7 +271,7 @@

Reconstruct beta orientations in EBSD map

plot(parentEBSD('Ti (Beta)'),color,'figSize','large') {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_08.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_07.png" %}

The recovered EBSD variable parentEBSD contains a measure parentEBSD.fit for the corespondence between the beta orientation reconstructed for a single pixel and the beta orientation of the grain. Lets visualize this

{% highlight matlab %} @@ -280,7 +286,7 @@

Reconstruct beta orientations in EBSD map

hold off {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_09.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_08.png" %}

For comparison the map with original alpha phase and on top the recovered beta grain boundaries

{% highlight matlab %} @@ -292,7 +298,7 @@

Reconstruct beta orientations in EBSD map

hold off {% endhighlight %}
-{% include inline_image.html file="TriplePointBasedReconstruction_10.png" %} +{% include inline_image.html file="TriplePointBasedReconstruction_09.png" %}