diff --git a/_data/sidebars/documentation_sidebar.yml b/_data/sidebars/documentation_sidebar.yml index 01aeb679a..25014f599 100644 --- a/_data/sidebars/documentation_sidebar.yml +++ b/_data/sidebars/documentation_sidebar.yml @@ -543,10 +543,6 @@ entries: url: /GrainExport.html output: web - - title: "Neper Interface" - url: /NeperInterface.html - output: web - - title: "Grain Boundaries" url: /GrainBoundaries.html output: web @@ -805,6 +801,10 @@ entries: url: /SphericalHarmonics.html output: web + - title: "Fourier Series" + url: /S1FunHarmonics.html + output: web + - title: "Orientation Functions" url: /SO3Functions.html output: web @@ -862,10 +862,6 @@ entries: url: /ODFExport.html output: web - - title: "Vector Field" - url: /SO3FunVectorField.html - output: web - - title: "Symmetry" url: /SO3FunSymmetricFunctions.html output: web @@ -874,6 +870,14 @@ entries: url: /SO3FunMultivariate.html output: web + - title: "Vector Field" + url: /SO3FunVectorField.html + output: web + + - title: "Tangent Space on the Rotation Group" + url: /SO3FunTangentSpace.html + output: web + - title: "Rotational Kernel Functions" url: /SO3Kernels.html output: web diff --git a/_data/sidebars/examples_sidebar.yml b/_data/sidebars/examples_sidebar.yml index 47d06206e..bcb2fbdd0 100644 --- a/_data/sidebars/examples_sidebar.yml +++ b/_data/sidebars/examples_sidebar.yml @@ -5,29 +5,29 @@ entries: folders: - title: "Grain Analysis" - url: /GrainExamples.html + url: /ExGrains.html output: web folderitems: - title: "Deformed Ice" - url: /IceSphericity.html + url: /ExIceSphericity.html output: web - title: "Seismics" - url: /Seismics.html + url: /ExSeismics.html output: web folderitems: - - title: "Velocity Plots 1d" - url: /SeismicVelocitySingleCrystalDemo2d.html + - title: "Single Crystal Wave Velocities" + url: /ExSeismicVelocitySingleCrystalDemo2d.html output: web - - title: "Velocity Plots 2d" - url: /SeismicPlots.html + - title: "Seismic Wave Velocity Plot" + url: /ExSeismicPlots.html output: web - title: "Neutron Data" - url: /NeutronData.html + url: /ExNeutronData.html output: web folderitems: @@ -36,11 +36,20 @@ entries: output: web - title: "Plasticity" - url: /PlasticityExamples.html + url: /ExPlasticity.html output: web folderitems: - title: "Nanoidentation" - url: /SlipSystemAlumina.html + url: /ExSlipSystemAlumina.html + output: web + + - title: "Parent Grain Reconstruction" + url: /ExParentGrainReconstruction.html + output: web + folderitems: + + - title: "Parameter Optimization" + url: /ParameterOptimization.html output: web diff --git a/_data/sidebars/function_reference_sidebar.yml b/_data/sidebars/function_reference_sidebar.yml index 15f958e68..807dfae7d 100644 --- a/_data/sidebars/function_reference_sidebar.yml +++ b/_data/sidebars/function_reference_sidebar.yml @@ -99,6 +99,10 @@ entries: url: /vector3d.contourf.html output: web + - title: "convhull" + url: /vector3d.convhull.html + output: web + - title: "cross" url: /vector3d.cross.html output: web @@ -111,10 +115,6 @@ entries: url: /vector3d.ctranspose.html output: web - - title: "cumsum" - url: /vector3d.cumsum.html - output: web - - title: "det" url: /vector3d.det.html output: web @@ -163,10 +163,6 @@ entries: url: /vector3d.find.html output: web - - title: "fullDouble" - url: /vector3d.fullDouble.html - output: web - - title: "gridify" url: /vector3d.gridify.html output: web @@ -191,6 +187,10 @@ entries: url: /vector3d.isempty.html output: web + - title: "isscalar" + url: /vector3d.isscalar.html + output: web + - title: "length" url: /vector3d.length.html output: web @@ -199,6 +199,10 @@ entries: url: /vector3d.line.html output: web + - title: "lineIntersect" + url: /vector3d.lineIntersect.html + output: web + - title: "load" url: /vector3d.load.html output: web @@ -243,10 +247,6 @@ entries: url: /vector3d.nanmean.html output: web - - title: "nansum" - url: /vector3d.nansum.html - output: web - - title: "ndims" url: /vector3d.ndims.html output: web @@ -964,6 +964,10 @@ entries: url: /crystalShape.fitArea.html output: web + - title: "innerFace" + url: /crystalShape.innerFace.html + output: web + - title: "length" url: /crystalShape.length.html output: web @@ -976,6 +980,14 @@ entries: url: /crystalShape.plot.html output: web + - title: "plotInnerFace" + url: /crystalShape.plotInnerFace.html + output: web + + - title: "plotSlipSystem" + url: /crystalShape.plotSlipSystem.html + output: web + - title: "plus" url: /crystalShape.plus.html output: web @@ -1206,10 +1218,6 @@ entries: url: /orientation.byMiller.html output: web - - title: "byRodrigues" - url: /orientation.byRodrigues.html - output: web - - title: "calcAngleDistribution" url: /orientation.calcAngleDistribution.html output: web @@ -1246,6 +1254,10 @@ entries: url: /orientation.calcTensor.html output: web + - title: "calcVoronoi" + url: /orientation.calcVoronoi.html + output: web + - title: "char" url: /orientation.char.html output: web @@ -1463,6 +1475,10 @@ entries: url: /orientationRegion.orientationRegion.html output: web + - title: "angle" + url: /orientationRegion.angle.html + output: web + - title: "axisSector" url: /orientationRegion.axisSector.html output: web @@ -1746,6 +1762,10 @@ entries: url: /slipSystem.isempty.html output: web + - title: "isscalar" + url: /slipSystem.isscalar.html + output: web + - title: "length" url: /slipSystem.length.html output: web @@ -2012,6 +2032,10 @@ entries: url: /quaternion.isnan.html output: web + - title: "isscalar" + url: /quaternion.isscalar.html + output: web + - title: "itimes" url: /quaternion.itimes.html output: web @@ -2334,6 +2358,10 @@ entries: url: /S2Grid.times.html output: web + - title: "fibonacciS2Grid" + url: /fibonacciS2Grid.fibonacciS2Grid.html + output: web + - title: "S2Triangulation" url: /S2Triangulation_index.html output: web @@ -2570,10 +2598,6 @@ entries: url: /axis2quat_outer.html output: web - - title: "checkEulerAngleConvention" - url: /checkEulerAngleConvention.html - output: web - - title: "cubo2homo" url: /cubo2homo.html output: web @@ -2742,6 +2766,10 @@ entries: url: /EBSD.KAM.html output: web + - title: "affinetrans" + url: /EBSD.affinetrans.html + output: web + - title: "calcGROD" url: /EBSD.calcGROD.html output: web @@ -2818,6 +2846,18 @@ entries: url: /EBSD.findByOrientation.html output: web + - title: "fliplr" + url: /EBSD.fliplr.html + output: web + + - title: "flipud" + url: /EBSD.flipud.html + output: web + + - title: "getCPRInfo" + url: /EBSD.getCPRInfo.html + output: web + - title: "grainMean" url: /EBSD.grainMean.html output: web @@ -2882,6 +2922,10 @@ entries: url: /EBSD.rotate.html output: web + - title: "rotate_outer" + url: /EBSD.rotate_outer.html + output: web + - title: "selectInteractive" url: /EBSD.selectInteractive.html output: web @@ -3061,10 +3105,6 @@ entries: url: /grain2d.equivalentRadius.html output: web - - title: "fft" - url: /grain2d.fft.html - output: web - - title: "findByLocation" url: /grain2d.findByLocation.html output: web @@ -3169,10 +3209,6 @@ entries: url: /grain2d.rotate.html output: web - - title: "rotate2Plane" - url: /grain2d.rotate2Plane.html - output: web - - title: "selectInteractive" url: /grain2d.selectInteractive.html output: web @@ -3222,10 +3258,6 @@ entries: url: /grainBoundary.grainBoundary.html output: web - - title: "angle" - url: /grainBoundary.angle.html - output: web - - title: "calcGBPD" url: /grainBoundary.calcGBPD.html output: web @@ -3483,10 +3515,6 @@ entries: url: /ODF.load.html output: web - - title: "neuralgas" - url: /ODF.neuralgas.html - output: web - - title: "uniformComponent" url: /uniformComponent_index.html output: web @@ -3887,6 +3915,10 @@ entries: url: /tensor.inv.html output: web + - title: "isscalar" + url: /tensor.isscalar.html + output: web + - title: "length" url: /tensor.length.html output: web @@ -3907,18 +3939,10 @@ entries: url: /tensor.matrix.html output: web - - title: "max" - url: /tensor.max.html - output: web - - title: "mean" url: /tensor.mean.html output: web - - title: "min" - url: /tensor.min.html - output: web - - title: "minus" url: /tensor.minus.html output: web @@ -4003,6 +4027,10 @@ entries: url: /tensor.sqrtm.html output: web + - title: "subSet" + url: /tensor.subSet.html + output: web + - title: "subsasgn" url: /tensor.subsasgn.html output: web @@ -4121,6 +4149,10 @@ entries: url: /strainTensor.equivalentStrain.html output: web + - title: "norm" + url: /strainTensor.norm.html + output: web + - title: "octahedralStrain" url: /strainTensor.octahedralStrain.html output: web @@ -4470,6 +4502,10 @@ entries: url: /S2Fun.contourf.html output: web + - title: "conv" + url: /S2Fun.conv.html + output: web + - title: "discreteSample" url: /S2Fun.discreteSample.html output: web @@ -4582,6 +4618,10 @@ entries: url: /S2Fun.unimodal.html output: web + - title: "volume" + url: /S2Fun.volume.html + output: web + - title: "S2FunHandle" url: /S2FunHandle_index.html output: web @@ -4886,10 +4926,6 @@ entries: url: /S2FunHarmonic.vertcat.html output: web - - title: "volume" - url: /S2FunHarmonic.volume.html - output: web - - title: "S2FunHarmonicSym" url: /S2FunHarmonicSym_index.html output: web @@ -5269,10 +5305,6 @@ entries: url: /SO3Fun.calcComponents.html output: web - - title: "calcComponentsOld" - url: /SO3Fun.calcComponentsOld.html - output: web - - title: "calcError" url: /SO3Fun.calcError.html output: web @@ -5493,6 +5525,10 @@ entries: url: /SO3Fun.times.html output: web + - title: "transformReferenceFrame" + url: /SO3Fun.transformReferenceFrame.html + output: web + - title: "uminus" url: /SO3Fun.uminus.html output: web @@ -5501,6 +5537,14 @@ entries: url: /SO3Fun.volume.html output: web + - title: "SO3TangentSpace" + url: /SO3TangentSpace.html + output: web + + - title: "doEulerStep" + url: /doEulerStep.html + output: web + - title: "SO3FunHandle" url: /SO3FunHandle_index.html output: web @@ -5887,10 +5931,6 @@ entries: url: /SO3FunHarmonic.norm.html output: web - - title: "numel" - url: /SO3FunHarmonic.numel.html - output: web - - title: "plot" url: /SO3FunHarmonic.plot.html output: web @@ -5997,6 +6037,10 @@ entries: url: /SO3VectorField.abs.html output: web + - title: "antiderivative" + url: /SO3VectorField.antiderivative.html + output: web + - title: "conj" url: /SO3VectorField.conj.html output: web @@ -6307,6 +6351,10 @@ entries: url: /mtexFigure.mtexFigure.html output: web + - title: "CLim" + url: /mtexFigure.CLim.html + output: web + - title: "adjustFigurePosition" url: /mtexFigure.adjustFigurePosition.html output: web @@ -6344,10 +6392,6 @@ entries: url: /edistProjection.html output: web - - title: "full3dProjection" - url: /full3dProjection.html - output: web - - title: "gnonomicProjection" url: /gnonomicProjection.html output: web @@ -6686,6 +6730,10 @@ entries: url: /nextstyle.html output: web + - title: "num2rgb" + url: /num2rgb.html + output: web + - title: "optiondraw" url: /optiondraw.html output: web @@ -6929,10 +6977,6 @@ entries: url: /setappdata.html output: web - - title: "stripws" - url: /stripws.html - output: web - - title: "math" url: /math_tools_index.html output: web @@ -7046,10 +7090,6 @@ entries: url: /nadjacent.html output: web - - title: "nanmax" - url: /nanmax.html - output: web - - title: "nanmean" url: /nanmean.html output: web @@ -7062,18 +7102,10 @@ entries: url: /nanmedian.html output: web - - title: "nanmin" - url: /nanmin.html - output: web - - title: "nanplus" url: /nanplus.html output: web - - title: "nansum" - url: /nansum.html - output: web - - title: "rhoInside" url: /rhoInside.html output: web @@ -7396,6 +7428,10 @@ entries: url: /erode.html output: web + - title: "erode2" + url: /erode2.html + output: web + - title: "fillStr" url: /fillStr.html output: web @@ -7456,6 +7492,10 @@ entries: url: /newer_version.html output: web + - title: "out2" + url: /out2.html + output: web + - title: "pauseline" url: /pauseline.html output: web diff --git a/images/CrystalShapes.png b/images/CrystalShapes.png index 23204ebf2..8752aa8d1 100644 Binary files a/images/CrystalShapes.png and b/images/CrystalShapes.png differ diff --git a/images/CrystalShapes_01.png b/images/CrystalShapes_01.png index 3c1741e9f..c3d07c584 100644 Binary files a/images/CrystalShapes_01.png and b/images/CrystalShapes_01.png differ diff --git a/images/CrystalShapes_02.png b/images/CrystalShapes_02.png index 76e0890f3..88d389bdf 100644 Binary files a/images/CrystalShapes_02.png and b/images/CrystalShapes_02.png differ diff --git a/images/CrystalShapes_03.png b/images/CrystalShapes_03.png index 7eaa982e0..c26376862 100644 Binary files a/images/CrystalShapes_03.png and b/images/CrystalShapes_03.png differ diff --git a/images/CrystalShapes_04.png b/images/CrystalShapes_04.png index d444c5e03..eee82d836 100644 Binary files a/images/CrystalShapes_04.png and b/images/CrystalShapes_04.png differ diff --git a/images/CrystalShapes_05.png b/images/CrystalShapes_05.png index a29d54fb6..eeab3f358 100644 Binary files a/images/CrystalShapes_05.png and b/images/CrystalShapes_05.png differ diff --git a/images/CrystalShapes_06.png b/images/CrystalShapes_06.png index 2c130c6ff..caa4ed0ed 100644 Binary files a/images/CrystalShapes_06.png and b/images/CrystalShapes_06.png differ diff --git a/images/CrystalShapes_07.png b/images/CrystalShapes_07.png index 9d1219f7b..25ea49797 100644 Binary files a/images/CrystalShapes_07.png and b/images/CrystalShapes_07.png differ diff --git a/images/CrystalShapes_08.png b/images/CrystalShapes_08.png index 9cb5f1adb..3b026e2af 100644 Binary files a/images/CrystalShapes_08.png and b/images/CrystalShapes_08.png differ diff --git a/images/CrystalShapes_09.png b/images/CrystalShapes_09.png index 4856567ae..c1f09d296 100644 Binary files a/images/CrystalShapes_09.png and b/images/CrystalShapes_09.png differ diff --git a/images/CrystalShapes_10.png b/images/CrystalShapes_10.png index 2e05e8b1c..acc45eb37 100644 Binary files a/images/CrystalShapes_10.png and b/images/CrystalShapes_10.png differ diff --git a/images/CrystalShapes_11.png b/images/CrystalShapes_11.png index 40ba3ea98..bb73ce97b 100644 Binary files a/images/CrystalShapes_11.png and b/images/CrystalShapes_11.png differ diff --git a/images/CrystalShapes_12.png b/images/CrystalShapes_12.png index 4144dc4d8..f510abaee 100644 Binary files a/images/CrystalShapes_12.png and b/images/CrystalShapes_12.png differ diff --git a/images/CrystalShapes_13.png b/images/CrystalShapes_13.png index da7802a2b..4ae0ac559 100644 Binary files a/images/CrystalShapes_13.png and b/images/CrystalShapes_13.png differ diff --git a/images/CrystalShapes_14.png b/images/CrystalShapes_14.png index 092a9ad2c..58bda39a5 100644 Binary files a/images/CrystalShapes_14.png and b/images/CrystalShapes_14.png differ diff --git a/images/CrystalShapes_15.png b/images/CrystalShapes_15.png index 87398e251..b899dd6cc 100644 Binary files a/images/CrystalShapes_15.png and b/images/CrystalShapes_15.png differ diff --git a/images/CrystalShapes_16.png b/images/CrystalShapes_16.png index 236d50d9f..82b1e5335 100644 Binary files a/images/CrystalShapes_16.png and b/images/CrystalShapes_16.png differ diff --git a/images/CrystalShapes_17.png b/images/CrystalShapes_17.png index badb04fba..5291de14e 100644 Binary files a/images/CrystalShapes_17.png and b/images/CrystalShapes_17.png differ diff --git a/images/CrystalShapes_18.png b/images/CrystalShapes_18.png index 062b30572..267d8cac6 100644 Binary files a/images/CrystalShapes_18.png and b/images/CrystalShapes_18.png differ diff --git a/images/CrystalShapes_19.png b/images/CrystalShapes_19.png index 42f1a4843..05fe487ae 100644 Binary files a/images/CrystalShapes_19.png and b/images/CrystalShapes_19.png differ diff --git a/images/CrystalShapes_20.png b/images/CrystalShapes_20.png index ef708a721..c3e5d76a0 100644 Binary files a/images/CrystalShapes_20.png and b/images/CrystalShapes_20.png differ diff --git a/images/CrystalShapes_21.png b/images/CrystalShapes_21.png index af4f1eefd..1539347cb 100644 Binary files a/images/CrystalShapes_21.png and b/images/CrystalShapes_21.png differ diff --git a/images/CrystalShapes_22.png b/images/CrystalShapes_22.png index 57729dd9f..a77ff1360 100644 Binary files a/images/CrystalShapes_22.png and b/images/CrystalShapes_22.png differ diff --git a/images/CrystalShapes_23.png b/images/CrystalShapes_23.png index 7d3a9811c..e886c1c7a 100644 Binary files a/images/CrystalShapes_23.png and b/images/CrystalShapes_23.png differ diff --git a/images/CrystalShapes_24.png b/images/CrystalShapes_24.png new file mode 100644 index 000000000..ca76f877d Binary files /dev/null and b/images/CrystalShapes_24.png differ diff --git a/images/EBSDGrid_01.png b/images/EBSDGrid_01.png index 921edb38e..3feda6dea 100644 Binary files a/images/EBSDGrid_01.png and b/images/EBSDGrid_01.png differ diff --git a/images/EBSDGrid_02.png b/images/EBSDGrid_02.png index d564cc4f5..7867956e0 100644 Binary files a/images/EBSDGrid_02.png and b/images/EBSDGrid_02.png differ diff --git a/images/EBSDGrid_03.png b/images/EBSDGrid_03.png index 9420db728..c036167b8 100644 Binary files a/images/EBSDGrid_03.png and b/images/EBSDGrid_03.png differ diff --git a/images/EBSDGrid_04.png b/images/EBSDGrid_04.png index 9f73c4345..a50009fb8 100644 Binary files a/images/EBSDGrid_04.png and b/images/EBSDGrid_04.png differ diff --git a/images/EBSDGrid_05.png b/images/EBSDGrid_05.png index 8996c9ae9..bc4dd4390 100644 Binary files a/images/EBSDGrid_05.png and b/images/EBSDGrid_05.png differ diff --git a/images/EBSDGrid_06.png b/images/EBSDGrid_06.png index 7843da82e..0e9bde633 100644 Binary files a/images/EBSDGrid_06.png and b/images/EBSDGrid_06.png differ diff --git a/images/EBSDGrid_07.png b/images/EBSDGrid_07.png index f1f4aa07b..41a8c83b0 100644 Binary files a/images/EBSDGrid_07.png and b/images/EBSDGrid_07.png differ diff --git a/images/EBSDGrid_08.png b/images/EBSDGrid_08.png index f6f92b395..dec71cecf 100644 Binary files a/images/EBSDGrid_08.png and b/images/EBSDGrid_08.png differ diff --git a/images/EBSDGrid_09.png b/images/EBSDGrid_09.png index 1c8a3381a..0e67e8fb3 100644 Binary files a/images/EBSDGrid_09.png and b/images/EBSDGrid_09.png differ diff --git a/images/EBSDGrid_10.png b/images/EBSDGrid_10.png index 0204cf7ec..5163cbc31 100644 Binary files a/images/EBSDGrid_10.png and b/images/EBSDGrid_10.png differ diff --git a/images/EBSDGrid_11.png b/images/EBSDGrid_11.png index fccf8eb06..a4fcbdfdb 100644 Binary files a/images/EBSDGrid_11.png and b/images/EBSDGrid_11.png differ diff --git a/images/EBSDGrid_12.png b/images/EBSDGrid_12.png index 24643c92c..2b9864d92 100644 Binary files a/images/EBSDGrid_12.png and b/images/EBSDGrid_12.png differ diff --git a/images/ExIceSphericity.png b/images/ExIceSphericity.png new file mode 100644 index 000000000..94f403e05 Binary files /dev/null and b/images/ExIceSphericity.png differ diff --git a/images/ExIceSphericity_01.png b/images/ExIceSphericity_01.png new file mode 100644 index 000000000..3c4bd481d Binary files /dev/null and b/images/ExIceSphericity_01.png differ diff --git a/images/ExIceSphericity_02.png b/images/ExIceSphericity_02.png new file mode 100644 index 000000000..4782f9aad Binary files /dev/null and b/images/ExIceSphericity_02.png differ diff --git a/images/ExIceSphericity_03.png b/images/ExIceSphericity_03.png new file mode 100644 index 000000000..2452747e7 Binary files /dev/null and b/images/ExIceSphericity_03.png differ diff --git a/images/ExIceSphericity_04.png b/images/ExIceSphericity_04.png new file mode 100644 index 000000000..accc5b907 Binary files /dev/null and b/images/ExIceSphericity_04.png differ diff --git a/images/ExIceSphericity_05.png b/images/ExIceSphericity_05.png new file mode 100644 index 000000000..f5bd980f4 Binary files /dev/null and b/images/ExIceSphericity_05.png differ diff --git a/images/ExIceSphericity_06.png b/images/ExIceSphericity_06.png new file mode 100644 index 000000000..389a6b2a7 Binary files /dev/null and b/images/ExIceSphericity_06.png differ diff --git a/images/ExSeismicPlots.png b/images/ExSeismicPlots.png new file mode 100644 index 000000000..d728370ff Binary files /dev/null and b/images/ExSeismicPlots.png differ diff --git a/images/ExSeismicPlots_01.png b/images/ExSeismicPlots_01.png new file mode 100644 index 000000000..03c3ea5be Binary files /dev/null and b/images/ExSeismicPlots_01.png differ diff --git a/images/ExSeismicPlots_02.png b/images/ExSeismicPlots_02.png new file mode 100644 index 000000000..b9846bb33 Binary files /dev/null and b/images/ExSeismicPlots_02.png differ diff --git a/images/ExSeismicPlots_03.png b/images/ExSeismicPlots_03.png new file mode 100644 index 000000000..6e11bab05 Binary files /dev/null and b/images/ExSeismicPlots_03.png differ diff --git a/images/ExSeismicPlots_04.png b/images/ExSeismicPlots_04.png new file mode 100644 index 000000000..5013c5ac5 Binary files /dev/null and b/images/ExSeismicPlots_04.png differ diff --git a/images/ExSeismicPlots_05.png b/images/ExSeismicPlots_05.png new file mode 100644 index 000000000..b950761bf Binary files /dev/null and b/images/ExSeismicPlots_05.png differ diff --git a/images/ExSeismicPlots_06.png b/images/ExSeismicPlots_06.png new file mode 100644 index 000000000..4aa46e1d5 Binary files /dev/null and b/images/ExSeismicPlots_06.png differ diff --git a/images/ExSeismicPlots_07.png b/images/ExSeismicPlots_07.png new file mode 100644 index 000000000..311e8a11e Binary files /dev/null and b/images/ExSeismicPlots_07.png differ diff --git a/images/ExSeismicPlots_08.png b/images/ExSeismicPlots_08.png new file mode 100644 index 000000000..d0bb2c007 Binary files /dev/null and b/images/ExSeismicPlots_08.png differ diff --git a/images/ExSeismicPlots_09.png b/images/ExSeismicPlots_09.png new file mode 100644 index 000000000..eaf8a8527 Binary files /dev/null and b/images/ExSeismicPlots_09.png differ diff --git a/images/ExSeismicPlots_10.png b/images/ExSeismicPlots_10.png new file mode 100644 index 000000000..aa038b2e3 Binary files /dev/null and b/images/ExSeismicPlots_10.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d.png b/images/ExSeismicVelocitySingleCrystalDemo2d.png new file mode 100644 index 000000000..df915baad Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d_01.png b/images/ExSeismicVelocitySingleCrystalDemo2d_01.png new file mode 100644 index 000000000..937e15cf4 Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d_01.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d_02.png b/images/ExSeismicVelocitySingleCrystalDemo2d_02.png new file mode 100644 index 000000000..a6eb6ede4 Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d_02.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d_03.png b/images/ExSeismicVelocitySingleCrystalDemo2d_03.png new file mode 100644 index 000000000..13e48beff Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d_03.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d_04.png b/images/ExSeismicVelocitySingleCrystalDemo2d_04.png new file mode 100644 index 000000000..3962ab330 Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d_04.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d_05.png b/images/ExSeismicVelocitySingleCrystalDemo2d_05.png new file mode 100644 index 000000000..7abb9a1d9 Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d_05.png differ diff --git a/images/ExSeismicVelocitySingleCrystalDemo2d_06.png b/images/ExSeismicVelocitySingleCrystalDemo2d_06.png new file mode 100644 index 000000000..cd8639de4 Binary files /dev/null and b/images/ExSeismicVelocitySingleCrystalDemo2d_06.png differ diff --git a/images/ExSlipSystemAlumina.png b/images/ExSlipSystemAlumina.png new file mode 100644 index 000000000..b37932afb Binary files /dev/null and b/images/ExSlipSystemAlumina.png differ diff --git a/images/ExSlipSystemAlumina_01.png b/images/ExSlipSystemAlumina_01.png new file mode 100644 index 000000000..9eba02a30 Binary files /dev/null and b/images/ExSlipSystemAlumina_01.png differ diff --git a/images/ExSlipSystemAlumina_02.png b/images/ExSlipSystemAlumina_02.png new file mode 100644 index 000000000..c6592877b Binary files /dev/null and b/images/ExSlipSystemAlumina_02.png differ diff --git a/images/ExSlipSystemAlumina_03.png b/images/ExSlipSystemAlumina_03.png new file mode 100644 index 000000000..aa3020d99 Binary files /dev/null and b/images/ExSlipSystemAlumina_03.png differ diff --git a/images/ExSlipSystemAlumina_04.png b/images/ExSlipSystemAlumina_04.png new file mode 100644 index 000000000..b07832ec6 Binary files /dev/null and b/images/ExSlipSystemAlumina_04.png differ diff --git a/images/ExSlipSystemAlumina_05.png b/images/ExSlipSystemAlumina_05.png new file mode 100644 index 000000000..71c866694 Binary files /dev/null and b/images/ExSlipSystemAlumina_05.png differ diff --git a/images/GrainMerge_05.png b/images/GrainMerge_05.png index 8f6601674..ba8492d03 100644 Binary files a/images/GrainMerge_05.png and b/images/GrainMerge_05.png differ diff --git a/images/GrainMerge_06.png b/images/GrainMerge_06.png index 00619717c..1d1830581 100644 Binary files a/images/GrainMerge_06.png and b/images/GrainMerge_06.png differ diff --git a/images/GrainReconstruction.png b/images/GrainReconstruction.png index 0e06eb526..224af6a9d 100644 Binary files a/images/GrainReconstruction.png and b/images/GrainReconstruction.png differ diff --git a/images/GrainReconstructionOld.png b/images/GrainReconstructionOld.png new file mode 100644 index 000000000..70499b6b2 Binary files /dev/null and b/images/GrainReconstructionOld.png differ diff --git a/images/GrainReconstructionOld_01.png b/images/GrainReconstructionOld_01.png new file mode 100644 index 000000000..3e8e52f69 Binary files /dev/null and b/images/GrainReconstructionOld_01.png differ diff --git a/images/GrainReconstructionOld_02.png b/images/GrainReconstructionOld_02.png new file mode 100644 index 000000000..8ae5cdbb2 Binary files /dev/null and b/images/GrainReconstructionOld_02.png differ diff --git a/images/GrainReconstructionOld_03.png b/images/GrainReconstructionOld_03.png new file mode 100644 index 000000000..91dcf6dba Binary files /dev/null and b/images/GrainReconstructionOld_03.png differ diff --git a/images/GrainReconstructionOld_04.png b/images/GrainReconstructionOld_04.png new file mode 100644 index 000000000..1882ddaff Binary files /dev/null and b/images/GrainReconstructionOld_04.png differ diff --git a/images/GrainReconstructionOld_05.png b/images/GrainReconstructionOld_05.png new file mode 100644 index 000000000..14dce7928 Binary files /dev/null and b/images/GrainReconstructionOld_05.png differ diff --git a/images/GrainReconstructionOld_06.png b/images/GrainReconstructionOld_06.png new file mode 100644 index 000000000..f6a2cce22 Binary files /dev/null and b/images/GrainReconstructionOld_06.png differ diff --git a/images/GrainReconstructionOld_07.png b/images/GrainReconstructionOld_07.png new file mode 100644 index 000000000..af7caa45a Binary files /dev/null and b/images/GrainReconstructionOld_07.png differ diff --git a/images/GrainReconstructionOld_08.png b/images/GrainReconstructionOld_08.png new file mode 100644 index 000000000..2d6102c7c Binary files /dev/null and b/images/GrainReconstructionOld_08.png differ diff --git a/images/GrainReconstructionOld_09.png b/images/GrainReconstructionOld_09.png new file mode 100644 index 000000000..1b2a961a7 Binary files /dev/null and b/images/GrainReconstructionOld_09.png differ diff --git a/images/GrainReconstruction_01.png b/images/GrainReconstruction_01.png index 1b3633665..1b146e887 100644 Binary files a/images/GrainReconstruction_01.png and b/images/GrainReconstruction_01.png differ diff --git a/images/GrainReconstruction_02.png b/images/GrainReconstruction_02.png index 4d54c97c6..c5d33f163 100644 Binary files a/images/GrainReconstruction_02.png and b/images/GrainReconstruction_02.png differ diff --git a/images/GrainReconstruction_03.png b/images/GrainReconstruction_03.png index 5bd272960..249334ba0 100644 Binary files a/images/GrainReconstruction_03.png and b/images/GrainReconstruction_03.png differ diff --git a/images/GrainReconstruction_04.png b/images/GrainReconstruction_04.png index d590f6268..989094d9f 100644 Binary files a/images/GrainReconstruction_04.png and b/images/GrainReconstruction_04.png differ diff --git a/images/GrainReconstruction_05.png b/images/GrainReconstruction_05.png index ef932826a..983b58fab 100644 Binary files a/images/GrainReconstruction_05.png and b/images/GrainReconstruction_05.png differ diff --git a/images/Grain_dispersion_axes_06.png b/images/Grain_dispersion_axes_06.png index c2527d23f..39cdda7d8 100644 Binary files a/images/Grain_dispersion_axes_06.png and b/images/Grain_dispersion_axes_06.png differ diff --git a/images/IceSphericity_01.png b/images/IceSphericity_01.png index cb59f17b0..37c624860 100644 Binary files a/images/IceSphericity_01.png and b/images/IceSphericity_01.png differ diff --git a/images/IceSphericity_02.png b/images/IceSphericity_02.png index 071166199..86bc33b85 100644 Binary files a/images/IceSphericity_02.png and b/images/IceSphericity_02.png differ diff --git a/images/Lankford.png b/images/Lankford.png new file mode 100644 index 000000000..ae9c28784 Binary files /dev/null and b/images/Lankford.png differ diff --git a/images/Lankford_01.png b/images/Lankford_01.png new file mode 100644 index 000000000..08596d5b6 Binary files /dev/null and b/images/Lankford_01.png differ diff --git a/images/Lankford_02.png b/images/Lankford_02.png new file mode 100644 index 000000000..7d62344d2 Binary files /dev/null and b/images/Lankford_02.png differ diff --git a/images/Lankford_03.png b/images/Lankford_03.png new file mode 100644 index 000000000..ddb1e0324 Binary files /dev/null and b/images/Lankford_03.png differ diff --git a/images/Lankford_04.png b/images/Lankford_04.png new file mode 100644 index 000000000..42d94bbaf Binary files /dev/null and b/images/Lankford_04.png differ diff --git a/images/Lankford_05.png b/images/Lankford_05.png new file mode 100644 index 000000000..cfa967524 Binary files /dev/null and b/images/Lankford_05.png differ diff --git a/images/MagneticAnisotropy.png b/images/MagneticAnisotropy.png index c0d09ab58..a544831e2 100644 Binary files a/images/MagneticAnisotropy.png and b/images/MagneticAnisotropy.png differ diff --git a/images/MagneticAnisotropy_01.png b/images/MagneticAnisotropy_01.png index 2b37e30a2..972589749 100644 Binary files a/images/MagneticAnisotropy_01.png and b/images/MagneticAnisotropy_01.png differ diff --git a/images/MagneticAnisotropy_02.png b/images/MagneticAnisotropy_02.png index 2e16b23c7..575e6e536 100644 Binary files a/images/MagneticAnisotropy_02.png and b/images/MagneticAnisotropy_02.png differ diff --git a/images/NeperInterface.png b/images/NeperInterface.png index f4e7ab4e3..c79f13949 100644 Binary files a/images/NeperInterface.png and b/images/NeperInterface.png differ diff --git a/images/NeperInterface_01.png b/images/NeperInterface_01.png index 742572042..19e0f5d0b 100644 Binary files a/images/NeperInterface_01.png and b/images/NeperInterface_01.png differ diff --git a/images/ODFComponents.png b/images/ODFComponents.png index 371550f1e..768349b75 100644 Binary files a/images/ODFComponents.png and b/images/ODFComponents.png differ diff --git a/images/ODFComponents_01.png b/images/ODFComponents_01.png index 9675312b2..087de8720 100644 Binary files a/images/ODFComponents_01.png and b/images/ODFComponents_01.png differ diff --git a/images/ODFComponents_02.png b/images/ODFComponents_02.png index 283867a46..e3119339d 100644 Binary files a/images/ODFComponents_02.png and b/images/ODFComponents_02.png differ diff --git a/images/ODFComponents_03.png b/images/ODFComponents_03.png index 983494c32..7c65e1ee8 100644 Binary files a/images/ODFComponents_03.png and b/images/ODFComponents_03.png differ diff --git a/images/ODFComponents_04.png b/images/ODFComponents_04.png index 735263d7d..616832ddf 100644 Binary files a/images/ODFComponents_04.png and b/images/ODFComponents_04.png differ diff --git a/images/ODFExport.png b/images/ODFExport.png index 3ab030e5d..f2a1d98b8 100644 Binary files a/images/ODFExport.png and b/images/ODFExport.png differ diff --git a/images/ODFExport_01.png b/images/ODFExport_01.png index 7f33dea48..4797f538b 100644 Binary files a/images/ODFExport_01.png and b/images/ODFExport_01.png differ diff --git a/images/ODFExport_02.png b/images/ODFExport_02.png new file mode 100644 index 000000000..d17a80c58 Binary files /dev/null and b/images/ODFExport_02.png differ diff --git a/images/ODFExport_03.png b/images/ODFExport_03.png new file mode 100644 index 000000000..ee53b04a9 Binary files /dev/null and b/images/ODFExport_03.png differ diff --git a/images/OptimalKernel.png b/images/OptimalKernel.png index ee0902566..ffff7953d 100644 Binary files a/images/OptimalKernel.png and b/images/OptimalKernel.png differ diff --git a/images/OptimalKernel_01.png b/images/OptimalKernel_01.png index 04f373c79..7f3d6cd66 100644 Binary files a/images/OptimalKernel_01.png and b/images/OptimalKernel_01.png differ diff --git a/images/OptimalKernel_02.png b/images/OptimalKernel_02.png index a480d56af..c1ab379cc 100644 Binary files a/images/OptimalKernel_02.png and b/images/OptimalKernel_02.png differ diff --git a/images/OptimalKernel_03.png b/images/OptimalKernel_03.png index c9e075936..6786bccf3 100644 Binary files a/images/OptimalKernel_03.png and b/images/OptimalKernel_03.png differ diff --git a/images/OptimalKernel_04.png b/images/OptimalKernel_04.png new file mode 100644 index 000000000..88cfc6630 Binary files /dev/null and b/images/OptimalKernel_04.png differ diff --git a/images/OrientationStandard_01.png b/images/OrientationStandard_01.png index f33f161f6..49d685598 100644 Binary files a/images/OrientationStandard_01.png and b/images/OrientationStandard_01.png differ diff --git a/images/ParameterOptimization.png b/images/ParameterOptimization.png new file mode 100644 index 000000000..a4adfd728 Binary files /dev/null and b/images/ParameterOptimization.png differ diff --git a/images/ParameterOptimization_01.png b/images/ParameterOptimization_01.png new file mode 100644 index 000000000..26e3b30c4 Binary files /dev/null and b/images/ParameterOptimization_01.png differ diff --git a/images/ParameterOptimization_02.png b/images/ParameterOptimization_02.png new file mode 100644 index 000000000..9630cd4ee Binary files /dev/null and b/images/ParameterOptimization_02.png differ diff --git a/images/ParameterOptimization_03.png b/images/ParameterOptimization_03.png new file mode 100644 index 000000000..6e13d7721 Binary files /dev/null and b/images/ParameterOptimization_03.png differ diff --git a/images/ParameterOptimization_04.png b/images/ParameterOptimization_04.png new file mode 100644 index 000000000..790cb9c69 Binary files /dev/null and b/images/ParameterOptimization_04.png differ diff --git a/images/ParameterOptimization_05.png b/images/ParameterOptimization_05.png new file mode 100644 index 000000000..4a7318ac5 Binary files /dev/null and b/images/ParameterOptimization_05.png differ diff --git a/images/ParameterOptimization_06.png b/images/ParameterOptimization_06.png new file mode 100644 index 000000000..27577ff3d Binary files /dev/null and b/images/ParameterOptimization_06.png differ diff --git a/images/ParameterOptimization_07.png b/images/ParameterOptimization_07.png new file mode 100644 index 000000000..3ecaf54b7 Binary files /dev/null and b/images/ParameterOptimization_07.png differ diff --git a/images/ParameterOptimization_08.png b/images/ParameterOptimization_08.png new file mode 100644 index 000000000..4171b9085 Binary files /dev/null and b/images/ParameterOptimization_08.png differ diff --git a/images/ParameterOptimization_09.png b/images/ParameterOptimization_09.png new file mode 100644 index 000000000..24d0a16b6 Binary files /dev/null and b/images/ParameterOptimization_09.png differ diff --git a/images/ParameterOptimization_10.png b/images/ParameterOptimization_10.png new file mode 100644 index 000000000..8ffce4e6d Binary files /dev/null and b/images/ParameterOptimization_10.png differ diff --git a/images/ParameterOptimization_11.png b/images/ParameterOptimization_11.png new file mode 100644 index 000000000..0554fdbfa Binary files /dev/null and b/images/ParameterOptimization_11.png differ diff --git a/images/ParameterOptimization_12.png b/images/ParameterOptimization_12.png new file mode 100644 index 000000000..3fb45a34f Binary files /dev/null and b/images/ParameterOptimization_12.png differ diff --git a/images/ParameterOptimization_13.png b/images/ParameterOptimization_13.png new file mode 100644 index 000000000..52fc96043 Binary files /dev/null and b/images/ParameterOptimization_13.png differ diff --git a/images/ParameterOptimization_14.png b/images/ParameterOptimization_14.png new file mode 100644 index 000000000..d5b3986f0 Binary files /dev/null and b/images/ParameterOptimization_14.png differ diff --git a/images/ParameterOptimization_15.png b/images/ParameterOptimization_15.png new file mode 100644 index 000000000..c41cd5ec0 Binary files /dev/null and b/images/ParameterOptimization_15.png differ diff --git a/images/ParameterOptimization_16.png b/images/ParameterOptimization_16.png new file mode 100644 index 000000000..a40516288 Binary files /dev/null and b/images/ParameterOptimization_16.png differ diff --git a/images/ParameterOptimization_17.png b/images/ParameterOptimization_17.png new file mode 100644 index 000000000..9d201b54e Binary files /dev/null and b/images/ParameterOptimization_17.png differ diff --git a/images/PoleFigure2ODFAmbiguity.png b/images/PoleFigure2ODFAmbiguity.png index b2c4625b4..ea6371315 100644 Binary files a/images/PoleFigure2ODFAmbiguity.png and b/images/PoleFigure2ODFAmbiguity.png differ diff --git a/images/PoleFigure2ODFAmbiguity_01.png b/images/PoleFigure2ODFAmbiguity_01.png index b424ac12f..553ac1511 100644 Binary files a/images/PoleFigure2ODFAmbiguity_01.png and b/images/PoleFigure2ODFAmbiguity_01.png differ diff --git a/images/PoleFigure2ODFAmbiguity_02.png b/images/PoleFigure2ODFAmbiguity_02.png index f750deeb2..25f5331e5 100644 Binary files a/images/PoleFigure2ODFAmbiguity_02.png and b/images/PoleFigure2ODFAmbiguity_02.png differ diff --git a/images/PoleFigure2ODFAmbiguity_03.png b/images/PoleFigure2ODFAmbiguity_03.png index cc57d15a7..e51d97ad8 100644 Binary files a/images/PoleFigure2ODFAmbiguity_03.png and b/images/PoleFigure2ODFAmbiguity_03.png differ diff --git a/images/PoleFigure2ODFAmbiguity_04.png b/images/PoleFigure2ODFAmbiguity_04.png index 2af4c386e..5c0c72512 100644 Binary files a/images/PoleFigure2ODFAmbiguity_04.png and b/images/PoleFigure2ODFAmbiguity_04.png differ diff --git a/images/PoleFigure2ODFAmbiguity_05.png b/images/PoleFigure2ODFAmbiguity_05.png index 42d638935..60d7c287a 100644 Binary files a/images/PoleFigure2ODFAmbiguity_05.png and b/images/PoleFigure2ODFAmbiguity_05.png differ diff --git a/images/PoleFigure2ODFAmbiguity_06.png b/images/PoleFigure2ODFAmbiguity_06.png index 663a20707..73c7ff8c4 100644 Binary files a/images/PoleFigure2ODFAmbiguity_06.png and b/images/PoleFigure2ODFAmbiguity_06.png differ diff --git a/images/PoleFigure2ODFAmbiguity_07.png b/images/PoleFigure2ODFAmbiguity_07.png index 4d721beeb..0d43193fd 100644 Binary files a/images/PoleFigure2ODFAmbiguity_07.png and b/images/PoleFigure2ODFAmbiguity_07.png differ diff --git a/images/PoleFigure2ODFAmbiguity_08.png b/images/PoleFigure2ODFAmbiguity_08.png index 253ba4c32..354314ba3 100644 Binary files a/images/PoleFigure2ODFAmbiguity_08.png and b/images/PoleFigure2ODFAmbiguity_08.png differ diff --git a/images/PoleFigure2ODFAmbiguity_09.png b/images/PoleFigure2ODFAmbiguity_09.png index 919bfbc49..183e7b486 100644 Binary files a/images/PoleFigure2ODFAmbiguity_09.png and b/images/PoleFigure2ODFAmbiguity_09.png differ diff --git a/images/PoleFigure2ODFAmbiguity_10.png b/images/PoleFigure2ODFAmbiguity_10.png index c7e4194f1..d20d7a3b5 100644 Binary files a/images/PoleFigure2ODFAmbiguity_10.png and b/images/PoleFigure2ODFAmbiguity_10.png differ diff --git a/images/PoleFigure2ODFAmbiguity_11.png b/images/PoleFigure2ODFAmbiguity_11.png index 237f5aa17..adf3a92e0 100644 Binary files a/images/PoleFigure2ODFAmbiguity_11.png and b/images/PoleFigure2ODFAmbiguity_11.png differ diff --git a/images/PoleFigure2ODFAmbiguity_12.png b/images/PoleFigure2ODFAmbiguity_12.png index 0e8f02146..486e23cec 100644 Binary files a/images/PoleFigure2ODFAmbiguity_12.png and b/images/PoleFigure2ODFAmbiguity_12.png differ diff --git a/images/PoleFigure2ODFAmbiguity_13.png b/images/PoleFigure2ODFAmbiguity_13.png index 795ae3462..4ff640141 100644 Binary files a/images/PoleFigure2ODFAmbiguity_13.png and b/images/PoleFigure2ODFAmbiguity_13.png differ diff --git a/images/PoleFigure2ODFAmbiguity_14.png b/images/PoleFigure2ODFAmbiguity_14.png index ca880eed8..eaff46672 100644 Binary files a/images/PoleFigure2ODFAmbiguity_14.png and b/images/PoleFigure2ODFAmbiguity_14.png differ diff --git a/images/PoleFigure2ODFAmbiguity_15.png b/images/PoleFigure2ODFAmbiguity_15.png index ec341a105..7f432139c 100644 Binary files a/images/PoleFigure2ODFAmbiguity_15.png and b/images/PoleFigure2ODFAmbiguity_15.png differ diff --git a/images/PoleFigure2ODFAmbiguity_16.png b/images/PoleFigure2ODFAmbiguity_16.png index 909e27714..8bc6e69eb 100644 Binary files a/images/PoleFigure2ODFAmbiguity_16.png and b/images/PoleFigure2ODFAmbiguity_16.png differ diff --git a/images/PoleFigure2ODFAmbiguity_17.png b/images/PoleFigure2ODFAmbiguity_17.png index 79c196ad3..57113c568 100644 Binary files a/images/PoleFigure2ODFAmbiguity_17.png and b/images/PoleFigure2ODFAmbiguity_17.png differ diff --git a/images/PoleFigure2ODFAmbiguity_18.png b/images/PoleFigure2ODFAmbiguity_18.png index d9a5357f6..5ce9c6a0b 100644 Binary files a/images/PoleFigure2ODFAmbiguity_18.png and b/images/PoleFigure2ODFAmbiguity_18.png differ diff --git a/images/PoleFigure2ODFAmbiguity_19.png b/images/PoleFigure2ODFAmbiguity_19.png index ca7f4c04e..1a52e2d5f 100644 Binary files a/images/PoleFigure2ODFAmbiguity_19.png and b/images/PoleFigure2ODFAmbiguity_19.png differ diff --git a/images/PoleFigure2ODFAmbiguity_20.png b/images/PoleFigure2ODFAmbiguity_20.png index 33b6a0c3c..156587011 100644 Binary files a/images/PoleFigure2ODFAmbiguity_20.png and b/images/PoleFigure2ODFAmbiguity_20.png differ diff --git a/images/PoleFigure2ODFAmbiguity_21.png b/images/PoleFigure2ODFAmbiguity_21.png index 9b3ddbaea..dd99af97b 100644 Binary files a/images/PoleFigure2ODFAmbiguity_21.png and b/images/PoleFigure2ODFAmbiguity_21.png differ diff --git a/images/PoleFigure2ODFAmbiguity_22.png b/images/PoleFigure2ODFAmbiguity_22.png index 02d8466b5..2b2be0332 100644 Binary files a/images/PoleFigure2ODFAmbiguity_22.png and b/images/PoleFigure2ODFAmbiguity_22.png differ diff --git a/images/PoleFigure2ODFAmbiguity_23.png b/images/PoleFigure2ODFAmbiguity_23.png index 81d3a7f75..63630d6f3 100644 Binary files a/images/PoleFigure2ODFAmbiguity_23.png and b/images/PoleFigure2ODFAmbiguity_23.png differ diff --git a/images/PoleFigure2ODFAmbiguity_24.png b/images/PoleFigure2ODFAmbiguity_24.png index 5ccee79ae..6f7fbc840 100644 Binary files a/images/PoleFigure2ODFAmbiguity_24.png and b/images/PoleFigure2ODFAmbiguity_24.png differ diff --git a/images/PoleFigure2ODFAmbiguity_25.png b/images/PoleFigure2ODFAmbiguity_25.png index 9b5b48524..48d3a5785 100644 Binary files a/images/PoleFigure2ODFAmbiguity_25.png and b/images/PoleFigure2ODFAmbiguity_25.png differ diff --git a/images/PoleFigure2ODFAmbiguity_26.png b/images/PoleFigure2ODFAmbiguity_26.png index 115ebe86b..6fcd325cd 100644 Binary files a/images/PoleFigure2ODFAmbiguity_26.png and b/images/PoleFigure2ODFAmbiguity_26.png differ diff --git a/images/PoleFigure2ODFAmbiguity_27.png b/images/PoleFigure2ODFAmbiguity_27.png index 03f5e7aea..d0a858dad 100644 Binary files a/images/PoleFigure2ODFAmbiguity_27.png and b/images/PoleFigure2ODFAmbiguity_27.png differ diff --git a/images/PoleFigure2ODFAmbiguity_28.png b/images/PoleFigure2ODFAmbiguity_28.png index 5deb19ca8..641d71a7a 100644 Binary files a/images/PoleFigure2ODFAmbiguity_28.png and b/images/PoleFigure2ODFAmbiguity_28.png differ diff --git a/images/PoleFigure2ODFAmbiguity_29.png b/images/PoleFigure2ODFAmbiguity_29.png index b3d11c8fb..ea1e41976 100644 Binary files a/images/PoleFigure2ODFAmbiguity_29.png and b/images/PoleFigure2ODFAmbiguity_29.png differ diff --git a/images/S1FunHarmonics.png b/images/S1FunHarmonics.png new file mode 100644 index 000000000..10ba009fc Binary files /dev/null and b/images/S1FunHarmonics.png differ diff --git a/images/S1FunHarmonics_01.png b/images/S1FunHarmonics_01.png new file mode 100644 index 000000000..841ad6593 Binary files /dev/null and b/images/S1FunHarmonics_01.png differ diff --git a/images/S1FunHarmonics_02.png b/images/S1FunHarmonics_02.png new file mode 100644 index 000000000..5e230425d Binary files /dev/null and b/images/S1FunHarmonics_02.png differ diff --git a/images/S2Kernels_01.png b/images/S2Kernels_01.png index 275c8c022..53daf74ab 100644 Binary files a/images/S2Kernels_01.png and b/images/S2Kernels_01.png differ diff --git a/images/S2Kernels_03.png b/images/S2Kernels_03.png index b774615bc..f9079897d 100644 Binary files a/images/S2Kernels_03.png and b/images/S2Kernels_03.png differ diff --git a/images/S2Kernels_07.png b/images/S2Kernels_07.png index 329bb7798..cfebe017b 100644 Binary files a/images/S2Kernels_07.png and b/images/S2Kernels_07.png differ diff --git a/images/SO3FunApproximationInterpolation.png b/images/SO3FunApproximationInterpolation.png index 27ce73887..a129b2407 100644 Binary files a/images/SO3FunApproximationInterpolation.png and b/images/SO3FunApproximationInterpolation.png differ diff --git a/images/SO3FunApproximationInterpolation_01.png b/images/SO3FunApproximationInterpolation_01.png index 7665c8247..787da4955 100644 Binary files a/images/SO3FunApproximationInterpolation_01.png and b/images/SO3FunApproximationInterpolation_01.png differ diff --git a/images/SO3FunApproximationInterpolation_02.png b/images/SO3FunApproximationInterpolation_02.png index 4969038de..bab0b7cc8 100644 Binary files a/images/SO3FunApproximationInterpolation_02.png and b/images/SO3FunApproximationInterpolation_02.png differ diff --git a/images/SO3FunApproximationInterpolation_03.png b/images/SO3FunApproximationInterpolation_03.png index 779eb67d7..5e834e2ad 100644 Binary files a/images/SO3FunApproximationInterpolation_03.png and b/images/SO3FunApproximationInterpolation_03.png differ diff --git a/images/SO3FunApproximationInterpolation_04.png b/images/SO3FunApproximationInterpolation_04.png index f3129019b..0863e7323 100644 Binary files a/images/SO3FunApproximationInterpolation_04.png and b/images/SO3FunApproximationInterpolation_04.png differ diff --git a/images/SO3FunCBF.discreteSample.html b/images/SO3FunCBF.discreteSample.html new file mode 100644 index 000000000..521bdb615 --- /dev/null +++ b/images/SO3FunCBF.discreteSample.html @@ -0,0 +1,19 @@ +--- +title: discreteSample + +sidebar: function_reference_sidebar +permalink: SO3FunCBF.discreteSample.html +folder: function_reference +toc: false +--- + + + discreteSample + edit page

evaluate an odf at orientation g

Syntax

+{% highlight matlab %} +ori = discreteSample(SO3F,npoints,varargin) +{% endhighlight %} +
\ No newline at end of file diff --git a/images/SO3FunOperations.png b/images/SO3FunOperations.png index 4a2372acc..3e034079f 100644 Binary files a/images/SO3FunOperations.png and b/images/SO3FunOperations.png differ diff --git a/images/SO3FunOperations_01.png b/images/SO3FunOperations_01.png index 14a4b9328..e3cc30e9a 100644 Binary files a/images/SO3FunOperations_01.png and b/images/SO3FunOperations_01.png differ diff --git a/images/SO3FunOperations_02.png b/images/SO3FunOperations_02.png index f34038193..05103b0de 100644 Binary files a/images/SO3FunOperations_02.png and b/images/SO3FunOperations_02.png differ diff --git a/images/SO3FunOperations_03.png b/images/SO3FunOperations_03.png index 3f8f66986..3688e942c 100644 Binary files a/images/SO3FunOperations_03.png and b/images/SO3FunOperations_03.png differ diff --git a/images/SO3FunOperations_04.png b/images/SO3FunOperations_04.png index 12a0cb6d2..6b19d3328 100644 Binary files a/images/SO3FunOperations_04.png and b/images/SO3FunOperations_04.png differ diff --git a/images/SO3FunOperations_05.png b/images/SO3FunOperations_05.png index 1679d16b4..2be61d30f 100644 Binary files a/images/SO3FunOperations_05.png and b/images/SO3FunOperations_05.png differ diff --git a/images/SO3FunOperations_06.png b/images/SO3FunOperations_06.png index 8ce9f52b0..417aa700f 100644 Binary files a/images/SO3FunOperations_06.png and b/images/SO3FunOperations_06.png differ diff --git a/images/SO3FunOperations_07.png b/images/SO3FunOperations_07.png index 3e74d9579..7b10b713a 100644 Binary files a/images/SO3FunOperations_07.png and b/images/SO3FunOperations_07.png differ diff --git a/images/SO3FunOperations_08.png b/images/SO3FunOperations_08.png index 6b5011bd8..5add8ae3a 100644 Binary files a/images/SO3FunOperations_08.png and b/images/SO3FunOperations_08.png differ diff --git a/images/SO3FunOperations_09.png b/images/SO3FunOperations_09.png index 422b6be94..f56d0b117 100644 Binary files a/images/SO3FunOperations_09.png and b/images/SO3FunOperations_09.png differ diff --git a/pages/function_reference_matlab/SO3FunRBF.rotate_outer.html b/images/SO3FunRBF.times.html similarity index 61% rename from pages/function_reference_matlab/SO3FunRBF.rotate_outer.html rename to images/SO3FunRBF.times.html index 929d5a109..7613b02a2 100644 --- a/pages/function_reference_matlab/SO3FunRBF.rotate_outer.html +++ b/images/SO3FunRBF.times.html @@ -1,8 +1,8 @@ --- -title: rotate_outer +title: times sidebar: function_reference_sidebar -permalink: SO3FunRBF.rotate_outer.html +permalink: SO3FunRBF.times.html folder: function_reference toc: false --- @@ -11,27 +11,29 @@ rotate_outer - edit page

Syntax

+ -->times + edit page

overloads SO3F1 .* SO3F2

Syntax

{% highlight matlab %} -SO3F = rotate_outer(SO3F,rot) +sF = SO3F1 .* SO3F2 +sF = a .* SO3F2 +sF = SO3F1 .* a {% endhighlight %}

Input

- SO3F + SO3F1, SO3F2 - SO3Fun + SO3FunRBF
- rot + a - rotation + double
@@ -42,7 +44,7 @@

Input

SO3F - SO3FunHandle + SO3Fun diff --git a/images/SO3FunVectorField.png b/images/SO3FunVectorField.png index 1a62f3e69..214952dab 100644 Binary files a/images/SO3FunVectorField.png and b/images/SO3FunVectorField.png differ diff --git a/images/SO3FunVectorField_01.png b/images/SO3FunVectorField_01.png index 78462b99c..07cba291b 100644 Binary files a/images/SO3FunVectorField_01.png and b/images/SO3FunVectorField_01.png differ diff --git a/images/SO3FunVectorField_02.png b/images/SO3FunVectorField_02.png index 0d66fa817..2f5f09ca9 100644 Binary files a/images/SO3FunVectorField_02.png and b/images/SO3FunVectorField_02.png differ diff --git a/images/SO3FunVectorField_03.png b/images/SO3FunVectorField_03.png new file mode 100644 index 000000000..96400c52c Binary files /dev/null and b/images/SO3FunVectorField_03.png differ diff --git a/images/SO3FunVectorField_04.png b/images/SO3FunVectorField_04.png new file mode 100644 index 000000000..deec5f438 Binary files /dev/null and b/images/SO3FunVectorField_04.png differ diff --git a/images/SO3FunVectorField_05.png b/images/SO3FunVectorField_05.png new file mode 100644 index 000000000..9457a69b3 Binary files /dev/null and b/images/SO3FunVectorField_05.png differ diff --git a/images/SO3FunVectorField_06.png b/images/SO3FunVectorField_06.png new file mode 100644 index 000000000..0837a79cb Binary files /dev/null and b/images/SO3FunVectorField_06.png differ diff --git a/images/SO3FunVectorField_07.png b/images/SO3FunVectorField_07.png new file mode 100644 index 000000000..1acdd3ad5 Binary files /dev/null and b/images/SO3FunVectorField_07.png differ diff --git a/images/SO3FunVectorField_08.png b/images/SO3FunVectorField_08.png new file mode 100644 index 000000000..ede4c4f6c Binary files /dev/null and b/images/SO3FunVectorField_08.png differ diff --git a/images/SO3FunVectorField_09.png b/images/SO3FunVectorField_09.png new file mode 100644 index 000000000..52f776877 Binary files /dev/null and b/images/SO3FunVectorField_09.png differ diff --git a/images/SO3FunVectorField_10.png b/images/SO3FunVectorField_10.png new file mode 100644 index 000000000..4f56cf756 Binary files /dev/null and b/images/SO3FunVectorField_10.png differ diff --git a/images/SeismicPlots.png b/images/SeismicPlots.png new file mode 100644 index 000000000..97ecdbec2 Binary files /dev/null and b/images/SeismicPlots.png differ diff --git a/images/SeismicPlots_01.png b/images/SeismicPlots_01.png new file mode 100644 index 000000000..c16e87c8e Binary files /dev/null and b/images/SeismicPlots_01.png differ diff --git a/images/SeismicPlots_02.png b/images/SeismicPlots_02.png new file mode 100644 index 000000000..7bbc7c312 Binary files /dev/null and b/images/SeismicPlots_02.png differ diff --git a/images/SeismicPlots_03.png b/images/SeismicPlots_03.png new file mode 100644 index 000000000..aeb2b46bc Binary files /dev/null and b/images/SeismicPlots_03.png differ diff --git a/images/SeismicPlots_04.png b/images/SeismicPlots_04.png new file mode 100644 index 000000000..85a15bf6a Binary files /dev/null and b/images/SeismicPlots_04.png differ diff --git a/images/SeismicPlots_05.png b/images/SeismicPlots_05.png new file mode 100644 index 000000000..d6e78d7b1 Binary files /dev/null and b/images/SeismicPlots_05.png differ diff --git a/images/SeismicPlots_06.png b/images/SeismicPlots_06.png new file mode 100644 index 000000000..208dc2d63 Binary files /dev/null and b/images/SeismicPlots_06.png differ diff --git a/images/SeismicPlots_07.png b/images/SeismicPlots_07.png new file mode 100644 index 000000000..e84bdb9c3 Binary files /dev/null and b/images/SeismicPlots_07.png differ diff --git a/images/SeismicPlots_08.png b/images/SeismicPlots_08.png new file mode 100644 index 000000000..ed511764f Binary files /dev/null and b/images/SeismicPlots_08.png differ diff --git a/images/SeismicPlots_09.png b/images/SeismicPlots_09.png new file mode 100644 index 000000000..b17c5e262 Binary files /dev/null and b/images/SeismicPlots_09.png differ diff --git a/images/SeismicPlots_10.png b/images/SeismicPlots_10.png new file mode 100644 index 000000000..7a28c0699 Binary files /dev/null and b/images/SeismicPlots_10.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d.png b/images/SeismicVelocitySingleCrystalDemo2d.png new file mode 100644 index 000000000..5cd059810 Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d_01.png b/images/SeismicVelocitySingleCrystalDemo2d_01.png new file mode 100644 index 000000000..ca80a47c0 Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d_01.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d_02.png b/images/SeismicVelocitySingleCrystalDemo2d_02.png new file mode 100644 index 000000000..7afb53a1d Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d_02.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d_03.png b/images/SeismicVelocitySingleCrystalDemo2d_03.png new file mode 100644 index 000000000..3082b9228 Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d_03.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d_04.png b/images/SeismicVelocitySingleCrystalDemo2d_04.png new file mode 100644 index 000000000..f40ba51dc Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d_04.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d_05.png b/images/SeismicVelocitySingleCrystalDemo2d_05.png new file mode 100644 index 000000000..309911df5 Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d_05.png differ diff --git a/images/SeismicVelocitySingleCrystalDemo2d_06.png b/images/SeismicVelocitySingleCrystalDemo2d_06.png new file mode 100644 index 000000000..0cdefcc9c Binary files /dev/null and b/images/SeismicVelocitySingleCrystalDemo2d_06.png differ diff --git a/images/SingleSlipModel.png b/images/SingleSlipModel.png index bd15bf11c..6746cd7c8 100644 Binary files a/images/SingleSlipModel.png and b/images/SingleSlipModel.png differ diff --git a/images/SingleSlipModel_01.png b/images/SingleSlipModel_01.png index 380b8145c..38133ee5d 100644 Binary files a/images/SingleSlipModel_01.png and b/images/SingleSlipModel_01.png differ diff --git a/images/SingleSlipModel_02.png b/images/SingleSlipModel_02.png index d87dbddee..4efb7abde 100644 Binary files a/images/SingleSlipModel_02.png and b/images/SingleSlipModel_02.png differ diff --git a/images/SingleSlipModel_03.png b/images/SingleSlipModel_03.png index aea55403b..0cb76fb99 100644 Binary files a/images/SingleSlipModel_03.png and b/images/SingleSlipModel_03.png differ diff --git a/images/SingleSlipModel_04.png b/images/SingleSlipModel_04.png index 2adfbbb7a..caae15349 100644 Binary files a/images/SingleSlipModel_04.png and b/images/SingleSlipModel_04.png differ diff --git a/images/SingleSlipModel_05.png b/images/SingleSlipModel_05.png index 5de8c15b4..789d91f4b 100644 Binary files a/images/SingleSlipModel_05.png and b/images/SingleSlipModel_05.png differ diff --git a/images/SingleSlipModel_06.png b/images/SingleSlipModel_06.png index 9a464cb00..4ebe583e4 100644 Binary files a/images/SingleSlipModel_06.png and b/images/SingleSlipModel_06.png differ diff --git a/images/SingleSlipModel_07.png b/images/SingleSlipModel_07.png index 0ff53e476..3cd7a771c 100644 Binary files a/images/SingleSlipModel_07.png and b/images/SingleSlipModel_07.png differ diff --git a/images/SingleSlipModel_08.png b/images/SingleSlipModel_08.png index 8063d6ab1..d918c4854 100644 Binary files a/images/SingleSlipModel_08.png and b/images/SingleSlipModel_08.png differ diff --git a/images/SingleSlipModel_09.png b/images/SingleSlipModel_09.png new file mode 100644 index 000000000..a426da68c Binary files /dev/null and b/images/SingleSlipModel_09.png differ diff --git a/images/SingleSlipModel_10.png b/images/SingleSlipModel_10.png new file mode 100644 index 000000000..e48a8f465 Binary files /dev/null and b/images/SingleSlipModel_10.png differ diff --git a/images/TaylorModel.png b/images/TaylorModel.png index ba5339b8e..3a9254f1e 100644 Binary files a/images/TaylorModel.png and b/images/TaylorModel.png differ diff --git a/images/TaylorModel_01.png b/images/TaylorModel_01.png index 037f76322..26d40860f 100644 Binary files a/images/TaylorModel_01.png and b/images/TaylorModel_01.png differ diff --git a/images/TaylorModel_02.png b/images/TaylorModel_02.png index 6b02a8041..9eac825e1 100644 Binary files a/images/TaylorModel_02.png and b/images/TaylorModel_02.png differ diff --git a/images/TaylorModel_03.png b/images/TaylorModel_03.png index 82e4025a3..f41b17af7 100644 Binary files a/images/TaylorModel_03.png and b/images/TaylorModel_03.png differ diff --git a/images/TaylorModel_04.png b/images/TaylorModel_04.png index b75938a10..e30c13087 100644 Binary files a/images/TaylorModel_04.png and b/images/TaylorModel_04.png differ diff --git a/images/TaylorModel_05.png b/images/TaylorModel_05.png index dc791d387..59b030b8f 100644 Binary files a/images/TaylorModel_05.png and b/images/TaylorModel_05.png differ diff --git a/images/TaylorModel_06.png b/images/TaylorModel_06.png index 8f96d4d60..3dcb2b403 100644 Binary files a/images/TaylorModel_06.png and b/images/TaylorModel_06.png differ diff --git a/images/VectorGrids.png b/images/VectorGrids.png index cdabe1042..0887f49ef 100644 Binary files a/images/VectorGrids.png and b/images/VectorGrids.png differ diff --git a/images/VectorGrids_01.png b/images/VectorGrids_01.png index ab5a1e67d..024097155 100644 Binary files a/images/VectorGrids_01.png and b/images/VectorGrids_01.png differ diff --git a/images/VectorGrids_02.png b/images/VectorGrids_02.png index 9c5e4c83b..f30e0d793 100644 Binary files a/images/VectorGrids_02.png and b/images/VectorGrids_02.png differ diff --git a/images/VectorGrids_03.png b/images/VectorGrids_03.png deleted file mode 100644 index a42629998..000000000 Binary files a/images/VectorGrids_03.png and /dev/null differ diff --git a/images/VectorGrids_04.png b/images/VectorGrids_04.png deleted file mode 100644 index 527d20369..000000000 Binary files a/images/VectorGrids_04.png and /dev/null differ diff --git a/images/doHClustering.png b/images/doHClustering.png index fa3cc6095..02192c0cd 100644 Binary files a/images/doHClustering.png and b/images/doHClustering.png differ diff --git a/images/doHClustering_01.png b/images/doHClustering_01.png index 40ae91baf..541ad84d3 100644 Binary files a/images/doHClustering_01.png and b/images/doHClustering_01.png differ diff --git a/images/doHClustering_02.png b/images/doHClustering_02.png index 0540273ff..23a7547b3 100644 Binary files a/images/doHClustering_02.png and b/images/doHClustering_02.png differ diff --git a/index.md b/index.md index 416dd50a3..2fbabdf28 100644 --- a/index.md +++ b/index.md @@ -32,23 +32,23 @@ of material scientists, geologists and mathematicians.

+ +
+
+
+
+ +
+
+

CVA

+

... Crystallographic Vorticity Axis Analysis +

+

+ + {% include reference.html link="https://www.researchgate.net/profile/Zachary-Michels" content="Zachary Michels" %} +

+

+ + {% include reference.html link="https://github.com/zmichels/CVA" content="GitHub: zmichels/CVA" %} +

+
+
+
+
+
+
+ +
+
+

phaseSegmenter

+

... + enables the discrimination and segmentation of crystallographically identical/similar phases with grains of distinct orientation and slight compositional differences. The program uses reindexed EBSD datasets and EDS elemental data to compute grain-median compositional differences between grains of the phases in question and segments these by determination of an optimal threshold value. +

+

+ + {% include reference.html link="https://www.researchgate.net/profile/Azdiar_Gazder" content="Azdiar A. Gazder" %} + , {% include reference.html link="https://wwws.researchgate.net/profile/Frank_Niessen4" content="Frank Niessen" %} +

+

+ + {% include reference.html link="https://www.github.com/frankNiessen/phaseSegmenter" content="GitHub: frankNiessen/phaseSegmenter" %} +

+
+
+
+
diff --git a/pages/documentation_matlab/AnisotropicTheory.html b/pages/documentation_matlab/AnisotropicTheory.html index 3c4ce6815..0039728ad 100644 --- a/pages/documentation_matlab/AnisotropicTheory.html +++ b/pages/documentation_matlab/AnisotropicTheory.html @@ -12,12 +12,12 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Anisotropic Elasticity - edit page

The linear theory of ellasticity in anisotropic materials is essentialy based on the fourth order stiffness tensor C. Such a tensor is represented in MTEX by a variable of type stiffnessTensor. Such a variable can either by set up using a symmetric 6x6 matrix or by importing it from an external file. The following examples does so for the stiffness tensor for Olivine

+ edit page

The linear theory of elasticity in anisotropic materials is essentially based on the fourth order stiffness tensor C. Such a tensor is represented in MTEX by a variable of type stiffnessTensor. Such a variable can either by set up using a symmetric 6x6 matrix or by importing it from an external file. The following examples does so for the stiffness tensor for Olivine

{% highlight matlab %} % file name fname = fullfile(mtexDataPath,'tensor','Olivine1997PC.GPa'); -% crytsal symmetry +% crystal symmetry cs = crystalSymmetry('mmm',[4.7646 10.2296 5.9942],'mineral','Olivin'); % define the tensor @@ -37,7 +37,7 @@ 0 0 0 0 77 0 0 0 0 0 0 78.7 {% endhighlight %} -

Hooke's Law

The stiffness tensor tensor of a material is defined as the stress the material expreances for a given strain

+

Hooke's Law

The stiffness tensor tensor of a material is defined as the stress the material experiences for a given strain

{% highlight matlab %} eps = strainTensor(diag([1,1.1,0.9]),cs) {% endhighlight %} @@ -78,7 +78,7 @@

Hooke's Law

The stiffness tensor tensor of a material is defin 0 1.1 0 0 0 0.9 {% endhighlight %} -

The ellastic energy of the strain eps can be computed equivalently by the following equations

+

The elastic energy of the strain eps can be computed equivalently by the following equations

{% highlight matlab %} % the elastic energy U = sigma : eps @@ -101,7 +101,7 @@

Young's Modulus

Young's modulus is also known as the tensile m E = 286.9284 {% endhighlight %} -

If the direction d is ommited Youngs modulus is returned as a spherical function.

+

If the direction d is omitted Youngs modulus is returned as a spherical function.

{% highlight matlab %} % compute Young's modulus as a directional dependent function E = C.YoungsModulus @@ -116,7 +116,6 @@

Young's Modulus

Young's modulus is also known as the tensile m {% highlight plaintext %} E = S2FunHarmonicSym (Olivin) - mineral: Olivin (mmm) bandwidth: 128 antipodal: true isReal: true @@ -140,7 +139,6 @@

Young's Modulus

Young's modulus is also known as the tensile m {% highlight plaintext %} beta = S2FunHarmonicSym (Olivin) - mineral: Olivin (mmm) bandwidth: 2 antipodal: true isReal: true @@ -166,14 +164,13 @@

Young's Modulus

Young's modulus is also known as the tensile m nu = 0.1515 0.3383 {% endhighlight %} -

If we ommit in the call to PoissonRatio the last argument

+

If we omit in the call to PoissonRatio the last argument

{% highlight matlab %} nu = C.PoissonRatio(p) {% endhighlight %} {% highlight plaintext %} nu = S2FunHarmonicSym (Olivin) - mineral: Olivin (mmm) bandwidth: 4 antipodal: true isReal: true @@ -233,4 +230,33 @@

Young's Modulus

Young's modulus is also known as the tensile m {% endhighlight %}

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

Wave Velocities

Since elastic compression and decompression is mechanics of waves traveling through a medium anisotropic compressibility causes also anisotropic waves speeds. The analysis of this anisotropy is explained in the section wave velocities.

\ No newline at end of file +

Wave Velocities

Since elastic compression and decompression is mechanics of waves traveling through a medium anisotropic compressibility causes also anisotropic waves speeds. The analysis of this anisotropy is explained in the section wave velocities.

+{% highlight matlab %} +% +%
+% ok<*BDSCI> +% +% +%
+% +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% +% +% +%
+% ok<*BDSCA> +% +% +%
+% +% +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/Annotations.html b/pages/documentation_matlab/Annotations.html index 9339229d9..b44365948 100644 --- a/pages/documentation_matlab/Annotations.html +++ b/pages/documentation_matlab/Annotations.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Annotations - edit page

Colorbars

Unlike the common Matlab command colorbar the MTEX command mtexColorbar allows you to add a colorbar to all subplots in a figure.

+ edit page

Colorbars

Unlike the common MATLAB command colorbar the MTEX command mtexColorbar allows you to add a colorbar to all subplots in a figure.

{% highlight matlab %} % this defines some model ODFs cs = crystalSymmetry('-3m'); @@ -20,7 +20,7 @@ mod2 = orientation.byEuler(10*degree,80*degree,70*degree,cs); odf = 0.7*unimodalODF(mod1) + 0.3*unimodalODF(mod2); -% plot some pole figurs +% plot some pole figures plotPDF(odf,Miller({1,0,0},{1,1,1},cs)) % and add a colorbar to each pole figure @@ -46,7 +46,7 @@ {% endhighlight %}
{% include inline_image.html file="Annotations_03.png" %} -

Annotating Directions, Orientations, Fibres

Pole figures and inverse pole figures are much better readable if they include specimen or crystal directions. Using the MTEX command annotate one can easily add specimen coordinate axes to a pole figure plot.

+

Annotating Directions, Orientations, Fibers

Pole figures and inverse pole figures are much better readable if they include specimen or crystal directions. Using the MTEX command annotate one can easily add specimen coordinate axes to a pole figure plot.

{% highlight matlab %} annotate(zvector,'label',{'Z'},'BackgroundColor','w') {% endhighlight %} diff --git a/pages/documentation_matlab/BinghamODFs.html b/pages/documentation_matlab/BinghamODFs.html index 31f831e6f..bbb7b8a6e 100644 --- a/pages/documentation_matlab/BinghamODFs.html +++ b/pages/documentation_matlab/BinghamODFs.html @@ -31,6 +31,7 @@ {% highlight matlab %} h = [Miller(0,0,1,cs) Miller(1,0,0,cs) Miller(1,1,1,cs)]; +plotzOutOfPlane plotPDF(odf,h,'antipodal','silent'); {% endhighlight %}
@@ -55,7 +56,7 @@ Bunge Euler angles in degree phi1 Phi phi2 weight - 133.455 51.9631 286.025 1 + 184.757 83.0995 123.322 1 {% endhighlight %} {% highlight matlab %} @@ -81,7 +82,7 @@ {% highlight plaintext %} odf_est = SO3FunBingham (1 → xyz) - kappa: 0 1.2 3.4 25 + kappa: 0 1.3 3.2 27 weight: 1 {% endhighlight %}
@@ -102,7 +103,7 @@ {% highlight matlab %} %plotPDF(odf_spherical,h,'antipodal','silent') {% endhighlight %} -

Prolate case and fibre distribution

The prolate case correspondes to a fibre.

+

Prolate case and fiber distribution

The prolate case corresponds to a fiber.

{% highlight matlab %} odf_prolate = fibreODF(Miller(0,0,1,crystalSymmetry('1')),zvector,... 'halfwidth',20*degree) @@ -137,7 +138,7 @@

Prolate case and fibre distribution

The prolate case correspo {% highlight plaintext %} ans = SO3FunBingham (1 → xyz) - kappa: 0 3.8 49 50 + kappa: 0 3.5 47 48 weight: 1 {% endhighlight %}

and test on the three cases

@@ -198,7 +199,7 @@

Prolate case and fibre distribution

The prolate case correspo {% highlight plaintext %} ans = SO3FunBingham (1 → xyz) - kappa: 0 50 50 52 + kappa: 0 48 48 50 weight: 1 {% endhighlight %}

and do the tests

diff --git a/pages/documentation_matlab/BirefringenceDemo.html b/pages/documentation_matlab/BirefringenceDemo.html index 0d9fb2287..3bcac2cb0 100644 --- a/pages/documentation_matlab/BirefringenceDemo.html +++ b/pages/documentation_matlab/BirefringenceDemo.html @@ -1,5 +1,5 @@ --- -title: Birefrigence +title: Birefringence sidebar: documentation_sidebar permalink: BirefringenceDemo.html @@ -11,8 +11,8 @@ Birefrigence - edit page

Birefringence is the optical property of a material having a refractive index that depends on the polarization and propagation direction of light. It is one of the oldest methods to determine orientations of crystals in thin sections of rocks.

Import Olivine Data

In order to illustarte the effect of birefringence lets consider a olivine data set.

+ -->Birefringence + edit page

Birefringence is the optical property of a material having a refractive index that depends on the polarization and propagation direction of light. It is one of the oldest methods to determine orientations of crystals in thin sections of rocks.

Import Olivine Data

In order to illustrate the effect of birefringence lets consider a olivine data set.

{% highlight matlab %} mtexdata olivine @@ -62,7 +62,7 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 109 30800 olivine 222 - boundary segments: 6815 (24153 µm) + boundary segments: 6806 (24154 µm) inner boundary segments: 9 (16 µm) triple points: 561 @@ -70,11 +70,11 @@ {% endhighlight %}
{% include inline_image.html file="BirefringenceDemo_01.png" %} -

The refractive index tensor

The refractive index of a material describes the dependence of the speed of light with respect to the propagation direction and the polarization direction. In a linear world this relation ship is modeled by a symmetric rank 2 tensor - the so called refractive index tensor, which is usually given by it principle values: n_alpha, n_beta and n_gamma. In orthorhombic minerals such as olivine the principal values are parallel to the crystallographic axes. Care has to be applied when associating the principle values with the correct axes.

For Forsterite the priniple refractive values are

+

The refractive index tensor

The refractive index of a material describes the dependence of the speed of light with respect to the propagation direction and the polarization direction. In a linear world this relation ship is modeled by a symmetric rank 2 tensor - the so called refractive index tensor, which is usually given by it principle values: n_alpha, n_beta and n_gamma. In orthorhombic minerals such as olivine the principal values are parallel to the crystallographic axes. Care has to be applied when associating the principle values with the correct axes.

For Forsterite the principle refractive values are

{% highlight matlab %} n_alpha = 1.635; n_beta = 1.651; n_gamma = 1.670; {% endhighlight %} -

with the largest refractive index n_gamma beeing alligned with the a-axis, the intermediate index n_beta with the c-axis and the smallest refractive index n_alpha with the b-axis. Hence, the refractive index tensor for Forsterite takes the form

+

with the largest refractive index n_gamma being aligned with the a-axis, the intermediate index n_beta with the c-axis and the smallest refractive index n_alpha with the b-axis. Hence, the refractive index tensor for Forsterite takes the form

{% highlight matlab %} cs = ebsd('olivine').CS; rI_Fo = refractiveIndexTensor(diag([ n_gamma n_alpha n_beta]),cs) @@ -88,11 +88,11 @@ 0 1.635 0 0 0 1.651 {% endhighlight %} -

For Fayalite the priniple refractive values

+

For Fayalite the principle refractive values

{% highlight matlab %} n_alpha = 1.82; n_beta = 1.869; n_gamma = 1.879; {% endhighlight %} -

are aligned to the crystallograhic axes in an analogous way. Which leads to the refractive index tensor

+

are aligned to the crystallographic axes in an analogous way. Which leads to the refractive index tensor

{% highlight matlab %} rI_Fa = refractiveIndexTensor(diag([ n_gamma n_alpha n_beta]),cs) {% endhighlight %} @@ -105,7 +105,7 @@ 0 1.82 0 0 0 1.869 {% endhighlight %} -

The refractive index of composite materials like Olivine can now be modelled as the weighted sum of the of the refractive index tensors of Forsterite and Fayalite. Lets assume that the relative Forsterite content (atomic percentage) is sgiven my

+

The refractive index of composite materials like Olivine can now be modeled as the weighted sum of the of the refractive index tensors of Forsterite and Fayalite. Lets assume that the relative Forsterite content (atomic percentage) is given my

{% highlight matlab %} XFo = 0.86; % 86 percent Forsterite {% endhighlight %} @@ -136,10 +136,14 @@

Birefringence

The birefringence describes the difference If the polarization direction is ommited the results are spherical functions which can be easily visualized.

+

If the polarization direction is omitted the results are spherical functions which can be easily visualized.

{% highlight matlab %} % compute the birefringence as a spherical function [dn,pMin,pMax] = rI.birefringence @@ -157,7 +161,6 @@

Birefringence

The birefringence describes the difference Birefringence

The birefringence describes the difference {% include inline_image.html file="BirefringenceDemo_02.png" %} -

The Optical Axis

The optial axes are all directions where the birefringence is zero

+

The Optical Axis

The optical axes are all directions where the birefringence is zero

{% highlight matlab %} % compute the optical axes vOptical = rI.opticalAxis @@ -188,6 +191,9 @@

Birefringence

The birefringence describes the difference Birefringence

The birefringence describes the difference {% include inline_image.html file="BirefringenceDemo_03.png" %} -

Spectral Transmission

If white light with a certain polarization is transmited though a crystal with isotropic refrative index the light changes wavelength and hence appears collored. The resulting color depending on the propagation direction, the polarization direction and the thickness can be computed by

+

Spectral Transmission

If white light with a certain polarization is transmitted though a crystal with isotropic refractive index the light changes wavelength and hence appears colored. The resulting color depending on the propagation direction, the polarization direction and the thickness can be computed by

{% highlight matlab %} vprop = Miller(1,1,1,cs); thickness = 30000; @@ -207,7 +213,7 @@

Birefringence

The birefringence describes the difference Effectively, the rgb value depend only on the angle tau between the polariztzion direction and the slowest polarization direction pMin. Instead of the polarization direction this angle may be specified directly

+

Effectively, the rgb value depend only on the angle tau between the polarization direction and the slowest polarization direction pMin. Instead of the polarization direction this angle may be specified directly

{% highlight matlab %} rgb = rI.spectralTransmission(vprop,thickness,'tau',30*degree) {% endhighlight %} @@ -216,7 +222,7 @@

Birefringence

The birefringence describes the difference If the angle tau is fixed and the propagation direction is ommited as input MTEX returns the rgb values as a spherical function. Lets plot these functions for different values of tau.

+

If the angle tau is fixed and the propagation direction is omitted as input MTEX returns the rgb values as a spherical function. Lets plot these functions for different values of tau.

{% highlight matlab %} newMtexFigure('layout',[1,3]); @@ -265,7 +271,7 @@

Birefringence

The birefringence describes the difference As usal we have two options: Either we transform the refractive index tensor into specimen coordinates or we transform the polarization direction and the propagation directions into crystal coordinates. Lets start with the first option:

+

As usual we have two options: Either we transform the refractive index tensor into specimen coordinates or we transform the polarization direction and the propagation directions into crystal coordinates. Lets start with the first option:

{% highlight matlab %} % extract the olivine orientations ori = ebsd('olivine').orientations; @@ -284,7 +290,7 @@

Birefringence

The birefringence describes the difference

and compare it with option two:

{% highlight matlab %} -% transfom the propation direction and the polarizer direction into a list +% transform the propagation direction and the polarizer direction into a list % of directions with respect to crystal coordinates vprop_crystal = ori \ vprop; polarizer_crystal = ori \ polarizer; @@ -297,12 +303,12 @@

Birefringence

The birefringence describes the difference {% include inline_image.html file="BirefringenceDemo_07.png" %} -

Spectral Transmission as a color key

The above computations can be automized by defining a spectral transmission color key.

+

Spectral Transmission as a color key

The above computations can be automated by defining a spectral transmission color key.

{% highlight matlab %} % define the colorKey colorKey = spectralTransmissionColorKey(rI,thickness); -% the following are the defaults and can be ommited +% the following are the defaults and can be omitted colorKey.propagationDirection = vector3d.Z; colorKey.polarizer = vector3d.X; colorKey.phi = 90 * degree; @@ -331,7 +337,7 @@

Birefringence

The birefringence describes the difference {% include inline_image.html file="BirefringenceDemo_10.png" %} -

Illustrating the effect of rotating polarizer and analyser simultanously

+

Illustrating the effect of rotating polarizer and analyzer simultaneously

{% highlight matlab %} colorKey.polarizer = vector3d.X; figure @@ -347,7 +353,7 @@

Birefringence

The birefringence describes the difference {% include inline_image.html file="BoundaryIntersections_03.png" %} diff --git a/pages/documentation_matlab/BoundaryNormalDistribution.html b/pages/documentation_matlab/BoundaryNormalDistribution.html index ae3dba709..41d9e5d96 100644 --- a/pages/documentation_matlab/BoundaryNormalDistribution.html +++ b/pages/documentation_matlab/BoundaryNormalDistribution.html @@ -27,6 +27,8 @@ {% endhighlight %} {% highlight plaintext %} +saving data to /home/hielscher/mtex/master/data/csl.mat + ebsd = EBSD Phase Orientations Mineral Color Symmetry Crystal reference frame @@ -49,7 +51,7 @@ {% endhighlight %}

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

Misorientation angle at grain boundaries

Next we seperate the grain boundaries according to the misorientation angle. More presicely, we distinguish those grain boundaries with misorientation angle larger then 57 degree and those with a smaller misorientation angle.

+

Misorientation angle at grain boundaries

Next we separate the grain boundaries according to the misorientation angle. More precisely, we distinguish those grain boundaries with misorientation angle larger then 57 degree and those with a smaller misorientation angle.

{% highlight matlab %} gB = grains.boundary('indexed'); cond = gB.misorientation.angle > 57 * degree; @@ -79,14 +81,12 @@ {% highlight plaintext %} gbnd1 = S2FunHarmonicSym (iron) - mineral: iron (m-3m) bandwidth: 48 antipodal: true isReal: true gbnd2 = S2FunHarmonicSym (iron) - mineral: iron (m-3m) bandwidth: 48 antipodal: true isReal: true diff --git a/pages/documentation_matlab/BoundaryPlots.html b/pages/documentation_matlab/BoundaryPlots.html index 04c3cbb3b..07217c107 100644 --- a/pages/documentation_matlab/BoundaryPlots.html +++ b/pages/documentation_matlab/BoundaryPlots.html @@ -19,7 +19,7 @@ % import the data mtexdata forsterite -% restrict it to a subregion of interest. +% restrict it to a sub-region of interest. ebsd = ebsd(inpolygon(ebsd,[5 2 10 5]*10^3)); [grains,ebsd.grainId] = calcGrains(ebsd('indexed')); @@ -58,12 +58,12 @@ 439 27383 µm notIndexed Forsterite 18 1550 µm notIndexed Enstatite 22 1350 µm notIndexed Diopside - 1386 55739 µm Forsterite Forsterite + 1386 55740 µm Forsterite Forsterite 656 26512 µm Forsterite Enstatite - 519 20576 µm Forsterite Diopside + 519 20575 µm Forsterite Diopside 35 1296 µm Enstatite Enstatite - 112 4827 µm Enstatite Diopside - 28 1250 µm Diopside Diopside + 112 4828 µm Enstatite Diopside + 28 1251 µm Diopside Diopside {% endhighlight %}

We may use the plot command to visualize the grain boundaries in the map

{% highlight matlab %} @@ -89,13 +89,13 @@ ans = grainBoundary Segments length mineral 1 mineral 2 - 132 5528 µm Forsterite Forsterite + 132 5529 µm Forsterite Forsterite 69 2649 µm Forsterite Enstatite 29 1240 µm Forsterite Diopside {% endhighlight %}
{% include inline_image.html file="BoundaryPlots_02.png" %} -

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

+

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

{% highlight matlab %} hold on plot(grains.boundary('Fo','En'),'linecolor','DarkGreen','linewidth',4) @@ -124,9 +124,9 @@ {% endhighlight %}
{% include inline_image.html file="BoundaryPlots_05.png" %} -

The misorientation axes in crystal coordinates

Similarly as the rotational angle we may colorize the grain boundaries also according the misorientation axes. First of all we have to decide wheter we want to visualize the rotational axis in crystal or coordinate system. Second we have to define a color key that translates rotational axes into colors.

Lets start with the rotational axes in crystal coordinates

+

The misorientation axes in crystal coordinates

Similarly as the rotational angle we may colorize the grain boundaries also according the misorientation axes. First of all we have to decide whether we want to visualize the rotational axis in crystal or coordinate system. Second we have to define a color key that translates rotational axes into colors.

Lets start with the rotational axes in crystal coordinates

{% highlight matlab %} -% computed the axes in specien coordinates +% computed the axes in specimen coordinates axes = gB_Fo.misorientation.axis % define a color key @@ -158,7 +158,7 @@ {% endhighlight %}
{% include inline_image.html file="BoundaryPlots_07.png" %} -

The misorientation axes in specimen coordinates

Analyzing the misorientation axis in specimen coordinates is a bit more involved as it requires to extract the two neighbouring orientations to each boundary segment. To do this we use the ebsdId stored in the boundary segments.

+

The misorientation axes in specimen coordinates

Analyzing the misorientation axis in specimen coordinates is a bit more involved as it requires to extract the two neighboring orientations to each boundary segment. To do this we use the ebsdId stored in the boundary segments.

{% highlight matlab %} figure(1) @@ -184,7 +184,7 @@ gB_red = grainBoundary Segments length mineral 1 mineral 2 - 278 10946 µm Forsterite Forsterite + 278 10945 µm Forsterite Forsterite ori = orientation (Forsterite → xyz) size: 278 x 2 @@ -194,7 +194,7 @@ {% endhighlight %}
{% include inline_image.html file="BoundaryPlots_08.png" %} -

Full Misorientation Colorization

In order to visuale the full misorientation, i.e., axis and angle, one has to define a corresponding color key. One option is the color key described in the paper by S. Patala, J. K. Mason, and C. A. Schuh, Improved representations of misorientation information for grain boundary, Prog. Mater. Sci., vol. 57, no. 8, pp. 1383-1425, 2012.

+

Full Misorientation Colorization

In order to visualize the full misorientation, i.e., axis and angle, one has to define a corresponding color key. One option is the color key described in the paper by S. Patala, J. K. Mason, and C. A. Schuh, Improved representations of misorientation information for grain boundary, Prog. Mater. Sci., vol. 57, no. 8, pp. 1383-1425, 2012.

{% highlight matlab %} % plot the grains close all @@ -228,7 +228,7 @@ % import the data mtexdata csl -% grain segementation and smoothing +% grain segmentation and smoothing [grains,ebsd.grainId] = calcGrains(ebsd('indexed')); grains = smooth(grains,2); gB = grains.boundary('iron','iron'); @@ -237,7 +237,7 @@ close all plot(ebsd,log(ebsd.prop.iq),'figSize','large') mtexColorMap black2white -CLim(gcm,[.5,5]) +setColorRange([.5,5]) hold on plot(grains,grains.meanOrientation,'FaceAlpha',0.4) diff --git a/pages/documentation_matlab/BoundaryProperties.html b/pages/documentation_matlab/BoundaryProperties.html index 5d563bc57..3d36acd8b 100644 --- a/pages/documentation_matlab/BoundaryProperties.html +++ b/pages/documentation_matlab/BoundaryProperties.html @@ -176,14 +176,14 @@ {% highlight plaintext %} ans = + 1010 1177 + 1010 1009 + 843 842 843 676 843 844 1011 844 1011 1012 1011 1178 - 1010 1177 - 1010 1009 - 843 842 {% endhighlight %}

It is important to understand that the id is not neccesarily the same as the index in the list. In order to index an variable of type EBSD by id and not by index the following syntax has to be used

{% highlight matlab %} @@ -197,22 +197,22 @@ 1 16 (100%) Magnesium LightSkyBlue 6/mmm X||a*, Y||b, Z||c* Id Phase phi1 Phi phi2 bc bs mad x y grainId phi1 Phi phi2 + 1010 1 114 16 219 164 158 0.5 2.1 1.8 8 217 0 143 + 1010 1 114 16 219 164 158 0.5 2.1 1.8 8 217 0 143 + 843 1 115 16 218 170 176 0.7 2.1 1.5 8 56 0 304 843 1 115 16 218 170 176 0.7 2.1 1.5 8 56 0 304 843 1 115 16 218 170 176 0.7 2.1 1.5 8 56 0 304 1011 1 115 16 219 182 174 0.5 2.4 1.8 8 340 0 20 1011 1 115 16 219 182 174 0.5 2.4 1.8 8 340 0 20 1011 1 115 16 219 182 174 0.5 2.4 1.8 8 340 0 20 - 1010 1 114 16 219 164 158 0.5 2.1 1.8 8 217 0 143 - 1010 1 114 16 219 164 158 0.5 2.1 1.8 8 217 0 143 - 843 1 115 16 218 170 176 0.7 2.1 1.5 8 56 0 304 + 1177 1 5 81 195 168 171 0.3 2.1 2.1 21 334 3 24 + 1009 1 5 81 195 156 160 0.4 1.8 1.8 21 335 3 23 + 842 1 5 80 195 167 170 0.5 1.8 1.5 21 340 3 18 676 1 5 80 195 176 196 0.5 2.1 1.2 21 340 3 18 844 1 4 81 195 174 197 0.3 2.4 1.5 21 332 3 27 844 1 4 81 195 174 197 0.3 2.4 1.5 21 332 3 27 1012 1 4 81 195 176 168 0.4 2.7 1.8 21 332 3 26 1178 1 5 81 195 174 181 0.5 2.4 2.1 21 337 3 21 - 1177 1 5 81 195 168 171 0.3 2.1 2.1 21 334 3 24 - 1009 1 5 81 195 156 160 0.4 1.8 1.8 21 335 3 23 - 842 1 5 80 195 167 170 0.5 1.8 1.5 21 340 3 18 Scan unit : um Grid size (square): 8 x 2 {% endhighlight %} @@ -254,14 +254,14 @@ Bunge Euler angles in degree phi1 Phi phi2 - 330.172 86.1071 150.366 + 330.069 86.0994 150.22 ans = misorientation (Magnesium → Magnesium) Bunge Euler angles in degree phi1 Phi phi2 - 330.172 86.1071 150.366 + 330.069 86.0994 150.22 {% endhighlight %}

Note that in the first result the antipodal flag is true while it is false in the second result.

Obviously, misorientations of a list of grain boundaries can only be extracted if all of them have the same type of phase transition. Let us consider only Magnesium to Magnesium grain boundaries, i.e., ommit all grain boundaries to an not indexed region.

{% highlight matlab %} @@ -321,7 +321,7 @@ {% highlight plaintext %} ans = - 837.4641 + 837.4922 {% endhighlight %}

Connected components

TODO: explain this in more detail

{% highlight matlab %} diff --git a/pages/documentation_matlab/BoundarySelect.html b/pages/documentation_matlab/BoundarySelect.html index 22c06d413..d9712ac7e 100644 --- a/pages/documentation_matlab/BoundarySelect.html +++ b/pages/documentation_matlab/BoundarySelect.html @@ -53,12 +53,12 @@ 439 27383 µm notIndexed Forsterite 18 1550 µm notIndexed Enstatite 22 1350 µm notIndexed Diopside - 1386 55739 µm Forsterite Forsterite + 1386 55740 µm Forsterite Forsterite 656 26512 µm Forsterite Enstatite - 519 20576 µm Forsterite Diopside + 519 20575 µm Forsterite Diopside 35 1296 µm Enstatite Enstatite - 112 4827 µm Enstatite Diopside - 28 1250 µm Diopside Diopside + 112 4828 µm Enstatite Diopside + 28 1251 µm Diopside Diopside {% endhighlight %}

tells us the number of boundary segments between the different phsaes. Those segments with notIndexed phase include also those boundary segments where the grains are cutted by the scanning boundary. To restrict the grain boundaries to a specific phase transistion you shall do

{% highlight matlab %} @@ -86,14 +86,14 @@ ans = misorientation (Forsterite → Enstatite) Bunge Euler angles in degree - phi1 Phi phi2 - 24.399 50.2291 261.351 + phi1 Phi phi2 + 239.986 50.6875 124.673 ans = misorientation (Enstatite → Forsterite) Bunge Euler angles in degree phi1 Phi phi2 - 278.649 50.2291 155.601 + 55.3267 50.6875 300.014 {% endhighlight %}

In the fist case the misorientation returned is from Forsterite to Enstatite and in the second case its exactly the inverse

The selection of grain boundaries according to specific misorientationsm according to twist / tild character or twinning is explained in linked sections.

\ No newline at end of file diff --git a/pages/documentation_matlab/BoundaryTutorial.html b/pages/documentation_matlab/BoundaryTutorial.html index 81736400a..445ccdc29 100644 --- a/pages/documentation_matlab/BoundaryTutorial.html +++ b/pages/documentation_matlab/BoundaryTutorial.html @@ -76,7 +76,7 @@ 1 121 22833 Magnesium 6/mmm X||a*, Y||b, Z||c* boundary segments: 3825 (1020 µm) - inner boundary segments: 4 (0.99 µm) + inner boundary segments: 4 (1 µm) triple points: 114 Properties: meanRotation, GOS @@ -129,7 +129,7 @@

Properties of grain boundaries

A variable of type grain bounda {% highlight plaintext %} ans = grainBoundary - Segments length mineral 1 mineral 2 - 4 0.99 µm Magnesium Magnesium + Segments length mineral 1 mineral 2 + 4 1 µm Magnesium Magnesium {% endhighlight %}

\ No newline at end of file diff --git a/pages/documentation_matlab/CPOSeismicProperties.html b/pages/documentation_matlab/CPOSeismicProperties.html index bf503f1c6..6cbdc9f7d 100644 --- a/pages/documentation_matlab/CPOSeismicProperties.html +++ b/pages/documentation_matlab/CPOSeismicProperties.html @@ -103,7 +103,7 @@ % define the tensor C_cpx = stiffnessTensor(Cij,cs_Tensor_cpx,'density',rho_cpx); {% endhighlight %} -

Single crystal seismic velocities

The single crystal seismic velocites can be computed by the command velocity and are explained in more detail here. At this point we simply use the command plotSeismicVelocities to get an overview of the single crystal seismic properties.

+

Single crystal seismic velocities

The single crystal seismic velocities can be computed by the command velocity and are explained in more detail here. At this point we simply use the command plotSeismicVelocities to get an overview of the single crystal seismic properties.

{% highlight matlab %} plotSeismicVelocities(C_Fo) @@ -132,15 +132,13 @@

Single crystal seismic velocities

The single crystal seismic odf_opx = calcDensity(ebsd('e').orientations,'halfwidth',10*degree); odf_cpx = calcDensity(ebsd('d').orientations,'halfwidth',10*degree); {% endhighlight %} -

Note that you do don't need to write the full name of each phase, only the initial, that works when phases start with different letters. Also note that although we use an EBSD dataset in this example, you can perform the same calculations with CPO data obtain by other methods (e.g. x-ray/neutron diffraction) as you only need the ODF variable for the calculations

To calculate the average stiffness tensor from the ODFs we first compute them from each phase seperately

+

Note that you do don't need to write the full name of each phase, only the initial, that works when phases start with different letters. Also note that although we use an EBSD dataset in this example, you can perform the same calculations with CPO data obtain by other methods (e.g. x-ray/neutron diffraction) as you only need the ODF variable for the calculations

To calculate the average stiffness tensor from the ODFs we first compute them from each phase separately

{% highlight matlab %} [CVoigt_ol, CReuss_ol, CHill_ol] = mean(C_Fo,odf_ol); [CVoigt_opx, CReuss_opx, CHill_opx] = mean(C_opx,odf_opx); [CVoigt_cpx, CReuss_cpx, CHill_cpx] = mean(C_cpx,odf_cpx); {% endhighlight %} -
-{% include inline_image.html file="CPOSeismicProperties_04.png" %} -

and then take their average weighted according the volume of each phase

+

and then take their average weighted according the volume of each phase

{% highlight matlab %} vol_ol = length(ebsd('f')) ./ length(ebsd('indexed')); vol_opx = length(ebsd('e')) ./ length(ebsd('indexed')); @@ -159,17 +157,37 @@

Single crystal seismic velocities

The single crystal seismic rank : 4 (3 x 3 x 3 x 3) tensor in Voigt matrix representation: - 237.68 75.29 76.92 0.32 2.07 -1.3 - 75.29 223.44 75.05 1.77 -0.18 -0.87 - 76.92 75.05 242.28 2.73 2.05 -0.18 - 0.32 1.77 2.73 78.25 -0.23 0.8 - 2.07 -0.18 2.05 -0.23 81.68 0.98 - -1.3 -0.87 -0.18 0.8 0.98 77.16 + 241.93 74.34 78.25 0.71 4.68 -3.15 + 74.34 210.34 73.7 3.59 -0.56 -1.83 + 78.25 73.7 252.19 6.46 4.61 -0.32 + 0.71 3.59 6.46 76.84 -0.41 1.65 + 4.68 -0.56 4.61 -0.41 84.87 2.19 + -3.15 -1.83 -0.32 1.65 2.19 74.49 {% endhighlight %}

Finally, we visualize the polycrystal wave velocities as above

{% highlight matlab %} plotSeismicVelocities(CHill) + +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% +% +% +%
+% ok<*NOPTS> +% +% +%
+% +% {% endhighlight %}
-{% include inline_image.html file="CPOSeismicProperties_05.png" %} +{% include inline_image.html file="CPOSeismicProperties_04.png" %}
\ No newline at end of file diff --git a/pages/documentation_matlab/CSLBoundaries.html b/pages/documentation_matlab/CSLBoundaries.html index 2c23974a5..641cb03e4 100644 --- a/pages/documentation_matlab/CSLBoundaries.html +++ b/pages/documentation_matlab/CSLBoundaries.html @@ -17,7 +17,7 @@ mtexdata csl plotx2east -% grain segementation +% grain segmentation [grains,ebsd.grainId] = calcGrains(ebsd('indexed')); % grain smoothing @@ -44,15 +44,25 @@ mtexColorMap black2white setColorRange([.5,5]) -% the option 'FaceAlpha',0.4 makes the plot a bit transluent +% the option 'FaceAlpha',0.4 makes the plot a bit translucent hold on plot(grains,grains.meanOrientation,'FaceAlpha',0.4,'linewidth',3) hold off -{% endhighlight %} -
-{% include inline_image.html file="CSLBoundaries_02.png" %} -

Detecting CSL Boundaries

In order to detect CSL boundaries within the data set we first restrict the grain boundaries to iron to iron phase transitions and check then the boundary misorientations to be a CSL(3) misorientation with threshold of 3 degree.

-{% highlight matlab %} +% +% +% +%
+% ok<*ASGLU> +% +%

% Detecting CSL Boundaries

+%
+% +% +% In order to detect CSL boundaries within the data set we first restrict +% the grain boundaries to iron to iron phase transitions and check then the +% boundary misorientations to be a CSL(3) misorientation with threshold of +% 3 degree. + % restrict to iron to iron phase transition gB = grains.boundary('iron','iron') @@ -72,8 +82,8 @@ 20356 16364 µm iron iron {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_03.png" %} -

Mark triple points

Next we want to mark all triple points with at least 2 CSL boundaries

+{% include inline_image.html file="CSLBoundaries_02.png" %} +

Mark triple points

Next we want to mark all triple points with at least 2 CSL boundaries

{% highlight matlab %} % logical list of CSL boundaries isCSL3 = grains.boundary.isTwinning(CSL(3,ebsd.CS),3*degree); @@ -87,8 +97,8 @@ hold off {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_04.png" %} -

Merging grains with common CSL(3) boundary

Next we merge all grains together which have a common CSL(3) boundary. This is done with the command merge.

+{% include inline_image.html file="CSLBoundaries_03.png" %} +

Merging grains with common CSL(3) boundary

Next we merge all grains together which have a common CSL(3) boundary. This is done with the command merge.

{% highlight matlab %} % this merges the grains [mergedGrains,parentIds] = merge(grains,gB3); @@ -99,7 +109,7 @@ hold off {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_05.png" %} +{% include inline_image.html file="CSLBoundaries_04.png" %}

Finaly, we check for all other types of CSL boundaries and overlay them with our plot.

{% highlight matlab %} delta = 5*degree; @@ -119,15 +129,15 @@ hold off {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_06.png" %} -

Misorientations in the 3d fundamental zone

We can also look at the boundary misorienations in the 3 dimensional fundamental orientation zone.

+{% include inline_image.html file="CSLBoundaries_05.png" %} +

Misorientations in the 3d fundamental zone

We can also look at the boundary misorientations in the 3 dimensional fundamental orientation zone.

{% highlight matlab %} % compute the boundary of the fundamental zone oR = fundamentalRegion(ebsd.CS,ebsd.CS,'antipodal'); close all plot(oR) -% plot 500 random misorientations in the 3d fundamenal zone +% plot 500 random misorientations in the 3d fundamental zone mori = discreteSample(gB.misorientation,500); hold on plot(mori.project2FundamentalRegion) @@ -140,8 +150,8 @@ hold off {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_07.png" %} -

Analyzing the misorientation distribution function

In order to analyze more quantitatively the boundary misorientation distribution we can compute the so called misorientation distribution function. The option antipodal is applied since we want to identify mori and inv(mori).

+{% include inline_image.html file="CSLBoundaries_06.png" %} +

Analyzing the misorientation distribution function

In order to analyze more quantitatively the boundary misorientation distribution we can compute the so called misorientation distribution function. The option antipodal is applied since we want to identify mori and inv(mori).

{% highlight matlab %} mdf = calcDensity(gB.misorientation,'halfwidth',5*degree,'bandwidth',48) {% endhighlight %} @@ -164,21 +174,28 @@ drawNow(gcm) {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_08.png" %} -

The MDF can be now used to compute prefered misorientations

+{% include inline_image.html file="CSLBoundaries_07.png" %} +

The MDF can be now used to compute preferred misorientations

{% highlight matlab %} [~,mori] = max(mdf,'numLocal',2) {% endhighlight %} {% highlight plaintext %} -mori = misorientation (iron → iron) +Warning: Symmetry missmatch! The following crystal frames +seem to be different + + 1, X||a, Y||b, Z||c + iron (m-3m) + + +mori = misorientation (iron → 1) size: 2 x 1 antipodal: true Bunge Euler angles in degree phi1 Phi phi2 - 116.523 48.2466 206.627 - 134.977 37.7233 225.02 + 116.493 48.1916 206.647 + 103.655 26.4436 283.461 {% endhighlight %}

and their volumes in percent

{% highlight matlab %} @@ -193,7 +210,7 @@ ans = 2.0338 {% endhighlight %} -

or to plot the MDF along certain fibres

+

or to plot the MDF along certain fibers

{% highlight matlab %} omega = linspace(0,60*degree); fibre100 = orientation.byAxisAngle(xvector,omega,mdf.CS,mdf.SS) @@ -222,7 +239,7 @@ size: 1 x 100 {% endhighlight %}
-{% include inline_image.html file="CSLBoundaries_09.png" %} +{% include inline_image.html file="CSLBoundaries_08.png" %}

or to evaluate it in an misorientation directly

{% highlight matlab %} mori = orientation.byEuler(15*degree,28*degree,14*degree,mdf.CS,mdf.CS) @@ -230,6 +247,17 @@ mdf.eval(mori) mdf.eval(csl3) + +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/ClusterDemo.html b/pages/documentation_matlab/ClusterDemo.html index ab09b11ae..b3b10670e 100644 --- a/pages/documentation_matlab/ClusterDemo.html +++ b/pages/documentation_matlab/ClusterDemo.html @@ -119,7 +119,7 @@ {% endhighlight %} {% highlight plaintext %} -Warning: ward's linkage specified with non-Euclidean dissimilarity matrix. +Warning: Statistics Toolbox not installed! {% endhighlight %} {% highlight matlab %} @@ -133,6 +133,4 @@ hold off end {% endhighlight %} -
-{% include inline_image.html file="ClusterDemo_06.png" %} -
\ No newline at end of file + \ No newline at end of file diff --git a/pages/documentation_matlab/ColorMaps.html b/pages/documentation_matlab/ColorMaps.html index 4274da6f6..ba21a6663 100644 --- a/pages/documentation_matlab/ColorMaps.html +++ b/pages/documentation_matlab/ColorMaps.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Color Mapping - edit page

A central issue when interpreting plots is to have a consistent color coding among all plots. In MTEX this can be achieved in two ways. If the the minimum and maximum value are known then one can specify the color range directly using the options colorrange or contourf, or the command setColorRange is used which allows to set the color range afterwards.

A sample ODFs and Simulated Pole Figure Data

Let us first define some model ODFs to be plotted later on.

+ edit page

A central issue when interpreting plots is to have a consistent color coding among all plots. In MTEX this can be achieved in two ways. If the the minimum and maximum value are known then one can specify the color range directly using the options 'colorrange' or 'contourf', or the command setColorRange is used which allows to set the color range afterwards.

A sample ODFs and Simulated Pole Figure Data

Let us first define some model ODFs to be plotted later on.

{% highlight matlab %} cs = crystalSymmetry('-3m'); odf = fibreODF(Miller(1,1,0,cs),zvector) @@ -27,7 +27,7 @@ fibre : (11-20) || 0,0,1 weight: 1 {% endhighlight %} -

Tight Colorcoding

When plot is called without any colorcoding option, the plots are constructed using the tight option to the range of the data independently from the other plots. This means that different pole figures may have different color coding and in principle cannot be compared to each other.

+

Tight Colorcoding

When plot is called without any colorcoding option, the plots are constructed using the option 'tight' to the range of the data independently from the other plots. This means that different pole figures may have different color coding and in principle cannot be compared to each other.

{% highlight matlab %} close all plot(pf) @@ -35,7 +35,7 @@

Tight Colorcoding

When plot {% endhighlight %}

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

Equal Colorcoding

The tight colorcoding can make the reading and comparison of two pole figures a bit hard. If you want to have one colorcoding for all plots within one figure use the option colorrange to equal.

+

Equal Colorcoding

The 'tight' colorcoding can make the reading and comparison of two pole figures a bit hard. If you want to have one colorcoding for all plots within one figure set the option 'colorrange' to 'equal'.

{% highlight matlab %} plot(pf,'colorRange','equal') mtexColorbar @@ -67,13 +67,13 @@

Tight Colorcoding

When plot {% endhighlight %}

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

Modifying the Colorrange After Plotting

The color range of the figures can also be adjusted afterwards using the command CLim

+

Modifying the Colorrange After Plotting

The color range of the figures can also be adjusted afterwards using the command setColorRange

{% highlight matlab %} setColorRange([0.38,3.9]) {% endhighlight %}
{% include inline_image.html file="ColorMaps_06.png" %} -

Logarithmic Plots

Sometimes logarithmic scaled plots are of interest. For this case all plots in MTEX understand the option logarithmic, e.g.

+

Logarithmic Plots

Sometimes logarithmic scaled plots are of interest. For this case all plots commands in MTEX understand the option 'logarithmic', e.g.

{% highlight matlab %} close all; plotPDF(odf,[Miller(1,0,0,cs),Miller(1,1,1,cs)],'antipodal','logarithmic') @@ -92,7 +92,7 @@

Tight Colorcoding

When plot {% include inline_image.html file="ColorMaps_08.png" %}

Multiple Colormaps

One can even use different colormaps within one figure

{% highlight matlab %} -% initialize an MTEXFigure +% initialize an MTEX-figure mtexFig = newMtexFigure; % for three different colormaps diff --git a/pages/documentation_matlab/CrystalDirections.html b/pages/documentation_matlab/CrystalDirections.html index b52125a66..abd93c6a4 100644 --- a/pages/documentation_matlab/CrystalDirections.html +++ b/pages/documentation_matlab/CrystalDirections.html @@ -12,12 +12,12 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Miller Indices - edit page

Miller indices are used to describe directions with respect to the crystal reference system.

Crystal Lattice Directions

Since lattice directions are always subject to a certain crystal reference frame, the starting point for any crystal direction is the definition of a variable of type crystalSymmetry.

+ edit page

Miller indices are used to describe directions with respect to the crystal reference system.

Crystal Lattice Directions

Since lattice directions are always subject to a certain crystal reference frame, the starting point for any crystal direction is the definition of a variable of type crystalSymmetry.

{% highlight matlab %} cs = crystalSymmetry('triclinic',[5.29,9.18,9.42],[90.4,98.9,90.1]*degree,... 'X||a*','Z||c','mineral','Talc'); {% endhighlight %} -

The variable cs containes the geometry of the crystal reference frame and, in particular, the alignment of the crystallographic a,b, and, c axis.

+

The variable cs contains the geometry of the crystal reference frame and, in particular, the alignment of the crystallographic \(\vec a\), \(\vec b\), and, \(\vec c\) axis.

{% highlight matlab %} a = cs.aAxis b = cs.bAxis @@ -37,7 +37,7 @@ u v w 0 0 1 {% endhighlight %} -

A lattice direction \(\vec m = u \cdot \vec a + v \cdot \vec b + w \cdot \vec c\) is a vector with coordinates \(u\), \(v\), \(w\) with respect to these crystallographic axes. Such a direction is commonly denoted by \([uvw]\) with coordinates \(u\), \(v\), \(w\) called Miller indices. In MTEX a lattice direction is represented by a variable of type Miller which is defined by

+

A lattice direction \(\vec m = u \cdot \vec a + v \cdot \vec b + w \cdot \vec c\) is a vector with coordinates \(u\), \(v\), \(w\) with respect to these crystallographic axes. Such a direction is commonly denoted by \([uvw]\) with coordinates \(u\), \(v\), \(w\) called Miller indices. In MTEX a lattice direction is represented by a variable of type Miller which is defined by

{% highlight matlab %} m = Miller(1,0,1,cs,'uvw') {% endhighlight %} diff --git a/pages/documentation_matlab/CrystalOperations.html b/pages/documentation_matlab/CrystalOperations.html index 77d3f7ab3..3f448de5b 100644 --- a/pages/documentation_matlab/CrystalOperations.html +++ b/pages/documentation_matlab/CrystalOperations.html @@ -26,7 +26,7 @@ a, b, c : 4.9, 4.9, 5.4 reference frame: X||a*, Y||b, Z||c* {% endhighlight %} -

and consider two hexgonal prism normal

+

and consider two hexagonal prism normal

{% highlight matlab %} m1 = Miller(1,-1,0,0,cs) m2 = Miller(1,0,-1,0,cs) @@ -58,7 +58,7 @@ U V T W 0 0 0 1 {% endhighlight %} -

Note that MTEX automatically switches from reciprocal to direct coordinates for displaying the zone axis.

The other way round two, not paralllel, zone axes

+

Note that MTEX automatically switches from reciprocal to direct coordinates for displaying the zone axis.

The other way round two, not parallel, zone axes

{% highlight matlab %} d1 = Miller(0,0,0,1,cs,'UVTW'); d2 = Miller(1,-2,1,3,cs,'UVTW'); @@ -73,7 +73,7 @@ h k i l 1 0 -1 0 {% endhighlight %} -

Symmetrically Equivalent Crystal Directions

Since crystal lattices are symmetric lattice directions can be grouped into classes of symmetrically equivalent directions. Those groups can be derived by permuting the Miller indeces (uvw). The class of all directions symmetrically equivalent to (uvw) is commonly denoted by uvw, while the class of all lattice planes symmetrically equivalent to the plane (hkl) is denoted by {hkl}. Given a lattice direction or a lattice plane all symmetrically equivalent directions and planes are computed by the command symmetrise

+

Symmetrically Equivalent Crystal Directions

Since crystal lattices are symmetric lattice directions can be grouped into classes of symmetrically equivalent directions. Those groups can be derived by permuting the Miller indices (uvw). The class of all directions symmetrically equivalent to (uvw) is commonly denoted by uvw, while the class of all lattice planes symmetrically equivalent to the plane (hkl) is denoted by {hkl}. Given a lattice direction or a lattice plane all symmetrically equivalent directions and planes are computed by the command symmetrise

{% highlight matlab %} symmetrise(d2) {% endhighlight %} @@ -89,7 +89,7 @@

Symmetrically Equivalent Crystal Directions

Since crystal latt -2 1 1 3 -2 1 1 -3 {% endhighlight %} -

As always the keyword antipodal adds antipodal symmetry to this computation

+

As always the keyword 'antipodal' adds antipodal symmetry to this computation

{% highlight matlab %} symmetrise(d2,'antipodal') {% endhighlight %} @@ -111,7 +111,7 @@

Symmetrically Equivalent Crystal Directions

Since crystal latt -2 1 1 -3 2 -1 -1 3 {% endhighlight %} -

Using the options symmetrised and labeled all symmetrically equivalent crystal directions are plotted together with their Miller indices. Lets apply this to a list of lattice planes

+

Using the options 'symmetrised' and 'labeled' all symmetrically equivalent crystal directions are plotted together with their Miller indices. Lets apply this to a list of lattice planes

{% highlight matlab %} h = Miller({1,0,-1,0},{1,1,-2,0},{1,0,-1,1},{1,1,-2,1},{0,0,0,1},cs); @@ -124,7 +124,7 @@

Symmetrically Equivalent Crystal Directions

Since crystal latt {% endhighlight %}

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

The command <vector3d.eq.html eq or == > can be used to check whether two crystal directions are symmetrically equivalent. Compare

+

The command eq or == can be used to check whether two crystal directions are symmetrically equivalent. Compare

{% highlight matlab %} Miller(1,1,-2,0,cs) == Miller(-1,-1,2,0,cs) {% endhighlight %} @@ -144,7 +144,7 @@

Symmetrically Equivalent Crystal Directions

Since crystal latt logical 1 {% endhighlight %} -

Angles

The angle between two crystal directions m1 and m2 is defined as the smallest angle between m1 and all symmetrically equivalent directions to m2. This angle is in radians and it is calculated by the function angle

+

Angles

The angle between two crystal directions m1 and m2 is defined as the smallest angle between m1 and all symmetrically equivalent directions to m2. This angle is in radiant and it is calculated by the function angle(m1,m2)

{% highlight matlab %} angle(Miller(1,1,-2,0,cs),Miller(-1,-1,2,0,cs)) / degree {% endhighlight %} @@ -153,7 +153,7 @@

Angles

The angle between two crystal directions m1 and m2 is ans = 60.0000 {% endhighlight %} -

As always the keyword antipodal adds antipodal symmetry to this computation

+

As always the keyword 'antipodal' adds antipodal symmetry to this computation

{% highlight matlab %} angle(Miller(1,1,-2,0,cs),Miller(-1,-1,2,0,cs),'antipodal') / degree {% endhighlight %} @@ -162,7 +162,7 @@

Angles

The angle between two crystal directions m1 and m2 is ans = 0 {% endhighlight %} -

In order to ignore the crystal symmetry, i.e., to compute the actual angle between two directions use the option noSymmetry

+

In order to ignore the crystal symmetry, i.e., to compute the actual angle between two directions use the option 'noSymmetry'

{% highlight matlab %} angle(Miller(1,1,-2,0,cs),Miller(-1,-1,2,0,cs),'noSymmetry') / degree {% endhighlight %} @@ -171,7 +171,7 @@

Angles

The angle between two crystal directions m1 and m2 is ans = 180 {% endhighlight %} -

This option is available for many other functions involving crystal directions and crystal orientations.

Calculations

Essentially all the operations defined for general directions, i.e. for variables of type vector3d are also available for Miller indices. In addition Miller indices interact with crystal orientations. Consider the crystal orientation

+

This option is available for many other functions involving crystal directions and crystal orientations.

Calculations

Essentially all the operations defined for general directions, i.e. for variables of type vector3d are also available for Miller indices. In addition Miller indices interact with crystal orientations. Consider the crystal orientation

{% highlight matlab %} ori = orientation.byEuler(10*degree,20*degree,30*degree,cs) {% endhighlight %} @@ -190,6 +190,8 @@

Angles

The angle between two crystal directions m1 and m2 is {% highlight plaintext %} ans = vector3d + x y z + 0.219491 -0.0733607 -0.0401679 {% endhighlight %}

By applying a crystal symmetry one obtains the coordinates with respect to the specimen coordinate system of all crystallographically equivalent specimen directions.

{% highlight matlab %} @@ -197,21 +199,23 @@

Angles

The angle between two crystal directions m1 and m2 is plot(p,'grid') % -% The above plot is essentialy the pole figure representation of the -% orientation *ori*. +% The above plot is essentially the pole figure representation of the +% orientation |ori|. % {% endhighlight %}

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

Conversions

Converting a crystal direction which is represented by its coordinates with respect to the crystal coordinate system a, b, c into a representation with respect to the associated Euclidean coordinate system is done by the command vectord3d.

+

Conversions

Converting a crystal direction which is represented by its coordinates with respect to the crystal coordinate system \(a\), \(b\), \(c\) into a representation with respect to the associated Euclidean coordinate system is done by the command vector3d.

{% highlight matlab %} vector3d(m1) {% endhighlight %} {% highlight plaintext %} ans = vector3d + x y z + 0.117443 -0.203417 0 {% endhighlight %} -

Conversion into spherical coordinates requires the function polar

+

Conversion into spherical coordinates requires the function polar

{% highlight matlab %} [theta,rho] = polar(m1) {% endhighlight %} diff --git a/pages/documentation_matlab/CrystalReferenceSystem.html b/pages/documentation_matlab/CrystalReferenceSystem.html index 7f5ec6d44..b345ee976 100644 --- a/pages/documentation_matlab/CrystalReferenceSystem.html +++ b/pages/documentation_matlab/CrystalReferenceSystem.html @@ -26,11 +26,11 @@ alpha, beta, gamma: 80°, 85°, 95° reference frame : X||a*, Z||c {% endhighlight %} -

Need of a Euclidean reference system

However, there are many crystal properties, like orientation or tensorial properties, that are described with respect to an Euclidean reference system \(\vec x\), \(\vec y\), \(\vec z\) as oposed to the crystallographic axes \(\vec a\), \(\vec b\)s, \(\vec c\). Most importantly, Euler angles describe orientations as subsequent rotations about the \(\vec z\), \(\vec x\) and \(\vec z\) axis. Hence, we need to inscribe an Eucledian reference system \(\vec x\), \(\vec y\), \(\vec z\) into the crystallogaphic reference system \(\vec a\), \(\vec b\), \(\vec c\).

Note, that also the allignment of the crystal axes \(\vec a\), \(\vec b\) and \(\vec c\) with respect to the atomic lattice, and hence it symmetries, follows different conventions. These are discussed in the section Alignment of the Crystal Axes.

Cubic, tetragona and orthorhombic symmetries

In orthorhombic, tetragonal and cubic crystal symmetry the crystal reference system \(\vec a\), \(\vec b\), \(\vec c\) is itsself an Euclidean one and, hence, setting \(\vec x\) parallel to \(\vec a\), \(\vec y\) parallel to \(\vec b\) and \(\vec z\) parallel to \(\vec c\) is a canonical choice.

As for such symmetries this is also the default in MTEX there is no need to specify the alignment seperately.

Trigonal and hexagonal materials

For trigonal and hexagonal materials the z axis is commonly aligned with the \(\vec c\) axis. As for the \(\vec x\) and \(\vec y\) axes they are either aligned with the \(\vec a\) or \(\vec b\) axes.

The following command alignes the \(\vec x\) axes to the \(\vec a\) axes and the \(\vec z\) axes to the \(\vec c\) axes.

+

Need of a Euclidean reference system

However, there are many crystal properties, like orientation or tensorial properties, that are described with respect to an Euclidean reference system \(\vec x\), \(\vec y\), \(\vec z\) as opposed to the crystallographic axes \(\vec a\), \(\vec b\)s, \(\vec c\). Most importantly, Euler angles describe orientations as subsequent rotations about the \(\vec z\), \(\vec x\) and \(\vec z\) axis. Hence, we need to inscribe an Euclidean reference system \(\vec x\), \(\vec y\), \(\vec z\) into the crystallographic reference system \(\vec a\), \(\vec b\), \(\vec c\).

Note, that also the alignment of the crystal axes \(\vec a\), \(\vec b\) and \(\vec c\) with respect to the atomic lattice, and hence it symmetries, follows different conventions. These are discussed in the section Alignment of the Crystal Axes.

Cubic, tetragona and orthorhombic symmetries

In orthorhombic, tetragonal and cubic crystal symmetry the crystal reference system \(\vec a\), \(\vec b\), \(\vec c\) is itself an Euclidean one and, hence, setting \(\vec x\) parallel to \(\vec a\), \(\vec y\) parallel to \(\vec b\) and \(\vec z\) parallel to \(\vec c\) is a canonical choice.

As for such symmetries this is also the default in MTEX there is no need to specify the alignment seperately.

Trigonal and hexagonal materials

For trigonal and hexagonal materials the z axis is commonly aligned with the \(\vec c\) axis. As for the \(\vec x\) and \(\vec y\) axes they are either aligned with the \(\vec a\) or \(\vec b\) axes.

The following command aligns the \(\vec x\) axes to the \(\vec a\) axes and the \(\vec z\) axes to the \(\vec c\) axes.

{% highlight matlab %} cs_x2a = crystalSymmetry('321',[1.7,1.7,1.4],'X||a','Z||c'); -% visualize the resuls +% visualize the results plot(cs_x2a,'figSize','small') annotate(cs_x2a.aAxis,'MarkerFaceColor','r','label','a','backgroundColor','w') annotate(cs_x2a.bAxis,'MarkerFaceColor','r','label','b','backgroundColor','w') @@ -39,7 +39,7 @@

Need of a Euclidean reference system

However, there are many c {% endhighlight %}

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

In contrast the following command alignes the \(\vec y\) axes to the \(\vec a\) axes and the \(\vec z\) axes to the \(\vec c\) axes.

+

In contrast the following command aligns the \(\vec y\) axes to the \(\vec a\) axes and the \(\vec z\) axes to the \(\vec c\) axes.

{% highlight matlab %} cs_y2a = crystalSymmetry('321',[1.7,1.7,1.4],'y||a','Z||c'); plot(cs_y2a,'figSize','small') @@ -50,7 +50,7 @@

Need of a Euclidean reference system

However, there are many c {% endhighlight %}

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

The only difference between the above two plots is the position of the \(\vec x\) and \(\vec y\) axes. The reason is that visualizations relative to the crystal reference system, e.g., inverse pole figures, are in MTEX aligned on the screen according to the b-axis.

This on secreen alignment can be easily modified by

+

The only difference between the above two plots is the position of the \(\vec x\) and \(\vec y\) axes. The reason is that visualizations relative to the crystal reference system, e.g., inverse pole figures, are in MTEX aligned on the screen according to the b-axis.

This on-screen alignment can be easily modified by

{% highlight matlab %} % change on screen alignment plota2east @@ -67,7 +67,7 @@

Need of a Euclidean reference system

However, there are many c {% endhighlight %}

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

It should be stressed that the alignment between the Eucledean crystal axes \(\vec x\), \(\vec y\), \(\vec z\) and the crystallographic axes \(\vec a\), \(\vec b\) and \(\vec c\) is crucial for many computations. The difference between both setups becomes more vsible if we plot crystal shapes in the \(\vec x\), \(\vec y\), \(\vec z\) coordinate system

+

It should be stressed that the alignment between the Euclidean crystal axes \(\vec x\), \(\vec y\), \(\vec z\) and the crystallographic axes \(\vec a\), \(\vec b\) and \(\vec c\) is crucial for many computations. The difference between both setups becomes more visible if we plot crystal shapes in the \(\vec x\), \(\vec y\), \(\vec z\) coordinate system

{% highlight matlab %} cS_x2a = crystalShape.quartz(cs_x2a); @@ -137,7 +137,7 @@

Need of a Euclidean reference system

However, there are many c ans = 30.0000 {% endhighlight %} -

In many cases MTEX automatically recognizes different setups and corrects for this. In order to manually transform orientations or tensors from one reference frame into another reference frame one might use the command transformReferenceFrame. The following command transfroms the reference frame of orientation ori_y2a into the reference frame cs_x2a

+

In many cases MTEX automatically recognizes different setups and corrects for this. In order to manually transform orientations or tensors from one reference frame into another reference frame one might use the command transformReferenceFrame. The following command transforms the reference frame of orientation ori_y2a into the reference frame cs_x2a

{% highlight matlab %} ori_x2a.transformReferenceFrame(cs_y2a) {% endhighlight %} @@ -149,7 +149,7 @@

Need of a Euclidean reference system

However, there are many c phi1 Phi phi2 270 0 0 {% endhighlight %} -

Triclinic and monoclinic symmetries

In triclinic and monoclinic symmetries even more different setups are used. As two perpedicular crystal axes are required to align with \(\vec x\), \(\vec y\) or \(\vec z\) one ussually chooses one crystal axis from the direct coordinate system, i.e., \(\vec a\), \(\vec b\) or \(\vec c\), and the second crystal axis from the reciprocal axes \(\vec a^*\), \(\vec b^*\) or \(\vec c^*\). Typical examples for such setups are

+

Triclinic and monoclinic symmetries

In triclinic and monoclinic symmetries even more different setups are used. As two perpendicular crystal axes are required to align with \(\vec x\), \(\vec y\) or \(\vec z\) one usually chooses one crystal axis from the direct coordinate system, i.e., \(\vec a\), \(\vec b\) or \(\vec c\), and the second crystal axis from the reciprocal axes \(\vec a^*\), \(\vec b^*\) or \(\vec c^*\). Typical examples for such setups are

{% highlight matlab %} cs = crystalSymmetry('-1', [8.290 12.966 7.151], [91.18 116.31 90.14]*degree,... 'x||a*','y||b', 'mineral','An0 Albite 2016') @@ -169,6 +169,17 @@

Triclinic and monoclinic symmetries

In triclinic and monoclin {% highlight matlab %} cs = crystalSymmetry('-1', [8.290 12.966 7.151], [91.18 116.31 90.14]*degree,... 'x||a','c||c*', 'mineral','An0 Albite 2016') + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/CrystalShapes.html b/pages/documentation_matlab/CrystalShapes.html index bdc1a1082..2c79d04c5 100644 --- a/pages/documentation_matlab/CrystalShapes.html +++ b/pages/documentation_matlab/CrystalShapes.html @@ -22,7 +22,7 @@ % and plot it close all -plot(cS) +plot(cS,'faceAlpha',0.2) {% endhighlight %} {% highlight plaintext %} @@ -44,7 +44,7 @@ {% endhighlight %}
{% include inline_image.html file="CrystalShapes_01.png" %} -

Internally, a crystal shape is represented as a list of faces which are bounded by a list of vertices

+

Internally, a crystal shape is represented as a list of faces which are bounded by a list of vertices cS.V and edges cS.E

{% highlight matlab %} cS.V {% endhighlight %} @@ -52,8 +52,44 @@ {% highlight plaintext %} ans = vector3d size: 12 x 1 + x y z + -0.393614 0 -0.308331 + -0.393614 0 0.308331 + -0.196807 -0.34088 0.308331 + -0.196807 0.34088 -0.308331 + -0.196807 -0.34088 -0.308331 + -0.196807 0.34088 0.308331 + 0.196807 -0.34088 0.308331 + 0.196807 0.34088 -0.308331 + 0.196807 -0.34088 -0.308331 + 0.196807 0.34088 0.308331 + 0.393614 0 -0.308331 + 0.393614 0 0.308331 +{% endhighlight %} +

Using the commands plotInnerFace, plot(cS,sS) and arrow3d we may plot internal lattice planes, directions or slip systems into the crystal shape

+{% highlight matlab %} +sS = [slipSystem.pyramidal2CA(ebsd.CS), ... + slipSystem.pyramidalA(ebsd.CS)] + +plot(cS,'faceAlpha',0.2) +hold on +plot(cS,sS(2),'faceColor','blue') +plot(cS,sS(1),'faceColor','red') + +hold off {% endhighlight %} -

Calculating with crystal shapes

Crystal shapes are defined in crystal coordinates. Thus applying an orientation rotates them into specimen coordinates. This functionality can be used to visualize crystal orientations in EBSD maps

+ +{% highlight plaintext %} +sS = slipSystem (Titanium (Alpha)) + size: 1 x 2 + + U V T W | H K I L CRSS + 2 -1 -1 3 -2 1 1 2 1 + 2 -1 -1 0 0 1 -1 1 1 +{% endhighlight %} +
+{% include inline_image.html file="CrystalShapes_02.png" %} +

Calculating with crystal shapes

Crystal shapes are defined in crystal coordinates. Thus applying an orientation rotates them into specimen coordinates. This functionality can be used to visualize crystal orientations in EBSD maps

{% highlight matlab %} % plot an EBSD map clf % clear current figure @@ -62,12 +98,12 @@

Calculating with crystal shapes

Crystal shapes are defined in hold on scaling = 100; % scale the crystal shape to have a nice size -% plot at position (500,500) the orientatation of the corresponding crystal +% plot at position (500,500) the orientation of the corresponding crystal plot(500,500,50, ebsd(500,500).orientations * cS * scaling) hold off {% endhighlight %}

-{% include inline_image.html file="CrystalShapes_02.png" %} +{% include inline_image.html file="CrystalShapes_03.png" %}

As we have seen in the previous section we can apply several operations on crystal shapes. These include

  • factor * cS scales the crystal shape in size
  • ori * cS rotates the crystal shape in the defined orientation
  • [xy] + cS or [xyz] + cS shifts the crystal shape in the specified positions

At this point it comes into help that MTEX supports lists of crystal shapes, i.e., whenever one of the operations listed above includes a list (e.g. a list of orientations) the multiplication will yield a list of crystal shapes. Lets illustrate this

{% highlight matlab %} % compute some grains @@ -90,8 +126,8 @@

Calculating with crystal shapes

Crystal shapes are defined in hold off {% endhighlight %}

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

Plotting crystal shapes

The above can be accomplished a bit more directly and a bit more nice with

+{% include inline_image.html file="CrystalShapes_04.png" %} +

Plotting crystal shapes

The above can be accomplished a bit more directly and a bit more nice with

{% highlight matlab %} % plot a grain map plot(grains,grains.meanOrientation) @@ -102,14 +138,14 @@

Calculating with crystal shapes

Crystal shapes are defined in hold off {% endhighlight %}

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

In the same waywe may visualize grain orientations and grains size within pole figures

+{% include inline_image.html file="CrystalShapes_05.png" %} +

In the same way we may visualize grain orientations and grains size within pole figures

{% highlight matlab %} plotPDF(grains(isBig).meanOrientation,Miller({1,0,-1,0},{0,0,0,1},ebsd.CS),'contour') plot(grains(isBig).meanOrientation,0.002*cSGrains,'add2all') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_05.png" %} +{% include inline_image.html file="CrystalShapes_06.png" %}

or even within ODF sections

{% highlight matlab %} % compute the odf @@ -122,8 +158,8 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(grains(isBig).meanOrientation,0.002*cSGrains,'add2all') {% endhighlight %}

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

Twinning relationships

We may also you crystal shapes to illustrate twinning relation ships

+{% include inline_image.html file="CrystalShapes_07.png" %} +

Twinning relationships

We may also you crystal shapes to illustrate twinning relation ships

{% highlight matlab %} % define some twinning misorientation mori = orientation.byAxisAngle(Miller({1 0-1 0},ebsd.CS),34.9*degree) @@ -147,8 +183,8 @@

Calculating with crystal shapes

Crystal shapes are defined in 330 34.9 30 {% endhighlight %}

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

Defining complicated crystal shapes

For symmetries other then hexagonal or cubic one would like to have more complicated crystal shape representing the true appearance. To this end one has to include more faces into the representation and carefuly adjust their distance to the origin.

Lets consider a quartz crystal.

+{% include inline_image.html file="CrystalShapes_08.png" %} +

Defining complicated crystal shapes

For symmetries other then hexagonal or cubic one would like to have more complicated crystal shape representing the true appearance. To this end one has to include more faces into the representation and carefuly adjust their distance to the origin.

Lets consider a quartz crystal.

{% highlight matlab %} cs = loadCIF('quartz') {% endhighlight %} @@ -187,7 +223,7 @@

Calculating with crystal shapes

Crystal shapes are defined in faces: 18 {% endhighlight %}

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

i.e. we see only the possitive 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 coresponding normal with a factor larger then 1.

{% highlight matlab %} N = [2*m,r,z]; @@ -196,7 +232,7 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(cS) {% endhighlight %}

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

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

{% highlight matlab %} % collect the face normal with the right scalling @@ -206,7 +242,7 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(cS) {% endhighlight %}

-{% include inline_image.html file="CrystalShapes_10.png" %} +{% include inline_image.html file="CrystalShapes_11.png" %}

Finaly, we add the tridiagonal bipyramid and the positive Trapezohedron

{% highlight matlab %} % collect the face normal with the right scalling @@ -216,13 +252,13 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(cS) {% endhighlight %}

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

Marking crystal faces

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

+{% 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_12.png" %} +{% include inline_image.html file="CrystalShapes_13.png" %}

or even label the faces directly

{% highlight matlab %} plot(cS) @@ -234,8 +270,8 @@

Calculating with crystal shapes

Crystal shapes are defined in end {% endhighlight %}

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

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. Mathematica 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

+{% include inline_image.html file="CrystalShapes_14.png" %} +

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. Mathematica 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 N = [m,r,z,s2,x2]; @@ -246,7 +282,7 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(cS,'colored') {% endhighlight %}

-{% include inline_image.html file="CrystalShapes_14.png" %} +{% include inline_image.html file="CrystalShapes_15.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

{% highlight matlab %} extension = [0.9 1.1 1]; @@ -254,7 +290,7 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(cS,'colored') {% endhighlight %}

-{% include inline_image.html file="CrystalShapes_15.png" %} +{% include inline_image.html file="CrystalShapes_16.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 %} habitus = 1.1; @@ -270,12 +306,12 @@

Calculating with crystal shapes

Crystal shapes are defined in plot(cS,'colored') {% endhighlight %}

-{% include inline_image.html file="CrystalShapes_16.png" %} -
{% include inline_image.html file="CrystalShapes_17.png" %}
{% include inline_image.html file="CrystalShapes_18.png" %} -

Select faces

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

+
+{% include inline_image.html file="CrystalShapes_19.png" %} +

Select faces

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

{% highlight matlab %} plot(cS) hold on @@ -283,29 +319,29 @@

Calculating with crystal shapes

Crystal shapes are defined in hold off {% endhighlight %}

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

Gallery of hardcoded crystal shapes

+{% include inline_image.html file="CrystalShapes_20.png" %} +

Gallery of hardcoded crystal shapes

{% highlight matlab %} plot(crystalShape.olivine,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_20.png" %} +{% include inline_image.html file="CrystalShapes_21.png" %}
{% highlight matlab %} plot(crystalShape.garnet,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_21.png" %} +{% include inline_image.html file="CrystalShapes_22.png" %}
{% highlight matlab %} plot(crystalShape.topaz,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_22.png" %} +{% include inline_image.html file="CrystalShapes_23.png" %}
{% highlight matlab %} plot(crystalShape.plagioclase,'colored') {% endhighlight %}
-{% include inline_image.html file="CrystalShapes_23.png" %} +{% include inline_image.html file="CrystalShapes_24.png" %}
\ No newline at end of file diff --git a/pages/documentation_matlab/CrystalSymmetries.html b/pages/documentation_matlab/CrystalSymmetries.html index d4ad74678..27d94464b 100644 --- a/pages/documentation_matlab/CrystalSymmetries.html +++ b/pages/documentation_matlab/CrystalSymmetries.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Crystal Symmetries - edit page

Crystal symmetries are a sets of rotations and mirroring operations that leave the lattice of a crystal invariant. They form so called groups since the concatenation of two symmetry operations is again a symmetry operation.

Depending which symmetry operations are coonsidered the symmetry groups are categorized either into 230 space groups, 32 point groups or 11 Laue groups.

Purely enatiomorphic (rotational) symmetry groups

There exist exactly 11 symmetry groups consisting of proper rotations only, namely, 1, 2, 222, 3, 23, 4, 422, 6, 622, 32, 432. These are the so called enatiomorphic groups. All the groups can be defined in MTEX either by its international notation

+ edit page

Crystal symmetries are sets of rotations and mirroring operations that leave the lattice of a crystal invariant. They form the so called "groups" since the concatenation of two symmetry operations is again a symmetry operation.

Depending which symmetry operations are considered, the symmetry groups are categorized either into 230 space groups, 32 point groups or 11 Laue groups.

Purely enantiomorphic (rotational) symmetry groups

There exist exactly 11 symmetry groups consisting of proper rotations only, namely, 1, 2, 222, 3, 23, 4, 422, 6, 622, 32, 432. These are the so called enantiomorphic groups. All the groups can be defined in MTEX either by its international notation

{% highlight matlab %} cs = crystalSymmetry('432') {% endhighlight %} @@ -68,7 +68,7 @@ elements: 48 a, b, c : 1, 1, 1 {% endhighlight %} -

Since all Laue groups can be derived from the 11 enantiomorphic groups there are also 11 Laue groups, namely -1, 2/m, mmm, -3, -3m, -4/m, 4/mmm, 6/m, 6/mmm, m-3, m-3m.

The Laue groups have always exactly twice as many symmetry elements as the corresponding enantiomorphic group. As the following example illustrates each symmetry element from the enantiomorphic group occurs two times - with and without inversion - in the corresponding Laue group.

+

Since all Laue groups can be derived from the 11 enantiomorphic groups there are also 11 Laue groups, namely -1, 2/m, mmm, -3, -3m, -4/m, 4/mmm, 6/m, 6/mmm, m-3, m-3m.

The Laue groups have always exactly twice as many symmetry elements as the corresponding enantiomorphic group. As the following example illustrates, each symmetry element from the enantiomorphic group occurs twice - with and without inversion - in the corresponding Laue group.

{% highlight matlab %} cs = crystalSymmetry('222'); rotation(cs) @@ -101,7 +101,7 @@ 180 0 0 1 45 180 225 1 {% endhighlight %} -

Point groups

While the enantiomorphic groups contain exclusivly proper rotations and Laue groups contain a proper and an improper version of each rotation, there are also symmetry groups with improper rotations that do not contain the inversion, e.g. the point group mm2

+

Point groups

While the enantiomorphic groups contain exclusively proper rotations and Laue groups contain a proper and an improper version of each rotation, there are also symmetry groups with improper rotations that do not contain the inversion, e.g. the point group mm2

{% highlight matlab %} cs = crystalSymmetry('mm2') rotation(cs) @@ -159,7 +159,7 @@

Point groups

While the enantiomorphic groups contain exclusivl {% endhighlight %}

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

Alignment of the symmetry operations

Although in general only 32 point groups are distingished, some of them allow for different alignments of the symmetry operations with respect to the crystal axes. The following plots show three different alignments of the point group 2mm. Note that the a-axis points in all three case towards south.

+

Alignment of the symmetry operations

Although in general only 32 point groups are distinguished, some of them allow for different alignments of the symmetry operations with respect to the crystal axes. The following plots show three different alignments of the point group 2mm. Note that the a-axis points in all three case towards south.

{% highlight matlab %} mtexFigure('layout',[1 3]); cs = crystalSymmetry('2mm'); @@ -181,7 +181,7 @@

Point groups

While the enantiomorphic groups contain exclusivl {% endhighlight %}

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

Similarly as with mm2, there are different alignements for the point groups 112, 121, 211, 11m, 1m1, m11, 321, 312, 3m1, 31m, etc.

Space groups

If additionally to the proper and improper rotations also translations are considered as symmetry operations the number of different symmetry groups increases to 320. Those are exhaustivly described in the international table of crystallography.

MTEX currently does not support space groups. If the name of a space group os passed to the command crystalSymmetry, MTEX automatically determines the corresponding point group and assigns it to the variable.

+

Similarly as with mm2, there are different alignments for the point groups 112, 121, 211, 11m, 1m1, m11, 321, 312, 3m1, 31m, etc.

Space groups

If additionally to the proper and improper rotations also translations are considered as symmetry operations the number of different symmetry groups increases to 320. Those are exhaustively described in the international table of crystallography.

MTEX currently does not support space groups. If the name of a space group os passed to the command crystalSymmetry, MTEX automatically determines the corresponding point group and assigns it to the variable.

{% highlight matlab %} cs = crystalSymmetry('Td'); plot(cs) @@ -223,13 +223,24 @@

Import from CIF and PHL files

MTEX allows to define a crystal a, b, c : 4.9, 4.9, 5.4 reference frame: X||a*, Y||b, Z||c* {% endhighlight %} -

or a Bruker phl file. As a phl file contains usually many phases the output is a list of crystal symmetries

+

or a Bruker .phl file. As a .phl file contains usually many phases the output is a list of crystal symmetries

{% highlight matlab %} % import a list of crystal symmetries cs_list = crystalSymmetry.load('crystal.phl'); % access the first symmetry in list cs_list{1} + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/DefinitionAsCoordinateTransform.html b/pages/documentation_matlab/DefinitionAsCoordinateTransform.html index 940cf4416..745a1c0d0 100644 --- a/pages/documentation_matlab/DefinitionAsCoordinateTransform.html +++ b/pages/documentation_matlab/DefinitionAsCoordinateTransform.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Crystal Orientation as Coordinate Transformation - edit page

In MTEX a crystal orientation is defined as the rotation that transforms crystal coordinates, i.e., a description of a vector or a tensor with respect to the crystal reference frame, into specimen coordinates, i.e., a desciption of the same object with respect to a specimen fixed reference frame.

In MTEX any orientation consists of two incredients. A rotation

+ edit page

In MTEX a crystal orientation is defined as the rotation that transforms crystal coordinates, i.e., a description of a vector or a tensor with respect to the crystal reference frame, into specimen coordinates, i.e., a description of the same object with respect to a specimen fixed reference frame.

In MTEX any orientation consists of two ingredients. A rotation

{% highlight matlab %} % lets take a random one rot = rotation.rand @@ -22,10 +22,10 @@ rot = rotation Bunge Euler angles in degree - phi1 Phi phi2 - 296.21 19.6259 355.474 + phi1 Phi phi2 + 55.8064 132.897 336.44 {% endhighlight %} -

and a description of the crystal lattice, which are represented in MTEX by variables of type crystalSymmetry

+

and a description of the crystal lattice, which are represented in MTEX by variables of type crystalSymmetry

{% highlight matlab %} % lets take cubic crystal symmetry cs = crystalSymmetry.load("Al-Aluminum.cif") @@ -39,7 +39,7 @@ elements: 48 a, b, c : 4, 4, 4 {% endhighlight %} -

Combining both incredients allows us to define an orientation

+

Combining both ingredients allows us to define an orientation

{% highlight matlab %} ori = orientation(rot,cs) {% endhighlight %} @@ -48,10 +48,10 @@ ori = orientation (Aluminum → xyz) Bunge Euler angles in degree - phi1 Phi phi2 - 296.21 19.6259 355.474 + phi1 Phi phi2 + 55.8064 132.897 336.44 {% endhighlight %} -

As a consequence a variable of type orientation is at the same time of type rotation and hence allows for all operations that are available for rotations.

Crystal coordinates to specimen coordinates

Let us consider to following direction with respect to the crystal reference system

+

As a consequence a variable of type orientation is at the same time of type rotation and hence allows for all operations that are available for rotations.

Crystal coordinates to specimen coordinates

Let us consider the following crystal direction

{% highlight matlab %} h = Miller(1,0,0,cs,'uvw') {% endhighlight %} @@ -61,13 +61,15 @@ u v w 1 0 0 {% endhighlight %} -

Then in a grain with orientation ori this direction h has with respect to the specimen reference system the coordinates

+

In a grain with orientation ori this direction h has the specimen coordinates

{% highlight matlab %} r = ori * h {% endhighlight %} {% highlight plaintext %} r = vector3d + x y z + 1.17479 3.68957 -1.18578 {% endhighlight %}

Similarly, orientations transform tensors given with respect to the crystal reference frame, e.g., the following single crystal stiffness tensor

{% highlight matlab %} @@ -104,14 +106,14 @@ rank: 4 (3 x 3 x 3 x 3) tensor in Voigt matrix representation: - 2.38 0.787 0.8331 -0.0794 -0.1989 -0.1879 - 0.787 2.2464 0.9666 -0.0317 -0.02 0.2611 - 0.8331 0.9666 2.2003 0.111 0.2189 -0.0732 - -0.0794 -0.0317 0.111 0.9666 -0.0732 -0.02 - -0.1989 -0.02 0.2189 -0.0732 0.8331 -0.0794 - -0.1879 0.2611 -0.0732 -0.02 -0.0794 0.787 -{% endhighlight %} -

Objects that can be translated by orientations from crystal into specimen cooordinates and vice verca include

Specimen coordinates into crystal coordinates

Conversely, we can go back from specimen coordinates to crystal coordinates by multiplying with the inverse orientation

+ 2.5571 0.8677 0.5753 -0.0731 -0.1143 0.0775 + 0.8677 2.2822 0.8501 0.174 0.1402 -0.1771 + 0.5753 0.8501 2.5746 -0.1009 -0.0259 0.0996 + -0.0731 0.174 -0.1009 0.8501 0.0996 0.1402 + -0.1143 0.1402 -0.0259 0.0996 0.5753 -0.0731 + 0.0775 -0.1771 0.0996 0.1402 -0.0731 0.8677 +{% endhighlight %} +

Objects that can be translated by orientations from crystal into specimen coordinates and vice versa include

Specimen coordinates into crystal coordinates

Conversely, we can go back from specimen coordinates to crystal coordinates by multiplying with the inverse orientation

{% highlight matlab %} inv(ori) * r {% endhighlight %} @@ -121,7 +123,7 @@ h k l 16.3991 0 0 {% endhighlight %} -

Note, that in literature orientations are often defined to transform specimen coordinates into crystal coordinates, i.e., to coincide with the inverse orientations in MTEX. The consequences of this differences are exhaustivly discussed in the topic orientation convemtions.

Specimen Rotation

Rotations of the specimen ,i.e., changing the specimen reference frame, do also change the orientation. Assume the specimen is rotated about the X-axis about 60 degree. We may define this rotation by

+

Note, that in literature orientations are often defined to transform specimen coordinates into crystal coordinates, i.e., to coincide with the inverse orientations in MTEX. The consequences of this differences are exhaustively discussed in the topic orientation conventions.

Specimen Rotation

Rotations of the specimen ,i.e., changing the specimen reference frame, do also change the orientation. Assume the specimen is rotated about the X-axis about 60 degree. We may define this rotation by

{% highlight matlab %} rot = rotation.byAxisAngle(vector3d.X,60*degree); {% endhighlight %} @@ -135,6 +137,6 @@ Bunge Euler angles in degree phi1 Phi phi2 - 341.292 69.9718 299.683 + 122.339 134.178 63.6428 {% endhighlight %} -

It should also be noted, that orientations are sensitiv with respect to the alignment of the Euclidean reference frame \(\vec X\), \(\vec Y\), \(\vec Z\) with respect to the crystal axes \(\vec a\), \(\vec b\) and \(\vec c\). This issue is discussed in more detail in the topic The crystal reference system.

\ No newline at end of file +

It should also be noted, that orientations are sensitive with respect to the alignment of the Euclidean reference frame \(\vec X\), \(\vec Y\), \(\vec Z\) with respect to the crystal axes \(\vec a\), \(\vec b\) and \(\vec c\). This issue is discussed in more detail in the topic Crystal Reference Frames.

\ No newline at end of file diff --git a/pages/documentation_matlab/DensityEstimation.html b/pages/documentation_matlab/DensityEstimation.html index b0e88bbab..f9325a204 100644 --- a/pages/documentation_matlab/DensityEstimation.html +++ b/pages/documentation_matlab/DensityEstimation.html @@ -111,7 +111,7 @@ {% highlight plaintext %} t_star = - 0.0195 + 0.0024 {% endhighlight %}
{% include inline_image.html file="DensityEstimation_06.png" %} @@ -204,7 +204,6 @@ {% highlight plaintext %} odf = SO3FunHarmonic (Forsterite → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} diff --git a/pages/documentation_matlab/DetectionOfSampleSymmetry.html b/pages/documentation_matlab/DetectionOfSampleSymmetry.html index 306621c18..d6a490ecc 100644 --- a/pages/documentation_matlab/DetectionOfSampleSymmetry.html +++ b/pages/documentation_matlab/DetectionOfSampleSymmetry.html @@ -73,7 +73,6 @@ size: 1 x 1000 odf_est = SO3FunHarmonic (m-3m → xyz (222)) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} @@ -131,10 +130,16 @@ {% highlight plaintext %} a1 = vector3d + x y z + 0.0499876 0.998745 0.00325886 a2 = vector3d + x y z + -0.99875 0.0499879 0 a3 = vector3d + x y z + -0.000162903 -0.00325478 0.999995 {% endhighlight %}
{% include inline_image.html file="DetectionOfSampleSymmetry_06.png" %} diff --git a/pages/documentation_matlab/DislocationSystems.html b/pages/documentation_matlab/DislocationSystems.html index 62d797b53..6aaed364d 100644 --- a/pages/documentation_matlab/DislocationSystems.html +++ b/pages/documentation_matlab/DislocationSystems.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Dislocations - edit page

Dislocation are microscopic displacements within the regular atom lattice of a crystaline material ussualy as a result of plastic deformation. Dislocations are described by a Burgers vector describing the direction of the atomic shift and a line vector describing the direction of the displacements within the material. One distinguishes two cases:

Edge Dislocations

Here the directions of the atomic shifts are orthogonal to the direction the displacements spread within the material. In order to define a edge dislocation we proceed as follows

+ edit page

Dislocation are microscopic displacements within the regular atom lattice of a crystalline material usually as a result of plastic deformation. Dislocations are described by a Burgers vector describing the direction of the atomic shift and a line vector describing the direction of the displacements within the material. One distinguishes two cases:

Edge Dislocations

Here the directions of the atomic shifts are orthogonal to the direction the displacements spread within the material. In order to define a edge dislocation we proceed as follows

{% highlight matlab %} % define a crystal symmetry cs = crystalSymmetry('432'); @@ -92,59 +92,59 @@

Relation to Slip Systems

Dislocation systems are tightly relat 1 -1 0 1 1 -1 1 1 0 1 1 1 -1 1 0 1 1 1 1 -1 1 + -1 1 0 1 1 -1 1 -1 0 -1 1 1 -1 1 0 -1 -1 1 1 -1 1 - -1 1 0 1 1 -1 1 0 1 -1 -1 1 1 1 1 0 1 -1 1 1 1 1 1 0 -1 1 1 1 + 0 -1 1 -1 1 1 1 -1 0 -1 -1 1 1 1 -1 -1 0 -1 1 1 1 - 0 -1 1 -1 1 1 1 -1 0 1 1 -1 1 1 1 1 0 1 -1 1 1 0 1 1 1 -1 1 1 + 1 0 -1 1 -1 1 1 -1 -1 0 1 -1 1 1 0 -1 -1 1 -1 1 1 - 1 0 -1 1 -1 1 1 dS = dislocationSystem symmetry: 432 edge dislocations : 24 x 1 Burgers vector line vector energy - [0 1 -1] (2 -1 -1) 2 - [-1 0 1] (-1 2 -1) 2 - [1 -1 0] (-1 -1 2) 2 - [0 -1 1] (-2 1 1) 2 - [1 0 -1] (1 -2 1) 2 - [-1 1 0] (1 1 -2) 2 - [1 -1 0] (1 1 2) 2 - [1 0 1] (-1 2 1) 2 - [0 1 1] (-2 1 -1) 2 - [-1 0 -1] (1 -2 -1) 2 - [0 -1 -1] (2 -1 1) 2 - [-1 1 0] (-1 -1 -2) 2 - [0 1 -1] (2 1 1) 2 - [1 0 1] (-1 -2 1) 2 - [1 1 0] (1 -1 2) 2 - [-1 0 -1] (1 2 -1) 2 - [-1 -1 0] (-1 1 -2) 2 - [0 -1 1] (-2 -1 -1) 2 - [-1 0 1] (1 2 1) 2 - [1 1 0] (1 -1 -2) 2 - [0 1 1] (2 1 -1) 2 - [-1 -1 0] (-1 1 2) 2 - [0 -1 -1] (-2 -1 1) 2 - [1 0 -1] (-1 -2 -1) 2 + [0 1 -1] [2 -1 -1] 2 + [-1 0 1] [-1 2 -1] 2 + [1 -1 0] [-1 -1 2] 2 + [0 -1 1] [-2 1 1] 2 + [1 0 -1] [1 -2 1] 2 + [-1 1 0] [1 1 -2] 2 + [1 -1 0] [1 1 2] 2 + [1 0 1] [-1 2 1] 2 + [0 1 1] [-2 1 -1] 2 + [-1 1 0] [-1 -1 -2] 2 + [-1 0 -1] [1 -2 -1] 2 + [0 -1 -1] [2 -1 1] 2 + [0 1 -1] [2 1 1] 2 + [1 0 1] [-1 -2 1] 2 + [1 1 0] [1 -1 2] 2 + [0 -1 1] [-2 -1 -1] 2 + [-1 0 -1] [1 2 -1] 2 + [-1 -1 0] [-1 1 -2] 2 + [-1 0 1] [1 2 1] 2 + [1 1 0] [1 -1 -2] 2 + [0 1 1] [2 1 -1] 2 + [1 0 -1] [-1 -2 -1] 2 + [-1 -1 0] [-1 1 2] 2 + [0 -1 -1] [-2 -1 1] 2 screw dislocations: 6 x 1 Burgers vector energy - (0 1 -1) 1 - (0 1 1) 1 - (-1 1 0) 1 - (1 0 1) 1 - (1 1 0) 1 - (-1 0 1) 1 + [0 1 -1] 1 + [0 1 1] 1 + [1 0 1] 1 + [1 -1 0] 1 + [1 1 0] 1 + [-1 0 1] 1 {% endhighlight %}

A shortcut for the above lines is

{% highlight matlab %} @@ -156,61 +156,61 @@

Relation to Slip Systems

Dislocation systems are tightly relat symmetry: 432 edge dislocations : 48 x 1 Burgers vector line vector energy - [1 -1 1] (-2 -1 1) 2 - [1 1 -1] (2 -1 1) 2 - [1 1 -1] (1 -2 -1) 2 - [-1 1 1] (1 2 -1) 2 - [1 -1 1] (-1 1 2) 2 - [-1 1 1] (-1 1 -2) 2 - [1 -1 1] (1 2 1) 2 - [1 1 1] (-1 2 -1) 2 - [1 1 -1] (1 1 2) 2 - [1 1 1] (-1 -1 2) 2 - [-1 1 1] (2 1 1) 2 - [1 1 1] (2 -1 -1) 2 - [-1 1 1] (0 1 -1) 2 - [1 -1 1] (-1 0 1) 2 - [1 1 -1] (1 -1 0) 2 - [-1 1 1] (-1 0 -1) 2 - [1 -1 1] (-1 -1 0) 2 - [1 1 -1] (0 -1 -1) 2 - [1 1 -1] (1 0 1) 2 - [-1 1 1] (1 1 0) 2 - [1 -1 1] (0 1 1) 2 - [-1 -1 -1] (0 -1 1) 2 - [-1 -1 -1] (1 0 -1) 2 - [-1 -1 -1] (-1 1 0) 2 - [-1 1 1] (-1 4 -5) 2 - [1 -1 1] (-5 -1 4) 2 - [1 1 -1] (4 -5 -1) 2 - [-1 1 1] (-4 1 -5) 2 - [1 -1 1] (-5 -4 1) 2 - [1 1 -1] (1 -5 -4) 2 - [1 1 -1] (4 1 5) 2 - [-1 1 1] (5 4 1) 2 - [1 -1 1] (1 5 4) 2 - [-1 -1 -1] (-1 -4 5) 2 - [-1 -1 -1] (5 -1 -4) 2 - [-1 -1 -1] (-4 5 -1) 2 - [1 -1 1] (1 -4 -5) 2 - [1 1 -1] (-5 1 -4) 2 - [-1 1 1] (-4 -5 1) 2 - [1 -1 1] (4 -1 -5) 2 - [1 1 -1] (-5 4 -1) 2 - [-1 1 1] (-1 -5 4) 2 - [-1 -1 -1] (-4 -1 5) 2 - [-1 -1 -1] (5 -4 -1) 2 - [-1 -1 -1] (-1 5 -4) 2 - [1 1 -1] (1 4 5) 2 - [-1 1 1] (5 1 4) 2 - [1 -1 1] (4 5 1) 2 + [1 -1 1] [-2 -1 1] 2 + [1 1 -1] [2 -1 1] 2 + [1 1 -1] [1 -2 -1] 2 + [-1 1 1] [1 2 -1] 2 + [1 -1 1] [-1 1 2] 2 + [-1 1 1] [-1 1 -2] 2 + [1 -1 1] [1 2 1] 2 + [1 1 1] [-1 2 -1] 2 + [1 1 -1] [1 1 2] 2 + [1 1 1] [-1 -1 2] 2 + [-1 1 1] [2 1 1] 2 + [1 1 1] [2 -1 -1] 2 + [-1 1 1] [0 1 -1] 2 + [1 -1 1] [-1 0 1] 2 + [1 1 -1] [1 -1 0] 2 + [-1 1 1] [-1 0 -1] 2 + [1 -1 1] [-1 -1 0] 2 + [1 1 -1] [0 -1 -1] 2 + [1 1 -1] [1 0 1] 2 + [-1 1 1] [1 1 0] 2 + [1 -1 1] [0 1 1] 2 + [-1 -1 -1] [0 -1 1] 2 + [-1 -1 -1] [1 0 -1] 2 + [-1 -1 -1] [-1 1 0] 2 + [-1 1 1] [-1 4 -5] 2 + [1 -1 1] [-5 -1 4] 2 + [1 1 -1] [4 -5 -1] 2 + [-1 1 1] [-4 1 -5] 2 + [1 -1 1] [-5 -4 1] 2 + [1 1 -1] [1 -5 -4] 2 + [1 1 -1] [4 1 5] 2 + [-1 1 1] [5 4 1] 2 + [1 -1 1] [1 5 4] 2 + [-1 -1 -1] [-1 -4 5] 2 + [-1 -1 -1] [5 -1 -4] 2 + [-1 -1 -1] [-4 5 -1] 2 + [1 -1 1] [1 -4 -5] 2 + [1 1 -1] [-5 1 -4] 2 + [-1 1 1] [-4 -5 1] 2 + [1 -1 1] [4 -1 -5] 2 + [1 1 -1] [-5 4 -1] 2 + [-1 1 1] [-1 -5 4] 2 + [-1 -1 -1] [-4 -1 5] 2 + [-1 -1 -1] [5 -4 -1] 2 + [-1 -1 -1] [-1 5 -4] 2 + [1 1 -1] [1 4 5] 2 + [-1 1 1] [5 1 4] 2 + [1 -1 1] [4 5 1] 2 screw dislocations: 4 x 1 Burgers vector energy - (-1 -1 -1) 1 - (1 -1 1) 1 - (-1 1 1) 1 - (1 1 -1) 1 + [-1 -1 -1] 1 + [1 -1 1] 1 + [-1 1 1] 1 + [1 1 -1] 1 {% endhighlight %}

The Dislocation Tensor

As each dislocation corresponds to an deformation of the atom lattice a dislocation can also be described by a deformation matrix. This matrix is the dyadic product between the Burgers vector and the line vector and can be computed by

{% highlight matlab %} @@ -236,7 +236,7 @@

The Dislocation Tensor

As each dislocation corresponds to an d ans = 0.8660 0.8660 0.8660 {% endhighlight %} -

The Energy of Dislocations

The energy of each dislocation system can be stored in the property u. By default this value it set to 1 but should be changed accoring to the specific model and the specific material.

According to Hull & Bacon the energy U of edge and screw dislocations is given by the formulae

\[ U_{\mathrm{screw}} = \frac{Gb^2}{4\pi} \ln \frac{R}{r_0} \]

\[ U_{\mathrm{edge}} = (1-\nu) U_{\mathrm{screw}} \]

where

  • G is
  • b is the length of the Burgers vector
  • nu is the Poisson ratio
  • R
  • r

In this example we assume

R = r_0 = U = norm(dS.b).^2

+

The Energy of Dislocations

The energy of each dislocation system can be stored in the property u. By default this value it set to 1 but should be changed according to the specific model and the specific material.

According to Hull & Bacon the energy U of edge and screw dislocations is given by the formulae

\[ U_{\mathrm{screw}} = \frac{Gb^2}{4\pi} \ln \frac{R}{r_0} \]

\[ U_{\mathrm{edge}} = (1-\nu) U_{\mathrm{screw}} \]

where

  • G is
  • b is the length of the Burgers vector
  • nu is the Poisson ratio
  • R
  • r

In this example we assume

R = r_0 = U = norm(dS.b).^2

{% highlight matlab %} nu = 0.3; @@ -251,5 +251,16 @@

The Energy of Dislocations

The energy of each dislocation syst % % E = 1 - poisson ratio % E = c * G * |b|^2, - G - Schubmodul / Shear Modulus Energy per (unit length)^2 + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %}
\ No newline at end of file diff --git a/pages/documentation_matlab/EBSD2ODF.html b/pages/documentation_matlab/EBSD2ODF.html index 3c3e7e37f..dd1fb7885 100644 --- a/pages/documentation_matlab/EBSD2ODF.html +++ b/pages/documentation_matlab/EBSD2ODF.html @@ -119,6 +119,17 @@ plot(hw/degree,e) xlabel('halfwidth in degree') ylabel('esimation error') + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="EBSD2ODF_04.png" %} diff --git a/pages/documentation_matlab/EBSDAdvancedMaps.html b/pages/documentation_matlab/EBSDAdvancedMaps.html index 4574abd57..b42d15b37 100644 --- a/pages/documentation_matlab/EBSDAdvancedMaps.html +++ b/pages/documentation_matlab/EBSDAdvancedMaps.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Advanced Color Keys - edit page

In order to visualize orientation maps one has to assign a color to each possible orientation. As an example, one may think of representing an orientation by its Euler angles ph1, Phi, phi2 and taking these as the RGB values of a color. Of course, there are many other ways to do this. Before presenting all the possibilities MTEX offers to assign a color to each orientation let us shortly summarize what properties we expect from such an assignment.

  1. crystallographic equivalent orientations should have the same color
  2. similar orientations should have similar colors
  3. different orientations should have different colors
  4. the whole colorspace should be used for full contrast
  5. if the orientations are concentrated in a small region of the orientation space, the colorspace should be exhaust by this region

It should be noted that it is impossible to have all the 4 points mentioned above be satisfied by a single colorcoding. Hence, some compromises have to be accepted and some assumptions have to be made. While the traditional Euler angle coloring will assign different colors to similar orientations, i.e. will introduce color jumps and break with the first requirement the default MTEX color key will assign the same color to different orientations.

Hence, there is no perfect color key, but it should be chosen depending on the information one want to extract from the orientation data. To do so MTEX offers the following possibilities:

In order to demonstrate these color keys we first import some toy data set.

+ edit page

In order to visualize orientation maps one has to assign a color to each possible orientation. As an example, one may think of representing an orientation by its Euler angles ph1, Phi, phi2 and taking these as the RGB values of a color. Of course, there are many other ways to do this. Before presenting all the possibilities MTEX offers to assign a color to each orientation let us shortly summarize what properties we expect from such an assignment.

  1. crystallographic equivalent orientations should have the same color
  2. similar orientations should have similar colors
  3. different orientations should have different colors
  4. the whole colorspace should be used for full contrast
  5. if the orientations are concentrated in a small region of the orientation space, the colorspace should be exhaust by this region

It should be noted that it is impossible to have all the 4 points mentioned above be satisfied by a single color coding. Hence, some compromises have to be accepted and some assumptions have to be made. While the traditional Euler angle coloring will assign different colors to similar orientations, i.e. will introduce color jumps and break with the first requirement the default MTEX color key will assign the same color to different orientations.

Hence, there is no perfect color key, but it should be chosen depending on the information one want to extract from the orientation data. To do so MTEX offers the following possibilities:

In order to demonstrate these color keys we first import some toy data set.

{% highlight matlab %} close all; plotx2east mtexdata forsterite @@ -51,7 +51,7 @@

Euler Angle Coloring

The oldest way to colorize orientations i {% endhighlight %}

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

Coloring certain orientations

We might be interested in locating some special orientation in our orientation map. The definition of colors for certain orientations is carried out similarly as in the case of fibres

+

Coloring certain orientations

We might be interested in locating some special orientation in our orientation map. The definition of colors for certain orientations is carried out similarly as in the case of fibers

{% highlight matlab %} colorKey = spotColorKey(ebsd('Fo')); colorKey.center = mean(ebsd('Forsterite').orientations,'robust'); @@ -60,7 +60,7 @@

Euler Angle Coloring

The oldest way to colorize orientations i plot(ebsd('fo'),colorKey.orientation2color(ebsd('fo').orientations)) -% and the correspoding colormap +% and the corresponding color-map figure(2) plot(colorKey,'sections',9,'sigma') {% endhighlight %} @@ -86,7 +86,7 @@

Euler Angle Coloring

The oldest way to colorize orientations i {% endhighlight %}

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

Coloring fibres

To color a fibre, one has to specify the crystal direction h together with its RGB color and the specimen direction r, which should be marked.

+

Coloring fibers

To color a fibre, one has to specify the crystal direction h together with its RGB color and the specimen direction r, which should be marked.

{% highlight matlab %} % define a fibre f = fibre(Miller(1,1,1,csFo),zvector); @@ -125,12 +125,12 @@

Euler Angle Coloring

The oldest way to colorize orientations i {% endhighlight %}

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

we can easily extend the colorcoding

+

we can easily extend the color-coding

{% highlight matlab %} % the centers in the inverse pole figure colorKey.center = Miller({0 0 1},{0 1 1},{1 1 1},{11 4 4},{5 0 2},{5 5 2},csFo); -% the correspnding collors +% the corresponding colors colorKey.color = [[1 0 0];[0 1 0];[0 0 1];[1 0 1];[1 1 0];[0 1 1]]; % plot the key @@ -167,6 +167,17 @@

Euler Angle Coloring

The oldest way to colorize orientations i hold on plot(ebsd('fo'),colorKey.orientation2color(ebsd('fo').orientations),'FaceAlpha',0.5) hold off + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="EBSDAdvancedMaps_12.png" %} diff --git a/pages/documentation_matlab/EBSDDenoising.html b/pages/documentation_matlab/EBSDDenoising.html index cf05e94d4..a51b9c3c2 100644 --- a/pages/documentation_matlab/EBSDDenoising.html +++ b/pages/documentation_matlab/EBSDDenoising.html @@ -92,7 +92,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDDenoising_03.png" %} -

We clearly see how the noise has been reduces. In order to further reduce the noise we may increase the number of neighbours that are taken into account.

+

We clearly see how the noise has been reduces. In order to further reduce the noise we may increase the number of neighbors that are taken into account.

{% highlight matlab %} F.numNeighbours = 3; @@ -150,7 +150,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDDenoising_06.png" %} -

The Smoothing Spline Filter

All the above filters are so called sliding windows filters which consider for the denoising operation only neighboring orientations within a certain window. The next filters belong to the class of variational filters which determine the denoised orientation map as the solution of an minimization problem that is simultanously close to the original map and "smooth". The resulting orientation map heavily depends on the specific definition of "smooth" and on the regularization parameter which controls the trade of between fitting the original data and forcing the resulting map to be smooth.

The @splineFilter uses as definition of smoothnes the curvature of the orientation map. As a cosequence, the denoised images are very "round" and similarly as for the @meanFilter subgrain boundaries will be smoothed away. On the positive side the @meanFilter is up to now the only filter that automatically calibrates the regularization parameter.

+

The Smoothing Spline Filter

All the above filters are so called sliding windows filters which consider for the denoising operation only neighboring orientations within a certain window. The next filters belong to the class of variational filters which determine the denoised orientation map as the solution of an minimization problem that is simultaneously close to the original map and "smooth". The resulting orientation map heavily depends on the specific definition of "smooth" and on the regularization parameter which controls the trade of between fitting the original data and forcing the resulting map to be smooth.

The @splineFilter uses as definition of smoothness the curvature of the orientation map. As a consequence, the denoised images are very "round" and similarly as for the @meanFilter subgrain boundaries will be smoothed away. On the positive side the @meanFilter is up to now the only filter that automatically calibrates the regularization parameter.

{% highlight matlab %} F = splineFilter; @@ -176,7 +176,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDDenoising_07.png" %} -

The Halfquadratic Filter

In the default setting the @halfQuadraticFilter uses definition of smoothnes the total variation functional. This functional was developed to preserve subgrain boundaries. Similarly as the @medianFilter it tends to carton like images and staircasing.

+

The Halfquadratic Filter

In the default setting the @halfQuadraticFilter uses definition of smoothness the total variation functional. This functional was developed to preserve subgrain boundaries. Similarly as the @medianFilter it tends to carton like images and staircasing.

{% highlight matlab %} F = halfQuadraticFilter; @@ -194,7 +194,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDDenoising_08.png" %} -

The Infimal Convolution Filter

The infimal convolution filter was designed as a compromise between the @splineFilter and the @halfQuadraticFilter. It is still under deveopment and its use is not recommendet.

+

The Infimal Convolution Filter

The infimal convolution filter was designed as a compromise between the @splineFilter and the @halfQuadraticFilter. It is still under development and its use is not recommended.

{% highlight matlab %} F = infimalConvolutionFilter; F.lambda = 0.01; % smoothing parameter for the gradient diff --git a/pages/documentation_matlab/EBSDFilling.html b/pages/documentation_matlab/EBSDFilling.html index 5247b0c7e..b5df8c44f 100644 --- a/pages/documentation_matlab/EBSDFilling.html +++ b/pages/documentation_matlab/EBSDFilling.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Fill Missing Data in Orientation Maps - edit page

Orientation maps determined by EBSD or any other technique are, as all experimental data, effected by measurement errors. Those measurement errors can be divided into systematic errors and random errors. Systematic errors mostly occur due to a bad calibration of the EBSD system and require additional knowledge to be corrected. Deviations from the true orientation due to noisy Kikuchi pattern or tolerances of the indecing algorithm can be modeled as random errors. In this section we demonstrate how random errors can be significantly reduced using denoising techniques.

We shall demonstrate the denoising capabilities of MTEX at the hand of an orientation map of deformed Magnesium

+ edit page

Orientation maps determined by EBSD or any other technique are, as all experimental data, effected by measurement errors. Those measurement errors can be divided into systematic errors and random errors. Systematic errors mostly occur due to a bad calibration of the EBSD system and require additional knowledge to be corrected. Deviations from the true orientation due to noisy Kikuchi pattern or tolerances of the indexing algorithm can be modeled as random errors. In this section we demonstrate how random errors can be significantly reduced using denoising techniques.

We shall demonstrate the denoising capabilities of MTEX at the hand of an orientation map of deformed Magnesium

{% highlight matlab %} % import the data mtexdata ferrite @@ -26,7 +26,7 @@ % remove some very small grains ebsd(grains(grains.grainSize<5)) = []; -% redo grain segementation +% redo grain segmentation [grains,ebsd.grainId] = calcGrains(ebsd,'angle',10*degree); % smooth grain boundaries @@ -46,9 +46,8 @@ ebsd = EBSD - Phase Orientations Mineral Color Symmetry Crystal reference frame - -1 136 (0.22%) notIndexed - 0 63044 (100%) Ferrite LightSkyBlue 432 + Phase Orientations Mineral Color Symmetry Crystal reference frame + 0 63044 (100%) Ferrite LightSkyBlue 432 Properties: ci, fit, iq, sem_signal, x, y, oldId Scan unit : um diff --git a/pages/documentation_matlab/EBSDGROD.html b/pages/documentation_matlab/EBSDGROD.html index e3af38c56..abd6b7bb6 100644 --- a/pages/documentation_matlab/EBSDGROD.html +++ b/pages/documentation_matlab/EBSDGROD.html @@ -44,7 +44,7 @@ {% highlight matlab %} % plot the misorientation angle of the GROD plot(ebsd,grod.angle./degree,'micronbar','off') -mtexColorbar('title','misorientation angle to meanorientation in degree') +mtexColorbar('title',{'misorientation angle in degree'}) mtexColorMap LaboTeX % overlay grain and subgrain boundaries @@ -57,7 +57,7 @@ {% include inline_image.html file="EBSDGROD_02.png" %}

Grain Orientation Spread (GOS)

The grain orientation spread (GOS) is the averaged misorientation angle of the grain reference orientation deviations of each grain. We may compute this average by using the command grainMean.

{% highlight matlab %} -GOS = grainMean(ebsd, grod.angle); +GOS = grainMean(ebsd, grod.angle, grains); plot(grains, GOS ./ degree) mtexColorbar('title','GOS in degree') @@ -69,7 +69,7 @@ axCrystal = grod.axis; plot(axCrystal,'contourf','fundamentalRegion','antipodal','figSize','small') -mtexColorbar('title','distribution of misorientation axes in mrd') +mtexColorbar('title','mrd') {% endhighlight %}
{% include inline_image.html file="EBSDGROD_04.png" %} diff --git a/pages/documentation_matlab/EBSDGrid.html b/pages/documentation_matlab/EBSDGrid.html index 71fac43a9..2c57aef2d 100644 --- a/pages/documentation_matlab/EBSDGrid.html +++ b/pages/documentation_matlab/EBSDGrid.html @@ -75,7 +75,7 @@ 13613 1 156 101 239 10 149 133 0 0.7 29.7 14.7 8283 Scan unit : um {% endhighlight %} -

It is important to understand that the property of beeing shaped as a matrix is lost as soon as we select a subset of data

+

It is important to understand that the property of being shaped as a matrix is lost as soon as we select a subset of data

{% highlight matlab %} ebsdMg = ebsd('Magnesium') {% endhighlight %} @@ -104,18 +104,18 @@ Scan unit : um Grid size (square): 137 x 167 {% endhighlight %} -

The difference between both matrix shapes EBSD variables ebsd and ebsdMg is that not indexed pixels in ebsd are stored as the seperate phase notIndexed while in ebsdMg all pixels have phase Magnesium but the Euler angles of the not indexed pixels are set to nan. This allows to select and plot subregions of the EBSD in a very intuitive way by

+

The difference between both matrix shapes EBSD variables ebsd and ebsdMg is that not indexed pixels in ebsd are stored as the separate phase 'notIndexed' while in ebsdMg all pixels have phase Magnesium but the Euler angles of the not indexed pixels are set to nan. This allows to select and plot subregions of the EBSD map in a very intuitive way by

{% highlight matlab %} plot(ebsdMg(50:100,5:100),ebsdMg(50:100,5:100).orientations) {% endhighlight %}
{% include inline_image.html file="EBSDGrid_02.png" %} -

The Gradient

+

The Gradient

Data on a square or hexagonal grid has the additional advantage to allow the computation of the orientations gradient, the incomplete Nye tensor, as well the weighted Burgers vector.

{% highlight matlab %} gradX = ebsdMg.gradientX; plot(ebsdMg,norm(gradX)) -caxis([0,4*degree]) +setColorRange([0,4*degree]) {% endhighlight %}
{% include inline_image.html file="EBSDGrid_03.png" %} @@ -144,7 +144,7 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 0 751 16116 Copper 432 - boundary segments: 12326 (37010 µm) + boundary segments: 12326 (37017 µm) inner boundary segments: 4 (12 µm) triple points: 1266 @@ -192,6 +192,8 @@ ebsdS = ebsd.gridify('unitCell',unitCell) % visualize the result +plot(ebsd,ebsd.orientations) +nextAxis plot(ebsdS, ebsdS.orientations) {% endhighlight %} @@ -208,7 +210,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDGrid_07.png" %} -

In the above example we have chosen the square unit cell to have approximately the same size as the hexgonal unit cell. This leads to quite some distortions as squares can not reproduces all the shapes of the hexagones. We can reduce this issue by chosing the quare unit cell significantly smaller then the hexagonal unit cell.

+

In the above example we have chosen the square unit cell to have approximately the same size as the hexagonal unit cell. This leads to quite some distortions as squares can not reproduces all the shapes of the hexagons. We can reduce this issue by choosing the square unit cell significantly smaller then the hexagonal unit cell.

{% highlight matlab %} % a smaller unit cell unitCell = [-1 -1; -1 1; 1 1; 1 -1]; @@ -235,9 +237,9 @@ {% endhighlight %}
{% include inline_image.html file="EBSDGrid_08.png" %} -

It is important to understand that the command gridify does not increase the number of data points. As a consquence, we end up with many white spots in the map which corresponds to orientations that have been set to NaN. In order to fill these white spots, we may either use the command fill which performs nearest neighbour interpolation or the command smooth which allows for more suffisticated interpolation methods.

+

It is important to understand that the command gridify does not increase the number of data points. As a consequence, we end up with many white spots in the map which corresponds to orientations that have been set to NaN. In order to fill these white spots, we may either use the command fill which performs nearest neighbor interpolation or the command smooth which allows for more sophisticated interpolation methods.

{% highlight matlab %} -% nearest neigbour interpolation +% nearest neighbor interpolation ebsdS1 = fill(ebsdS,grains) plot(ebsdS1('indexed'),ebsdS1('indexed').orientations) @@ -261,11 +263,12 @@ {% include inline_image.html file="EBSDGrid_09.png" %} {% highlight matlab %} -% interpolation using a TV regularisation term +% interpolation using a TV regularization term F = halfQuadraticFilter; F.alpha = 0.5; ebsdS2 = smooth(ebsdS,F,'fill',grains) +nextAxis plot(ebsdS2('indexed'),ebsdS2('indexed').orientations) hold on plot(grains.boundary,'lineWidth',2) @@ -307,7 +310,7 @@ ebsdG = EBSDhex Phase Orientations Mineral Color Symmetry Crystal reference frame - 0 15300 (58%) Copper LightSkyBlue 432 + 0 15302 (58%) Copper LightSkyBlue 432 Properties: confidenceindex, fit, imagequality, semsignal, unknown_11, unknown_12, unknown_13, unknown_14, x, y, grainId, oldId Scan unit : um @@ -320,13 +323,24 @@ ebsdGF = fill(ebsdG) plot(ebsdGF,ebsdGF.orientations) + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} ebsdGF = EBSDhex Phase Orientations Mineral Color Symmetry Crystal reference frame - 0 16205 (61%) Copper LightSkyBlue 432 + 0 16210 (61%) Copper LightSkyBlue 432 Properties: confidenceindex, fit, imagequality, semsignal, unknown_11, unknown_12, unknown_13, unknown_14, x, y, grainId, oldId Scan unit : um diff --git a/pages/documentation_matlab/EBSDIPFMap.html b/pages/documentation_matlab/EBSDIPFMap.html index 5a7b55c6b..535f6081f 100644 --- a/pages/documentation_matlab/EBSDIPFMap.html +++ b/pages/documentation_matlab/EBSDIPFMap.html @@ -19,7 +19,11 @@ {% endhighlight %} {% highlight plaintext %} -saving data to /home/hielscher/mtex/master/data/olivine.mat +Warning: .ang files have usualy inconsistent conventions +for spatial coordinates and Euler angles. You may want to +use one of the options 'convertSpatial2EulerReferenceFrame' +or 'convertEuler2SpatialReferenceFrame' to correct for this + saving data to /home/hielscher/mtex/master/data/olivine.mat ebsd = EBSD diff --git a/pages/documentation_matlab/EBSDKAM.html b/pages/documentation_matlab/EBSDKAM.html index 3ce8f672f..8214a94ee 100644 --- a/pages/documentation_matlab/EBSDKAM.html +++ b/pages/documentation_matlab/EBSDKAM.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Kernel Average Misorientation (KAM) - edit page

The kernel average misorientation (KAM) is a measure of local grain misorientation that is usually derived from EBSD data. For formaly defining the KAM we denote by \(o_{i,j}\) the orientations at pixel position \((i,j)\) and by \(N(i,j)\) the set of all neighboring pixels. Then the kernel average misorientation \(\mathrm{kam}_{i,j}\) at pixel position \((i,j)\) is defined as

\[\mathrm{KAM}_{i,j} = \frac{1}{|N(i,j)|}\sum_{(k,l) \in N(i,j)} \omega(o_{i,j}, o_{k,l}) \]

Here \(N(i,j)\) denotes the number of all neighboring pixels taking into account and \(\omega(o_{i,j}, o_{k,l})\) the disorientation angle between the orientation \(o_{ij}\) in the center and the neighbouring orientation \((o_{k,l})\). The specific choice of the set \(N(i,j)\) of neighboring pixels is crucial for the compution of the KAM. Most commonly the following additional constrains are made

  • consider neighbors up to order \(n\), e.g. \(n=1,2,3,\ldots\)
  • consider only neighbors belonging to the same grain
  • consider only neighbors with a misorientation angle smaller than a threshold angle \(\delta\)

In the case of sqaure and hexagonal grids the order of neighbors is illustrated below

+ edit page

The kernel average misorientation (KAM) is a measure of local grain misorientation that is usually derived from EBSD data. For a formal definition of the KAM we denote by \(o_{i,j}\) the orientations at pixel position \((i,j)\) and by \(N(i,j)\) the set of all neighboring pixels. Then the kernel average misorientation \(\mathrm{kam}_{i,j}\) at pixel position \((i,j)\) is defined as

\[\mathrm{KAM}_{i,j} = \frac{1}{|N(i,j)|}\sum_{(k,l) \in N(i,j)} \omega(o_{i,j}, o_{k,l}) \]

Here \(N(i,j)\) denotes the number of all neighboring pixels taking into account and \(\omega(o_{i,j}, o_{k,l})\) the disorientation angle between the orientation \(o_{ij}\) in the center and the neighboring orientation \((o_{k,l})\). The specific choice of the set \(N(i,j)\) of neighboring pixels is crucial for the computation of the KAM. Most commonly the following additional constrains are made

  • consider neighbors up to order \(n\), e.g. \(n=1,2,3,\ldots\)
  • consider only neighbors belonging to the same grain
  • consider only neighbors with a misorientation angle smaller than a threshold angle \(\delta\)

In the case of square and hexagonal grids the order of neighbors is illustrated below

{% highlight matlab %} plotSquareNeighbours; nextAxis; plotHexNeighbours {% endhighlight %} @@ -38,9 +38,8 @@ {% highlight plaintext %} ebsd = EBSD - Phase Orientations Mineral Color Symmetry Crystal reference frame - -1 136 (0.22%) notIndexed - 0 63044 (100%) Ferrite LightSkyBlue 432 + Phase Orientations Mineral Color Symmetry Crystal reference frame + 0 63044 (100%) Ferrite LightSkyBlue 432 Properties: ci, fit, iq, sem_signal, x, y, oldId Scan unit : um @@ -57,7 +56,7 @@ % lets plot it plot(ebsd,kam,'micronbar','off') -caxis([0,15]) +setColorRange([0,15]) mtexColorbar mtexColorMap LaboTeX hold on @@ -66,10 +65,10 @@ {% endhighlight %}
{% include inline_image.html file="EBSDKAM_03.png" %} -

When computed with default parameters in MTEX neighbors up to order 1 are considered and no threshold angle \(\delta\) is applied. If grains have been reconstructed and the property ebsd.grainId has been set (as we did above) only misorientations within the same grain are considered. As a consequence the resulting KAM map is dominated by the orientation gradients at the subgrain boundaries.

Specifying a reasonable small theshold angle \(\delta=2.5^{\circ}\) the subgrain boundaries can be effectively removed from the KAM.

+

When computed with default parameters in MTEX neighbors up to order 1 are considered and no threshold angle \(\delta\) is applied. If grains have been reconstructed and the property ebsd.grainId has been set (as we did above) only misorientations within the same grain are considered. As a consequence the resulting KAM map is dominated by the orientation gradients at the subgrain boundaries.

Specifying a reasonable small threshold angle \(\delta=2.5^{\circ}\) the subgrain boundaries can be effectively removed from the KAM.

{% highlight matlab %} plot(ebsd,ebsd.KAM('threshold',2.5*degree) ./ degree,'micronbar','off') -caxis([0,2]) +setColorRange([0,2]) mtexColorbar mtexColorMap LaboTeX hold on @@ -78,10 +77,10 @@ {% endhighlight %}
{% include inline_image.html file="EBSDKAM_04.png" %} -

Unfortunately, the remaining KAM becomes very sensitve to measurement errors and is often very noisy. The noise can be reduced by considering heigher order neighbors

+

Unfortunately, the remaining KAM becomes very sensitive to measurement errors and is often very noisy. The noise can be reduced by considering higher order neighbors

{% highlight matlab %} plot(ebsd,ebsd.KAM('threshold',2.5*degree,'order',5) ./ degree,'micronbar','off') -caxis([0,2]) +setColorRange([0,2]) mtexColorbar mtexColorMap LaboTeX hold on @@ -90,7 +89,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDKAM_05.png" %} -

Although this reduced noise it also smoothes away local dislocation structures. A much more effective way to reduce the effect of measurement errors to the kernel average misorientation is to denoise the EBSD map first and compute than the KAM from the first order neighbors.

+

Although this reduced noise it also smooths away local dislocation structures. A much more effective way to reduce the effect of measurement errors to the kernel average misorientation is to denoise the EBSD map first and compute than the KAM from the first order neighbors.

{% highlight matlab %} % chose a denoising filter F = halfQuadraticFilter; @@ -101,7 +100,7 @@ % plot the first order KAM plot(ebsdS,ebsdS.KAM('threshold',2.5*degree) ./ degree,'micronbar','off') -caxis([0,2]) +setColorRange([0,2]) mtexColorbar mtexColorMap LaboTeX hold on @@ -110,7 +109,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDKAM_06.png" %} -

We observe that the KAM is not longer related to subgrain boundaries and nicely revalves local dislocation structures of the deformed material.

Some helper functions

The functions below where only used to generate the neighborhood pictures of the first paragraph

+

We observe that the KAM is not longer related to subgrain boundaries and nicely reveals local dislocation structures of the deformed material.

Some helper functions

The functions below where only used to generate the neighborhood pictures of the first paragraph

{% highlight matlab %} function plotSquareNeighbours diff --git a/pages/documentation_matlab/EBSDOrientationAnalysis.html b/pages/documentation_matlab/EBSDOrientationAnalysis.html index c8aedd44a..0006623db 100644 --- a/pages/documentation_matlab/EBSDOrientationAnalysis.html +++ b/pages/documentation_matlab/EBSDOrientationAnalysis.html @@ -69,6 +69,8 @@ rOrth = vector3d antipodal: true + x y z + 0.944141 -0.189955 0.269287 {% endhighlight %}
{% include inline_image.html file="EBSDOrientationAnalysis_03.png" %} @@ -114,7 +116,6 @@ {% highlight plaintext %} odf = SO3FunHarmonic (Forsterite → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} diff --git a/pages/documentation_matlab/EBSDOrientationPlots.html b/pages/documentation_matlab/EBSDOrientationPlots.html index a64de9255..387fd72ea 100644 --- a/pages/documentation_matlab/EBSDOrientationPlots.html +++ b/pages/documentation_matlab/EBSDOrientationPlots.html @@ -80,7 +80,7 @@

Scatter Pole Figure Plot

A pole figure showing scattered point {% endhighlight %}

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

Here, the optional option 'center' specifies the center of the unique region in the orientation space.

Orientation plots for EBSD and grains

Since EBSD and grain data involves single orientations, the above plotting commands are also applicable for those objects.

Let us consider some grains reconstructed from the EBSD data

+

Here, the optional option 'center' specifies the center of the unique region in the orientation space.

Orientation plots for EBSD and grains

Since EBSD and grain data involves single orientations, the above plotting commands are also applicable for those objects.

Let us consider some grains reconstructed from the EBSD data

{% highlight matlab %} grains = calcGrains(ebsd); {% endhighlight %} diff --git a/pages/documentation_matlab/EBSDProfile.html b/pages/documentation_matlab/EBSDProfile.html index c63f5b132..7a8658ce1 100644 --- a/pages/documentation_matlab/EBSDProfile.html +++ b/pages/documentation_matlab/EBSDProfile.html @@ -51,12 +51,12 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 1 2614 Forsterite mmm - boundary segments: 458 (20261 µm) - inner boundary segments: 48 (2152 µm) + boundary segments: 458 (20258 µm) + inner boundary segments: 48 (2153 µm) triple points: 28 - Id Phase Pixels phi1 Phi phi2 GOS - 1856 1 2614 153 109 246 0.0850248 + Id Phase Pixels phi1 Phi phi2 GOS + 1856 1 2614 153 109 246 0.17005 {% endhighlight %}
{% include inline_image.html file="EBSDProfile_01.png" %} diff --git a/pages/documentation_matlab/EBSDReferenceFrame.html b/pages/documentation_matlab/EBSDReferenceFrame.html index d31b2bcf6..1ae473802 100644 --- a/pages/documentation_matlab/EBSDReferenceFrame.html +++ b/pages/documentation_matlab/EBSDReferenceFrame.html @@ -68,19 +68,19 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 8 9556 olivine 222 - boundary segments: 1983 (7933 µm) + boundary segments: 1980 (7934 µm) inner boundary segments: 2 (8 µm) triple points: 582 Id Phase Pixels phi1 Phi phi2 GOS - 1058 1 508 191 63 138 0.00440954 - 1473 1 502 108 120 182 0.00283499 - 2203 1 708 48 67 195 0.03205 + 1058 1 508 191 63 138 0.004541 + 1473 1 502 108 120 182 0.00283531 + 2203 1 708 48 66 193 0.0464213 3177 1 510 21 69 143 0.0058438 - 3507 1 1463 26 53 23 0.0877076 + 3507 1 1463 26 53 23 0.0877496 4216 1 1475 26 53 199 0.0906572 5239 1 1191 25 58 11 0.0558434 - 9773 1 3199 133 6 322 0.0501821 + 9773 1 3199 133 6 322 0.0501792 {% endhighlight %}
{% include inline_image.html file="EBSDReferenceFrame_03.png" %} diff --git a/pages/documentation_matlab/EBSDSelect.html b/pages/documentation_matlab/EBSDSelect.html index 6e1ec1a49..3595dfa3e 100644 --- a/pages/documentation_matlab/EBSDSelect.html +++ b/pages/documentation_matlab/EBSDSelect.html @@ -79,7 +79,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDSelect_03.png" %} -

Restricting to a region of interest

If one is not interested in the whole data set but only in those measurements inside a certain polygon, the restriction can be constructed as follows:

First define a region by [xmin ymin xmax-xmin ymax-ymin]

+

Restricting to a region of interest

If one is not interested in the whole data set but only in those measurements inside a certain polygon, the restriction can be constructed as follows:

First define a region by [xmin ymin xmax-xmin ymax-ymin]

{% highlight matlab %} region = [5 2 10 5]*10^3; {% endhighlight %} @@ -91,7 +91,7 @@ {% endhighlight %}
{% include inline_image.html file="EBSDSelect_04.png" %} -

The command inpolygon checks for each EBSD data point whether it is inside a polygon or not, i.e.

+

The command inpolygon checks for each EBSD data point whether it is inside a polygon or not, i.e.

{% highlight matlab %} condition = inpolygon(ebsd,region); {% endhighlight %} @@ -143,7 +143,7 @@

Remove Inaccurate Orientation Measurements

By MAD (mean an {% highlight matlab %} % plot a histogram close all -hist(ebsd.mad) +histogram(ebsd.mad) {% endhighlight %}

{% include inline_image.html file="EBSDSelect_08.png" %} diff --git a/pages/documentation_matlab/EBSDSharpPlot.html b/pages/documentation_matlab/EBSDSharpPlot.html index 0eb2eface..ddac9a12e 100644 --- a/pages/documentation_matlab/EBSDSharpPlot.html +++ b/pages/documentation_matlab/EBSDSharpPlot.html @@ -60,7 +60,7 @@ {% include inline_image.html file="EBSDSharpPlot_02.png" %}

We see that all individual orientations are clustered around azimuth angle 115 degrees with some outliers at 65 degree. In order to increase the contrast for the main group, we restrict the color range from 110 degree to 120 degree.

{% highlight matlab %} -caxis([110 120]); +setColorRange([110 120]); % by the following lines we colorcode the outliers in purple. cmap = colormap; @@ -76,7 +76,7 @@ plot(ebsd,color) % set scaling of the angles to 110 - 120 degree -caxis([110 120]); +setColorRange([110 120]); % colorize outliers in purple. cmap = colormap; @@ -97,6 +97,11 @@ close all; plot(ebsd,ipfKey.orientation2color(ebsd.orientations)) {% endhighlight %} + +{% highlight plaintext %} +Warning: Possibly applying an orientation to an object in +specimen coordinates! +{% endhighlight %}
{% include inline_image.html file="EBSDSharpPlot_05.png" %}

We observe that the orientation map is almost completely gray, except for the outliers which appears black. Next, we use the option maxAngle to increase contrast in the grayish part

@@ -221,8 +226,8 @@ 1 56 85514 Forsterite mmm 2 2 1969 Enstatite mmm - boundary segments: 17507 (811875 µm) - inner boundary segments: 222 (10023 µm) + boundary segments: 17507 (811872 µm) + inner boundary segments: 222 (10020 µm) triple points: 1247 Properties: meanRotation, GOS @@ -258,6 +263,11 @@ plot(ebsd,ipfKey.orientation2color(ebsd.orientations)) hold off {% endhighlight %} + +{% highlight plaintext %} +Warning: Possibly applying an orientation to an object in +specimen coordinates! +{% endhighlight %}
{% include inline_image.html file="EBSDSharpPlot_12.png" %}
\ No newline at end of file diff --git a/pages/documentation_matlab/EBSDTutorial.html b/pages/documentation_matlab/EBSDTutorial.html index 3a156e9b6..2273340f4 100644 --- a/pages/documentation_matlab/EBSDTutorial.html +++ b/pages/documentation_matlab/EBSDTutorial.html @@ -90,8 +90,8 @@ 2 515 26058 Enstatite mmm 3 1496 9064 Diopside 12/m1 X||a*, Y||b*, Z||c - boundary segments: 43918 (2.1e+06 µm) - inner boundary segments: 266 (12018 µm) + boundary segments: 43912 (2.1e+06 µm) + inner boundary segments: 266 (12015 µm) triple points: 3417 Properties: meanRotation, GOS diff --git a/pages/documentation_matlab/FibreODFs.html b/pages/documentation_matlab/FibreODFs.html index 08b676ec6..d7d57ac9b 100644 --- a/pages/documentation_matlab/FibreODFs.html +++ b/pages/documentation_matlab/FibreODFs.html @@ -35,6 +35,8 @@ a, b, c : 3, 3, 4.7 reference frame: X||a*, Y||b, Z||c* +Warning: Miller indece are not orthogonal. Maximum +deviation is 25 degree f = fibre (Titanium → xyz) diff --git a/pages/documentation_matlab/FundamentalSector.html b/pages/documentation_matlab/FundamentalSector.html index c4d7954ca..530493fb3 100644 --- a/pages/documentation_matlab/FundamentalSector.html +++ b/pages/documentation_matlab/FundamentalSector.html @@ -49,6 +49,12 @@ {% highlight plaintext %} ans = vector3d size: 1 x 5 + x y z + 0.707107 0 0.707107 + 0 -0.707107 0.707107 + 0 1 0 + -1 0 0 + 0 0 1 {% endhighlight %} {% highlight matlab %} diff --git a/pages/documentation_matlab/GND.html b/pages/documentation_matlab/GND.html index b3342e160..c1da66c16 100644 --- a/pages/documentation_matlab/GND.html +++ b/pages/documentation_matlab/GND.html @@ -28,13 +28,6 @@ % and plot the orientation data plot(ebsd,ipfKey.orientation2color(ebsd.orientations),'micronBar','off','figSize','medium') {% endhighlight %} - -{% highlight plaintext %} -Warning: .ang files have usualy inconsistent conventions for spatial -coordinates and Euler angles. You may want to use one of the options -'convertSpatial2EulerReferenceFrame' or -'convertEuler2SpatialReferenceFrame' to correct for this -{% endhighlight %}
{% include inline_image.html file="GND_01.png" %}

In the next step we reconstruct grains, remove all grains with less then 5 pixels and smooth the grain boundaries.

@@ -183,67 +176,65 @@

Crystallographic Dislocations

The central idea of Pantleon is {% endhighlight %} {% highlight plaintext %} -Warning: Miller indices are converted to hkl - dS = dislocationSystem mineral: Iron (Alpha) (432) edge dislocations : 48 x 1 Burgers vector line vector energy - [1 -1 1] (-2 -1 1) 2 - [1 1 -1] (2 -1 1) 2 - [1 1 -1] (1 -2 -1) 2 - [-1 1 1] (1 2 -1) 2 - [1 -1 1] (-1 1 2) 2 - [-1 1 1] (-1 1 -2) 2 - [1 -1 1] (1 2 1) 2 - [1 1 1] (-1 2 -1) 2 - [1 1 -1] (1 1 2) 2 - [1 1 1] (-1 -1 2) 2 - [-1 1 1] (2 1 1) 2 - [1 1 1] (2 -1 -1) 2 - [-1 1 1] (0 1 -1) 2 - [1 -1 1] (-1 0 1) 2 - [1 1 -1] (1 -1 0) 2 - [-1 1 1] (-1 0 -1) 2 - [1 -1 1] (-1 -1 0) 2 - [1 1 -1] (0 -1 -1) 2 - [1 1 -1] (1 0 1) 2 - [-1 1 1] (1 1 0) 2 - [1 -1 1] (0 1 1) 2 - [-1 -1 -1] (0 -1 1) 2 - [-1 -1 -1] (1 0 -1) 2 - [-1 -1 -1] (-1 1 0) 2 - [-1 1 1] (-1 4 -5) 2 - [1 -1 1] (-5 -1 4) 2 - [1 1 -1] (4 -5 -1) 2 - [-1 1 1] (-4 1 -5) 2 - [1 -1 1] (-5 -4 1) 2 - [1 1 -1] (1 -5 -4) 2 - [1 1 -1] (4 1 5) 2 - [-1 1 1] (5 4 1) 2 - [1 -1 1] (1 5 4) 2 - [-1 -1 -1] (-1 -4 5) 2 - [-1 -1 -1] (5 -1 -4) 2 - [-1 -1 -1] (-4 5 -1) 2 - [1 -1 1] (1 -4 -5) 2 - [1 1 -1] (-5 1 -4) 2 - [-1 1 1] (-4 -5 1) 2 - [1 -1 1] (4 -1 -5) 2 - [1 1 -1] (-5 4 -1) 2 - [-1 1 1] (-1 -5 4) 2 - [-1 -1 -1] (-4 -1 5) 2 - [-1 -1 -1] (5 -4 -1) 2 - [-1 -1 -1] (-1 5 -4) 2 - [1 1 -1] (1 4 5) 2 - [-1 1 1] (5 1 4) 2 - [1 -1 1] (4 5 1) 2 + [1 -1 1] [-2 -1 1] 2 + [1 1 -1] [2 -1 1] 2 + [1 1 -1] [1 -2 -1] 2 + [-1 1 1] [1 2 -1] 2 + [1 -1 1] [-1 1 2] 2 + [-1 1 1] [-1 1 -2] 2 + [1 -1 1] [1 2 1] 2 + [1 1 1] [-1 2 -1] 2 + [1 1 -1] [1 1 2] 2 + [1 1 1] [-1 -1 2] 2 + [-1 1 1] [2 1 1] 2 + [1 1 1] [2 -1 -1] 2 + [-1 1 1] [0 1 -1] 2 + [1 -1 1] [-1 0 1] 2 + [1 1 -1] [1 -1 0] 2 + [-1 1 1] [-1 0 -1] 2 + [1 -1 1] [-1 -1 0] 2 + [1 1 -1] [0 -1 -1] 2 + [1 1 -1] [1 0 1] 2 + [-1 1 1] [1 1 0] 2 + [1 -1 1] [0 1 1] 2 + [-1 -1 -1] [0 -1 1] 2 + [-1 -1 -1] [1 0 -1] 2 + [-1 -1 -1] [-1 1 0] 2 + [-1 1 1] [-1 4 -5] 2 + [1 -1 1] [-5 -1 4] 2 + [1 1 -1] [4 -5 -1] 2 + [-1 1 1] [-4 1 -5] 2 + [1 -1 1] [-5 -4 1] 2 + [1 1 -1] [1 -5 -4] 2 + [1 1 -1] [4 1 5] 2 + [-1 1 1] [5 4 1] 2 + [1 -1 1] [1 5 4] 2 + [-1 -1 -1] [-1 -4 5] 2 + [-1 -1 -1] [5 -1 -4] 2 + [-1 -1 -1] [-4 5 -1] 2 + [1 -1 1] [1 -4 -5] 2 + [1 1 -1] [-5 1 -4] 2 + [-1 1 1] [-4 -5 1] 2 + [1 -1 1] [4 -1 -5] 2 + [1 1 -1] [-5 4 -1] 2 + [-1 1 1] [-1 -5 4] 2 + [-1 -1 -1] [-4 -1 5] 2 + [-1 -1 -1] [5 -4 -1] 2 + [-1 -1 -1] [-1 5 -4] 2 + [1 1 -1] [1 4 5] 2 + [-1 1 1] [5 1 4] 2 + [1 -1 1] [4 5 1] 2 screw dislocations: 4 x 1 Burgers vector energy - (-1 -1 -1) 1 - (1 -1 1) 1 - (-1 1 1) 1 - (1 1 -1) 1 + [-1 -1 -1] 1 + [1 -1 1] 1 + [-1 1 1] 1 + [1 1 -1] 1 {% endhighlight %}

Here the norm of the Burgers vectors is important

{% highlight matlab %} diff --git a/pages/documentation_matlab/GrainGraphBasedReconstruction.html b/pages/documentation_matlab/GrainGraphBasedReconstruction.html index f38a80752..58928ed38 100644 --- a/pages/documentation_matlab/GrainGraphBasedReconstruction.html +++ b/pages/documentation_matlab/GrainGraphBasedReconstruction.html @@ -36,6 +36,8 @@ {% endhighlight %} {% highlight plaintext %} +saving data to /home/hielscher/mtex/master/data/martensite.mat + ebsd = EBSD Phase Orientations Mineral Color Symmetry Crystal reference frame @@ -67,7 +69,7 @@ child Iron bcc (old) 432 7002 100% OR: (111) || (011) [10-1] || [11-1] - c2c fit: 2.4°, 3.4°, 4.4°, 5.4° (quintiles) + c2c fit: 2.5°, 3.4°, 4.4°, 5.4° (quintiles) {% endhighlight %}

The output of the variable job tells us the amount of parent and child grains as well as the percentage of already recovered parent grains. Furthermore, it displays how well the current guess of the parent to child orientation relationship fits the child to child misorientations within our data. In our sample data set this fit is described by the 4 quintiles 2.5°, 3.5°, 4.5° and 5.5°.

Optimizing the parent child orientation relationship

It is well known that the phase transformation from austenite to martensite is not described by a fixed orientation relationship. In fact, the actual orientation relationship needs to be determined for each sample individualy. Here, we used the iterative method proposed by Tuomo Nyyssönen and implemented in the function calcParent2Child that starts at our initial guess of the orientation relation ship and iterates towards a more optimal orientation relationship.

{% highlight matlab %} @@ -131,7 +133,7 @@ child Iron bcc (old) 432 7002 100% OR: (346.9°,9.3°,57.9°) - c2c fit: 1.4°, 1.9°, 2.2°, 3.3° (quintiles) + c2c fit: 1.4°, 1.9°, 2.2°, 3.2° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° graph: 7001 grains in 3 clusters + 1 single grain clusters @@ -161,7 +163,7 @@ c2c fit: 1.4°, 1.9°, 2.2°, 3.3° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° - graph: 6943 grains in 273 clusters + 59 single grain clusters + graph: 6943 grains in 276 clusters + 59 single grain clusters {% endhighlight %}

Finaly, we assume a single parent orientation for each cluster and use it to compute a parent orientation for each child grain beeing part of a cluster. This is done by the command calcParentFromGraph.

{% highlight matlab %} @@ -206,11 +208,11 @@ ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Iron fcc 432 5582 88% 80% - child Iron bcc (old) 432 1420 12% + parent Iron fcc 432 5638 88% 81% + child Iron bcc (old) 432 1364 12% OR: (346.9°,9.3°,57.9°) - p2c fit: 4.1°, 10°, 14°, 21° (quintiles) + p2c fit: 3.9°, 9.8°, 14°, 21° (quintiles) c2c fit: 1.3°, 1.8°, 2.2°, 3° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° {% endhighlight %} @@ -235,12 +237,12 @@ ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Iron fcc 432 5909 92% 84% - child Iron bcc (old) 432 1093 8% + parent Iron fcc 432 5970 92% 85% + child Iron bcc (old) 432 1032 7.6% OR: (346.9°,9.3°,57.9°) - p2c fit: 5.7°, 11°, 15°, 22° (quintiles) - c2c fit: 1.3°, 1.8°, 2.2°, 3.1° (quintiles) + p2c fit: 5.4°, 11°, 15°, 22° (quintiles) + c2c fit: 1.4°, 1.8°, 2.2°, 3.2° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° votes: 2 x 1 @@ -250,27 +252,27 @@ ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Iron fcc 432 6295 95% 90% - child Iron bcc (old) 432 707 5.2% + parent Iron fcc 432 6348 95% 91% + child Iron bcc (old) 432 654 4.8% OR: (346.9°,9.3°,57.9°) p2c fit: 11°, 13°, 17°, 23° (quintiles) - c2c fit: 1.3°, 1.8°, 2.2°, 2.9° (quintiles) + c2c fit: 1.4°, 1.8°, 2.2°, 3° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° - votes: 3 x 1 + votes: 2 x 1 probabilities: 0%, 0%, 0%, 0% (quintiles) ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Iron fcc 432 6652 98% 95% - child Iron bcc (old) 432 350 2.4% + parent Iron fcc 432 6670 98% 95% + child Iron bcc (old) 432 332 2.3% OR: (346.9°,9.3°,57.9°) - p2c fit: 14°, 18°, 22°, 26° (quintiles) - c2c fit: 1.4°, 1.8°, 2.2°, 3° (quintiles) + p2c fit: 14°, 19°, 22°, 27° (quintiles) + c2c fit: 1.3°, 1.8°, 2.2°, 3° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° votes: 1 x 1 @@ -316,11 +318,6 @@ plot(grainSelected.boundary,'linewidth',3,'lineColor','w') hold off {% endhighlight %} - -{% highlight plaintext %} -Warning: Packet ID calculation assuming {111}_p||{110}_c -Warning: Bain ID calculation assuming {001}_p||{100}_c -{% endhighlight %}
{% include inline_image.html file="GrainGraphBasedReconstruction_12.png" %}

We can also directly identify the child grains belonging to the selected parent grains. Remeber 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

@@ -363,10 +360,6 @@ plotPDF(childVariants, 'markerFaceColor','none','linewidth',1.5,'markerEdgeColor','k') hold off {% endhighlight %} - -{% highlight plaintext %} -Warning: Packet ID calculation assuming {111}_p||{110}_c -{% endhighlight %}
{% 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

@@ -376,10 +369,6 @@ % plot the result plot(parentEBSD('Iron fcc'),parentEBSD('Iron fcc').orientations,'figSize','large') {% endhighlight %} - -{% highlight plaintext %} -Warning: Packet ID calculation assuming {111}_p||{110}_c -{% endhighlight %}
{% include inline_image.html file="GrainGraphBasedReconstruction_15.png" %}

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

diff --git a/pages/documentation_matlab/GrainMerge.html b/pages/documentation_matlab/GrainMerge.html index 5d935ea17..8189d7f82 100644 --- a/pages/documentation_matlab/GrainMerge.html +++ b/pages/documentation_matlab/GrainMerge.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Merging Grains - edit page

Merging grains may be usefull when reconstructing parent grain structures, i.e., before phase transistion or before twinning. In this section we will use a twinning example for illustration. Lets start by importing some Magenesium data and reconstructing the grain structure:

+ edit page

Merging grains may be useful when reconstructing parent grain structures, i.e., before phase transition or before twinning. In this section we will use a twinning example for illustration. Lets start by importing some Magnesium data and reconstructing the grain structure:

{% highlight matlab %} % load some example data mtexdata twins silent @@ -60,7 +60,7 @@ {% endhighlight %}
{% include inline_image.html file="GrainMerge_02.png" %} -

Merge grains along boundaries

The command merge will merge grains together that have a commong boundary which is specified as the second argument. In our example we want to merge all grains that have a common twinning boundary so we do

+

Merge grains along boundaries

The command merge will merge grains together that have a common boundary which is specified as the second argument. In our example we want to merge all grains that have a common twinning boundary so we do

{% highlight matlab %} [mergedGrains,parentId] = merge(grains,twinBoundary); @@ -104,9 +104,9 @@ 24 1 774 178 90 235 0.0102946 28 1 45 80 25 188 0.0108147 29 1 293 94 145 185 0.00913161 - 33 1 250 179 89 235 0.0107513 + 33 1 250 179 89 235 0.0107569 {% endhighlight %} -

Estimate twin area fraction

Determining which of the measured grains are orginal grains and which are twins is a tough problem. Here we make a very simple assumption by labeling those areas as twins that make up less than half of the merged (original) parent grain

+

Estimate twin area fraction

Determining which of the measured grains are original grains and which are twins is a tough problem. Here we make a very simple assumption by labeling those areas as twins that make up less than half of the merged (original) parent grain

{% highlight matlab %} % extract grain area for faster access gArea = grains.area; @@ -150,10 +150,10 @@

Estimate twin area fraction

Determining which of the measured {% endhighlight %}

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

The parentId may also be used to compute properties of the parent grains by averaging over the corresponding child grain properties. This can be done with the Matlab command accumarray

+

The parentId may also be used to compute properties of the parent grains by averaging over the corresponding child grain properties. This can be done with the MATLAB command accumarray

{% highlight matlab %} % this averages the GOS of the child grains into the parent grains -mergedGrains.prop.GOS = accumarray(parentId,grains.GOS,size(mergedGrains),@nanmean); +mergedGrains.prop.GOS = accumarray(parentId,grains.GOS,size(mergedGrains),@mean); % visualize the result close all @@ -161,13 +161,12 @@

Estimate twin area fraction

Determining which of the measured hold on plot(mergedGrains.boundary,'lineColor','white','lineWidth',2) mtexTitle('original GOS') -mtexColorbar -nextAxis +nextAxis(1,2) plot(mergedGrains,mergedGrains.GOS ./ degree) mtexTitle('merged GOS') mtexColorbar -caxis([0,1.5]) +setColorRange([0,1.5]) {% endhighlight %}

{% include inline_image.html file="GrainMerge_05.png" %} @@ -181,11 +180,8 @@

Estimate twin area fraction

Determining which of the measured mergedGrains.prop.GOS = accumarray(parentId,1:length(grains),size(mergedGrains),... @(id) nanmeanWeights(childGOS(id),childArea(id))); -nextAxis(2), hold on +nextAxis(1,3), hold on plot(mergedGrains,mergedGrains.GOS ./ degree) -setColorRange equal -mtexColorbar -caxis([0,1.5]) {% endhighlight %}

{% include inline_image.html file="GrainMerge_06.png" %} diff --git a/pages/documentation_matlab/GrainNeighbours.html b/pages/documentation_matlab/GrainNeighbours.html index 40e28359c..bbe092f3c 100644 --- a/pages/documentation_matlab/GrainNeighbours.html +++ b/pages/documentation_matlab/GrainNeighbours.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Grain Neighbors - edit page

In this section we discuss how to analyze the neighbouring relationships between grains. While most of this can be done also on the level of grain boundaries an local misorientations it is for large data sets sometimes useful to consider misorientations between the meanorienations of grains. We shall use the following Magnesium data set of our explainations.

+ edit page

In this section we discuss how to analyze the neighboring relationships between grains. While most of this can be done also on the level of grain boundaries an local misorientations it is for large data sets sometimes useful to consider misorientations between the mean-orientations of grains. We shall use the following Magnesium data set of our explanations.

{% highlight matlab %} % load sample EBSD data set mtexdata twins silent @@ -28,7 +28,7 @@ {% endhighlight %}
{% include inline_image.html file="GrainNeighbours_01.png" %} -

Central for the analysis of grain to grain relationships is the function grains.neighbours. It return a list of pairs of neighbouring grain ids. Each row of the list containes the ids of two neighbouring grains. In the following lines choose the row number 170 and outline the corresponding grains

+

Central for the analysis of grain to grain relationships is the function grains.neighbours. It return a list of pairs of neighboring grain ids. Each row of the list contains the ids of two neighboring grains. In the following lines choose the row number 170 and outline the corresponding grains

{% highlight matlab %} pairs = grains.neighbors; @@ -48,7 +48,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 107.142 58.9469 309.49 + 107.132 58.9845 309.493 {% endhighlight %}

This can be generalized to compute the misorientations between neighbouring grains using

{% highlight matlab %} @@ -76,7 +76,7 @@ (1-101) || (10-11) [01-11] || [01-1-1] {% endhighlight %} -

In order to determine the percentage of twinnig pairs we do

+

In order to determine the percentage of twining pairs we do

{% highlight matlab %} % which of the pairs are twinning isTwinning = angle(mori,twinning) < 3*degree; @@ -89,7 +89,7 @@ ans = 37.0518 {% endhighlight %} -

It is important to understand that the list returned by grains.neighbours containes only pairs such that both grains are contained in grains. This allows the syntax grains('phaseName') to extract only neighbour relation ships within one phase.

In some case, e.g. if we ask for all neighbouring grains to a given grains, it is useful to replace this constraint by the condition that at least one grain should by part of grains. This can be accomplished by the option 'full'.

+

It is important to understand that the list returned by grains.neighbours contains only pairs such that both grains are contained in grains. This allows the syntax grains('phaseName') to extract only neighbor relation ships within one phase.

In some case, e.g. if we ask for all neighboring grains to a given grains, it is useful to replace this constraint by the condition that at least one grain should by part of grains. This can be accomplished by the option 'full'.

{% highlight matlab %} % get all pairs containing grain 83 pairs = grains(83).neighbors('full'); @@ -103,6 +103,17 @@ hold on plot(grains(83).boundary,'lineColor','red','lineWidth',3) hold off + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="GrainNeighbours_04.png" %} diff --git a/pages/documentation_matlab/GrainOrientationParameters.html b/pages/documentation_matlab/GrainOrientationParameters.html index 02e7ddb88..ea51df499 100644 --- a/pages/documentation_matlab/GrainOrientationParameters.html +++ b/pages/documentation_matlab/GrainOrientationParameters.html @@ -93,7 +93,7 @@ triple points: 15 Id Phase Pixels phi1 Phi phi2 GOS - 235 0 1949 144 41 301 0.0217034 + 235 0 1949 144 41 301 0.0434024 ori = orientation (Ferrite → xyz) @@ -105,7 +105,7 @@ {% endhighlight %}
{% include inline_image.html file="GrainOrientationParameters_02.png" %} -

Misorientation to the grain mean orientation

Once we have a reference orientation for each grain - the grain meanorientation ori_ref - we may want to analyse the deviation of the individual orientations within the grain from this reference orientation. The grain reference orientation deviation (GROD) is the misorientation between each pixel orientation to the grain mean orientation defined as

+

Misorientation to the grain mean orientation

Once we have a reference orientation for each grain - the grain meanorientation ori_ref - we may want to analyze the deviation of the individual orientations within the grain from this reference orientation. The grain reference orientation deviation (GROD) is the misorientation between each pixel orientation to the grain mean orientation defined as

{% highlight matlab %} mis2mean = inv(grainSel.meanOrientation) .* ori {% endhighlight %} @@ -121,12 +121,12 @@ {% highlight plaintext %} mis2mean = misorientation (Ferrite → Ferrite) - size: 59103 x 1 + size: 58967 x 1 {% endhighlight %}

Grain orientation spread (GOS)

The full misorientation to the mean orientation is often not so simple to understand. A good starting point is to just look at the misorientation angles to the grain mean orientation. The average of the misorientation angles to the grain mean orientation is called grain orientation spread (GOS) and can be computed by the command grainMean which averages arbitrary EBSD properties over grains. Here, we use it to average the misorientation angle for each grain separately.

{% highlight matlab %} -% take the avarage of the misorientation angles for each grain -GOS = ebsd.grainMean(mis2mean.angle); +% take the average of the misorientation angles for each grain +GOS = ebsd.grainMean(mis2mean.angle, grains); % plot it plot(grains, GOS ./ degree) @@ -137,7 +137,7 @@

Grain orientation spread (GOS)

The full misorientation to the

It should be noted that the GOS is also directly available as the grain property grains.GOS.

The function grainMean can also be used to compute the maximum misorientation angle to the mean orientation within each grain. To achieve this we have to pass the function @max as an additional argument. Note, that you can replace this function also with any other statistics like the median, or some quantile.

{% highlight matlab %} % compute the maximum misorientation angles for each grain -MGOS = ebsd.grainMean(mis2mean.angle,@max); +MGOS = ebsd.grainMean(mis2mean.angle, grains, @max); % plot it plot(grains, MGOS ./ degree) @@ -147,7 +147,7 @@

Grain orientation spread (GOS)

The full misorientation to the {% include inline_image.html file="GrainOrientationParameters_04.png" %}

Grain average misorientation (GAM)

A measure that is often confused with the grain orientation spread is the grain average misorientation (GAM). The GAM is defined as the kernel average misorientation (KAM) averaged over each grain. Hence, we can compute is by using the functions ebsd.KAM and grainMean.

{% highlight matlab %} -gam = ebsd.grainMean(ebsd.KAM); +gam = ebsd.grainMean(ebsd.KAM, grains); plot(grains,gam./degree) mtexColorbar('title','GAM in degree') @@ -172,7 +172,7 @@

Grain orientation spread (GOS)

The full misorientation to the {% endhighlight %}

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

The function fibre.fit has three output arguments. The first one f is the fittted fibre. From this we can easily detect the prominent misorientation axis in specimen coordinates by f.r and in crystal coordinates by f.h.

+

The function fibre.fit has three output arguments. The first one f is the fitted fibre. From this we can easily detect the prominent misorientation axis in specimen coordinates by f.r and in crystal coordinates by f.h.

{% highlight matlab %} f.r f.h @@ -186,10 +186,12 @@

Grain orientation spread (GOS)

The full misorientation to the {% highlight plaintext %} ans = vector3d + x y z + -0.281993 0.0471325 -0.958258 ans = Miller (Ferrite) - h k l - -1.6922 0.1497 2.3132 + h k l + 1.6922 -0.1497 -2.3132 {% endhighlight %}

{% include inline_image.html file="GrainOrientationParameters_07.png" %} @@ -217,7 +219,7 @@

Grain orientation spread (GOS)

The full misorientation to the [f,lambda(k,:),fit(k)] = fibre.fit(ebsd(grainsLarge(k)).orientations,'local'); % store the misorientation axes in crystal and specimen symmetry - GAX_C(k) = f.h; + GAX_C(k) = f.h; %#ok<*SAGROW> GAX_S(k) = f.r; end @@ -302,5 +304,16 @@

Grain orientation spread (GOS)

The full misorientation to the %T_oblate = bingham_test(ori,'oblate', 'approximated'); %[T_spherical T_prolate T_oblate] + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %}
\ No newline at end of file diff --git a/pages/documentation_matlab/GrainReconstruction.html b/pages/documentation_matlab/GrainReconstruction.html index 67e3a5a39..d18a3f2a5 100644 --- a/pages/documentation_matlab/GrainReconstruction.html +++ b/pages/documentation_matlab/GrainReconstruction.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Grain Reconstruction - edit page

By grain reconstruction we mean the subdivision of the specimen, or more precisely the measured surface of the specimen, into regions of similar orientation which we then call grains. Note that there is no canonical definition of what is a grain. The grain reconstruction method that is default in MTEX is based on the definition of high angle grain boundaries which are assumed at the Mittelsenkrechten between neighbouring measurements whenever their misorientation angle exceeds a certain threshold. According to this point of view grains are regions surrounded by grain boundaries.

In order to illustrate the grain reconstruction process we consider the following sample data set

+ edit page

By grain reconstruction we mean the subdivision of the specimen, or more precisely the measured surface of the specimen, into regions of similar orientation which we then call grains. Note that there is no canonical definition of what is a grain. The default grain reconstruction method in MTEX is based on the definition of high angle grain boundaries which are assumed at the perpendicular bisector between neighbouring measurements whenever their misorientation angle exceeds a certain threshold. According to this point of view grains are regions surrounded by grain boundaries.

In order to illustrate the grain reconstruction process we consider the following sample data set

{% highlight matlab %} close all; plotx2east @@ -22,6 +22,9 @@ % restrict it to a subregion of interest. ebsd = ebsd(inpolygon(ebsd,[5 2 10 5]*10^3)); +% gridify the data +ebsd = ebsd.gridify; + % make a phase plot plot(ebsd) {% endhighlight %} @@ -40,27 +43,27 @@ {% endhighlight %}
{% include inline_image.html file="GrainReconstruction_01.png" %} -

Basic grain reconstruction

We see that there are a lot of not indexed measurements. For grain reconstruction, we have three different choices how to deal with these unindexed regions:

  1. leave them unindexed
  2. assign them to the surrounding grains
  3. a mixture of both, e.g., assign small notindexed regions to the surrounding grains but keep large notindexed regions

By default, MTEX uses the first method.

The second parameter that is involved in grain reconstruction is the threshold misorientation angle indicating a grain boundary. By default, this value is set to 10 degrees.

All grain reconstruction methods in MTEX are accessible via the command calcGrains which takes as input an EBSD data set and returns a list of grain.

+

Basic grain reconstruction

We see that there are a lot of not indexed measurements. For grain reconstruction, we have three different choices how to deal with these unindexed regions:

  1. leave them unindexed
  2. assign them to the surrounding grains
  3. a mixture of both, e.g., assign small notindexed regions to the surrounding grains but keep large notindexed regions

The extent to which unindexed pixels are assigned is controlled by the parameter 'alpha'. Roughly speaking this parameter is the radius of the smallest unindexed region that will not be entirely assigned to surrounding grains. The default of this value is 2.2.

The second parameter involved in grain reconstruction is the threshold misorientation angle indicating a grain boundary. By default, this value is set to 10 degrees.

All grain reconstruction methods in MTEX are accessible via the command calcGrains which takes as input an EBSD data set and returns a list of grain.

{% highlight matlab %} -grains = calcGrains(ebsd,'angle',10*degree) +[grains, ebsd.grainId] = calcGrains(ebsd,'alpha',2.2,'angle',10*degree); +grains {% endhighlight %} {% highlight plaintext %} grains = grain2d Phase Grains Pixels Mineral Symmetry Crystal reference frame - 0 1139 4052 notIndexed - 1 244 14093 Forsterite mmm - 2 177 1397 Enstatite mmm - 3 104 759 Diopside 12/m1 X||a*, Y||b*, Z||c + 1 109 14093 Forsterite mmm + 2 34 1397 Enstatite mmm + 3 71 759 Diopside 12/m1 X||a*, Y||b*, Z||c - boundary segments: 10422 (523078 µm) - inner boundary segments: 0 (0 µm) - triple points: 905 + boundary segments: 4198 (194612 µm) + inner boundary segments: 1 (19 µm) + triple points: 225 Properties: meanRotation, GOS {% endhighlight %} -

The reconstructed grains are stored in the variable grains. Note that also the notIndexed measurements are grouped into grains. This allows later to analyze the shape of these unindexed regions.

To visualize the grains we can plot its boundaries by the command plot.

+

The reconstructed grains are stored in the variable grains. To visualize the grains we can plot its boundaries by the command plot.

{% highlight matlab %} % start overide mode hold on @@ -73,155 +76,49 @@ {% endhighlight %}
{% include inline_image.html file="GrainReconstruction_02.png" %} -

Filling notindexed holes

It is important to understand that MTEX distinguishes the following two situations

  1. a location is marked as notindexed
  2. a location does not occur in the data set

A location marked as notindexed is interpreted by MTEX as at this position, there is no crystal, whereas for a location that does not occur in the data set is interpreted by MTEX as: it is not known whether there is a crystal or not. Just to remind you, the later assumption is nothing special as it applies at all locations but the measurement points.

A location that does not occur in the data is assigned in MTEX to the same grain and phase as the closest measurement point - this may also be a notindexed point. Hence, filling holes in MTEX means to erase them from the list of measurements, i.e., instead of telling MTEX there is no crystal we are telling MTEX: we do not know what there is.

The extremal case is to say whenever there is a not indexed measurement we actually do not know anything and allow MTEX to freely guess what happens there. This is realized by removing all not indexed measurements or, equivalently, computing the grains only from the indexed measurements

+

Grainboundary Smoothing

Due to the gridded nature of the EBSD measurement the reconstructed grain boundaries often suffer from the staircase effect. This can be reduced by smoothing the grain boundaries using the command smooth

{% highlight matlab %} -% compute the grains from the indexed measurements only -grains = calcGrains(ebsd('indexed')) +grains = smooth(grains,5); +% display the result plot(ebsd) - -% start overide mode hold on - -% plot the boundary of all grains plot(grains.boundary,'linewidth',1.5) - -% mark two grains by location -plot(grains(11300,6100).boundary,'linecolor','DarkGreen','linewidth',5,... - 'DisplayName','grain A') -plot(grains(12000,4000).boundary,'linecolor','DarkBlue','linewidth',5,... - 'DisplayName','grain B') - -% stop overide mode hold off {% endhighlight %} - -{% highlight plaintext %} -grains = grain2d - - Phase Grains Pixels Mineral Symmetry Crystal reference frame - 1 103 14093 Forsterite mmm - 2 32 1397 Enstatite mmm - 3 71 759 Diopside 12/m1 X||a*, Y||b*, Z||c - - boundary segments: 3784 (185218 µm) - inner boundary segments: 12 (605 µm) - triple points: 240 - - Properties: meanRotation, GOS -{% endhighlight %}
{% include inline_image.html file="GrainReconstruction_03.png" %} -

We observe, especially in the marked grains, how MTEX fills notindexed regions and connects otherwise separate measurements to grains. As all information about not indexed regions were removed the reconstructed grains fill the map completely

-{% highlight matlab %} -plot(grains,'linewidth',2) -{% endhighlight %} -
-{% include inline_image.html file="GrainReconstruction_04.png" %} -

Inside of grain B, there is a large not indexed region and we might argue that is not very meaningful to assign such a large region to some grain but should have kept it not indexed. In order to decide which not indexed region is large enough to be kept not indexed and which not indexed regions can be filled it is helpful to know that the command calcGrains also separates the not indexed regions into "grains" and we can standard grain functions like area or perimeter to analyze these regions.

-{% highlight matlab %} -[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd); -notIndexed = grains('notIndexed') -{% endhighlight %} - -{% highlight plaintext %} -notIndexed = grain2d - - Phase Grains Pixels Mineral Symmetry Crystal reference frame - 0 1139 4052 notIndexed - - boundary segments: 8694 (436378 µm) - inner boundary segments: 0 (0 µm) - triple points: 868 - - Properties: meanRotation, GOS -{% endhighlight %} -

We see that we have 1139 not indexed regions. A good measure for compact regions vs. cluttered regions is the quotient between the area and the boundary length. Lets, therefore, plot the "not indexed grains" colorized by this quotient

-{% highlight matlab %} -% plot the not indexed regions colorcoded according the the quotient between -% number of measurements and number of boundary segments -plot(notIndexed,log(notIndexed.grainSize ./ notIndexed.boundarySize)) -mtexColorbar -{% endhighlight %} -
-{% include inline_image.html file="GrainReconstruction_05.png" %} -

Regions with a high quotient are blocks which can be hardly correctly assigned to a grain. Hence, we should keep these regions as not indexed and only remove the not indexed information from locations with a low quotient.

+

Adapting the Alpha Paramter

Increasing the parameter 'alpha' larger unindexed regions are associated to grains.

{% highlight matlab %} -% the "not indexed grains" we want to remove -toRemove = notIndexed(notIndexed.grainSize ./ notIndexed.boundarySize<0.8); - -% now we remove the corresponding EBSD measurements -ebsd(toRemove) = []; - -% and perform grain reconstruction with the reduces EBSD data set -[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd); +[grains, ebsd.grainId] = calcGrains(ebsd,'alpha',10,'angle',10*degree); +grains = smooth(grains,5); -plot(grains,'lineWidth',2) -{% endhighlight %} -
-{% include inline_image.html file="GrainReconstruction_06.png" %} -

We see that that all the narrow not indexed regions have been assigned to the surounding grains while the large regions have been left unindexed. Finally, the image with the raw EBSD data and on top the grain boundaries.

-{% highlight matlab %} -% plot the raw data +% plot the boundary of all grains plot(ebsd) - -% start overide mode hold on - -% plot the boundary of all grains plot(grains.boundary,'linewidth',1.5) - -% mark two grains by location -plot(grains(11300,6100).boundary,'linecolor','DarkGreen','linewidth',4,... - 'DisplayName','grain A') -plot(grains(12000,4000).boundary,'linecolor','DarkBlue','linewidth',4,... - 'DisplayName','grain B') - -% stop overide mode hold off {% endhighlight %}
-{% include inline_image.html file="GrainReconstruction_07.png" %} -

Non convex data sets

By default MTEX uses the convex hull when computing the outer boundary for an EBSD data set. This leads to poor results in the case of non convex EBSD data sets.

+{% include inline_image.html file="GrainReconstruction_04.png" %} +

Clearing Single Pixel Grains

There are quite a few single pixel grains we might want to consider as misindexations and perform the grain reconstruction on the cleaned up data set. This is done as follows

{% highlight matlab %} -% cut of a non convex region from our previous data set -poly = 1.0e+04 *[... - 0.6853 0.2848 - 0.7102 0.6245 - 0.8847 0.3908 - 1.1963 0.6650 - 1.1371 0.2880 - 0.6853 0.2833 - 0.6853 0.2848]; +% detect single pixel grains +isMisindexed = grains.grainSize==1; -ebsdP = ebsd(ebsd.inpolygon(poly)); +% set the corresponding EBSD data to notIndexed +ebsd(grains(isMisindexed)) = 'notIndexed'; -plot(ebsdP,'micronBar','off') -legend off +% redo grain reconstruction +[grains, ebsd.grainId] = calcGrains(ebsd,'alpha',3.2,'angle',10*degree); -% compute the grains -grains = calcGrains(ebsdP('indexed')); - -% plot the grain boundary -hold on -plot(grains.boundary,'linewidth',1.5) -hold off -{% endhighlight %} -
-{% include inline_image.html file="GrainReconstruction_08.png" %} -

We see that the grains badly fill up the entire convex hull of the data points. This can be avoided by specifying the option tight for the determination of the outer boundary.

-{% highlight matlab %} -plot(ebsdP,'micronBar','off') -legend off - -% compute the grains -grains = calcGrains(ebsdP('indexed'),'boundary','tight'); - -% plot the grain boundary +% display the result +grains = smooth(grains,5); +plot(ebsd) hold on plot(grains.boundary,'linewidth',1.5) hold off {% endhighlight %}
-{% include inline_image.html file="GrainReconstruction_09.png" %} +{% include inline_image.html file="GrainReconstruction_05.png" %}
\ No newline at end of file diff --git a/pages/documentation_matlab/GrainReconstructionAdvanced.html b/pages/documentation_matlab/GrainReconstructionAdvanced.html index 20f1b80d3..1b34023e7 100644 --- a/pages/documentation_matlab/GrainReconstructionAdvanced.html +++ b/pages/documentation_matlab/GrainReconstructionAdvanced.html @@ -196,11 +196,11 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 23 1952 Forsterite mmm 2 7 290 Enstatite mmm - 3 35 282 Diopside 12/m1 X||a*, Y||b*, Z||c + 3 38 282 Diopside 12/m1 X||a*, Y||b*, Z||c - boundary segments: 986 (53140 µm) + boundary segments: 999 (53837 µm) inner boundary segments: 0 (0 µm) - triple points: 57 + triple points: 60 Properties: meanRotation, GOS {% endhighlight %} @@ -248,7 +248,7 @@ {% include inline_image.html file="GrainReconstructionAdvanced_08.png" %}
{% include inline_image.html file="GrainReconstructionAdvanced_09.png" %} -

As an alternative MTEX includes the fast multiscale clustering method (FMC method) which constructs clusters in a hierarchical manner from single pixels using fuzzy logic to account for local, as well as global information.

Analogous with the threshold angle, a single parameter, C_Maha controls the sensitivity of the segmentation. A C_Maha value of 3.5 properly identifies the subgrain features. A C_Maha value of 3 captures more general features, while a value of 4 identifies finer features but is slightly oversegmented.

+

As an alternative MTEX includes the fast multi-scale clustering method (FMC method) which constructs clusters in a hierarchical manner from single pixels using fuzzy logic to account for local, as well as global information.

Analogous with the threshold angle, a single parameter, C_Maha controls the sensitivity of the segmentation. A C_Maha value of 3.5 properly identifies the sub-grain features. A C_Maha value of 3 captures more general features, while a value of 4 identifies finer features but is slightly oversegmented.

{% highlight matlab %} grains_FMC = calcGrains(ebsd('indexed'),'FMC',3.8) grains = calcGrains(ebsd('indexed')) @@ -270,21 +270,21 @@ Id Phase Pixels phi1 Phi phi2 GOS 1 1 7 317 128 159 0.0084358 2 1 1120 239 74 319 0.0251134 - 3 1 517 238 75 320 0.0100241 - 4 1 1783 56 103 40 0.0220667 + 3 1 517 238 75 320 0.0100267 + 4 1 1783 56 103 40 0.0220658 5 1 11 57 104 220 0.00744635 6 1 2 237 79 322 0.00276888 7 1 7 343 43 249 0.00797851 8 1 989 236 79 322 0.0126827 9 1 1060 239 75 320 0.0197615 10 1 76 238 75 320 0.00793592 - 11 1 1556 238 77 320 0.0219543 + 11 1 1556 238 77 320 0.0219626 12 1 349 237 77 320 0.011464 - 13 1 401 342 41 251 0.0103623 - 14 1 402 238 77 320 0.0121092 + 13 1 401 342 41 251 0.0103684 + 14 1 402 238 77 320 0.0121174 15 1 184 237 77 319 0.0128468 - 16 1 957 316 129 74 0.0176087 - 17 1 780 238 78 321 0.0123841 + 16 1 957 316 129 74 0.0176069 + 17 1 780 238 78 321 0.0123911 grains = grain2d @@ -304,11 +304,11 @@ %plot(ebsd,oM.orientation2color(ebsd.orientations)) plot(ebsd,colorKey.orientation2color(ebsd.orientations)) -% start overide mode +% start override mode hold on plot(grains_FMC.boundary,'linewidth',1.5) -% stop overide mode +% stop override mode hold off {% endhighlight %}
@@ -361,6 +361,26 @@ plot(ebsd,colorKey.orientation2color(ebsd.orientations)) hold on;plot(grains.boundary,'linewidth',2); hold off + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/GrainReconstructionOld.html b/pages/documentation_matlab/GrainReconstructionOld.html new file mode 100644 index 000000000..52a0b6c32 --- /dev/null +++ b/pages/documentation_matlab/GrainReconstructionOld.html @@ -0,0 +1,227 @@ +--- +title: Grain Reconstruction + +sidebar: documentation_sidebar +permalink: GrainReconstructionOld.html +folder: documentation +toc: false +--- + + + Grain Reconstruction + edit page

By grain reconstruction we mean the subdivision of the specimen, or more precisely the measured surface of the specimen, into regions of similar orientation which we then call grains. Note that there is no canonical definition of what is a grain. The grain reconstruction method that is default in MTEX is based on the definition of high angle grain boundaries which are assumed at the Mittelsenkrechten between neighbouring measurements whenever their misorientation angle exceeds a certain threshold. According to this point of view grains are regions surrounded by grain boundaries.

In order to illustrate the grain reconstruction process we consider the following sample data set

+{% highlight matlab %} +close all; plotx2east + +% import the data +mtexdata forsterite + +% restrict it to a subregion of interest. +ebsd = ebsd(inpolygon(ebsd,[5 2 10 5]*10^3)); + +% make a phase plot +plot(ebsd) +{% endhighlight %} + +{% highlight plaintext %} +ebsd = EBSD + + Phase Orientations Mineral Color Symmetry Crystal reference frame + 0 58485 (24%) notIndexed + 1 152345 (62%) Forsterite LightSkyBlue mmm + 2 26058 (11%) Enstatite DarkSeaGreen mmm + 3 9064 (3.7%) Diopside Goldenrod 12/m1 X||a*, Y||b*, Z||c + + Properties: bands, bc, bs, error, mad, x, y + Scan unit : um +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_01.png" %} +

Basic grain reconstruction

We see that there are a lot of not indexed measurements. For grain reconstruction, we have three different choices how to deal with these unindexed regions:

  1. leave them unindexed
  2. assign them to the surrounding grains
  3. a mixture of both, e.g., assign small notindexed regions to the surrounding grains but keep large notindexed regions

By default, MTEX uses the first method.

The second parameter that is involved in grain reconstruction is the threshold misorientation angle indicating a grain boundary. By default, this value is set to 10 degrees.

All grain reconstruction methods in MTEX are accessible via the command calcGrains which takes as input an EBSD data set and returns a list of grain.

+{% highlight matlab %} +grains = calcGrains(ebsd,'angle',10*degree) +{% endhighlight %} + +{% highlight plaintext %} +grains = grain2d + + Phase Grains Pixels Mineral Symmetry Crystal reference frame + 0 1139 4052 notIndexed + 1 244 14093 Forsterite mmm + 2 177 1397 Enstatite mmm + 3 104 759 Diopside 12/m1 X||a*, Y||b*, Z||c + + boundary segments: 10422 (523081 µm) + inner boundary segments: 0 (0 µm) + triple points: 905 + + Properties: meanRotation, GOS +{% endhighlight %} +

The reconstructed grains are stored in the variable grains. Note that also the notIndexed measurements are grouped into grains. This allows later to analyze the shape of these unindexed regions.

To visualize the grains we can plot its boundaries by the command plot.

+{% highlight matlab %} +% start overide mode +hold on + +% plot the boundary of all grains +plot(grains.boundary,'linewidth',1.5) + +% stop overide mode +hold off +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_02.png" %} +

Filling notindexed holes

It is important to understand that MTEX distinguishes the following two situations

  1. a location is marked as notindexed
  2. a location does not occur in the data set

A location marked as notindexed is interpreted by MTEX as at this position, there is no crystal, whereas for a location that does not occur in the data set is interpreted by MTEX as: it is not known whether there is a crystal or not. Just to remind you, the later assumption is nothing special as it applies at all locations but the measurement points.

A location that does not occur in the data is assigned in MTEX to the same grain and phase as the closest measurement point - this may also be a notindexed point. Hence, filling holes in MTEX means to erase them from the list of measurements, i.e., instead of telling MTEX there is no crystal we are telling MTEX: we do not know what there is.

The extremal case is to say whenever there is a not indexed measurement we actually do not know anything and allow MTEX to freely guess what happens there. This is realized by removing all not indexed measurements or, equivalently, computing the grains only from the indexed measurements

+{% highlight matlab %} +% compute the grains from the indexed measurements only +grains = calcGrains(ebsd('indexed')) + +plot(ebsd) + +% start overide mode +hold on + +% plot the boundary of all grains +plot(grains.boundary,'linewidth',1.5) + +% mark two grains by location +plot(grains(11300,6100).boundary,'linecolor','DarkGreen','linewidth',5,... + 'DisplayName','grain A') +plot(grains(12000,4000).boundary,'linecolor','DarkBlue','linewidth',5,... + 'DisplayName','grain B') + +% stop overide mode +hold off +{% endhighlight %} + +{% highlight plaintext %} +grains = grain2d + + Phase Grains Pixels Mineral Symmetry Crystal reference frame + 1 103 14093 Forsterite mmm + 2 32 1397 Enstatite mmm + 3 71 759 Diopside 12/m1 X||a*, Y||b*, Z||c + + boundary segments: 3784 (185199 µm) + inner boundary segments: 12 (606 µm) + triple points: 240 + + Properties: meanRotation, GOS +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_03.png" %} +

We observe, especially in the marked grains, how MTEX fills notindexed regions and connects otherwise separate measurements to grains. As all information about not indexed regions were removed the reconstructed grains fill the map completely

+{% highlight matlab %} +plot(grains,'linewidth',2) +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_04.png" %} +

Inside of grain B, there is a large not indexed region and we might argue that is not very meaningful to assign such a large region to some grain but should have kept it not indexed. In order to decide which not indexed region is large enough to be kept not indexed and which not indexed regions can be filled it is helpful to know that the command calcGrains also separates the not indexed regions into "grains" and we can standard grain functions like area or perimeter to analyze these regions.

+{% highlight matlab %} +[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd); +notIndexed = grains('notIndexed') +{% endhighlight %} + +{% highlight plaintext %} +notIndexed = grain2d + + Phase Grains Pixels Mineral Symmetry Crystal reference frame + 0 1139 4052 notIndexed + + boundary segments: 8694 (436390 µm) + inner boundary segments: 0 (0 µm) + triple points: 868 + + Properties: meanRotation, GOS +{% endhighlight %} +

We see that we have 1139 not indexed regions. A good measure for compact regions vs. cluttered regions is the quotient between the area and the boundary length. Lets, therefore, plot the "not indexed grains" colorized by this quotient

+{% highlight matlab %} +% plot the not indexed regions colorcoded according the the quotient between +% number of measurements and number of boundary segments +plot(notIndexed,log(notIndexed.grainSize ./ notIndexed.boundarySize)) +mtexColorbar +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_05.png" %} +

Regions with a high quotient are blocks which can be hardly correctly assigned to a grain. Hence, we should keep these regions as not indexed and only remove the not indexed information from locations with a low quotient.

+{% highlight matlab %} +% the "not indexed grains" we want to remove +toRemove = notIndexed(notIndexed.grainSize ./ notIndexed.boundarySize<0.8); + +% now we remove the corresponding EBSD measurements +ebsd(toRemove) = []; + +% and perform grain reconstruction with the reduces EBSD data set +[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd); + +plot(grains,'lineWidth',2) +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_06.png" %} +

We see that that all the narrow not indexed regions have been assigned to the surounding grains while the large regions have been left unindexed. Finally, the image with the raw EBSD data and on top the grain boundaries.

+{% highlight matlab %} +% plot the raw data +plot(ebsd) + +% start overide mode +hold on + +% plot the boundary of all grains +plot(grains.boundary,'linewidth',1.5) + +% mark two grains by location +plot(grains(11300,6100).boundary,'linecolor','DarkGreen','linewidth',4,... + 'DisplayName','grain A') +plot(grains(12000,4000).boundary,'linecolor','DarkBlue','linewidth',4,... + 'DisplayName','grain B') + +% stop overide mode +hold off +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_07.png" %} +

Non convex data sets

By default MTEX uses the convex hull when computing the outer boundary for an EBSD data set. This leads to poor results in the case of non convex EBSD data sets.

+{% highlight matlab %} +% cut of a non convex region from our previous data set +poly = 1.0e+04 *[... + 0.6853 0.2848 + 0.7102 0.6245 + 0.8847 0.3908 + 1.1963 0.6650 + 1.1371 0.2880 + 0.6853 0.2833 + 0.6853 0.2848]; + +ebsdP = ebsd(ebsd.inpolygon(poly)); + +plot(ebsdP,'micronBar','off') +legend off + +% compute the grains +grains = calcGrains(ebsdP('indexed')); + +% plot the grain boundary +hold on +plot(grains.boundary,'linewidth',1.5) +hold off +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_08.png" %} +

We see that the grains badly fill up the entire convex hull of the data points. This can be avoided by specifying the option tight for the determination of the outer boundary.

+{% highlight matlab %} +plot(ebsdP,'micronBar','off') +legend off + +% compute the grains +grains = calcGrains(ebsdP('indexed'),'boundary','tight'); + +% plot the grain boundary +hold on +plot(grains.boundary,'linewidth',1.5) +hold off +{% endhighlight %} +
+{% include inline_image.html file="GrainReconstructionOld_09.png" %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/GrainSmoothing.html b/pages/documentation_matlab/GrainSmoothing.html index 4c05469de..2d27f1a1d 100644 --- a/pages/documentation_matlab/GrainSmoothing.html +++ b/pages/documentation_matlab/GrainSmoothing.html @@ -19,7 +19,7 @@ ebsd(grains(grains.grainSize<2))=[]; grains = ebsd.calcGrains; -% the data was accquired on a regular grid; +% the data was acquired on a regular grid; plot(ebsd,ebsd.orientations,'micronbar','off') hold on plot(grains.boundary('indexed'),'linewidth',5,'linecolor','YellowGreen') @@ -40,7 +40,7 @@ {% include inline_image.html file="GrainSmoothing_01.png" %}

With the default parameters we have the following result

{% highlight matlab %} -% smooth the grains with default paramters +% smooth the grains with default parameters grains_smooth = smooth(grains); hold on @@ -61,7 +61,7 @@ ans = 1.7416e+04 {% endhighlight %} -

However, if we look at the frequnecy distribution of grain boundary segments, we find that some angle are over-represented which is due to the fact that without any additional input argument, grains.smooth performs just a single iteration

+

However, if we look at the frequency distribution of grain boundary segments, we find that some angle are over-represented which is due to the fact that without any additional input argument, grains.smooth performs just a single iteration

{% highlight matlab %} histogram(grains_smooth.boundary('indexed').direction, ... 'weights',grains_smooth.boundary('indexed').segLength,180) @@ -119,4 +119,8 @@ {% endhighlight %}
{% include inline_image.html file="GrainSmoothing_07.png" %} -

Be careful since this allows small grains to shrink with increasing number of smoothing iterations

Todo: different smoothing algorithms and 2nd order

\ No newline at end of file +

Be careful since this allows small grains to shrink with increasing number of smoothing iterations

Todo: different smoothing algorithms and 2nd order

+{% highlight matlab %} + %#ok<*SAGROW> +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/GrainSpatialPlots.html b/pages/documentation_matlab/GrainSpatialPlots.html index 16c03e6d7..6c25df918 100644 --- a/pages/documentation_matlab/GrainSpatialPlots.html +++ b/pages/documentation_matlab/GrainSpatialPlots.html @@ -38,7 +38,7 @@

Phase maps

When using the {% include inline_image.html file="GrainSpatialPlots_01.png" %} -

Accodingly, changing the color stored in the crystal symmetry changes the color in the map

+

Accordingly, changing the color stored in the crystal symmetry changes the color in the map

{% highlight matlab %} grains('Fo').CS.color = str2rgb('salmon') plot(grains) @@ -52,8 +52,8 @@

Phase maps

When using the Phase maps

When using the {% include inline_image.html file="GrainSpatialPlots_03.png" %} -

Orientation Maps

Coloring grains according to their mean orientations is very similar to EBSD maps colored by orientations. The most important thing is that the misorientation can only extracte from grains of the same phase.

+

Orientation Maps

Coloring grains according to their mean orientations is very similar to EBSD maps colored by orientations. The most important thing is that the misorientation can only extracted from grains of the same phase.

{% highlight matlab %} -% the implicite way +% the implicit way plot(grains('Fo'),grains('fo').meanOrientation) {% endhighlight %}
{% include inline_image.html file="GrainSpatialPlots_04.png" %} -

This implicte way gives no control about how the color is computed from the meanorientation. When using the explicite way by defining a orientation to color map

+

This implicit way gives no control about how the color is computed from the meanorientation. When using the explicit way by defining a orientation to color map

{% highlight matlab %} % this defines a ipf color key ipfKey = ipfColorKey(grains('Fo')); @@ -88,7 +88,7 @@

Phase maps

When using the Phase maps

When using the {% include inline_image.html file="GrainSpatialPlots_06.png" %} -

we see that we have a very alongated grain which makes it difficult to distinguesh the aspect ration of the other grains. A solution for this is to specify the values of the aspect ration which should maped to the top and bottom color of the colormap

+

we see that we have a very elongated grain which makes it difficult to distinguish the aspect ration of the other grains. A solution for this is to specify the values of the aspect ration which should mapped to the top and bottom color of the colormap

{% highlight matlab %} -CLim(gcm,[1 5]) +setColorRange([1 5]) {% endhighlight %}
{% include inline_image.html file="GrainSpatialPlots_07.png" %} -

Colorizing circular properties

Sometimes the property we want to display is a circular, e.g., the direction of the grain alongation. In this case it is important to use a circular colormap which assign the same color to high values and low values. In the case of the direction of the grain alongation the angles 0 and 180 should get the same color since they represent the same direction.

+

Colorizing circular properties

Sometimes the property we want to display is a circular, e.g., the direction of the grain elongation. In this case it is important to use a circular colormap which assign the same color to high values and low values. In the case of the direction of the grain elongation the angles 0 and 180 should get the same color since they represent the same direction.

{% highlight matlab %} -% consider only alongated grains +% consider only elongated grains alongated_grains = grains(grains.aspectRatio > 1.5); -% get the grain alongation +% get the grain elongation dir = alongated_grains.principalComponents; % transfer this into degree and project it into the interval [0,180] @@ -132,7 +132,7 @@

Phase maps

When using the

Plotting the orientation within a grain

In order to plot the orientations of EBSD data within certain grains one first has to extract the EBSD data that belong to the specific grains.

{% highlight matlab %} -% let have a look at the bigest grain +% let have a look at the biggest grain [~,id] = max(grains.area) % and select the corresponding EBSD data @@ -181,7 +181,7 @@

Phase maps

When using the Phase maps

When using the +%

+% +% {% endhighlight %}
{% include inline_image.html file="GrainSpatialPlots_11.png" %} diff --git a/pages/documentation_matlab/GrainTutorial.html b/pages/documentation_matlab/GrainTutorial.html index 9342b58ce..16fa1c9eb 100644 --- a/pages/documentation_matlab/GrainTutorial.html +++ b/pages/documentation_matlab/GrainTutorial.html @@ -83,9 +83,9 @@

Grain Reconstruction

Next we reconstruct the grains and grain 3 55 58 Biotite 2/m11 X||a*, Y||b*, Z||c 4 380 1066 Orthoclase 12/m1 X||a*, Y||b*, Z||c - boundary segments: 4425 (158125 µm) + boundary segments: 4424 (158103 µm) inner boundary segments: 1 (45 µm) - triple points: 1333 + triple points: 1332 Properties: meanRotation, GOS {% endhighlight %} diff --git a/pages/documentation_matlab/Grain_dispersion_axes.html b/pages/documentation_matlab/Grain_dispersion_axes.html index f8b93f894..36ee17df2 100644 --- a/pages/documentation_matlab/Grain_dispersion_axes.html +++ b/pages/documentation_matlab/Grain_dispersion_axes.html @@ -1,5 +1,5 @@ --- -title: Using fibres to evaluate grain dispersion axes +title: Using fibers to evaluate grain dispersion axes sidebar: documentation_sidebar permalink: Grain_dispersion_axes.html @@ -11,7 +11,7 @@ Using fibres to evaluate grain dispersion axes + -->Using fibers to evaluate grain dispersion axes edit page

We will prepare some data to evaluate grain dispersion axes.

{% highlight matlab %} mtexdata forsterite @@ -38,7 +38,7 @@ Properties: bands, bc, bs, error, mad, x, y Scan unit : um {% endhighlight %} -

We colorize axes of the misorientation to the grain mean orientation in speciemn coordinates

+

We colorize axes of the misorientation to the grain mean orientation in specimen coordinates

{% highlight matlab %} ck = axisAngleColorKey(ebsd('f').CS); ck.oriRef=grains('id',ebsd('f').grainId).meanOrientation; @@ -102,7 +102,7 @@ annotate(disp_ax_grid,'plane','linestyle','--','linewidth',2) % While we might have guessed the result by eye, it is not too satisfying since -% the direction of the estiamted dispersion axis will always be located +% the direction of the estimated dispersion axis will always be located % on a grid point {% endhighlight %}
@@ -125,15 +125,16 @@ {% highlight plaintext %} fib = fibre (Forsterite → xyz) - h || r: (1 11 -2) || (12,5,-3) + h || r: (-1-112) || (-12,-5,3) + o1 → o2: (12.8°,44.7°,280.8°) → (12.8°,44.7°,280.8°) ans = vector3d - x y z - 0.89864 0.376589 -0.225003 + x y z + -0.89864 -0.376589 0.225003 ans = Miller (Forsterite) - h k l - 1.0362 9.5489 -1.6628 + h k l + -1.0362 -9.5489 1.6628 {% endhighlight %}
{% include inline_image.html file="Grain_dispersion_axes_05.png" %} @@ -143,10 +144,10 @@ % it is fitted by the fibre fd = angle(fib,o)/degree; plot(o,fd) -xlim([0 30]); ylim([60 90]); zlim([60 90]) +xlim([0 30]); ylim([20 70]); zlim([80 120]) grid minor hold on -plot(fib) +plot(fib,'linewidth',2) hold off nextAxis @@ -161,7 +162,7 @@ {% endhighlight %}
{% include inline_image.html file="Grain_dispersion_axes_06.png" %} -

TODO: use eigenvalues of fibre.fit to give measure of "fibryness" [fib, lambda] = fibre.fit(o,'local') lambda(2)/lambda(3)

Bulk evaluation

We can fit a fibre for each grain and write out the axes in crystal as well as in specimen coordiantes

+

TODO: use eigenvalues of fibre.fit to give measure of "fibryness" [fib, lambda] = fibre.fit(o,'local') lambda(2)/lambda(3)

Bulk evaluation

We can fit a fibre for each grain and write out the axes in crystal as well as in specimen coordinates

{% highlight matlab %} %ids = grains('f').id; %clear fib_axSC fib_axCC diff --git a/pages/documentation_matlab/IsotropicTheory.html b/pages/documentation_matlab/IsotropicTheory.html index c44c2d4ba..937319acc 100644 --- a/pages/documentation_matlab/IsotropicTheory.html +++ b/pages/documentation_matlab/IsotropicTheory.html @@ -91,7 +91,7 @@

The effective isotropic stiffness tensor

An isotropic Albite m 0 0 0 0 35.63 0 0 0 0 0 0 35.63 {% endhighlight %} -

The elastic moduli

The actual elastic properties of the material depend on the geometric microstructure and can not be computed without additional knowledge.

Based on the Voigt effective stiffness tensor we may now compute upper, directional independend bounds for all elastic moduli:

+

The elastic moduli

The actual elastic properties of the material depend on the geometric microstructure and can not be computed without additional knowledge.

Based on the Voigt effective stiffness tensor we may now compute upper, directional independent bounds for all elastic moduli:

{% highlight matlab %} G = C_iso_Voigt.shearModulus K = C_iso_Voigt.bulkModulus @@ -101,11 +101,11 @@

The elastic moduli

The actual elastic properties of the materi {% highlight plaintext %} G = - 41.4333 + 41.4335 K = - 63.0889 + 63.0892 E = - 101.9759 + 101.9764 nu = 0.2306 {% endhighlight %} @@ -180,9 +180,9 @@

Formulas between the elastic moduli

As a consequence, Youngs m ans = 0.2306 ans = - 101.9759 + 101.9764 ans = - 101.9759 + 101.9764 {% endhighlight %}

Lame constants

The second way to represent the elastic behaviour of an isotropic medium is by means of the Lame constants

{% highlight matlab %} @@ -218,9 +218,9 @@

Lame constants

The second way to represent the elastic behavio sigma = stressTensor (xyz) rank: 2 (3 x 3) - 115.16 64.59 18.82 - 64.59 149.53 23.69 - 18.82 23.69 151.41 + 116.62 40.76 38.23 + 40.76 89.63 32.94 + 38.23 32.94 123.72 {% endhighlight %}

in terms of the Lame constants by

{% highlight matlab %} @@ -232,9 +232,9 @@

Lame constants

The second way to represent the elastic behavio type: Lagrange rank: 2 (3 x 3) - 115.16 64.59 18.82 - 64.59 149.53 23.69 - 18.82 23.69 151.41 + 116.62 40.76 38.23 + 40.76 89.63 32.94 + 38.23 32.94 123.72 {% endhighlight %}

Hashin Shtrikman Bounds

While the Voigt and Reuss bounds are tight without additional assumptions, the extreme cases require a very specific layered microstructure. If one additionally assumes that the material is quasihomogeneous, i.e., it is constant elastic properties within each subregion that is significantly larger then the grain size, then the Voigt and Reuss bounds are to wide. More narrow bounds for this settings have been established by Hashin and Shtrikman in 1962.

The following deviation follows the paper by J.M. Brown (2015) Determination of Hashin-Shtrikman bounds on the isotropic effective elastic moduli of polycrystals of any symmetry, Computers & Geosciences, 80 (2015) 95-99.

The upper and lower Hashin-Shtrikman bounds for the bulk and shear moduli are found as a solution of an optimzation problem. Lets first set up the search domain

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

Hashin Shtrikman Bounds

While the Voigt and Reuss bounds are {% endhighlight %} {% highlight plaintext %} -Elapsed time is 2.581998 seconds. +Warning: Tensor is not positive definite +Warning: Tensor is not positive definite +Elapsed time is 2.290910 seconds. {% endhighlight %}

{% include inline_image.html file="IsotropicTheory_01.png" %} @@ -312,7 +314,7 @@

Hashin Shtrikman Bounds

While the Voigt and Reuss bounds are {% endhighlight %}

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

Comparison of the bounds

Finaly we compare the upper and lower Hashin Shtrikman bounds with the Voigt and Reuss bounds.

+

Comparison of the bounds

Finally we compare the upper and lower Hashin Shtrikman bounds with the Voigt and Reuss bounds.

{% highlight matlab %} KReuss = C_iso_Reuss.bulkModulus; KHill = C_iso_Hill.bulkModulus; @@ -334,10 +336,23 @@

Hashin Shtrikman Bounds

While the Voigt and Reuss bounds are {% highlight plaintext %} bulk modulus Voigt +HS Hill -HS Reus -63.0889 60.326 58.5696 57.107 54.0503 +63.0892 60.326 58.5696 57.107 54.05 shear modulus Voigt +HS Hill -HS Reus -41.4333 36.7537 35.6344 32.8495 29.8355 +41.4335 36.7537 35.6344 32.8495 29.8353 {% endhighlight %} -

Note, that upper and lower bounds for all other elastic moduli can be computed from these upper and lower bounds of the bulk and shear modulus.

\ No newline at end of file +

Note, that upper and lower bounds for all other elastic moduli can be computed from these upper and lower bounds of the bulk and shear modulus.

+{% highlight matlab %} +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/Lankford.html b/pages/documentation_matlab/Lankford.html new file mode 100644 index 000000000..c7a106a40 --- /dev/null +++ b/pages/documentation_matlab/Lankford.html @@ -0,0 +1,202 @@ +--- +title: Lankford parameter + +sidebar: documentation_sidebar +permalink: Lankford.html +folder: documentation +toc: false +--- + + + Lankford parameter + edit page

The Lankford parameter, also referred to as the Lankford coefficient, the R-value or plastic strain ratio, is an important material property in the field of mechanical metallurgy, particularly in the study of sheet metal forming processes. It is often used to optimize manufacturing processes, especially in industries like automotive and aerospace, where sheet metal components are extensively utilized.

The Lankford parameter quantifies the anisotropy of a material's plastic deformation behavior. It is the ratio of the true width strain to the true thickness strain at a particular value of length strain. This scalar quantity is used extensively as an indicator of formability.

R-values can vary widely depending on the material and its processing history:

  • Materials with high R-values, typically ranging from ~1 to 2.5 or higher, exhibit a strong degree of anisotropy in their deformation behavior. This means they deform significantly more in one direction compared to perpendicular directions.
  • Alternatively, materials with low R-values, typically close to zero or even slightly negative, exhibit more isotropic deformation characteristics such that they tend to deform relatively uniformly in all directions.

The R-value is highly relevant to forming operations:

  • Materials with high R-values are often preferred for forming processes. This is because they exhibit a strong tendency to elongate in one direction while constraining deformation in the perpendicular directions. This can lead to improved formability and allows for more complex shapes to be produced without causing defects like cracks or wrinkles.
  • On the other hand, materials with low R-values may be less suitable for certain forming operations. Since they tend to be less anisotropic, it results in more uniform deformation but that in turn may limit the complexity of shapes that can be produced without defects.

Understanding the R-value of a material is crucial in sheet metal forming processes as it helps manufacturers select the right material for a specific application.

For example, in the automotive industry, materials with high R-values are often chosen for parts like car body panels, where complex shapes are common.

On the other hand, materials with lower R-values may be more suitable for applications where uniformity of deformation is critical. An example is the production of deep drawn parts, such as cylindrical containers or cans. In deep drawing, a flat sheet of metal is formed into a three-dimensional shape by being drawn into a die cavity. This process requires uniform deformation of the material to avoid wrinkles, or uneven thickness distribution (thinning) in areas around the drawn part. Consequently, materials with lower r-values, which exhibit more isotropic deformation behavior, are better suited for deep drawing applications since they are less likely to show preferential deformation in one direction. Instead, they are more likely to deform uniformly in all directions, ensuring a consistent shape is produced.

To experimentally calculate the Lankford parameter, uniaxial tensile tests at different angles to the rolling direction are required. The R-value is then calculated as the ratio of the transverse strain (i.e. - perpendicular to the loading direction) to the axial strain (i.e. - along the loading direction).

In the context of crystallography and electron backscattering diffraction (EBSD) analysis, understanding the Lankford parameter is crucial for predicting how a material will deform under different loading conditions.

In terms of MATLAB and the MTEX toolbox, the the Lankford parameter or R-value is modelled or estimated on the basis of crystallographic orientations and the Taylor theory as demonstrated below.

Example 1: The Lankford parameter (or R-value) of a single orientation

In this example, a single (1 1 0)[1 -1 2] Brass orientation is used.

+{% highlight matlab %} +% define an fcc crystal system +CS = crystalSymmetry('m-3m', [1 1 1], 'mineral', 'fcc'); + +% define the fcc slip system +sS = slipSystem.fcc(CS) + +% use MTEX's pre-defined (1 1 0)[1 -1 2] Brass orientation +ori = orientation.brass(CS); + +% compute the Lankford parameter +rho = linspace(0,1,11); +[R, M, minM] = calcLankford(ori,sS,'verbose','rho',rho); +{% endhighlight %} + +{% highlight plaintext %} +sS = slipSystem (fcc) + + u v w | h k l CRSS + 0 1 -1 1 1 1 1 +--- +M at 0° to tA = 3.0617 +M at 45° to tA = 2.3357 +M at 90° to tA = 3.6741 +--- +R at 0° to tA = 1 +R at 45° to tA = Inf +R at 90° to tA = Inf +--- +Rbar = NaN +--- +{% endhighlight %} +

The summary results show that for the Brass orientation, it is not always possible to predict the R-value as Inf values are predicted at 45° and 90° to the nominal rolling direction (or in this case, x).

The computed Taylor factor allows us to recreates Fig. 3.10 on page 74 of: [William F. Hosford, The mechanics of crystals and textured polycrystals] (https://onlinelibrary.wiley.com/doi/epdf/10.1002/crat.2170290414) It shows the dependence of \(M\) on \(\rho = -d_{\epsilon}_Y / d_{\epsilon}_X = \frac{R}{1+R}\) for rolling and transverse direction tension tests for an ideal Brass orientation. In the rolling direction test, x = [1 -1 2], and in the transverse test x = [-1 1 1].

+{% highlight matlab %} +plot(rho, M(:,[1,10,19]).','-s','lineWidth',2); +xlabel('{\rho} = -d{\epsilon}_Y / d{\epsilon}_X'); +ylabel('Relative strength, M = {\sigma}_x / {\tau}'); +legend('\theta=0^\circ','\theta=45^\circ','\theta=90^\circ','Location','northeast'); +{% endhighlight %} +
+{% include inline_image.html file="Lankford_01.png" %} +

Example 2: The Lankford parameters from an ODF

In the previous chapter we have assumed a perfectly Brass oriented texture. Lets next assume a slight deviation around the preferred orientation of about 10 degree modeled by the ODF

+{% highlight matlab %} +odf = unimodalODF(ori,'halfwidth',10*degree) +{% endhighlight %} + +{% highlight plaintext %} +odf = SO3FunRBF (fcc → xyz) + + unimodal component + kernel: de la Vallee Poussin, halfwidth 10° + center: 1 orientations + + Bunge Euler angles in degree + phi1 Phi phi2 weight + 35 45 0 1 +{% endhighlight %} +

Performing, the Lankford factor analysis on the ODF results in

+{% highlight matlab %} +[R, M, minM] = calcLankford(odf,sS,'silent','rho',rho); + +plot(rho, M(:,[1,10,19]).','-s','lineWidth',2); +xlabel('{\rho} = -d{\epsilon}_Y / d{\epsilon}_X'); +ylabel('Relative strength, M = {\sigma}_x / {\tau}'); +legend('\theta=0^\circ','\theta=45^\circ','\theta=90^\circ','Location','northeast'); +{% endhighlight %} +
+{% include inline_image.html file="Lankford_02.png" %} +

Example 3: The Lankford parameter of an EBSD map

In this demonstration an hcp titanium dataset is used

+{% highlight matlab %} +% load an mtex ebsd map +mtexdata titanium + +% define the crystal system +CS = ebsd.CS; + +% reconstruct the grains +[grains,ebsd.grainId] = calcGrains(ebsd,'angle',5*degree); + +% remove small grains +ebsd(grains(grains.grainSize <= 5)) = []; + +% recalculate the grains +[grains,ebsd.grainId] = calcGrains(ebsd,'angle',5*degree); + +% plot the orientations +plot(ebsd,ebsd.orientations); +hold all +plot(grains.boundary,'lineWidth',2); +hold off +{% endhighlight %} + +{% highlight plaintext %} +ebsd = EBSD + + Phase Orientations Mineral Color Symmetry Crystal reference frame + 0 8100 (100%) Titanium (Alpha) LightSkyBlue 622 X||a, Y||b*, Z||c* + + Properties: ci, grainid, iq, sem_signal, x, y + Scan unit : um +{% endhighlight %} +
+{% include inline_image.html file="Lankford_03.png" %} +

define the hcp slip systems

Since Taylor theory is used to compute the Lankford parameter, multiple slip systems and their corresponding critical resolved shear stresses slip systems can be employed.

+{% highlight matlab %} +sS = [slipSystem.basal(CS,1),... + slipSystem.prismatic2A(CS,66),... + slipSystem.pyramidalCA(CS,80),... + slipSystem.twinC1(CS,100)] +{% endhighlight %} + +{% highlight plaintext %} +sS = slipSystem (Titanium (Alpha)) + size: 1 x 4 + + U V T W | H K I L CRSS + 1 1 -2 0 0 0 0 1 1 + 0 1 -1 0 2 -1 -1 0 66 + 2 -1 -1 3 -1 1 0 1 80 + -1 1 0 -2 -1 1 0 1 100 +{% endhighlight %} +

compute the Lankford parameter

The Lankford parameter is computed using the command calcLankford. It solely depends on the texture provided by the mean orientations of the grains, weighted by the area of the grains and the angle \(\theta\) between the tensile direction and the rolling direction. In the case of the latter, the default reference direction is \(x\).

+{% highlight matlab %} +theta = linspace(0,90*degree,19); +[R, M, minM] = calcLankford(grains.meanOrientation,sS,theta,'weights',grains.grainSize,'verbose'); +{% endhighlight %} + +{% highlight plaintext %} +--- +M at 0° to tA = 2.4575 +M at 45° to tA = 2.4835 +M at 90° to tA = 2.4139 +--- +R at 0° to tA = 0.66667 +R at 45° to tA = 1 +R at 90° to tA = 0.66667 +--- +Rbar = -0.33333 +--- +{% endhighlight %} +

The following plot shows the Lankford parameter, as a function of the angle \(\theta\) between the tensile direction and the notional rolling direction (in this case - x).

+{% highlight matlab %} +clf +plot(theta ./ degree,R,'o-r','lineWidth',1.5); +xlabel('Angle to tensile direction, {\theta} (in degrees)'); +ylabel('R @ M_m_i_n, R = {\rho} / (1 - {\rho}) = -d{\epsilon}_Y / d{\epsilon}_Z'); +{% endhighlight %} +
+{% include inline_image.html file="Lankford_04.png" %} +

Similarly, the next plot shows the Taylor factor as a function of the angle \(\theta\) between the tensile direction and the notional rolling direction (in this case - x).

+{% highlight matlab %} +plot(theta ./ degree,minM,'o-b','lineWidth',1.5); +xlabel('Angle to tensile direction, {\theta} (in degrees)'); +ylabel('Min. relative strength, min(M) = min({\sigma}_x / {\tau}min(M))'); +{% endhighlight %} +
+{% include inline_image.html file="Lankford_05.png" %} +

The R-value can also be used to compute two additional values that are of importance to sheet metal operations:

  • The normal anisotropy ratio (Rbar, or Ravg, or rm) defines the ability of the metal to deform in the thickness direction relative to deformation in the plane of the sheet. For Rbar values >= 1, the sheet metal resists thinning, improves cup drawing, hole expansion, and other forming modes where metal thinning is detrimental. For Rbar < 1, thinning becomes the preferential metal flow direction, increasing the risk of failure in drawing operations.
+{% highlight matlab %} +Rbar = 0.5 * (R(1) + R(19) + 2*R(10)) +{% endhighlight %} + +{% highlight plaintext %} +Rbar = + 1.6667 +{% endhighlight %} +
  • A related parameter is the planar anisotropy parameter (deltaR) which is an indicator of the ability of a material to demonstrate non-earing behavior. A deltaR value = 0 is ideal for can-making or deep drawing of cylinders, as this indicates equal metal flow in all directions; thus eliminating the need to trim ears during subsequent processing.
+{% highlight matlab %} +deltaR = 0.5 * (R(1) + R(19) - 2*R(10)) + +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% +{% endhighlight %} + +{% highlight plaintext %} +deltaR = + -0.3333 +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/LowLevelParentGrainReconstruction.html b/pages/documentation_matlab/LowLevelParentGrainReconstruction.html index 075a7d42c..c72f3bf98 100644 --- a/pages/documentation_matlab/LowLevelParentGrainReconstruction.html +++ b/pages/documentation_matlab/LowLevelParentGrainReconstruction.html @@ -82,7 +82,7 @@ tP = triplePointList points mineral 1 mineral 2 mineral 3 - 93853 Ti (alpha) Ti (alpha) Ti (alpha) + 93759 Ti (alpha) Ti (alpha) Ti (alpha) {% endhighlight %}

The command calcParent returns for each child orientation a parentId which allows us later to compute the parent orientation from the child orientation. Furthermore, the command return for each triple junction the misfit between the adjecent parent orientations in radiant. Finally, the option 'numFit',2 causes calcParent to return not only the best fit but also the second best fit. This will be used later. First we simple colorize the triple junctions according to the best fit.

{% highlight matlab %} @@ -218,7 +218,7 @@ {% highlight plaintext %} ans = - 15631 + 15535 {% endhighlight %}

alpha grains into the already reconstructed beta grain. This reduces the amount of grains not yet reconstructed to

{% highlight matlab %} @@ -227,7 +227,7 @@ {% highlight plaintext %} ans = - 1.1453 + 1.2253 {% endhighlight %}

percent. One way to proceed would be to repeat the steps of this section multiple time, maybe with increasing threshold, until the percentage of reconstructed beta grains is sufficiently high. Another approach in to consider the left over alpha grains as noise and use denoising techniques to replace them with beta orientations. This will be done in the last section.

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.

Therefore, we first identify all pixels that previously have been alpha titanium but now belong to a beta grain.

{% highlight matlab %} diff --git a/pages/documentation_matlab/MDFAnalysis.html b/pages/documentation_matlab/MDFAnalysis.html index 475285d1e..c2041d5f7 100644 --- a/pages/documentation_matlab/MDFAnalysis.html +++ b/pages/documentation_matlab/MDFAnalysis.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Misorientation Distribution Function - edit page

Explains how to compute and analyze misorientation distribution functions.

TODO

Please help to redo the section

When speaking about the misorientation distribution function (MDF) one has to differentiate to cases

  1. the boundary (correlated) misorientation distribution function
  2. the uncorelated misorientation distribution function

While the first one considers only misorientations at grain boundaries the second one considers misorietation between arbitrary crystal orientations. To illustrate the difference lets consider the following EBSD data set

+ edit page

Explains how to compute and analyze misorientation distribution functions.

TODO

Please help to redo the section

When speaking about the misorientation distribution function (MDF) one has to differentiate to cases

  1. the boundary (correlated) misorientation distribution function
  2. the uncorrelated misorientation distribution function

While the first one considers only misorientations at grain boundaries the second one considers misorientation between arbitrary crystal orientations. To illustrate the difference lets consider the following EBSD data set

{% highlight matlab %} % Lets import some EBSD data and reconstruct the grains. @@ -42,12 +42,12 @@ 3 1991 9064 Diopside 12/m1 X||a*, Y||b*, Z||c boundary segments: 147957 (7.4e+06 µm) - inner boundary segments: 33 (1650 µm) + inner boundary segments: 33 (1652 µm) triple points: 11456 Properties: meanRotation, GOS {% endhighlight %} -

The boundary misorientation distribution function

In order to compute the boundary misorientation distribution function for the phase transition from Forsterite to Enstatite we first extract the misorientations along all Forsterite to Enstatite boundary segements

+

The boundary misorientation distribution function

In order to compute the boundary misorientation distribution function for the phase transition from Forsterite to Enstatite we first extract the misorientations along all Forsterite to Enstatite boundary segments

{% highlight matlab %} mori_boundary = grains.boundary('Fo','En').misorientation {% endhighlight %} @@ -63,7 +63,6 @@

The boundary misorientation distribution function

In order to {% highlight plaintext %} mdf_boundary = SO3FunHarmonic (Forsterite → Enstatite) - isReal: true bandwidth: 48 weight: 1 {% endhighlight %} @@ -76,22 +75,27 @@

The boundary misorientation distribution function

In order to {% highlight plaintext %} adf_boundary = S2FunHarmonicSym (222) - symmetry: 222 bandwidth: 64 isReal: true {% endhighlight %}

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

The misorientation distribution function can be processed as any other ODF. E.g. we can compute the prefered misorientation via

+

The misorientation distribution function can be processed as any other ODF. E.g. we can compute the preferred misorientation via

{% highlight matlab %} [v,mori] = max(mdf_boundary) {% endhighlight %} {% highlight plaintext %} +Warning: Symmetry missmatch! The following crystal frames +seem to be different + + 1, X||a, Y||b, Z||c + Enstatite (mmm) + v = 275.8319 -mori = misorientation (Forsterite → Enstatite) +mori = misorientation (Forsterite → 1) Bunge Euler angles in degree phi1 Phi phi2 @@ -111,10 +115,9 @@

The boundary misorientation distribution function

In order to {% highlight plaintext %} mori = misorientation (Forsterite → Enstatite) - size: 98583 x 1 + size: 98602 x 1 mdf_uncor = SO3FunHarmonic (Forsterite → Enstatite) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} @@ -132,13 +135,11 @@

The boundary misorientation distribution function

In order to {% highlight plaintext %} odf_fo = SO3FunHarmonic (Forsterite → xyz) - isReal: true bandwidth: 25 weight: 1 odf_en = SO3FunHarmonic (Enstatite → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} @@ -149,7 +150,6 @@

The boundary misorientation distribution function

In order to {% highlight plaintext %} mdf = SO3FunHarmonic (Forsterite → Enstatite) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} @@ -187,11 +187,12 @@

The boundary misorientation distribution function

In order to

For computing the exact values see the commands calcAxisDistribution(mdf) and calcAxisDistribution(grains).

{% highlight matlab %} aD = calcDensity(axis(grains.boundary('fo','en').misorientation)) + + %#ok<*ASGLU> {% endhighlight %} {% highlight plaintext %} aD = S2FunHarmonicSym (222) - symmetry: 222 bandwidth: 25 isReal: true {% endhighlight %} diff --git a/pages/documentation_matlab/MTEXScripts.html b/pages/documentation_matlab/MTEXScripts.html index 3e1509809..9f1c1eedb 100644 --- a/pages/documentation_matlab/MTEXScripts.html +++ b/pages/documentation_matlab/MTEXScripts.html @@ -51,7 +51,7 @@ 3 1991 9064 Diopside 12/m1 X||a*, Y||b*, Z||c boundary segments: 147957 (7.4e+06 µm) - inner boundary segments: 33 (1650 µm) + inner boundary segments: 33 (1652 µm) triple points: 11456 Properties: meanRotation, GOS diff --git a/pages/documentation_matlab/MTEXvsBungeConvention.html b/pages/documentation_matlab/MTEXvsBungeConvention.html index 988a5d5a6..9aebc4e5a 100644 --- a/pages/documentation_matlab/MTEXvsBungeConvention.html +++ b/pages/documentation_matlab/MTEXvsBungeConvention.html @@ -33,7 +33,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 144.73 137.904 14.9569 + 233.77 140.049 234.843 {% endhighlight %}

This is now an MTEX orientation and can be used to translate crystal coordinates, i.e., Miller indices into specimen coordinates,

{% highlight matlab %} @@ -46,8 +46,12 @@ {% highlight plaintext %} r = vector3d + x y z + 0.845894 0.0940651 -0.524991 ans = vector3d + x y z + 0.845894 0.0940651 -0.524991 {% endhighlight %}

A Bunge orientation is exactly the inverse of an MTEX orientation, i.e.,

{% highlight matlab %} @@ -59,7 +63,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 165.043 137.904 35.2704 + 305.157 140.049 306.23 {% endhighlight %}

and translates specimen coordinates into Miller indices

{% highlight matlab %} @@ -80,17 +84,17 @@

Euler angles

Since the Euler angles are the most common way to {% highlight plaintext %} ans = - -0.6782 0.6247 0.3871 - 0.7142 0.4363 0.5473 - 0.1730 0.6477 -0.7420 + 0.8459 -0.1271 -0.5180 + 0.0941 -0.9204 0.3795 + -0.5250 -0.3698 -0.7666 ans = - -0.6782 0.6247 0.3871 - 0.7142 0.4363 0.5473 - 0.1730 0.6477 -0.7420 + 0.8459 -0.1271 -0.5180 + 0.0941 -0.9204 0.3795 + -0.5250 -0.3698 -0.7666 ans = - -0.6782 0.6247 0.3871 - 0.7142 0.4363 0.5473 - 0.1730 0.6477 -0.7420 + 0.8459 -0.1271 -0.5180 + 0.0941 -0.9204 0.3795 + -0.5250 -0.3698 -0.7666 {% endhighlight %}

Misorientations

Since, MTEX orientations translates crystal to specimen coordinates misorientations are defined by the formula

{% highlight matlab %} @@ -104,8 +108,8 @@

Misorientations

Since, MTEX orientations translates crystal to mori = misorientation (m-3m → m-3m) Bunge Euler angles in degree - phi1 Phi phi2 - 226.848 59.9936 236.883 + phi1 Phi phi2 + 269.5 66.8856 49.6806 {% endhighlight %}

as they are commonly defined coordinate transformations from crystal to crystal coordinates. This formula is different to the misorientation formula for Bunge orientations

{% highlight matlab %} @@ -119,7 +123,20 @@

Misorientations

Since, MTEX orientations translates crystal to mori = misorientation (m-3m → m-3m) Bunge Euler angles in degree - phi1 Phi phi2 - 226.848 59.9936 236.883 + phi1 Phi phi2 + 269.5 66.8856 49.6806 +{% endhighlight %} +

However, both formula result in exactly the same misorientation.

Summary

This list summarizes the differences between MTEX orientations and Bunge orientations.

  • formulas involving orientations - invert orientation
  • orientation Euler angles - unchanged
  • orientation matrix - transpose matrix
  • misorientations - unchanged
  • misorientation Euler angles - take Euler angles of inverse misorientation
+{% highlight matlab %} +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} -

However, both formula result in exactly the same misorientation.

Summary

This list summarizes the differences between MTEX orientations and Bunge orientations.

  • formulas involving orientations - invert orientation
  • orientation Euler angles - unchanged
  • orientation matrix - transpose matrix
  • misorientations - unchanged
  • misorientation Euler angles - take Euler angles of inverse misorientation
\ No newline at end of file +
\ No newline at end of file diff --git a/pages/documentation_matlab/MaParentGrainReconstruction.html b/pages/documentation_matlab/MaParentGrainReconstruction.html index 9f9aab96c..f646c0d62 100644 --- a/pages/documentation_matlab/MaParentGrainReconstruction.html +++ b/pages/documentation_matlab/MaParentGrainReconstruction.html @@ -86,7 +86,7 @@ child Iron bcc (old) 432 7002 100% OR: (346.9°,9.3°,57.9°) - c2c fit: 1.4°, 1.9°, 2.3°, 3.3° (quintiles) + c2c fit: 1.4°, 1.9°, 2.2°, 3.2° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° {% endhighlight %}
@@ -134,7 +134,7 @@ c2c fit: 1.4°, 1.9°, 2.2°, 3.2° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° - variant graph: 213948 entries + variant graph: 214046 entries {% endhighlight %}

For large maps it can be useful to perform the segmentation in a two step process, where in the in the first step similarly oriented variants are reconstructed as one variants and only seperated in a second step. This can be accomplished by the commands

{% highlight matlab %} @@ -179,17 +179,17 @@ {% highlight plaintext %} ans = parentGrainReconstructor - phase mineral symmetry grains area reconstructed - parent Iron fcc 432 6886 99% 98% - child Iron bcc (old) 432 116 0.58% + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 6885 99% 98% + child Iron bcc (old) 432 117 1.2% OR: (346.9°,9.3°,57.9°) - p2c fit: 3.4°, 5.2°, 10°, 20° (quintiles) - c2c fit: 1.8°, 2.6°, 3.4°, 3.7° (quintiles) + p2c fit: 2.7°, 4.9°, 9.6°, 19° (quintiles) + c2c fit: 1.8°, 2.7°, 3.4°, 3.8° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° - votes: 116 x 1 - probabilities: 0.37%, 0%, 0%, 0% (quintiles) + votes: 117 x 1 + probabilities: 0.41%, 0%, 0%, 0% (quintiles) {% endhighlight %}
{% include inline_image.html file="MaParentGrainReconstruction_06.png" %} @@ -212,16 +212,16 @@ {% highlight plaintext %} ans = parentGrainReconstructor - phase mineral symmetry grains area reconstructed - parent Iron fcc 432 6886 99% 98% - child Iron bcc (old) 432 116 0.58% + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 6885 99% 98% + child Iron bcc (old) 432 117 1.2% OR: (346.9°,9.3°,57.9°) - p2c fit: 3.4°, 5.2°, 10°, 20° (quintiles) - c2c fit: 1.8°, 2.6°, 3.4°, 3.7° (quintiles) + p2c fit: 2.7°, 4.9°, 9.6°, 19° (quintiles) + c2c fit: 1.8°, 2.7°, 3.4°, 3.8° (quintiles) closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.2° - votes: 6748 x 1 + votes: 6747 x 1 probabilities: 88%, 75%, 58%, 37% (quintiles) diff --git a/pages/documentation_matlab/MagneticAnisotropy.html b/pages/documentation_matlab/MagneticAnisotropy.html index f61cc2904..fe5bc5064 100644 --- a/pages/documentation_matlab/MagneticAnisotropy.html +++ b/pages/documentation_matlab/MagneticAnisotropy.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Magnetic Anisotropy - edit page

by Dr. Marco Witte, Salzgitter Mannesmann Forschung, March 2020.

The magnetocrystalline anisotropy energy Ea is necessary to rotate all magnetic moments towards the direction of an external field (saturation). This texture dependent propterty is of special interest for electrical steels.

This example script is based on the followin literature: * Wu et al. (2017): Journal of Magnetism and Magnetic Materials 444: 211–217. * Bunge, H.-J. (2013): Texture analysis in materials science: mathematical methods. * Bunge, H. J. (1989): Texture and magnetic properties. Textures and microstructures, 11. * Szpunar, J. (1989): Texture, Stress, and Microstructure 11, 2-4: 93-105. * Landgraf et al.(2003): Journal of Magnetism and Magnetic Materials 254–255: 364–66.

Define Parameters

+ edit page

by Dr. Marco Witte, Salzgitter Mannesmann Forschung, March 2020.

The magnetocrystalline anisotropy energy Ea is necessary to rotate all magnetic moments towards the direction of an external field (saturation). This texture dependent property is of special interest for electrical steels.

This example script is based on the following literature: * Wu et al. (2017): Journal of Magnetism and Magnetic Materials 444: 211–217. * Bunge, H.-J. (2013): Texture analysis in materials science: mathematical methods. * Bunge, H. J. (1989): Texture and magnetic properties. Textures and microstructures, 11. * Szpunar, J. (1989): Texture, Stress, and Microstructure 11, 2-4: 93-105. * Landgraf et al.(2003): Journal of Magnetism and Magnetic Materials 254–255: 364–66.

Define Parameters

{% highlight matlab %} % alloy content of Si and Al in wt.% x_Si = 3; @@ -26,14 +26,13 @@ % crystal symmetry CS = crystalSymmetry('m-3m'); -SS = specimenSymmetry('-1'); % define an odf - here with Goss orientation, as desired for grain oriented % electrical steel -odf = unimodalODF(orientation('Euler',0,45*degree,0,CS,SS),CS,SS); +odf = unimodalODF(orientation.goss(CS)); % simulate random orientations from the ODF -oris = discreteSample(odf,10000); +ori = discreteSample(odf,10000); {% endhighlight %}

Calculate anisotropy energy for different external magnetic field directions in sheet plane

Due to the rotation of an electrical motor the field direction is changing constantly inside the sheet plane.

{% highlight matlab %} @@ -41,43 +40,43 @@

Calculate anisotropy energy for different external magnetic field dir rot_mag = 0:10:90; % initialize variable for storage -E_a = zeros(length(rot_mag),length(oris)); +E_a = zeros(length(rot_mag),length(ori)); % loop over all rotations for j = 1:length(rot_mag) - %rotate orientations - rot = rotation('axis',zvector,'angle',rot_mag(j)*degree); - ori_rot = rot*oris; + % rotate orientations + rot = rotation.byAxisAngle(zvector,rot_mag(j)*degree); + ori_rot = rot * ori; - %Determine uvw of orientations (makes loop necessary) - ori_uvw = inv(ori_rot)*Miller(1,0,0,crystalSymmetry('1')); + % determine uvw of orientations (makes loop necessary) + ori_uvw = inv(ori_rot) * xvector; - %direction cosines with direction <100> of easy magnetization + % direction cosines with direction <100> of easy magnetization cos_val_1 = cos(angle(Miller(1,0,0,CS),ori_uvw,'noSymmetry')); cos_val_2 = cos(angle(Miller(0,1,0,CS),ori_uvw,'noSymmetry')); cos_val_3 = cos(angle(Miller(0,0,1,CS),ori_uvw,'noSymmetry')); - %calculate magnetic anisotropy energy + % calculate magnetic anisotropy energy E_a(j,:) = K1*(cos_val_1.^2.*cos_val_2.^2 + ... cos_val_2.^2.*cos_val_3.^2 + cos_val_1.^2.*cos_val_3.^2); end - -% calculate magentization J_50 at H = 5000 A/m (J_50 is suposed to depend -% only on stexture +{% endhighlight %} +

calculate magnetization J_50 at H = 5000 A/m (J_50 is supposed to depend only on texture

+{% highlight matlab %} J_50 = J_S*(1-0.19*mean(E_a,2)); %plot results figure -plot(rot_mag,mean(E_a,2)) +plot(rot_mag,mean(E_a,2),'LineWidth',2) ylabel('magnetic anisotropy energy [10^4J/m^3]') xlabel('angle of external field to RD [°]') grid on title(['Mean magnetic anisotropy energy = ' num2str(mean(mean(E_a)),'%.2f') ' 10^4J/m^3.'],'fontsize',14) figure -plot(rot_mag,mean(J_50,2)) +plot(rot_mag,mean(J_50,2),'LineWidth',2) ylabel('magnetic polarization [T]') xlabel('angle of external field to RD [°]') grid on diff --git a/pages/documentation_matlab/MartensiteVariants.html b/pages/documentation_matlab/MartensiteVariants.html index dfbfc95a1..f03ed51b2 100644 --- a/pages/documentation_matlab/MartensiteVariants.html +++ b/pages/documentation_matlab/MartensiteVariants.html @@ -28,12 +28,14 @@ [grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd,'angle',5*degree); ebsd(grains(grains.grainSize<=2)) = []; -[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd,'angle',5*degree); +[grains,ebsd.grainId,ebsd.mis2mean] = calcGrains(ebsd,'angle',5*degree,'qhull'); grains = smooth(grains,4); {% endhighlight %} {% highlight plaintext %} +saving data to /home/hielscher/mtex/master/data/emsland.mat + ebsd = EBSD Phase Orientations Mineral Color Symmetry Crystal reference frame @@ -54,13 +56,13 @@ {% endhighlight %}
{% include inline_image.html file="MartensiteVariants_01.png" %} -

As expected, we recognize very small remaining fcc grains. This high-temperatur phase is stabilized by the increasing nickel content during transformation. The low-temperature bcc phase can solve in maximum only 6\% nickel so that fcc has to assimilate the excess nickel. Size and amount of fcc is therefore and indication of the overall nickel content. Considering only the parent fcc phase, we display the orientations in an axis-angle plot.

+

As expected, we recognize very small remaining fcc grains. This high-temperature phase is stabilized by the increasing nickel content during transformation. The low-temperature bcc phase can solve in maximum only 6\% nickel so that fcc has to assimilate the excess nickel. Size and amount of fcc is therefore and indication of the overall nickel content. Considering only the parent fcc phase, we display the orientations in an axis-angle plot.

{% highlight matlab %} plot(ebsd('Aus').orientations,'axisAngle') {% endhighlight %} {% highlight plaintext %} -plot 2000 random orientations out of 30123 given orientations +plot 2000 random orientations out of 30064 given orientations {% endhighlight %}
{% include inline_image.html file="MartensiteVariants_02.png" %} @@ -76,10 +78,10 @@ Bunge Euler angles in degree phi1 Phi phi2 - 266.299 163.622 245.519 + 266.298 163.622 245.518 fit = - 1.2738 + 1.2735 {% endhighlight %}

Next, we display the bcc orientations (blue dots) in pole figures, and overlay the parent Taenite orientation (red dots) on top of them.

{% highlight matlab %} @@ -108,7 +110,7 @@ {% endhighlight %} {% highlight plaintext %} -I'm plotting 500 random orientations out of 3886 given orientations +I'm plotting 500 random orientations out of 3881 given orientations You can specify the the number points by the option "points". The option "all" ensures that all data are plotted {% endhighlight %} @@ -143,7 +145,7 @@ {% highlight plaintext %} ans = - 3.9200 + 3.9256 {% endhighlight %}

Estimating the parent-to-child orientation relationship

We could ask ourselves if there is another orientation relationship that better matches the measured misorientations than the KS orientation relationship. In this case, a canocial candidate would be the mean of all misorientations.

{% highlight matlab %} @@ -163,14 +165,14 @@

Estimating the parent-to-child orientation relationship

We cou p2cMean = misorientation (Austenite → Ferrite, bcc) Bunge Euler angles in degree - phi1 Phi phi2 - 289 8.12002 27.014 + phi1 Phi phi2 + 288.991 8.11053 27.0189 - I'm plotting 500 random orientations out of 3886 given orientations + I'm plotting 500 random orientations out of 3881 given orientations You can specify the the number points by the option "points". The option "all" ensures that all data are plotted ans = - 2.4805 + 2.4717 {% endhighlight %}

{% include inline_image.html file="MartensiteVariants_05.png" %} @@ -200,10 +202,10 @@

Estimating the parent-to-child orientation relationship

We cou Bunge Euler angles in degree phi1 Phi phi2 - 182.91 98.2853 44.2426 + 182.72 98.1704 43.9775 ans = - 3.1645 + 3.2644 {% endhighlight %}

We observe that the parent-to-child orientation relationship computed solely from child-to-child misorientations fits the actual orientation relationship equally well.

Classification of child variants by variant Ids

Once we have determined parent orientations and a parent-to-child orientation relationship, we may proceed further by classifying the child orientations into different variants.

A variant refers to a specific orientation or crystallographic arrangement of the child phase within the context of the original parent orientation. Depending on the operative orientation relationship and parent-child crystal symmetries, a single parent phase orientation results in multiple child phase orientations (i.e.- variants). The variant Id is a convinient way to label or identify a specific variant within the child microstructure.

Child variant Ids are computed by the command calcVariantId.

{% highlight matlab %} @@ -216,9 +218,7 @@

Estimating the parent-to-child orientation relationship

We cou {% endhighlight %} {% highlight plaintext %} -Warning: Packet ID calculation assuming {111}_p||{110}_c -Warning: Bain ID calculation assuming {001}_p||{100}_c - I'm plotting 208 random orientations out of 3886 given orientations +I'm plotting 208 random orientations out of 3881 given orientations You can specify the the number points by the option "points". The option "all" ensures that all data are plotted {% endhighlight %} @@ -230,7 +230,7 @@

Estimating the parent-to-child orientation relationship

We cou {% endhighlight %} {% highlight plaintext %} -plot 2000 random orientations out of 3886 given orientations +plot 2000 random orientations out of 3881 given orientations {% endhighlight %}

{% include inline_image.html file="MartensiteVariants_07.png" %} @@ -258,7 +258,7 @@

Estimating the parent-to-child orientation relationship

We cou {% endhighlight %} {% highlight plaintext %} -I'm plotting 1000 random orientations out of 3886 given orientations +I'm plotting 1000 random orientations out of 3881 given orientations You can specify the the number points by the option "points". The option "all" ensures that all data are plotted {% endhighlight %} @@ -294,7 +294,7 @@

Estimating the parent-to-child orientation relationship

We cou {% endhighlight %} {% highlight plaintext %} -I'm plotting 1000 random orientations out of 3886 given orientations +I'm plotting 1000 random orientations out of 3881 given orientations You can specify the the number points by the option "points". The option "all" ensures that all data are plotted {% endhighlight %} diff --git a/pages/documentation_matlab/MisorientationDistributionFunction.html b/pages/documentation_matlab/MisorientationDistributionFunction.html index 7dc941e17..990b4304e 100644 --- a/pages/documentation_matlab/MisorientationDistributionFunction.html +++ b/pages/documentation_matlab/MisorientationDistributionFunction.html @@ -30,7 +30,6 @@ odf = SO3FunHarmonic (Titanium (Alpha) → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} @@ -43,7 +42,6 @@ {% highlight plaintext %} mdf = SO3FunHarmonic (Titanium (Alpha) → Titanium (Alpha)) antipodal: true - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} diff --git a/pages/documentation_matlab/MisorientationTheory.html b/pages/documentation_matlab/MisorientationTheory.html index 8acbd0e95..faaf006b2 100644 --- a/pages/documentation_matlab/MisorientationTheory.html +++ b/pages/documentation_matlab/MisorientationTheory.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Theory of Misorientations - edit page

Misorientation describe the relative orientation of two crystal with respect to each other. Those crystal may be of the same phase or of different phases. Misorientation are used to describe

Grain Exchange Symmetry

Misorientation describes the relative orientation of two grains with respect to each other. Important concepts are twinnings and CSL (coincidence site lattice) misorientations. To illustrate this concept at a practical example let us first import some Magnesium EBSD data.

+ edit page

Misorientation describe the relative orientation of two crystal with respect to each other. Those crystal may be of the same phase or of different phases. Misorientation are used to describe orientation relationships at grain boundaries, orientation relationships during phase transformations or twinning and orientation gradients within grains.

Misorientations within the same phase

Misorientation describes the relative orientation of two grains with respect to each other. Important concepts are twinning and CSL (coincidence site lattice) misorientations. To illustrate this concept at a practical example let us first import some Magnesium EBSD data.

{% highlight matlab %} mtexdata twins silent @@ -47,7 +47,7 @@ {% highlight plaintext %} ans = - 85.6996 + 85.7299 {% endhighlight %}

Note that the misorientation angle is computed by default modulo crystal symmetry, i.e., the angle is always the smallest angles between all possible pairs of symmetrically equivalent orientations. In our example this means that symmetrisation of one orientation has no impact on the angle

{% highlight matlab %} @@ -56,18 +56,18 @@ {% highlight plaintext %} ans = - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 - 85.6996 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 + 85.7299 {% endhighlight %}

The misorientation angle neglecting crystal symmetry can be computed by

{% highlight matlab %} @@ -76,20 +76,20 @@ {% highlight plaintext %} ans = - 107.9490 - 100.9100 - 94.3022 - 136.6144 - 107.7191 - 179.5950 - 140.0710 - 137.3683 - 179.8142 - 101.4342 - 140.4132 - 85.6996 -{% endhighlight %} -

We see that the smallest angle indeed coincides with the angle computed before.

Misorientations

Remember that both orientations ori1 and ori2 map crystal coordinates onto specimen coordinates. Hence, the product of an inverse orientation with another orientation transfers crystal coordinates from one crystal reference frame into crystal coordinates with respect to another crystal reference frame. This transformation is called misorientation

+ 107.9164 + 100.9195 + 94.2719 + 136.6059 + 107.7043 + 179.5740 + 140.0724 + 137.3989 + 179.8286 + 101.4708 + 140.3882 + 85.7299 +{% endhighlight %} +

We see that the smallest angle indeed coincides with the angle computed before.

Misorientations

Remember that both orientations ori1 and ori2 map crystal coordinates onto specimen coordinates. Hence, the product of an inverse orientation with another orientation transfers crystal coordinates from one crystal reference frame into crystal coordinates with respect to another crystal reference frame. This transformation is called misorientation

{% highlight matlab %} mori = inv(ori1) * ori2 {% endhighlight %} @@ -99,9 +99,9 @@ Bunge Euler angles in degree phi1 Phi phi2 - 149.587 94.3019 150.14 + 149.583 94.2717 150.165 {% endhighlight %} -

In the present case the misorientation describes the coordinate transform from the reference frame of grain 85 into the reference frame of crystal 74. Take as an example the plane {11-20} with respect to the grain 85. Then the plane in grain 74 which alignes parallel to this plane can be computed by

+

In the present case the misorientation describes the coordinate transform from the reference frame of grain 85 into the reference frame of crystal 74. Take as an example the plane \(\{11\bar{2}0\}\) with respect to the grain 85. Then the plane in grain 74 which aligns parallel to this plane can be computed by

{% highlight matlab %} round(mori * Miller(1,1,-2,0,CS)) {% endhighlight %} @@ -111,7 +111,7 @@ h k i l 2 -1 -1 0 {% endhighlight %} -

Conversely, the inverse of mori is the coordinate transform from crystal 74 to grain 85.

+

Conversely, the inverse of mori is the coordinate transform from crystal 74 to grain 85.

{% highlight matlab %} round(inv(mori) * Miller(2,-1,-1,0,CS)) {% endhighlight %} @@ -121,7 +121,7 @@ h k i l 1 1 -2 0 {% endhighlight %} -

Coincident lattice planes

The coincidence between major lattice planes may suggest that the misorientation is a twinning misorientation. Lets analyse whether there are some more alignments between major lattice planes.

+

Coincident lattice planes

The coincidence between major lattice planes may suggest that the misorientation is a twinning misorientation. Lets analyze whether there are some more alignments between major lattice planes.

{% highlight matlab %} %m = Miller({1,-1,0,0},{1,1,-2,0},{1,-1,0,1},{0,0,0,1},CS); m = Miller({1,-1,0,0},{1,1,-2,0},{-1,0,1,1},{0,0,0,1},CS); @@ -146,7 +146,7 @@

Coincident lattice planes

The coincidence between major latti {% endhighlight %}

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

we observe an almost perfect match for the lattice planes {11-20} to {-2110} and {1-101} to {-1101} and good coincidences for the lattice plane {1-100} to {0001} and {0001} to {0-661}. Lets compute the angles explicitly

+

we observe an almost perfect match for the lattice planes \(\{11\bar{2}0\}\) to \(\{\bar{2}110\}\) and \(\{1\bar{1}01\}\) to \(\{\bar1101\}\) and good coincidences for the lattice plane \(\{1\bar100\}\) to \(\{0001\}\) and \(\{0001\}\) to \(\{0\bar661\}\). Lets compute the angles explicitly

{% highlight matlab %} angle(mori * Miller(1,1,-2,0,CS),Miller(2,-1,-1,0,CS)) / degree angle(mori * Miller(1,0,-1,-1,CS),Miller(1,-1,0,1,CS)) / degree @@ -157,22 +157,21 @@

Coincident lattice planes

The coincidence between major latti {% highlight plaintext %} ans = - 0.4456 + 0.4592 ans = - 0.2015 + 0.1766 ans = - 59.6819 + 59.6768 ans = - 2.6310 + 2.6341 ans = - 2.5651 + 2.5686 {% endhighlight %} -

Twinning misorientations

Lets define a misorientation that makes a perfect fit between the {11-20} lattice planes and between the {10-11} lattice planes

+

Twinning misorientations

Lets define a misorientation that makes a perfect fit between the \(\{11\bar20\}\) lattice planes and between the \(\{10\bar11\}\) lattice planes

{% highlight matlab %} mori = orientation.map(Miller(1,1,-2,0,CS),Miller(2,-1,-1,0,CS),... Miller(-1,0,1,1,CS),Miller(-1,1,0,1,CS)) - % the rotational axis round(mori.axis) @@ -214,7 +213,7 @@

Twinning misorientations

Lets define a misorientation that ma {% endhighlight %}

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

Highlight twinning boundaries

It turns out that in the previous EBSD map many grain boundaries have a misorientation close to the twinning misorientation we just defined. Lets Lets highlight those twinning boundaries

+

Highlight twinning boundaries

It turns out that in the previous EBSD map many grain boundaries have a misorientation close to the twinning misorientation we just defined. Lets Lets highlight those twinning boundaries

{% highlight matlab %} % consider only Magnesium to Magnesium grain boundaries gB = grains.boundary('Mag','Mag'); @@ -230,7 +229,7 @@

Twinning misorientations

Lets define a misorientation that ma {% endhighlight %}

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

From this picture we see that large fraction of grain boudaries are twinning boundaries. To make this observation more evident we may plot the boundary misorientation angle distribution function. This is simply the angle distribution of all boundary misorientations and can be displayed with

+

From this picture we see that large fraction of grain boundaries are twinning boundaries. To make this observation more evident we may plot the boundary misorientation angle distribution function. This is simply the angle distribution of all boundary misorientations and can be displayed with

{% highlight matlab %} close all plotAngleDistribution(gB.misorientation) @@ -243,7 +242,7 @@

Twinning misorientations

Lets define a misorientation that ma {% endhighlight %}

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

which emphasises a strong portion of rotations about the (-12-10) axis.

Phase transitions

Misorientations may not only be defined between crystal frames of the same phase. Lets consider the phases Magnetite and Hematite.

+

which emphasizes a strong portion of rotations about the \((\bar12\bar10)\) axis.

Phase transitions

Misorientations may not only be defined between crystal frames of the same phase. Lets consider the phases Magnetite and Hematite.

{% highlight matlab %} CS_Mag = loadCIF('Magnetite') CS_Hem = loadCIF('Hematite') @@ -266,7 +265,7 @@

Twinning misorientations

Lets define a misorientation that ma a, b, c : 5, 5, 14 reference frame: X||a*, Y||b, Z||c* {% endhighlight %} -

The phase transition from Magnetite to Hematite is described in literature by {111}_m parallel {0001}_h and {-101}_m parallel {10-10}_h The corresponding misorientation is defined in MTEX by

+

The phase transition from Magnetite to Hematite is described in literature by \(\{111\}_m\) parallel \(\{0001\}_h\) and \{\bar101}_m\( parallel \)\{10\bar10\}_h$. The corresponding misorientation is defined in MTEX by

{% highlight matlab %} Mag2Hem = orientation.map(... Miller(1,1,1,CS_Mag),Miller(0,0,0,1,CS_Hem),... diff --git a/pages/documentation_matlab/NeperInterface.html b/pages/documentation_matlab/NeperInterface.html deleted file mode 100644 index 7b6f0c98e..000000000 --- a/pages/documentation_matlab/NeperInterface.html +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Neper - -sidebar: documentation_sidebar -permalink: NeperInterface.html -folder: documentation -toc: false ---- - - - Neper - edit page

General

Neper is an open source software package for polycrystal generation and meshing developed by Romain Query. It can be obtained from https://neper.info, where also the documentation is located.

This module provides an comfortable interface to neper. It is used to simulate microstructures with certain parameters and load them back into MTEX for analysis and further investigation with the various tools provided by MTEX.

In order to do this, a slicing of the 3-dimensional tesselation is necessary after the simulation. The obtained 2-dimensional tesselation is processed as an object from the class grain2d.

Setting-up the neper instance

If you do not want to make any further adjustments to the default values, this step could be done very easily. In this case please skip to chapter "Simulating a microstructure with Neper"

-{% highlight matlab %} -job = neperInstance -{% endhighlight %} - -{% highlight plaintext %} -job = - neperInstance with properties: - - id: 1 - cubeSize: [1 1 1] - morpho: 'graingrowth' - iterMax: 1000 - fileName2d: '2dslice' - fileName3d: 'allgrains' - filePath: '/tmp/' - newfolder: 1 -{% endhighlight %} -

File options: By default your neper will work under the temporary folder of your matlab (matlab command tempdir). If you want to do your tesselations elsewhere or your tesselations are already located under another path, you can change it:

-{% highlight matlab %} -% for example -% job.filePath = 'C:\Users\user\Documents\work\MtexWork\neper'; -% or - job.filePath = [mtexDataPath filesep 'Neeper']; -{% endhighlight %} -

By default a new folder, named neper will be created for the tesselation data. If you do not want to create a new folder you can switch it of by setting newfolder to false.

-{% highlight matlab %} -job.newfolder = false; -{% endhighlight %} -

If newfolder is true (default) the slicing module also works in the subfolder neper, if it exists.

By deafult the 3d tesselation data will be named "allgrains" with the endings .tess and .ori and the 2d slices will be named "2dslice" with the ending .tess and .ori . You can change the file names in variables fileName3d and fileName2d.

-{% highlight matlab %} -job.fileName3d = 'my100grains'; -job.fileName2d = 'my100GrSlice'; -{% endhighlight %} -

Tesselation options

The grains will be generated in cubic domain. By default the domain has the edge length 1 in each direction. To change the size of the domain, store a row vector with 3 entries (x,y,z) in the variable cubeSize.

-{% highlight matlab %} -job.cubeSize = [4 4 2]; -{% endhighlight %} -

Neper uses an id to identify the tesselation. This interger value "is used as seed of the random number generator to compute the (initial) seed positions" (neper.info/doc/neper_t.html#cmdoption-id) By default the tesselation id is always 1.

-{% highlight matlab %} -job.id = 529; -{% endhighlight %} -

Neper allows to specify the morphological properties of the cells. See https://neper.info/doc/neper_t.html#cmdoption-morpho for more information. By default graingrowth is used, that is an alias for:

-{% highlight matlab %} -job.morpho = 'diameq:lognormal(1,0.35),1-sphericity:lognormal(0.145,0.03)'; -{% endhighlight %} -

Simulating a microstructure with Neper

The tesselation is executed by the command simulateGrains. There are two option to call it.

  1. by an ODF and the number of grains
  2. by a list of orientations. In this case the length of the list determines the number of grains.
-{% highlight matlab %} -cs = crystalSymmetry('432'); -ori = orientation.rand(cs); -odf = unimodalODF(ori); -numGrains=100; - -job.simulateGrains(odf,numGrains,'silent') -{% endhighlight %} -

Slicing

To get slices of your tesselation, that you can process with MTEX, the command getSlice is used, wich returns a set of grains (grain2d). It is called by giving the normal vector [a,b,c] of the plane and either a point that lies in the plane or the "d" of the plane equation. Please consider that the slicing must align with the size of the domain/cube (see Tesselation options - cubeSize)

-{% highlight matlab %} -% the normals of the slices -N = [vector3d(0,0,1),vector3d(1,-1,0),vector3d(2,2,4)]; - -% make all slices passing through this point -A=vector3d(2,2,1); - -grains001 = job.getSlice(N(1),A,'silent'); -grains1_10= job.getSlice(N(2),A,'silent'); -grains224 = job.getSlice(N(3),A,'silent'); -{% endhighlight %} - -{% highlight matlab %} -plot(grains001,grains001.meanOrientation); -hold on -plot(grains1_10,grains1_10.meanOrientation); -hold on -plot(grains224,grains224.meanOrientation); - -% set camera -how2plot = plottingConvention; -how2plot.outOfScreen = vector3d(-10,-5,2) -how2plot.east = vector3d(1,-2,0) -setCamera(how2plot) -{% endhighlight %} - -{% highlight plaintext %} -Warning: still can not concatenate grains on different slices -Warning: still can not concatenate grains on different slices - -how2plot = plottingConvention - - outOfScreen: (-10,-5,2) - north : (-0.32956,0.83522,0.44023) - east : (3,-3,8) - - -how2plot = plottingConvention - - outOfScreen: (-10,-5,2) - north : (2,1,12) - east : (1,-2,0) -{% endhighlight %} -
-{% include inline_image.html file="NeperInterface_01.png" %} -
\ No newline at end of file diff --git a/pages/documentation_matlab/ODFCharacteristics.html b/pages/documentation_matlab/ODFCharacteristics.html index 5b6e907c5..ecaee17cb 100644 --- a/pages/documentation_matlab/ODFCharacteristics.html +++ b/pages/documentation_matlab/ODFCharacteristics.html @@ -75,7 +75,7 @@ center: 19848 orientations, resolution: 5° weight: 1 {% endhighlight %} -

Modal Orientations

The modal orientation of an ODF is the crystallographic prefered orientation ori_pref of the texture. It is characterized as the maximum of the ODF. In MTEX it is returned as the second output argument of the command max

+

Modal Orientations

The modal orientation of an ODF is the crystallographic preferred orientation ori_pref of the texture. It is characterized as the maximum of the ODF. In MTEX it is returned as the second output argument of the command max

{% highlight matlab %} [~,ori_pref] = max(odf3) {% endhighlight %} @@ -87,7 +87,7 @@

Modal Orientations

The modal orientation of an ODF is the crys phi1 Phi phi2 132.901 34.7499 207.041 {% endhighlight %} -

Lets mark this prefered orientation in the pole figures

+

Lets mark this preferred orientation in the pole figures

{% highlight matlab %} plotPDF(odf3,pf.allH,'antipodal','superposition',pf.c); annotate(ori_pref,'marker','s','MarkerFaceColor','black') @@ -130,9 +130,29 @@

Volume Portions

Volume portions describes the relative volume V1 = 35.6773 {% endhighlight %} -

The relative volume of crystals with missorientation maximum 20 degree from the prefered fibre in percent:

+

The relative volume of crystals with missorientation maximum 20 degree from the preferred fibre in percent:

{% highlight matlab %} V2 = volume(odf2,f001_x,20*degree) * 100 + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% +% +% +%
+% ok<*NOPTS> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/ODFComponents.html b/pages/documentation_matlab/ODFComponents.html index 2cf22ade5..b5ca8669a 100644 --- a/pages/documentation_matlab/ODFComponents.html +++ b/pages/documentation_matlab/ODFComponents.html @@ -12,21 +12,21 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->ODF Component Analysis - edit page

A common way to interprete ODFs is to think of them as superposition of different components that originate from different deformation processes and describe the texture of the material. In this section we describe how these components can be identified from a given ODF.

We start by reconstruction a Quarz ODF from Neutron pole figure data.

+ edit page

A common way to interpret ODFs is to think of them as superposition of different components that originate from different deformation processes and describe the texture of the material. In this section we describe how these components can be identified from a given ODF.

We start by reconstruction a Quartz ODF from Neutron pole figure data.

{% highlight matlab %} -% import Neutron pole figure data from a Quarz specimen +% import Neutron pole figure data from a Quartz specimen mtexdata dubna silent % reconstruct the ODF odf = calcODF(pf,'zeroRange'); % visualize the ODF in sigma sections -plotSection(odf,'sigma','sections',9,'layout',[3,3]) +plotSection(odf,'sigma','sections',12,'layout',[3,4]) mtexColorbar {% endhighlight %}
{% include inline_image.html file="ODFComponents_01.png" %} -

The prefered orientation

First of all we observe that the ODF posses a strong maximum. To find this orientation that correspondes to the maximum ODF intensity we use the max command.

+

The preferred orientation

First of all we observe that the ODF posses a strong maximum. To find this orientation that corresponds to the maximum ODF intensity we use the max command.

{% highlight matlab %} [value,ori] = max(odf) {% endhighlight %} @@ -41,7 +41,7 @@ phi1 Phi phi2 133.236 34.8193 207.184 {% endhighlight %} -

Note that, similarly as the Matlab max command, the second output argument is the position where the maximum is atained. In our case we observe that the maximum value is about 121. To visualize the corresponding preferred orientation we plot it into the sigma sections of the ODF.

+

Note that, similarly as the MATLAB max command, the second output argument is the position where the maximum is attained. In our case we observe that the maximum value is about 121. To visualize the corresponding preferred orientation we plot it into the sigma sections of the ODF.

{% highlight matlab %} annotate(ori) {% endhighlight %} @@ -51,7 +51,7 @@ {% highlight matlab %} [value,ori] = max(odf,'numLocal',3) -annotate(ori) +annotate(ori(2:end),'MarkerFaceColor','red') {% endhighlight %} {% highlight plaintext %} @@ -92,7 +92,7 @@ ans = 0.1690 {% endhighlight %} -

percent of the entiere orientations space. Putting these values in relation it becomes clear, that all the components are multiple times stronger than the uniform distribution. We may compute these factors by

+

percent of the entire orientations space. Putting these values in relation it becomes clear, that all the components are multiple times stronger than the uniform distribution. We may compute these factors by

{% highlight matlab %} volume(odf,ori,delta) ./ volume(uniformODF(odf.CS),ori,delta) {% endhighlight %} @@ -117,7 +117,7 @@ 38.7490 53.1369 {% endhighlight %} -

it may even happen that the components overlap and the sum of the volumes exceeds 100 percent.

Non circular components

A disadvantage of the approach above is that one is restricted to circular components with a fixed disorientation angle which makes it hard to analyze components that are close together. In such settings one may want to use the command calcComponents. This command starts with evenly distributed orientations and lets the crawl towards the closest prefered orientation. At the end of this process the command returns these prefered orientation and the percentage of orientations that crawled to each of them.

+

it may even happen that the components overlap and the sum of the volumes exceeds 100 percent.

Non circular components

A disadvantage of the approach above is that one is restricted to circular components with a fixed disorientation angle which makes it hard to analyze components that are close together. In such settings one may want to use the command calcComponents. This command starts with evenly distributed orientations and lets the crawl towards the closest preferred orientation. At the end of this process the command returns these preferred orientation and the percentage of orientations that crawled to each of them.

{% highlight matlab %} [ori, vol] = calcComponents(odf); ori @@ -130,22 +130,43 @@ Bunge Euler angles in degree phi1 Phi phi2 - 133.222 34.752 207.162 - 140.307 36.4809 257.358 - 86.1364 22.8751 269.347 - 78.5438 34.4905 335.258 - 148.565 46.8943 152.817 + 133.312 34.8711 206.946 + 140.237 36.4105 257.542 + 85.6217 22.7987 269.598 + 79.0658 34.6428 215.331 + 148.062 47.1683 152.633 ans = - 45.1954 - 28.1196 - 19.6122 - 6.0033 - 1.0695 + 45.1145 + 27.4373 + 19.6022 + 6.0787 + 1.0655 {% endhighlight %} -

These volumes allways sums up to apprximately 100 percent. While the prefered orientations should be the same as those computed by the max command.

+

These volumes always sums up to approximately 100 percent. While the preferred orientations should be the same as those computed by the max command.

{% highlight matlab %} -annotate(ori,'MarkerFaceColor','red') +annotate(ori,'MarkerFaceColor','none','MarkerEdgeColor','white',... + 'linewidth',2,'MarkerSize',15,'marker','o') + +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% +% +% +%
+% ok<*NOPTS> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="ODFComponents_04.png" %} diff --git a/pages/documentation_matlab/ODFModeling.html b/pages/documentation_matlab/ODFModeling.html index 397359b4e..74adde680 100644 --- a/pages/documentation_matlab/ODFModeling.html +++ b/pages/documentation_matlab/ODFModeling.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->ODF Modeling - edit page

ODFs are functions on the rotation group \(SO(3)\). Therefore we construct them by the class SO3Fun.

MTEX provides a very simple way to define model ODFs. Generally, there are five different ODF types in MTEX:

The central idea is that MTEX allows you to calculate mixture models, by adding and subtracting arbitrary ODFs. Model ODFs may be used as references for ODFs estimated from pole figure data or EBSD data and are instrumental for simulating texture evolutions.

The Uniform ODF

The most simplest case of a model ODF is the uniform ODF

\[f(g) = 1,\quad g \in SO(3),\]

which is everywhere identical to one. In order to define a uniform ODF one needs only to specify its crystal and specimen symmetry and to use the command uniformODF.

+ edit page

ODFs are functions on the rotation group \(SO(3)\). Therefore we construct them by the class SO3Fun.

MTEX provides a very simple way to define model ODFs. Generally, there are five different ODF types in MTEX:

The central idea is that MTEX allows you to calculate mixture models, by adding and subtracting arbitrary ODFs. Model ODFs may be used as references for ODFs estimated from pole figure data or EBSD data and are instrumental for simulating texture evolution.

The Uniform ODF

The most simplest case of a model ODF is the uniform ODF

\[f(g) = 1,\quad g \in SO(3),\]

which is everywhere identical to one. In order to define a uniform ODF one needs only to specify its crystal and specimen symmetry and to use the command uniformODF.

{% highlight matlab %} cs = crystalSymmetry('cubic'); ss = specimenSymmetry('orthorhombic'); @@ -25,7 +25,7 @@ uniform component weight: 1 {% endhighlight %} -

Combining model ODFs

All the above can be arbitrarily rotated and combined. For instance, the classical Santafe example can be defined by commands

+

Combining model ODFs

All the above can be arbitrarily rotated and combined. For instance, the classical Santa Fe example can be defined by commands

{% highlight matlab %} cs = crystalSymmetry('cubic'); ss = specimenSymmetry('orthorhombic'); @@ -37,6 +37,17 @@

Combining model ODFs

All the above can be arbitrarily rotated close all plotPDF(odf,[Miller(1,0,0,cs),Miller(1,1,0,cs)],'antipodal') + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/ODFPlot.html b/pages/documentation_matlab/ODFPlot.html index 68d518072..ecce9ddb8 100644 --- a/pages/documentation_matlab/ODFPlot.html +++ b/pages/documentation_matlab/ODFPlot.html @@ -210,7 +210,7 @@

Three Dimensional Plots

Visualizing an ODF in three dimensions Bunge Euler angles in degree phi1 Phi phi2 - 34.9849 111.448 132.843 + 318.657 109.602 155.522 {% endhighlight %}

the symmetrically equivalent orientation within the fundamental region can be computed using the command project2EulerFR

{% highlight matlab %} @@ -220,7 +220,7 @@

Three Dimensional Plots

Visualizing an ODF in three dimensions {% highlight plaintext %} ans = - 73.7476 50.7360 61.8170 + 41.3431 70.3981 65.5215 {% endhighlight %}

A big disadvantage of the Euler angle representation of the orientation space is that it very badly follows the curved geometry of the space.

Especially for misorientation distribution functions a better alternativ is the three dimensional axis angle space. To visualize an ODF with respect to this parameterization simply add the option 'axisAngle'

{% highlight matlab %} diff --git a/pages/documentation_matlab/ODFTheory.html b/pages/documentation_matlab/ODFTheory.html index 400cac3cf..1b96a340b 100644 --- a/pages/documentation_matlab/ODFTheory.html +++ b/pages/documentation_matlab/ODFTheory.html @@ -57,7 +57,6 @@ {% highlight plaintext %} odf = SO3FunHarmonic (Titanium (Alpha) → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} diff --git a/pages/documentation_matlab/ODFTutorial.html b/pages/documentation_matlab/ODFTutorial.html index f7e85a130..a5b6834ca 100644 --- a/pages/documentation_matlab/ODFTutorial.html +++ b/pages/documentation_matlab/ODFTutorial.html @@ -43,7 +43,6 @@ {% highlight plaintext %} odf = SO3FunHarmonic (Titanium (Alpha) → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} diff --git a/pages/documentation_matlab/OptimalKernel.html b/pages/documentation_matlab/OptimalKernel.html index 80a723fb8..0ee204983 100644 --- a/pages/documentation_matlab/OptimalKernel.html +++ b/pages/documentation_matlab/OptimalKernel.html @@ -12,12 +12,13 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Optimal Kernel Selection - edit page

In the section density estimation we have seen that the correct choice of the kernel halfwidth is essential for creating a good match between the true density function and the reconstructed density function. If the halfwidth is set too small the reconstructed density function is usually oscillating and the indiviudual sampling points are visible as sharp peaks. If the halfwidth is too large the resulting density function is usually too smooth and does not reproduce the features of the original density function.

Finding an optimal kernel halfwidth is a hard problem as the optimal kernel halfwidth depends not only on the number of sampling points but also on the smoothness of the true but unknown density function. MTEX offers several options set by flags during the kernel calculation operation. A very conserative choice for the kernel halfwidth that takes into account only the number of sampling points is implemented in MTEX with the flag 'magicRule'. The flag 'RuleOfThumb' considers both the number of sampling points and the variance of the sampling points as an estimate of the smoothness of the true density function. The most advanced (and default) method for estimating the optimal kernel halfwidth is Kullback Leibler cross validation. This method tests different kernel halfwidths on a subset of the random sample and selects the halfwidth which best reproduces the ommited points of the random sample.

In order to demonstrate this functionality let's start with the following orientation density function

+ edit page

In the section density estimation we have seen that the correct choice of the kernel halfwidth is essential for creating a good match between the true density function and the reconstructed density function. If the halfwidth is set too small the reconstructed density function is usually oscillating and the individual sampling points are visible as sharp peaks. If the halfwidth is too large the resulting density function is usually too smooth and does not reproduce the features of the original density function.

Finding an optimal kernel halfwidth is a hard problem as the optimal kernel halfwidth depends not only on the number of sampling points but also on the smoothness of the true but unknown density function. MTEX offers several options set by flags during the kernel calculation operation. A very conservative choice for the kernel halfwidth that takes into account only the number of sampling points is implemented in MTEX with the flag 'magicRule'. The flag 'RuleOfThumb' considers both the number of sampling points and the variance of the sampling points as an estimate of the smoothness of the true density function. The most advanced (and default) method for estimating the optimal kernel halfwidth is Kullback Leibler cross validation. This method tests different kernel half-widths on a subset of the random sample and selects the halfwidth which best reproduces the omitted points of the random sample.

In order to demonstrate this functionality let's start with the following orientation density function

{% highlight matlab %} -% Define trigonal crystal symmetry using Enantiomorphic Point Group notation -cs = crystalSymmetry('32'); +% cubic crystal symmetry +cs = crystalSymmetry('321'); -% Build a density function by combining a uniform texture with two pre-defined texture components +% build a density function by combining a uniform texture with two +% predefined texture components odf = 0.25*uniformODF(cs) + 0.25*unimodalODF(orientation.brass(cs)) + ... 0.5*fibreODF(fibre.alpha(cs),'halfwidth',10*degree); @@ -25,6 +26,11 @@ plot(odf,'sections',6,'silent','sigma') mtexColorbar {% endhighlight %} + +{% highlight plaintext %} +Warning: Miller indece are not orthogonal. Maximum +deviation is 27 degree +{% endhighlight %}
{% include inline_image.html file="OptimalKernel_01.png" %}

and compute \(10000\) random orientations representing this density function using the command discreteSample

@@ -57,7 +63,6 @@ {% highlight plaintext %} odf_rec = SO3FunHarmonic (321 → xyz) - isReal: true bandwidth: 43 weight: 1 {% endhighlight %} @@ -97,11 +102,11 @@ {% endhighlight %} {% highlight plaintext %} -RuleOfThumb: 57° KLCV: 24° magicRule: 31° -RuleOfThumb: 36° KLCV: 12° magicRule: 22° +RuleOfThumb: 70° KLCV: 24° magicRule: 31° +RuleOfThumb: 26° KLCV: 9° magicRule: 22° RuleOfThumb: 17° KLCV: 8° magicRule: 16° RuleOfThumb: 10° KLCV: 6° magicRule: 11° -RuleOfThumb: 8° KLCV: 5° magicRule: 8° +RuleOfThumb: 9° KLCV: 5° magicRule: 8° RuleOfThumb: 7° KLCV: 4° magicRule: 6° {% endhighlight %}

Plot the error to the number of single orientations sampled from the original ODF.

@@ -112,6 +117,17 @@ xlabel('Number of orientations (log scale)') ylabel('Estimation Error in degrees') title('Error between original ODF model and the reconstructed ODF','FontWeight','bold') + +% +% +% +%
+% ok<*SAGROW> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="OptimalKernel_03.png" %} diff --git a/pages/documentation_matlab/OrientationDefinition.html b/pages/documentation_matlab/OrientationDefinition.html index 3d0a92ede..953550aca 100644 --- a/pages/documentation_matlab/OrientationDefinition.html +++ b/pages/documentation_matlab/OrientationDefinition.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Defining Orientations - edit page

This sections covers the definition of orientations as MTEX variables. The theoretical definition can be found in the section Theory and MTEX vs Bunge Convention.

Technically, a variable of type orientation is nothing else then a rotation that is accompanied by a crystal symmetry. Hence, all methods for defining rotations (as explained here) are also applicable for orientations with the only difference that the crystal symmetry has to be specified in form of a variable of type crystalSymmetry.

+ edit page

This sections covers the definition of orientations as MTEX variables. The theoretical definition can be found in the section Theory and MTEX vs Bunge Convention.

Technically, a variable of type orientation is nothing else then a rotation that is accompanied by a crystal symmetry. Hence, all methods for defining rotations (as explained here) are also applicable for orientations with the only difference that the crystal symmetry has to be specified in form of a variable of type crystalSymmetry.

{% highlight matlab %} % load copper cif file cs = crystalSymmetry.load('Cu-Copper.cif') @@ -42,7 +42,7 @@ {% highlight matlab %} M = eye(3) -ori = orientation.byMatrix(M) +ori = orientation.byMatrix(M,cs) {% endhighlight %} {% highlight plaintext %} @@ -51,13 +51,13 @@ 0 1 0 0 0 1 -ori = orientation (1 → xyz) +ori = orientation (Copper → xyz) Bunge Euler angles in degree phi1 Phi phi2 0 0 0 {% endhighlight %} -

Miller indices

Another common way to specify an orientation is by the crystal directions point towards the specimen directions Z and X. This can be done by the command byMiller. E.g. in order to define the GOSS orientation (011)[100] we can write

+

Miller indices

Another common way to specify an orientation is by the crystal directions point towards the specimen directions Z and X. This can be done by the command orientation.byMiller. E.g. in order to define the GOSS orientation (011)[100] we can write

{% highlight matlab %} orientation.byMiller([0 1 1],[1 0 0],cs) {% endhighlight %} @@ -78,7 +78,7 @@

Miller indices

Another common way to specify an orientation is ori = orientation (Copper → xyz) size: 100 x 1 {% endhighlight %} -

Specimen Symmetry

If one needs to consider also specimen symmetry this can be defined as a variable of type specimenSymmetry and passed as an additional argument to all commands discussed above, e.g.,

+

Specimen Symmetry

If one needs to consider also specimen symmetry this can be defined as a variable of type specimenSymmetry and passed as an additional argument to all commands discussed above, e.g.,

{% highlight matlab %} % define orthotropic specimen symmetry ss = specimenSymmetry('orthorhombic') diff --git a/pages/documentation_matlab/OrientationEmbeddings.html b/pages/documentation_matlab/OrientationEmbeddings.html index 04295d8e4..68cd2eb7b 100644 --- a/pages/documentation_matlab/OrientationEmbeddings.html +++ b/pages/documentation_matlab/OrientationEmbeddings.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Embeddings of Orientations - edit page

Orientational embeddings are tensorial representations of orientations with the specific property that each class of symmetrically equivalent orientations has a unique tensor representation. The easiest tensorial representation of a rotation is its rotational matrix. However, in the presense of crystal symmetry multiple rotational matrices describe the same orientation. This can be avoided by restricting the space of admissible matrices to the so called fundamental region. However, this creates the problem that two similar orientations may be represented by very different matrices in the fundamental region. This usually happens if the orientations are close to the boundary of the fundamental region.

The central problem is that the geometry of the fundamental region is not the geometry of the orientation space. Lets demonstate this by taking pairs \(\mathtt{ori_1}\), \(\mathtt{ori_2}\) of random orientations in the fundamental region

+ edit page

Orientational embeddings are tensorial representations of orientations with the specific property that each class of symmetrically equivalent orientations has a unique tensor representation. The easiest tensorial representation of a rotation is its rotational matrix. However, in the presence of crystal symmetry multiple rotational matrices describe the same orientation. This can be avoided by restricting the space of admissible matrices to the so called fundamental region. However, this creates the problem that two similar orientations may be represented by very different matrices in the fundamental region. This usually happens if the orientations are close to the boundary of the fundamental region.

The central problem is that the geometry of the fundamental region is not the geometry of the orientation space. Lets demonstrate this by taking pairs \(\mathtt{ori_1}\), \(\mathtt{ori_2}\) of random orientations in the fundamental region

{% highlight matlab %} % consider cubic symmetry cs = crystalSymmetry('432'); @@ -23,7 +23,7 @@ {% endhighlight %}

and compare their misorientation angle \(\omega(\mathtt{ori}_1,\mathtt{ori}_2)\) with the Euclidean distance \(\lVert \mathtt{tensor(ori_1)} - \mathtt{tensor(ori_2)} \rVert_2\) of the corresponding rotational matrices and the Euclidean distance \( \lVert \mathtt{R(ori_1)} - \mathtt{R(ori_2)} \rVert_2\) of the corresponding Rodrigues Frank vectors.

{% highlight matlab %} -% compute the misorienation angles in degree +% compute the misorientation angles in degree omega = angle(ori1,ori2)./degree; % compute the Euclidean distance between the rotational matrices @@ -112,7 +112,7 @@ % take the mean of the embeddings me = mean(e); -% computet an orientation from the mean embedding +% compute an orientation from the mean embedding orientation(me) {% endhighlight %} @@ -132,9 +132,9 @@

Basic Properties

By construction the embeddings of all orienta ans = 0.3873 0.3873 0.3873 0.3873 0.3873 {% endhighlight %} -

In other words the embeddings are located on the surface of a ball with a radius \(1\). When computing the mean from a list of embeddings the resulting tensor has in general a smaller norm, i.e., is inside this ball. Similarly as in spherical statistics the norm of the mean of the embeddings can be interpreted as a measure of the dispersion of the orientations. If the norm is close to 1 the orientations are tightly concentrated around a prefered orientation, whereas if the norm is close to zero some of the orientations are at maximum distance to each other.

Lets compare the norm

\[ n=\left\lVert\frac{1}{N} \sum_{i=1}^N \mathcal E(\mathtt{ori}_i) \right\rVert\]

of the mean embedding with the standard deviation

\[ \sigma = \left(\frac{1}{N} \sum_{i=1}^N \omega(\mathtt{ori}_i, \mathtt{mori})^2\right)^{1/2},\]

where \(\omega(\mathtt{ori}_i, \mathtt{mori})\) denotes the misorientation angle between the orientations \(\mathtt{ori}_i\) and the mean orientation \(\mathtt{mori}\).

+

In other words the embeddings are located on the surface of a ball with a radius \(1\). When computing the mean from a list of embeddings the resulting tensor has in general a smaller norm, i.e., is inside this ball. Similarly as in spherical statistics the norm of the mean of the embeddings can be interpreted as a measure of the dispersion of the orientations. If the norm is close to 1 the orientations are tightly concentrated around a preferred orientation, whereas if the norm is close to zero some of the orientations are at maximum distance to each other.

Lets compare the norm

\[ n=\left\lVert\frac{1}{N} \sum_{i=1}^N \mathcal E(\mathtt{ori}_i) \right\rVert\]

of the mean embedding with the standard deviation

\[ \sigma = \left(\frac{1}{N} \sum_{i=1}^N \omega(\mathtt{ori}_i, \mathtt{mori})^2\right)^{1/2},\]

where \(\omega(\mathtt{ori}_i, \mathtt{mori})\) denotes the misorientation angle between the orientations \(\mathtt{ori}_i\) and the mean orientation \(\mathtt{mori}\).

{% highlight matlab %} -% genrate samples of orientations of different dispersion +% generate samples of orientations of different dispersion n = []; sigma = []; for hw = logspace(-1,1.75,40)*degree @@ -155,7 +155,7 @@

Basic Properties

By construction the embeddings of all orienta {% endhighlight %}

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

It appears as if the norm of the mean embedding is a function of the standaerd deviation. However, the reason for this false relationship is that we have generated the orientations out of a single family of random variables - unimodal de la Vallee Poussin distributed density functions. A broader family of density function are the Bingham distributions. Lets repeat the experiment for this family.

+

It appears as if the norm of the mean embedding is a function of the standard deviation. However, the reason for this false relationship is that we have generated the orientations out of a single family of random variables - unimodal de la Vallee Poussin distributed density functions. A broader family of density function are the Bingham distributions. Lets repeat the experiment for this family.

{% highlight matlab %} % genrate ODF of different halfwidth n = []; sigma = []; @@ -177,4 +177,17 @@

Basic Properties

By construction the embeddings of all orienta {% endhighlight %}

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

We observe that there is no one-to-one relatioenship between the discrete standard deviation.

Operations

The following operations are supported for embeddings:

Rerference

The theory behind these embeddings is explained in the paper

  • R. Arnold, P. E. Jupp, H. Schaeben, Statistics of ambiguous rotations, Journal of Multivariate Analysis (165), 2018
  • R. Hielscher, L. Lippert, Isometric Embeddings of Quotients of the Rotation Group Modulo Finite Symmetries, arXiv:2007.09664, 2020.
\ No newline at end of file +

We observe that there is no one-to-one relationship between the discrete standard deviation.

Operations

The following operations are supported for embeddings:

Reference

The theory behind these embeddings is explained in the paper

  • R. Arnold, P. E. Jupp, H. Schaeben, Statistics of ambiguous rotations, Journal of Multivariate Analysis (165), 2018
  • R. Hielscher, L. Lippert, Isometric Embeddings of Quotients of the Rotation Group Modulo Finite Symmetries, arXiv:2007.09664, 2020.
+{% highlight matlab %} +% +% +% +%
+% ok<*SAGROW> +% +% +%
+% +% +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/OrientationFibre.html b/pages/documentation_matlab/OrientationFibre.html index 306836486..a15e4b5fc 100644 --- a/pages/documentation_matlab/OrientationFibre.html +++ b/pages/documentation_matlab/OrientationFibre.html @@ -1,5 +1,5 @@ --- -title: Fibres of Orientations +title: Fibers of Orientations sidebar: documentation_sidebar permalink: OrientationFibre.html @@ -11,7 +11,7 @@ Fibres of Orientations + -->Fibers of Orientations edit page

A fibre in orientation space is essentially a line connecting two orientations and can be represented in MTEX by a single variable of type fibre. To illustrate the definition of a fibre we first define cube and goss orientation

{% highlight matlab %} % define crystal and specimen symmetry @@ -76,13 +76,13 @@ {% endhighlight %}
{% include inline_image.html file="OrientationFibre_03.png" %} -

Fibres in pole figures and inverse pole figures

MTEX supports for fibres all the plotting options that are available for orientations. This included pole figures and inverse pole figures using the commands plotPDF and plotIPDF.

+

Fibres in pole figures and inverse pole figures

MTEX supports for fibers all the plotting options that are available for orientations. This included pole figures and inverse pole figures using the commands plotPDF and plotIPDF.

{% highlight matlab %} plotPDF(f,Miller({1,1,0},{1,1,1},cs),'linewidth',3,'lineColor','orange') {% endhighlight %}
{% include inline_image.html file="OrientationFibre_04.png" %} -

An important difference to orientation plots is that fibres are not automatically symmetrised when plotted. To achieve this use the command symmetrise.

+

An important difference to orientation plots is that fibers are not automatically symmetrised when plotted. To achieve this use the command symmetrise.

{% highlight matlab %} plotPDF(f.symmetrise,Miller({1,1,0},{2,1,0},{1,1,1},cs),'linewidth',3,'lineColor','orange') {% endhighlight %} @@ -96,7 +96,7 @@ {% endhighlight %}
{% include inline_image.html file="OrientationFibre_06.png" %} -

Defining a fibre by directions

Alternatively, a fibre can also be defined by a pair of a crystal and a specimen direction. In this case it consists of all orientations that alignes the crystal direction parallel to the specimen direction. As an example we define the fibre of all orientations such that the c-axis (001) is parallel to the z-axis by

+

Defining a fibre by directions

Alternatively, a fibre can also be defined by a pair of a crystal and a specimen direction. In this case it consists of all orientations that aligns the crystal direction parallel to the specimen direction. As an example we define the fibre of all orientations such that the c-axis (001) is parallel to the z-axis by

{% highlight matlab %} f = fibre(Miller(0,0,1,cs),vector3d.Z) @@ -110,7 +110,7 @@ {% endhighlight %}
{% include inline_image.html file="OrientationFibre_07.png" %} -

If both directions of type Miller the fibre corresponds to all misorientations which have these two direcetion parallel.

Finally, a fibre can be defined by an initial orientation ori1 and a direction h, i.e., all orientations ori of this fibre satisfy

+

If both directions of type Miller the fibre corresponds to all misorientations which have these two direction parallel.

Finally, a fibre can be defined by an initial orientation ori1 and a direction h, i.e., all orientations ori of this fibre satisfy

{% highlight matlab %} ori * h = ori1 * h {% endhighlight %} @@ -128,7 +128,7 @@ {% endhighlight %}
{% include inline_image.html file="OrientationFibre_08.png" %} -

Predefined fibres

MTEX includes also a list of predefined fibres, e.g., alpha, beta, gamma, epsilon, eta, tau and theta fibres. Those can be defined by

+

Predefined fibers

MTEX includes also a list of predefined fibers, e.g., alpha, beta, gamma, epsilon, eta, tau and theta fibers. Those can be defined by

{% highlight matlab %} ss = specimenSymmetry('orthorhombic'); beta = fibre.beta(cs,ss,'full') @@ -140,7 +140,7 @@ h || r: (12 6 11) || (1,1,4) o1 → o2: (0°,35.3°,45°) → (0°,35.3°,45°) {% endhighlight %} -

Lets plot an overview of all predefined fibres with respect to orthorhombic specimen symmetry

+

Lets plot an overview of all predefined fibers with respect to orthorhombic specimen symmetry

{% highlight matlab %} plot(fibre.alpha(cs,ss,'full'),'linewidth',3,'lineColor',ind2color(1),'DisplayName','alpha') hold on @@ -155,7 +155,7 @@ {% endhighlight %}
{% include inline_image.html file="OrientationFibre_09.png" %} -

Fibre ODFs

Note, that it is straight forward to define a corresponding fibre ODF by the command fibreODF

+

Fiber ODFs

Note, that it is straight forward to define a corresponding fibre ODF by the command fibreODF

{% highlight matlab %} odf = fibreODF(beta,'halfwidth',10*degree) diff --git a/pages/documentation_matlab/OrientationFundamentalRegion.html b/pages/documentation_matlab/OrientationFundamentalRegion.html index 0089ff9cb..98e75ae4e 100644 --- a/pages/documentation_matlab/OrientationFundamentalRegion.html +++ b/pages/documentation_matlab/OrientationFundamentalRegion.html @@ -14,7 +14,7 @@ -->Fundamental Regions edit page

Thanks to crystal symmetry the space of all rotations can be reduced to a so called fundamental or asymmetric region which has the property that each for orientation there is "exactly" one symmetrically equivalent orientation that is within the fundamental region. Those regions play an important role for visualizing orientations and ODFs as well as for the computation of axis and angle distributions of misorientations.

The space of all orientations can be imagined as a three dimensional ball with radius 180 degree. The distance of some point in the ball to the origin represent the rotational angle and the vector represents the rotational axis. In MTEX this can be represented as follows

{% highlight matlab %} -% triclic crystal symmetry +% triclinic crystal symmetry cs = crystalSymmetry('triclinic') % the corresponding orientation space @@ -66,7 +66,7 @@ {% endhighlight %}
{% include inline_image.html file="OrientationFundamentalRegion_03.png" %} -

Crystal Symmetries

In case of crystal symmetries the orientation space can divided into as many equivalent segments as the symmetry group has elements. E.g. in the case of orthorombic symmetry the orientation space is subdivided into four equal parts, the central one looking like

+

Crystal Symmetries

In case of crystal symmetries the orientation space can divided into as many equivalent segments as the symmetry group has elements. E.g. in the case of orthorhombic symmetry the orientation space is subdivided into four equal parts, the central one looking like

{% highlight matlab %} cs = crystalSymmetry('222') oR = fundamentalRegion(cs); @@ -84,6 +84,8 @@ symmetry: 222 elements: 4 a, b, c : 1, 1, 1 + +Warning: Possible symmetry mismach! {% endhighlight %}
{% include inline_image.html file="OrientationFundamentalRegion_04.png" %} @@ -152,12 +154,12 @@

Change the center of the fundamental region

There is no necess Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 1 2683 Forsterite mmm - boundary segments: 714 (32005 µm) + boundary segments: 714 (32000 µm) inner boundary segments: 0 (0 µm) triple points: 44 Id Phase Pixels phi1 Phi phi2 GOS - 931 1 2683 171 55 261 0.0220527 + 931 1 2683 171 55 261 0.0441053 ori = orientation (Forsterite → xyz) @@ -186,7 +188,7 @@

Change the center of the fundamental region

There is no necess {% endhighlight %}

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

Fundamental regions of misorientations

Misorientations are characterised by two crystal symmetries. A corresponding fundamental region is defined by

+

Fundamental regions of misorientations

Misorientations are characterized by two crystal symmetries. A corresponding fundamental region is defined by

{% highlight matlab %} oR = fundamentalRegion(ebsd('Fo').CS,ebsd('En').CS); @@ -204,7 +206,7 @@

Change the center of the fundamental region

There is no necess {% endhighlight %}

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

Fundamental regions of misorientations with antipodal symmetry

Note that for boundary misorientations between the same phase we can not distinguish between a misorientation and its inverse. This is not the case for misorientations between different phases or the misorientation between the mean orientation of a grain and all other orientations. The inverse of a misorientation is axis - angle representation is simply the one with the same angle but antipodal axis. Accordingly this additional symmetry is handled in MTEX by the keyword antipodal.

+

Fundamental regions of misorientations with antipodal symmetry

Note that for boundary misorientations between the same phase we can not distinguish between a misorientation and its inverse. This is not the case for misorientations between different phases or the misorientation between the mean orientation of a grain and all other orientations. The inverse of a misorientation is axis - angle representation is simply the one with the same angle but antipodal axis. Accordingly this additional symmetry is handled in MTEX by the keyword 'antipodal'.

{% highlight matlab %} oR = fundamentalRegion(ebsd('Fo').CS,ebsd('Fo').CS,'antipodal'); @@ -212,7 +214,7 @@

Change the center of the fundamental region

There is no necess {% endhighlight %}

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

We see that the fundamental region with antipodal symmetry has only half the size as without. In the case of misorientations between the same phase MTEX automatically sets the antipodal flag to the misorientations and plots them accordingly.

+

We see that the fundamental region with antipodal symmetry has only half the size as without. In the case of misorientations between the same phase MTEX automatically sets the flag 'antipodal' to the misorientations and plots them accordingly.

{% highlight matlab %} mori = grains.boundary('Fo','Fo').misorientation plot(mori) @@ -226,7 +228,7 @@

Change the center of the fundamental region

There is no necess {% endhighlight %}

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

If you want to avoid this you can remove the anitpodal flag by

+

If you want to avoid this you can remove the flag 'antipodal' by

{% highlight matlab %} mori.antipodal = false; @@ -251,6 +253,17 @@

Change the center of the fundamental region

There is no necess

Note that in the previous plot we distinguish between mori and inv(mori). Adding antipodal symmetry those are considered as equivalent

{% highlight matlab %} plotSection(mori,'axisAngle','antipodal') + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} diff --git a/pages/documentation_matlab/OrientationInversePoleFigure.html b/pages/documentation_matlab/OrientationInversePoleFigure.html index d174ac4d3..0aff0e74e 100644 --- a/pages/documentation_matlab/OrientationInversePoleFigure.html +++ b/pages/documentation_matlab/OrientationInversePoleFigure.html @@ -31,7 +31,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 65.2763 51.1192 63.3598 + 38.7598 141.563 178.893 {% endhighlight %}

Starting point is a fixed specimen direction r, e.g.,

{% highlight matlab %} @@ -41,6 +41,8 @@ {% highlight plaintext %} r = vector3d + x y z + 0 0 1 {% endhighlight %}

Next the crystal direction corresponding to the specimen direction r according to the orientation r are computed

{% highlight matlab %} @@ -50,7 +52,7 @@ {% highlight plaintext %} h = Miller (321) h k i l - 0.4281 0.349 -0.7771 0.6277 + 0.3212 -0.6215 0.3004 -0.7833 {% endhighlight %}

and ploted in a spherical projection

{% highlight matlab %} diff --git a/pages/documentation_matlab/OrientationPoleFigure.html b/pages/documentation_matlab/OrientationPoleFigure.html index 683983132..e303ebcb0 100644 --- a/pages/documentation_matlab/OrientationPoleFigure.html +++ b/pages/documentation_matlab/OrientationPoleFigure.html @@ -30,8 +30,8 @@ ori = orientation (321 → xyz) Bunge Euler angles in degree - phi1 Phi phi2 - 233.057 173.181 215.251 + phi1 Phi phi2 + 0.572564 61.1121 197.428 {% endhighlight %}

Starting point is a fixed crystal direction h, e.g.,

{% highlight matlab %} @@ -46,6 +46,13 @@ {% highlight plaintext %} r = vector3d size: 1 x 6 + x y z + -1.09997 -0.178076 -0.302808 + -0.854083 0.368866 0.683969 + 0.854083 -0.368866 -0.683969 + 1.09997 0.178076 0.302808 + 0.245885 0.546942 0.986777 + -0.245885 -0.546942 -0.986777 {% endhighlight %}

and ploted in a spherical projection

{% highlight matlab %} diff --git a/pages/documentation_matlab/OrientationSymmetry.html b/pages/documentation_matlab/OrientationSymmetry.html index 46c030e8b..b178a4181 100644 --- a/pages/documentation_matlab/OrientationSymmetry.html +++ b/pages/documentation_matlab/OrientationSymmetry.html @@ -40,7 +40,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 176.912 102.148 28.6908 + 105.628 103.798 48.7838 {% endhighlight %}

Since orientations transform crystal coordinates into specimen coordinates crystal symmetries will act from the right and specimen symmetries from the left

{% highlight matlab %} @@ -54,12 +54,12 @@ Bunge Euler angles in degree phi1 Phi phi2 - 176.912 102.148 28.6908 - 176.912 102.148 88.6908 - 176.912 102.148 148.691 - 176.912 102.148 208.691 - 176.912 102.148 268.691 - 176.912 102.148 328.691 + 105.628 103.798 48.7838 + 105.628 103.798 108.784 + 105.628 103.798 168.784 + 105.628 103.798 228.784 + 105.628 103.798 288.784 + 105.628 103.798 348.784 {% endhighlight %}

We observe that only the third Euler angle phi2 changes as this Euler angle applies first to the crystal coordinates.

{% highlight matlab %} @@ -73,8 +73,8 @@ Bunge Euler angles in degree phi1 Phi phi2 - 176.912 102.148 28.6908 - 356.912 102.148 28.6908 + 105.628 103.798 48.7838 + 285.628 103.798 48.7838 {% endhighlight %}

Combining crystal and specimen symmetry we obtain 6 crystallographically equivalent orientations to ori

{% highlight matlab %} @@ -87,18 +87,18 @@ Bunge Euler angles in degree phi1 Phi phi2 - 176.912 102.148 28.6908 - 356.912 102.148 28.6908 - 176.912 102.148 88.6908 - 356.912 102.148 88.6908 - 176.912 102.148 148.691 - 356.912 102.148 148.691 - 176.912 102.148 208.691 - 356.912 102.148 208.691 - 176.912 102.148 268.691 - 356.912 102.148 268.691 - 176.912 102.148 328.691 - 356.912 102.148 328.691 + 105.628 103.798 48.7838 + 285.628 103.798 48.7838 + 105.628 103.798 108.784 + 285.628 103.798 108.784 + 105.628 103.798 168.784 + 285.628 103.798 168.784 + 105.628 103.798 228.784 + 285.628 103.798 228.784 + 105.628 103.798 288.784 + 285.628 103.798 288.784 + 105.628 103.798 348.784 + 285.628 103.798 348.784 {% endhighlight %}

A shortcut for this operation is the command symmetrise

{% highlight matlab %} @@ -111,18 +111,18 @@ Bunge Euler angles in degree phi1 Phi phi2 - 176.912 102.148 28.6908 - 356.912 102.148 28.6908 - 176.912 102.148 88.6908 - 356.912 102.148 88.6908 - 176.912 102.148 148.691 - 356.912 102.148 148.691 - 176.912 102.148 208.691 - 356.912 102.148 208.691 - 176.912 102.148 268.691 - 356.912 102.148 268.691 - 176.912 102.148 328.691 - 356.912 102.148 328.691 + 105.628 103.798 48.7838 + 285.628 103.798 48.7838 + 105.628 103.798 108.784 + 285.628 103.798 108.784 + 105.628 103.798 168.784 + 285.628 103.798 168.784 + 105.628 103.798 228.784 + 285.628 103.798 228.784 + 105.628 103.798 288.784 + 285.628 103.798 288.784 + 105.628 103.798 348.784 + 285.628 103.798 348.784 {% endhighlight %}

For specific orientations, e.g. for the cube orientations, symmetrisation leads to multiple identical orientations. This can be prevented by passing the option unique to the command symmetrise

{% highlight matlab %} @@ -150,12 +150,12 @@

Crystal symmetries in computations

Note that all operation on {% highlight plaintext %} ans = - 130.2438 - 130.2438 - 130.2438 - 130.2438 - 130.2438 - 130.2438 + 146.7130 + 146.7130 + 146.7130 + 146.7130 + 146.7130 + 146.7130 {% endhighlight %}

The value is the same for all orientations and equal to the smallest angle to one of the symmetrally equivalent orientations. This can be verified by computing the rotational angle ignoring symmetry.

{% highlight matlab %} @@ -164,11 +164,11 @@

Crystal symmetries in computations

Note that all operation on {% highlight plaintext %} ans = - 142.1009 - 130.2438 - 132.3532 - 147.6085 - 170.9167 - 163.6995 + 151.7984 + 164.4178 + 178.9882 + 162.6471 + 150.7539 + 146.7130 {% endhighlight %}

Functions that respect crystal symmetry but allow to switch it off using the flag noSymmetry include dot, unique, calcCluster.

\ No newline at end of file diff --git a/pages/documentation_matlab/ParentChildVariants.html b/pages/documentation_matlab/ParentChildVariants.html index 912c16090..3d07c82e4 100644 --- a/pages/documentation_matlab/ParentChildVariants.html +++ b/pages/documentation_matlab/ParentChildVariants.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Parent Child Variants - edit page

The crystallographic structure of most materials is dependend on external conditions as temperature and pressure. When the external conditions change the crystals may undergo a phase transition from the inital phase, often called parent phase, into the child phase. While both phases still have the same chemical composition their crystallographic structure might be quite different. A typical example are the alpha and beta phase of titanium. While the parent beta phase is cubic

+ edit page

The crystallographic structure of most materials is depended on external conditions as temperature and pressure. When the external conditions change the crystals may undergo a phase transition from the initial phase, often called parent phase, into the child phase. While both phases still have the same chemical composition their crystallographic structure might be quite different. A typical example are the alpha and beta phase of titanium. While the parent beta phase is cubic

{% highlight matlab %} csBeta = crystalSymmetry('432',[3.3 3.3 3.3],'mineral','Ti (beta)'); {% endhighlight %} @@ -24,7 +24,7 @@ {% highlight matlab %} oriParent = orientation.rand(csBeta); {% endhighlight %} -

be the orientation of the atomic lattice befor phase transition and oriChild the orientation of the atomic lattice after the phase transition. Since during a phase transition the atoms reorder with respect to a minimal energy constraint, both orientations oriParent and oriChild are in a specific orientation relationship with respect to each other. In the case of alpha and beta Titanium the dominant orientation relationship is described by the Burger orientation relationship

+

be the orientation of the atomic lattice before phase transition and oriChild the orientation of the atomic lattice after the phase transition. Since during a phase transition the atoms reorder with respect to a minimal energy constraint, both orientations oriParent and oriChild are in a specific orientation relationship with respect to each other. In the case of alpha and beta Titanium the dominant orientation relationship is described by the Burger orientation relationship

{% highlight matlab %} beta2alpha = orientation.Burgers(csBeta,csAlpha) {% endhighlight %} @@ -44,9 +44,9 @@ Bunge Euler angles in degree phi1 Phi phi2 - 238.376 2.34782 37.1386 + 261.104 66.2529 236.292 {% endhighlight %} -

This orientation relationship is characterised by alignment of hexagonal (0001) plane with the cubic (110) plane and alignment of the hexagonal [2-1-10] direction with the cubic [-11-1] direction.

+

This orientation relationship is characterized by alignment of hexagonal (0001) plane with the cubic (110) plane and alignment of the hexagonal [2-1-10] direction with the cubic [-11-1] direction.

{% highlight matlab %} % (110) / (0001) pole figure plotPDF(oriParent,Miller(1,1,0,csBeta),... @@ -84,7 +84,7 @@ oriParentSym = orientation (Ti (beta) → xyz) size: 24 x 1 {% endhighlight %} -

Applying the beta2alpha phase relationship to these 24 different represenations we obtain 24 child orientations.

+

Applying the beta2alpha phase relationship to these 24 different representations we obtain 24 child orientations.

{% highlight matlab %} oriChild = oriParentSym * inv(beta2alpha) {% endhighlight %} @@ -122,8 +122,8 @@ Bunge Euler angles in degree phi1 Phi phi2 - 58.3761 177.652 132.333 - 65.6933 57.6708 319.126 + 11.8095 155.789 128.635 + 27.7322 36.4051 312.007 {% endhighlight %}

It is important to understand that the reduction to 12 variants from 24 symmetrically equivalent parent orientations comes from the specific Burger orientation relationship. For a general orientation relationship, e.g., if we disturb the OR a little bit

{% highlight matlab %} @@ -135,7 +135,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 184.253 89.8576 44.172 + 185.268 88.0499 45.4066 {% endhighlight %}

we will always have exactly 24 variants. For the above example we observe how the 12 pairs of orientations which diverge slightly.

{% highlight matlab %} diff --git a/pages/documentation_matlab/PlasticDeformation.html b/pages/documentation_matlab/PlasticDeformation.html index 9cb82f435..db5310746 100644 --- a/pages/documentation_matlab/PlasticDeformation.html +++ b/pages/documentation_matlab/PlasticDeformation.html @@ -52,6 +52,8 @@ {% highlight plaintext %} r = vector3d + x y z + 0.267261 0.534522 0.801784 {% endhighlight %}

the Schmid factor for the slip system [0-11](111) is defined by

{% highlight matlab %} @@ -82,7 +84,7 @@ ans = 0.1750 {% endhighlight %} -

Ommiting the tension direction r the command SchmidFactor returns the Schmid factor as a spherical function

+

Omitting the tension direction r the command SchmidFactor returns the Schmid factor as a spherical function

{% highlight matlab %} SF = sS.SchmidFactor @@ -98,7 +100,7 @@ {% highlight plaintext %} SF = S2FunHarmonic - bandwidth: 64 + bandwidth: 4 antipodal: true isReal: true @@ -107,6 +109,8 @@ pos = vector3d antipodal: true + x y z + 0.408361 -0.0917056 0.908202 {% endhighlight %}
{% include inline_image.html file="PlasticDeformation_01.png" %} @@ -155,7 +159,7 @@

Active Slip System

In general a crystal contains not only one -1 -1 0 1 -1 1 1 0 -1 -1 1 -1 1 1 {% endhighlight %} -

The option antipodal indicates that Burgers vectors in oposite direction should not be distinguished. Now

+

The option antipodal indicates that Burgers vectors in opposite direction should not be distinguished. Now

{% highlight matlab %} tau = sSAll.SchmidFactor(r) {% endhighlight %} @@ -195,10 +199,10 @@

Active Slip System

In general a crystal contains not only one tau = sSAll.SchmidFactor(r); % tau is a matrix with columns representing the Schmid factors for the -% different slip systems. Lets take the maximum rhowise +% different slip systems. Lets take the maximum rho-wise [tauMax,id] = max(abs(tau),[],2); -% vizualize the maximum Schmid factor +% visualize the maximum Schmid factor contourf(r,tauMax) mtexColorbar {% endhighlight %} @@ -214,8 +218,8 @@

Active Slip System

In general a crystal contains not only one {% include inline_image.html file="PlasticDeformation_03.png" %}

and observe that within the fundamental sectors the active slip system remains the same. We can even visualize the the plane normal and the slip direction

{% highlight matlab %} -% if we ommit the option antipodal we can distinguish -% between the oposite burger vectors +% if we omit the option antipodal we can distinguish +% between the opposite burger vectors sSAll = sS.symmetrise % take as directions the centers of the fundamental regions @@ -224,7 +228,7 @@

Active Slip System

In general a crystal contains not only one % compute the Schmid factor tau = sSAll.SchmidFactor(r); -% here we do not need to take the absolut value since we consider both +% here we do not need to take the absolute value since we consider both % burger vectors +/- b [~,id] = max(tau,[],2); @@ -244,35 +248,35 @@

Active Slip System

In general a crystal contains not only one u v w | h k l CRSS 0 -1 1 1 1 1 1 - 0 1 -1 1 1 1 1 1 0 -1 1 1 1 1 - -1 0 1 1 1 1 1 -1 1 0 1 1 1 1 + 0 1 -1 1 1 1 1 + -1 0 1 1 1 1 1 1 -1 0 1 1 1 1 -1 1 0 1 1 -1 1 - 1 -1 0 1 1 -1 1 -1 0 -1 1 1 -1 1 - 1 0 1 1 1 -1 1 0 -1 -1 1 1 -1 1 + 1 -1 0 1 1 -1 1 + 1 0 1 1 1 -1 1 0 1 1 1 1 -1 1 0 -1 1 -1 1 1 1 - 0 1 -1 -1 1 1 1 -1 0 -1 -1 1 1 1 - 1 0 1 -1 1 1 1 -1 -1 0 -1 1 1 1 + 0 1 -1 -1 1 1 1 + 1 0 1 -1 1 1 1 1 1 0 -1 1 1 1 1 0 -1 1 -1 1 1 - -1 0 1 1 -1 1 1 -1 -1 0 1 -1 1 1 - 1 1 0 1 -1 1 1 0 -1 -1 1 -1 1 1 + -1 0 1 1 -1 1 1 + 1 1 0 1 -1 1 1 0 1 1 1 -1 1 1 {% endhighlight %}

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

If we perform this computation in terms of spherical functions we obtain

{% highlight matlab %} -% ommiting |r| gives us a list of 12 spherical functions +% omitting |r| gives us a list of 12 spherical functions tau = sSAll.SchmidFactor % now we take the max of the absolute value over all these functions @@ -283,13 +287,13 @@

Active Slip System

In general a crystal contains not only one {% highlight plaintext %} tau = S2FunHarmonic size: 24 x 1 - bandwidth: 64 + bandwidth: 4 antipodal: true isReal: true {% endhighlight %}

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

The Schmid factor for EBSD data

So far we have always assumed that the stress tensor is already given relatively to the crystal coordinate system. Next, we want to examine the case where the stress is given in specimen coordinates and we know the orientation of the crystal. Lets import some EBSD data and computet the grains

+

The Schmid factor for EBSD data

So far we have always assumed that the stress tensor is already given relatively to the crystal coordinate system. Next, we want to examine the case where the stress is given in specimen coordinates and we know the orientation of the crystal. Lets import some EBSD data and compute the grains

{% highlight matlab %} mtexdata csl @@ -348,13 +352,13 @@

Active Slip System

In general a crystal contains not only one CRSS: 1 size: 71 x 24 {% endhighlight %} -

These slip systems are now arranged in matrix form where the rows corrspond to the crystal reference frames of the different grains and the rows are the symmetrically equivalent slip systems. Computing the Schmid faktor we end up with a matrix of the same size

+

These slip systems are now arranged in matrix form where the rows correspond to the crystal reference frames of the different grains and the rows are the symmetrically equivalent slip systems. Computing the Schmid factor we end up with a matrix of the same size

{% highlight matlab %} % compute Schmid factor sigma = stressTensor.uniaxial(vector3d.X) SF = sSLocal.SchmidFactor(sigma); -% take the maxium allong the rows +% take the maximum along the rows [SFMax,active] = max(SF,[],2); % plot the maximum Schmid factor @@ -398,13 +402,13 @@

Active Slip System

In general a crystal contains not only one size: 71 x 1 rank: 2 (3 x 3) {% endhighlight %} -

This becomes a list of stress tensors with respect to crystal coordinates - one for each grain. Now we have both the slip systems as well as the stress tensor in crystal coordiantes and can compute the Schmid factor

+

This becomes a list of stress tensors with respect to crystal coordinates - one for each grain. Now we have both the slip systems as well as the stress tensor in crystal coordinates and can compute the Schmid factor

{% highlight matlab %} % the resulting matrix is the same as above SF = sS.SchmidFactor(sigmaLocal); % and hence we may proceed analogously -% take the maxium allong the rows +% take the maximum along the rows [SFMax,active] = max(SF,[],2); % plot the maximum Schmid factor @@ -461,6 +465,26 @@

Active Slip System

In general a crystal contains not only one quiver ( grains , sSGrains.b) quiver ( grains , sSGrains.trace) hold off + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="PlasticDeformation_11.png" %} diff --git a/pages/documentation_matlab/PoleFigure2ODF.html b/pages/documentation_matlab/PoleFigure2ODF.html index efda8ee5d..a624eeaed 100644 --- a/pages/documentation_matlab/PoleFigure2ODF.html +++ b/pages/documentation_matlab/PoleFigure2ODF.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->ODF Estimation from Pole Figure Data - edit page

This page describes how to use MTEX to estimate an ODF from pole figure data. Starting point of any ODF reconstruction is a PoleFigure object which can be created e.g. by

+ edit page

This page describes how to use MTEX to estimate an ODF from pole figure data. Starting point of any ODF reconstruction is a PoleFigure object which can be created e.g. by

{% highlight matlab %} mtexdata dubna {% endhighlight %} @@ -36,7 +36,7 @@ {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODF_01.png" %} -

ODF Estimation

ODF estimation from a pole figure object is done by the function calcODF. The most simplest syntax is

+

ODF Estimation

ODF estimation from a pole figure object is done by the function calcODF. The most simplest syntax is

{% highlight matlab %} odf = calcODF(pf) {% endhighlight %} @@ -49,13 +49,13 @@ center: 19848 orientations, resolution: 5° weight: 1 {% endhighlight %} -

There are a lot of options to the function calcODF. You can specify the discretization, the functional to minimize, the number of iteration or regularization to be applied. Furthermore, you can specify ghost correction or the zero range method to be applied. These options are discussed below.

You may want to verify that the pole figures are reproduced. Here is a plot of the computed pole figures.

+

There are a lot of options to the function calcODF. You can specify the discretization, the functional to minimize, the number of iteration or regularization to be applied. Furthermore, you can specify ghost correction or the zero range method to be applied. These options are discussed below.

You may want to verify that the pole figures are reproduced. Here is a plot of the computed pole figures.

{% highlight matlab %} plotPDF(odf,pf.allH,'antipodal','silent','superposition',pf.c) {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODF_02.png" %} -

Error analysis

For a more quantitative description of the reconstruction quality, one can use the function calcError to compute the fit between the reconstructed ODF and the measured pole figure intensities. The following measured are available:

  • RP - error
  • L1 - error
  • L2 - error
+

Error analysis

For a more quantitative description of the reconstruction quality, one can use the function calcError to compute the fit between the reconstructed ODF and the measured pole figure intensities. The following measured are available:

  • RP - error
  • L1 - error
  • L2 - error
{% highlight matlab %} calcError(pf,odf,'RP',1) {% endhighlight %} @@ -64,13 +64,13 @@ ans = 0.9729 0.9736 0.3637 0.4336 0.7480 0.7215 0.5868 {% endhighlight %} -

In order to recognize bad pole figure intensities, it is often useful to plot difference pole figures between the normalized measured intensities and the recalculated ODF. This can be done by the command PlotDiff.

+

In order to recognize bad pole figure intensities, it is often useful to plot difference pole figures between the normalized measured intensities and the recalculated ODF. This can be done by the command plotDiff.

{% highlight matlab %} plotDiff(pf,odf) {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODF_03.png" %} -

Assuming you have driven two ODFs from different pole figure measurements or by ODF modeling. Then one can ask for the difference between both. This difference is computed by the command calcError.

+

Assuming you have driven two ODFs from different pole figure measurements or by ODF modeling. Then one can ask for the difference between both. This difference is computed by the command calcError.

{% highlight matlab %} % define a unimodal ODF with the same preferred orientation [~,ori_pref] = max(odf); @@ -115,7 +115,7 @@ {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODF_05.png" %} -

Beside the resolution you can use the following options to change the default discretization:

  • 'kernel' to specify a specific kernel function
  • 'halfwidth' to take the default kernel with a specific halfwidth

Zero Range Method

If the flag 'zero_range' is set the ODF is forced to be zero at all orientation where there is a corresponding zero in the pole figure. This technique is especially useful for sharp ODF with large areas in the pole figure being zero. In this case, the calculation time is greatly improved and much higher resolution of the ODF can be achieved.

In the following example, the zero range method is applied with a threshold 100. For more options to control the zero range method see the documentation of zero_range or zeroRangeMethod.plot.

+

Beside the resolution you can use the following options to change the default discretization:

  • 'kernel' to specify a specific kernel function
  • 'halfwidth' to take the default kernel with a specific halfwidth

Zero Range Method

If the flag 'zero_range' is set the ODF is forced to be zero at all orientation where there is a corresponding zero in the pole figure. This technique is especially useful for sharp ODF with large areas in the pole figure being zero. In this case, the calculation time is greatly improved and much higher resolution of the ODF can be achieved.

In the following example, the zero range method is applied with a threshold 100. For more options to control the zero range method see the documentation of zero_range or zeroRangeMethod.plot.

{% highlight matlab %} odf = calcODF(pf,'zero_range') plotPDF(odf,pf.allH,'antipodal','silent','superposition',pf.c) @@ -131,4 +131,17 @@ {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODF_06.png" %} -

Ghost Corrections

Ghost correction is a technique first introduced by Matthies that increases the uniform portion of the estimated ODF to reduce the so called ghost error. It applies especially useful in the case of week ODFs. The classical example is the SantaFe model ODF. An analysis of the approximation error under ghost correction can be found here

Theory

ODF estimation in MTEX is based upon the modified least squares estimator. The functional that is minimized is

\[f_{est} = argmin \sum_{i=1}^N \sum_{j=1}^{N_i}\frac{|\alpha_i R f(h_i,r_{ij}) - I_{ij})|^2}{I_{ij} }\]

A precise description of the estimator and the algorithm can be found in the paper Pole Figure Inversion - The MTEX Algorithm.

\ No newline at end of file +

Ghost Corrections

Ghost correction is a technique first introduced by Matthies that increases the uniform portion of the estimated ODF to reduce the so called ghost error. It applies especially useful in the case of week ODFs. The classical example is the Santa Fe model ODF. An analysis of the approximation error under ghost correction can be found here

Theory

ODF estimation in MTEX is based upon the modified least squares estimator. The functional that is minimized is

\[f_{est} = argmin \sum_{i=1}^N \sum_{j=1}^{N_i}\frac{|\alpha_i R f(h_i,r_{ij}) - I_{ij})|^2}{I_{ij} }\]

A precise description of the estimator and the algorithm can be found in the paper Pole Figure Inversion - The MTEX Algorithm.

+{% highlight matlab %} +% +% +% +%
+% ok<*NOPTS> +% +% +%
+% +% +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/PoleFigure2ODFAmbiguity.html b/pages/documentation_matlab/PoleFigure2ODFAmbiguity.html index 177d1e375..6d263d084 100644 --- a/pages/documentation_matlab/PoleFigure2ODFAmbiguity.html +++ b/pages/documentation_matlab/PoleFigure2ODFAmbiguity.html @@ -252,7 +252,6 @@ {% highlight plaintext %} odf1 = SO3FunHarmonic (-1 → xyz) antipodal: true - isReal: true bandwidth: 9 weight: 1 {% endhighlight %} @@ -281,7 +280,6 @@ {% highlight plaintext %} odf2 = SO3FunHarmonic (-1 → xyz) antipodal: true - isReal: true bandwidth: 9 weight: 1 {% endhighlight %} @@ -342,12 +340,12 @@ odf_rec1 = SO3FunRBF (-1 → xyz) uniform component - weight: 0.93 + weight: 0.8 multimodal components kernel: de la Vallee Poussin, halfwidth 5° center: 119088 orientations, resolution: 5° - weight: 0.066 + weight: 0.2 {% endhighlight %}

This method can be switched off by the following command

{% highlight matlab %} @@ -405,7 +403,6 @@ % plot them plot(pf,'MarkerSize',5) -mtexColorMap LaboTeX {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODFAmbiguity_23.png" %} @@ -422,12 +419,12 @@ rec = SO3FunRBF (m-3m → xyz (222)) uniform component - weight: 0.91 + weight: 0.73 multimodal components kernel: de la Vallee Poussin, halfwidth 5° center: 1232 orientations, resolution: 5° - weight: 0.094 + weight: 0.27 rec2 = SO3FunRBF (m-3m → xyz (222)) @@ -440,21 +437,22 @@

For both reconstruction recalculated pole figures look the same as the initial pole figures

{% highlight matlab %} figure(1) -plotPDF(rec,pf.h,'antipodal') -mtexColorMap LaboTeX +plotPDF(rec,pf.h,'antipodal','complete','upper') +mtexColorMap parula {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODFAmbiguity_24.png" %}
{% highlight matlab %} figure(2) -plotPDF(rec2,pf.h,'antipodal') -mtexColorMap LaboTeX +plotPDF(rec2,pf.h,'antipodal','complete','upper') +mtexColorMap parula {% endhighlight %}
{% include inline_image.html file="PoleFigure2ODFAmbiguity_25.png" %}

However if we look at the ODF we see big differences. The so-called ghosts.

{% highlight matlab %} +close all figure(1) plot(rec,'gray','contourf') mtexColorMap white2black diff --git a/pages/documentation_matlab/PoleFigure2ODFGhostCorrection.html b/pages/documentation_matlab/PoleFigure2ODFGhostCorrection.html index 65fa8090a..1c92dcbbd 100644 --- a/pages/documentation_matlab/PoleFigure2ODFGhostCorrection.html +++ b/pages/documentation_matlab/PoleFigure2ODFGhostCorrection.html @@ -64,7 +64,7 @@

Compare RP Errors

without ghost correction:

{% highlight plaintext %} ans = - 0.0019 0.0018 0.0045 + 0.0089 0.0088 0.0106 {% endhighlight %}

with ghost correction:

{% highlight matlab %} @@ -73,7 +73,7 @@

Compare RP Errors

without ghost correction:

{% highlight plaintext %} ans = - 0.0363 0.0363 0.0369 + 0.0262 0.0250 0.0265 {% endhighlight %}

Compare Reconstruction Errors

without ghost correction:

{% highlight matlab %} @@ -82,7 +82,7 @@

Compare Reconstruction Errors

without ghost correction:

{% highlight plaintext %} ans = - 0.0852 + 0.1253 {% endhighlight %}

with ghost correction:

{% highlight matlab %} @@ -91,7 +91,7 @@

Compare Reconstruction Errors

without ghost correction:

{% highlight plaintext %} ans = - 0.0686 + 0.0055 {% endhighlight %}

Plot the ODFs

without ghost correction:

{% highlight matlab %} @@ -137,19 +137,16 @@

Plot the ODFs

without ghost correction:

{% highlight plaintext %} odf = SO3FunHarmonic (222 → xyz) - isReal: true bandwidth: 25 weight: 1 rec = SO3FunHarmonic (222 → xyz) - isReal: true bandwidth: 48 weight: 1 rec_cor = SO3FunHarmonic (222 → xyz) - isReal: true bandwidth: 48 weight: 1 {% endhighlight %} @@ -160,7 +157,7 @@

Calculate Reconstruction Errors from Fourier Coefficients

wit {% highlight plaintext %} ans = - 0.6420 + 0.3592 {% endhighlight %}

with ghost correction:

{% highlight matlab %} @@ -169,7 +166,7 @@

Calculate Reconstruction Errors from Fourier Coefficients

wit {% highlight plaintext %} ans = - 0.5353 + 0.0326 {% endhighlight %}

Plot Fourier Coefficients

Plotting the Fourier coefficients of the recalculated ODFs shows that the Fourier coefficients without ghost correction oscillates much more than the Fourier coefficients with ghost correction

true ODF

{% highlight matlab %} diff --git a/pages/documentation_matlab/PoleFigureDubna.html b/pages/documentation_matlab/PoleFigureDubna.html index 26264ddb3..1fbc3677f 100644 --- a/pages/documentation_matlab/PoleFigureDubna.html +++ b/pages/documentation_matlab/PoleFigureDubna.html @@ -159,12 +159,12 @@

Manipulate pole figure data

rec = SO3FunRBF (m-3m → xyz (222)) uniform component - weight: 0.9 + weight: 0.73 multimodal components kernel: de la Vallee Poussin, halfwidth 10° center: 150 orientations, resolution: 10° - weight: 0.096 + weight: 0.27 {% endhighlight %}
{% include inline_image.html file="PoleFigureDubna_05.png" %} @@ -193,9 +193,9 @@

Manipulate pole figure data

{% highlight plaintext %} ans = - 0.0540 0.0318 0.0503 + 0.0202 0.0261 0.0240 ans = - 0.0225 0.0161 0.0157 + 0.0358 0.0283 0.0252 {% endhighlight %}

Difference plot

{% highlight matlab %} @@ -211,8 +211,21 @@

Manipulate pole figure data

{% highlight plaintext %} ans = - 0.1243 + 0.0312 ans = - 0.1356 + 0.0893 {% endhighlight %} -

Exercises

3)

a) Load the pole figure data of a quartz specimen from: data/dubna!

b) Inspect the raw data. Are there noticeable problems?

c) Compute an ODF from the pole figure data.

d) Plot some pole figures of that ODF and compare them to the measured pole figures.

e) Compute the RP errors for each pole figure.

f) Plot the difference between the raw data and the calculated pole figures. What do you observe?

g) Remove the erroneous values from the pole figure data and repeat the ODF calculation. How do the RP error change?

h) Vary the number of pole figures used for the ODF calculation. What is the minimum set of pole figures needed to obtain a meaningful ODF?

\ No newline at end of file +

Exercises

3)

a) Load the pole figure data of a quartz specimen from: data/dubna!

b) Inspect the raw data. Are there noticeable problems?

c) Compute an ODF from the pole figure data.

d) Plot some pole figures of that ODF and compare them to the measured pole figures.

e) Compute the RP errors for each pole figure.

f) Plot the difference between the raw data and the calculated pole figures. What do you observe?

g) Remove the erroneous values from the pole figure data and repeat the ODF calculation. How do the RP error change?

h) Vary the number of pole figures used for the ODF calculation. What is the minimum set of pole figures needed to obtain a meaningful ODF?

+{% highlight matlab %} +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/PoleFigurePlot.html b/pages/documentation_matlab/PoleFigurePlot.html index e82472418..e67bf120b 100644 --- a/pages/documentation_matlab/PoleFigurePlot.html +++ b/pages/documentation_matlab/PoleFigurePlot.html @@ -18,6 +18,8 @@ {% endhighlight %} {% highlight plaintext %} +saving data to /home/hielscher/mtex/master/data/ptx.mat + pf = PoleFigure (xyz) crystal symmetry : mmm diff --git a/pages/documentation_matlab/PoleFigureSantaFe.html b/pages/documentation_matlab/PoleFigureSantaFe.html index 33e2ce12b..17789c74b 100644 --- a/pages/documentation_matlab/PoleFigureSantaFe.html +++ b/pages/documentation_matlab/PoleFigureSantaFe.html @@ -43,12 +43,12 @@ rec = SO3FunRBF (m-3m → xyz (222)) uniform component - weight: 0.56 + weight: 0.57 multimodal components kernel: de la Vallee Poussin, halfwidth 5° center: 1232 orientations, resolution: 5° - weight: 0.44 + weight: 0.43 {% endhighlight %}

ODF Estimation without Ghost Correction

{% highlight matlab %} @@ -74,7 +74,7 @@

Error analysis

{% highlight plaintext %} ans = - 0.0494 + 0.0489 {% endhighlight %}
{% include inline_image.html file="PoleFigureSantaFe_02.png" %} diff --git a/pages/documentation_matlab/PoleFigureSimulation.html b/pages/documentation_matlab/PoleFigureSimulation.html index 534e9cd41..85845c5b3 100644 --- a/pages/documentation_matlab/PoleFigureSimulation.html +++ b/pages/documentation_matlab/PoleFigureSimulation.html @@ -30,7 +30,7 @@ {% endhighlight %}
{% include inline_image.html file="PoleFigureSimulation_01.png" %} -

In order to simulate pole figure data, the following parameters have to be specified

  1. an arbitrary ODF
  2. a list of Miller indece
  3. a grid of specimen directions
  4. superposition coefficients (optional)
  5. the magnitude of error (optional)

The list of Miller indece

+

In order to simulate pole figure data, the following parameters have to be specified

  1. an arbitrary ODF
  2. a list of Miller indices
  3. a grid of specimen directions
  4. superposition coefficients (optional)
  5. the magnitude of error (optional)

The list of Miller indices

{% highlight matlab %} h = [Miller(1,1,1,cs),Miller(1,1,0,cs),Miller(1,0,1,cs),Miller(0,1,1,cs),... Miller(1,0,0,cs),Miller(0,1,0,cs),Miller(0,0,1,cs)]; @@ -75,12 +75,12 @@ odf = SO3FunRBF (mmm → xyz) uniform component - weight: 0.75 + weight: 0.46 multimodal components kernel: de la Vallee Poussin, halfwidth 5° center: 29772 orientations, resolution: 5° - weight: 0.25 + weight: 0.54 {% endhighlight %}

which can be plotted,

{% highlight matlab %} @@ -95,7 +95,7 @@ {% highlight plaintext %} ans = - 0.2130 + 0.0815 {% endhighlight %}

Exploration of the relationship between estimation error and number of pole figures

For a more systematic analysis of the estimation error, we vary the number of pole figures used for ODF estimation from 1 to 7 and calculate for any number of pole figures the approximation error. Furthermore, we also apply ghost correction and compare the approximation error to the previous reconstructions.

{% highlight matlab %} @@ -117,6 +117,17 @@

Exploration of the relationship between estimation error and number xlabel('Number of Pole Figures'); ylabel('Reconstruction Error'); legend({'Without Ghost Correction','With Ghost Correction'}); + +% +% +% +%
+% ok<*SAGROW> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="PoleFigureSimulation_04.png" %} diff --git a/pages/documentation_matlab/PoleFigureTutorial.html b/pages/documentation_matlab/PoleFigureTutorial.html index c3173d82d..be71589ca 100644 --- a/pages/documentation_matlab/PoleFigureTutorial.html +++ b/pages/documentation_matlab/PoleFigureTutorial.html @@ -114,7 +114,7 @@ {% highlight plaintext %} ans = - 0.1210 0.0586 0.0787 0.0596 + 0.0413 0.0452 0.0584 0.0440 {% endhighlight %}

In the case of a bad fit, you may want to tweak the reconstruction algorithm. See here for more information.

Visualize the ODF

Finally one can plot the resulting ODF

{% highlight matlab %} diff --git a/pages/documentation_matlab/ProjectionBasedParameters.html b/pages/documentation_matlab/ProjectionBasedParameters.html index 09c3d0760..601b24675 100644 --- a/pages/documentation_matlab/ProjectionBasedParameters.html +++ b/pages/documentation_matlab/ProjectionBasedParameters.html @@ -67,7 +67,7 @@ {% highlight plaintext %} ans = - 6.9276e+03 + 6.9277e+03 {% endhighlight %}

The diameter is a special case of the caliper or Feret diameter of a grain. By definition the caliper is the length of a grain when projected onto a line. We may trace the caliper with respect to projection direction

{% highlight matlab %} @@ -96,7 +96,7 @@ {% highlight plaintext %} ans = - 6.9276e+03 + 6.9277e+03 ans = 1.6308e+03 {% endhighlight %} @@ -184,7 +184,7 @@ ans = 0.7102 ans = - 0.7203 + 0.7204 {% endhighlight %}

The position of the maxima and minima of the projection function derived from paror can be interpreted in the following way: the maximum position represents the preferred axis parallel to the longest projection and the normal the minimum position represents the preferred axis related to the normal to the shortest projection function.

{% highlight matlab %} @@ -211,7 +211,7 @@ ans = 87 ans = - 88.0000 + 88 {% endhighlight %}

The smaller the difference between these values, the closer the fabric is to an orthorhombic symmetry.

Similarly to using the entire particle (the convex hull in case of the projection functions), we can use a distribution of lines grainBoudnary.surfor. This can be useful for the quantification of the grain boundary anisotropy or in general might be needed if we look at boundaries which do not form closed outlines, e.g. a list of subgrain or twin boundaries or the contact between certain phases.

Let's compare the boundaries between the different unlike phases and between forsterite-forsterite in our sample:

{% highlight matlab %} @@ -266,10 +266,10 @@ {% highlight plaintext %} ans = - 78.8627 + 78.7433 ans = - 86.9482 + 86.9609 ans = - 79.6680 + 79.6255 {% endhighlight %}

\ No newline at end of file diff --git a/pages/documentation_matlab/QuadruplePoints.html b/pages/documentation_matlab/QuadruplePoints.html index eca8c64cf..bbbe98b1f 100644 --- a/pages/documentation_matlab/QuadruplePoints.html +++ b/pages/documentation_matlab/QuadruplePoints.html @@ -50,12 +50,12 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 2 2 42 test 1 X||a*, Y||b*, Z||c* - boundary segments: 61 (54 µm) + boundary segments: 52 (52 µm) inner boundary segments: 0 (0 µm) triple points: 0 Id Phase Pixels phi1 Phi phi2 GOS - 1 2 15 303 18 129 0 + 1 2 15 130 89 17 0 2 2 27 0 0 0 0 {% endhighlight %} @@ -68,7 +68,7 @@ gB = grainBoundary Segments length mineral 1 mineral 2 - 35 28 µm notIndexed test + 26 26 µm notIndexed test 26 26 µm test test grains = grain2d @@ -76,12 +76,12 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 2 2 42 test 1 X||a*, Y||b*, Z||c* - boundary segments: 61 (54 µm) + boundary segments: 52 (52 µm) inner boundary segments: 0 (0 µm) triple points: 0 Id Phase Pixels phi1 Phi phi2 GOS - 1 2 15 303 18 129 0 + 1 2 15 130 89 17 0 2 2 27 0 0 0 0 {% endhighlight %} @@ -95,12 +95,12 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 2 2 42 test 1 X||a*, Y||b*, Z||c* - boundary segments: 61 (51 µm) + boundary segments: 52 (50 µm) inner boundary segments: 0 (0 µm) triple points: 0 Id Phase Pixels phi1 Phi phi2 GOS - 1 2 15 303 18 129 0 + 1 2 15 130 89 17 0 2 2 27 0 0 0 0 {% endhighlight %} diff --git a/pages/documentation_matlab/RandomSampling.html b/pages/documentation_matlab/RandomSampling.html index 0fd737b41..76417ad2a 100644 --- a/pages/documentation_matlab/RandomSampling.html +++ b/pages/documentation_matlab/RandomSampling.html @@ -61,7 +61,6 @@ {% highlight plaintext %} odf_rec = SO3FunHarmonic (321 → xyz) - isReal: true bandwidth: 25 weight: 1 {% endhighlight %} @@ -74,6 +73,6 @@ {% highlight plaintext %} ans = - 0.0540 + 0.0499 {% endhighlight %}

Exporting Random Orientations

In order to make use of the sampled orientations you probably want to export them as Euler angles into a text files. This can be done using the commands export and export_VPSC.

\ No newline at end of file diff --git a/pages/documentation_matlab/RotationDefinition.html b/pages/documentation_matlab/RotationDefinition.html index 63a90e295..9065ab1d7 100644 --- a/pages/documentation_matlab/RotationDefinition.html +++ b/pages/documentation_matlab/RotationDefinition.html @@ -130,7 +130,7 @@ -

At the end all functions return a variable of type rotation which represents a list of rotations that are internaly stored as quaternions. An overview of different rotation representations by three dimensional vectors and their properties can be found in the section Representations.

Euler Angles

One of the most common ways to describe a rotation is as three subsequent rotations about fixed axes, e.g., first around the z axis, second around the x axis and third again around the z. The corresponding rotational angles are commonly called Euler angles. Beside the most common ZXZ covention other choices of the axes are sometimes used. Sorted by popularity in the texture analysis community these are

  • Bunge (phi1,Phi,phi2) - ZXZ
  • Matthies (alpha,beta,gamma) - ZYZ
  • Roe (Psi,Theta,Phi)
  • Kocks (Psi,Theta,phi)
  • Canova (omega,Theta,phi)

The default Euler angle convention in MTEX are the Bunge Euler angles, with axes Z, X, and Z. The following command defines a rotation by its three Bunge Euler angles

+

At the end all functions return a variable of type rotation which represents a list of rotations that are internally stored as quaternions. An overview of different rotation representations by three dimensional vectors and their properties can be found in the section Representations.

Euler Angles

One of the most common ways to describe a rotation is as three subsequent rotations about fixed axes, e.g., first around the z axis, second around the x axis and third again around the z. The corresponding rotational angles are commonly called Euler angles. Beside the most common ZXZ convention other choices of the axes are sometimes used. Sorted by popularity in the texture analysis community these are

  • Bunge (phi1,Phi,phi2) - ZXZ
  • Matthies (alpha,beta,gamma) - ZYZ
  • Roe (Psi,Theta,Phi)
  • Kocks (Psi,Theta,phi)
  • Canova (omega,Theta,phi)

The default Euler angle convention in MTEX are the Bunge Euler angles, with axes Z, X, and Z. The following command defines a rotation by its three Bunge Euler angles

{% highlight matlab %} rot = rotation.byEuler(30*degree,50*degree,10*degree) {% endhighlight %} @@ -154,7 +154,7 @@ phi1 Phi phi2 120 50 280 {% endhighlight %} -

This does not change the way MTEX displays the rotation on the screen. The default Euler angle convention for displaying a rotation can be changed by the command setMTEXpref, for a permanent change the mtex_settings should be edited. Compare

+

This does not change the way MTEX displays the rotation on the screen. The default Euler angle convention for displaying a rotation can be changed by the command setMTEXpref, for a permanent change the file mtex_settings.m should be edited. Compare

{% highlight matlab %} setMTEXpref('EulerAngleConvention','Roe') rot @@ -180,7 +180,7 @@ phi1 Phi phi2 120 50 280 {% endhighlight %} -

Axis angle parametrisation and Rodrigues Frank vector

A very simple possibility to specify a rotation is to specify the rotation axis and the rotation angle.

+

Axis angle parametrization and Rodrigues Frank vector

A very simple possibility to specify a rotation is to specify the rotation axis and the rotation angle.

{% highlight matlab %} rot = rotation.byAxisAngle(xvector,30*degree) {% endhighlight %} @@ -200,16 +200,20 @@

Axis angle parametrisation and Rodrigues Frank vector

A very s {% highlight plaintext %} ans = vector3d + x y z + 1 0 0 ans = 30.0000 {% endhighlight %} -

Closely related to the axis angle parameterisation of a rotation is the Rodriguess Frank vector.

+

Closely related to the axis angle parametrization of a rotation is the Rodriguez Frank vector.

{% highlight matlab %} R = rot.Rodrigues {% endhighlight %} {% highlight plaintext %} R = vector3d + x y z + 0.267949 0 0 {% endhighlight %}

This is the rotational axis scaled by \(\tan \omega/2\), where \(\omega\) is the rotational angle.

{% highlight matlab %} @@ -255,7 +259,7 @@

Rotation Matrix

Another common way to represent rotations is phi1 Phi phi2 0 30 0 {% endhighlight %} -

Four vectors defining a rotation

Another useful method to define a rotation is by describing how in acts on two given directions. More precisely, given four vectors u1, v1, u2, v2 there is a unique rotation rot such that rot * u1 = v1 and rot * u2 = v2. E.g., to find the rotation the maps the x-axis onto the y-axis and keeps the z-axis we do

+

Four vectors defining a rotation

Another useful method to define a rotation is by describing how in acts on two given directions. More precisely, given four vectors u1, v1, u2, v2 there is a unique rotation rot such that rot * u1 = v1 and rot * u2 = v2. E.g., to find the rotation the maps the x-axis onto the y-axis and keeps the z-axis we do

{% highlight matlab %} u1 = vector3d.X; v1 = vector3d.Y; @@ -285,12 +289,12 @@

Four vectors defining a rotation

Another useful method to def phi1 Phi phi2 180 90 180 {% endhighlight %} -

More generaly, one can fit a rotation rot to a list of left and right vectors l and r such that rot * l is the best approximation of r. This is done by the function rotation.fit

+

More generally, one can fit a rotation rot to a list of left and right vectors l and r such that rot * l is the best approximation of r. This is done by the function rotation.fit

{% highlight matlab %} % take five random left vectors left = vector3d.rand(5); -% rotate them by rot and perturbe them a little bit +% rotate them by rot and perturb them a little bit right = rot * left + 0.1 * vector3d.rand(1,5); % recover the rotation rot @@ -301,52 +305,19 @@

Four vectors defining a rotation

Another useful method to def ans = rotation Bunge Euler angles in degree - phi1 Phi phi2 - 182.171 91.207 183.008 + phi1 Phi phi2 + 183.17 90.8996 184.81 {% endhighlight %} -

Radom Rotations

MTEX offers several ways for generating random rotations. In the most

Logarithm, Exponential Mapping, Spin Tensor

TODO

+

Random Rotations

MTEX offers several ways for generating random rotations. The most easiest way is to use the command rotation.rand which generates an arbitrary number of random rotations

{% highlight matlab %} -S = spinTensor(rot) - -rotation(S) - -vector3d(S) -{% endhighlight %} - -{% highlight plaintext %} -S = spinTensor (xyz) - rank: 2 (3 x 3) - - 0 0 0 - 0 0 1.5708 - 0 -1.5708 0 - -ans = rotation - - Bunge Euler angles in degree - phi1 Phi phi2 - 180 90 180 - - -ans = vector3d -{% endhighlight %} - -{% highlight matlab %} -v = log(rot) - -rotation(exp(v)) +rotation.rand(100) {% endhighlight %} {% highlight plaintext %} -v = vector3d - ans = rotation - - Bunge Euler angles in degree - phi1 Phi phi2 - 180 90 180 + size: 100 x 1 {% endhighlight %} -

Quaternions

A last possibility to define a rotation is by quaternion coordinates a, b, c, d.

+

If you are interested in random rotations that follow a certain distribution have a look at random sampling.

Quaternions

A last possibility to define a rotation is by quaternion coordinates a, b, c, d.

{% highlight matlab %} q = quaternion(1,0,0,0) diff --git a/pages/documentation_matlab/RotationFibre.html b/pages/documentation_matlab/RotationFibre.html index c5a949f26..dd9865620 100644 --- a/pages/documentation_matlab/RotationFibre.html +++ b/pages/documentation_matlab/RotationFibre.html @@ -20,9 +20,6 @@ {% endhighlight %} {% highlight plaintext %} -Warning: Possibly applying an orientation to an object in -specimen coordinates! - rot = rotation size: 1000 x 1 {% endhighlight %} diff --git a/pages/documentation_matlab/RotationImproper.html b/pages/documentation_matlab/RotationImproper.html index 43c3ad271..2f47d52ea 100644 --- a/pages/documentation_matlab/RotationImproper.html +++ b/pages/documentation_matlab/RotationImproper.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Improper Rotations - edit page

Improper rotations are coordinate transformations from a left handed into a right handed coordinate system as, e.g. a mirroring or hte inversion. In MTEX the inversion is defined as the negative identical rotation

+ edit page

Improper rotations are coordinate transformations from a left handed into a right handed coordinate system as, e.g. a mirroring or an inversion. In MTEX the inversion is defined as the negative identical rotation

{% highlight matlab %} I = - rotation.byEuler(0,0,0) {% endhighlight %} @@ -24,7 +24,7 @@ phi1 Phi phi2 Inv. 0 0 0 1 {% endhighlight %} -

Note that this is convenient as both groupings of the operations "-" and "*" should give the same result

+

Note that this is convenient as both groupings of the operations - and * should give the same result

{% highlight matlab %} - (rotation.byEuler(0,0,0) * xvector) (- rotation.byEuler(0,0,0)) * xvector @@ -32,10 +32,14 @@ {% highlight plaintext %} ans = vector3d + x y z + -1 0 0 ans = vector3d + x y z + -1 0 0 {% endhighlight %} -

Mirroring

As a mirroring is nothing else then a rotation about 180 degree about the normal of the mirroring plane followed by a inversion we can defined a mirroring about the axis (111) by

+

Mirroring

As a mirroring is nothing else than a rotation of 180 degree about the normal of the mirroring plane followed by a inversion, we can defined a mirroring about the axis (111) by

{% highlight matlab %} mir = -rotation.byAxisAngle(vector3d(1,1,1),180*degree) {% endhighlight %} diff --git a/pages/documentation_matlab/RotationOperations.html b/pages/documentation_matlab/RotationOperations.html index 2874a0f9d..4565ccfb2 100644 --- a/pages/documentation_matlab/RotationOperations.html +++ b/pages/documentation_matlab/RotationOperations.html @@ -31,6 +31,8 @@ {% highlight plaintext %} v = vector3d + x y z + 0 1 0 {% endhighlight %}

The inverse rotation is computed via the backslash operator

{% highlight matlab %} @@ -39,6 +41,8 @@ {% highlight plaintext %} ans = vector3d + x y z + 1 0 0 {% endhighlight %}

Concatenating Rotations

Let

{% highlight matlab %} @@ -69,6 +73,8 @@

Rotational angle and the rotational axis

Then rotational angle 104.4775 ans = vector3d + x y z + 0.447214 -0.447214 0.774597 {% endhighlight %}

If two rotations are specifies the command angle(rot1,rot2) computes the rotational angle between both rotations

{% highlight matlab %} diff --git a/pages/documentation_matlab/RotationSpinTensor.html b/pages/documentation_matlab/RotationSpinTensor.html index 4257c32c3..6962bc151 100644 --- a/pages/documentation_matlab/RotationSpinTensor.html +++ b/pages/documentation_matlab/RotationSpinTensor.html @@ -1,5 +1,5 @@ --- -title: Spin Tensors as Ininitesimal Changes of Rotations +title: Spin Tensors as Infinitesimal Changes of Rotations sidebar: documentation_sidebar permalink: RotationSpinTensor.html @@ -11,19 +11,19 @@ Spin Tensors as Ininitesimal Changes of Rotations - edit page

Spin tensors are skew symmetric tensors that can be used to describe small rotational changes. Lets consider an arbitrary reference rotation

+ -->Spin Tensors as Infinitesimal Changes of Rotations + edit page

Spin tensors are skew symmetric tensors that can be used to describe small rotational changes. Let us consider an arbitrary reference rotation

{% highlight matlab %} rot_ref = rotation.byEuler(10*degree,20*degree,30*degree); {% endhighlight %} -

and pertube it by a rotation about the axis (123) and angle delta. Since multiplication of rotations is not communatativ we have to distinguish between left and right pertubations

+

and perturb it by a rotation about the axis (123) and angle delta=0.01 degree. Since multiplication of rotations is not commutative we have to distinguish between left and right perturbations

{% highlight matlab %} delta = 0.01*degree; rot_123 = rotation.byAxisAngle(vector3d(1,2,3),delta); rot_right = rot_123 * rot_ref; rot_left = rot_ref * rot_123; {% endhighlight %} -

We may now ask for the first order Taylor coefficients of the pertubation as delta goes to zero which we find by the formula

\[ T = \lim_{\delta \to 0} \frac{\tilde R - R}{\delta} \]

+

We may now ask for the first order Taylor coefficients of the perturbation as delta goes to zero which we find by the formula

\[ T = \lim_{\delta \to 0} \frac{\tilde R - R}{\delta} \]

{% highlight matlab %} T_right = (rot_right.matrix - rot_ref.matrix)./delta T_left = (rot_left.matrix - rot_ref.matrix)./delta @@ -39,7 +39,7 @@ 0.7530 -0.5816 0.1368 -0.2648 0.1140 0.0122 {% endhighlight %} -

Both matrices T_right and T_left are elements of the tangential space attached to the reference rotation rot_ref. Those matrices are characterized by the fact that they becomes scew symmetric matrices when multiplied from the left or from the right with the inverse of the reference rotation

+

Both matrices T_right and T_left are elements of the tangential space attached to the reference rotation rot_ref. Those matrices are characterized by the fact that they becomes skew symmetric matrices when multiplied from the left or from the right with the inverse of the reference rotation

{% highlight matlab %} S_right_L = matrix(inv(rot_ref)) * T_right S_right_R = T_right * matrix(inv(rot_ref)) @@ -66,7 +66,7 @@ 0.9575 -0.0001 0.0850 -0.2758 -0.0850 -0.0000 {% endhighlight %} -

A scew symmetric 3x3 matrix S is essentially determined by its entries \(S_{21}\), \(S_{31}\) and \(S_{32}\). Writing these values as a vector \((S_32,-S_{31},S_{21})\) we obtain for the matrices S_right_R and S_left_L exactly the rotational axis of our pertubation

+

A skew symmetric 3x3 matrix S is essentially determined by its entries \(S_{21}\), \(S_{31}\) and \(S_{32}\). Writing these values as a vector \((S_32,-S_{31},S_{21})\) we obtain for the matrices S_right_R and S_left_L exactly the rotational axis of our perturbation

{% highlight matlab %} vector3d(spinTensor(S_right_R)) * sqrt(14) @@ -75,8 +75,12 @@ {% highlight plaintext %} ans = vector3d + x y z + 1 2 3 ans = vector3d + x y z + 1 2 3 {% endhighlight %}

For the other two matrices those vectors are related to the rotational axis by the reference rotation rot_ref

{% highlight matlab %} @@ -87,69 +91,66 @@ {% highlight plaintext %} ans = vector3d + x y z + 1 2 3 ans = vector3d + x y z + 1 2 3 {% endhighlight %} -

The Functions Exp and Log

The above definition of the spin tensor works only well if the pertupation rotation has small rotational angle. For large pertubations the matrix logarithm provides the correct way to translate rotational changes into skew symmetric matrices

+

The Functions Exp and Log

The above definition of the spin tensor works well only if the perturbation has small rotational angle. For large perturbations the matrix logarithm log provides the correct way to translate rotational changes into skew symmetric matrices

{% highlight matlab %} -S = logm(rot_ref * rot_123,rot_ref) +% define a large pertubation with rotational angle 1 radiant +delta = 1; +rot_123 = rotation.byAxisAngle(vector3d(1,2,3),1); -S = logm(rot_123 * rot_ref,rot_ref,'left') +S = log(rot_ref * rot_123,rot_ref, SO3TangentSpace.rightSpinTensor); S * sqrt(14) + + +S = log(rot_123 * rot_ref,rot_ref, SO3TangentSpace.leftSpinTensor); S * sqrt(14) {% endhighlight %} {% highlight plaintext %} -S = spinTensor (xyz) +ans = spinTensor (xyz) rank: 2 (3 x 3) - *10^-5 - 0 -13.994 9.329 - 13.994 0 -4.665 - -9.329 4.665 0 + 0 -3 2 + 3 0 -1 + -2 1 0 -S = spinTensor (xyz) +ans = spinTensor (xyz) rank: 2 (3 x 3) - *10^-5 - 0 -13.994 9.329 - 13.994 0 -4.665 - -9.329 4.665 0 -{% endhighlight %} -

Again the entries \(S_{21}\), \(S_{31}\) and \(S_{32}\) exactly coincide with the rotional axis multiplied with the rotational angle

-{% highlight matlab %} -vector3d(S) * sqrt(14) -{% endhighlight %} - -{% highlight plaintext %} -ans = vector3d + 0 -3 2 + 3 0 -1 + -2 1 0 {% endhighlight %} -

More directly this disorientation vector may be computed from two rotations by the command log

+

Again the entries \(S_{21}\), \(S_{31}\) and \(S_{32}\) exactly coincide with the rotational axis multiplied with the rotational angle.

More directly this disorientation vector may be computed from two rotations using the options SO3TangentSpace.rightVector and SO3TangentSpace.leftVector

{% highlight matlab %} -rot_123 = rotation.byAxisAngle(vector3d(1,2,3),1) -log(rot_ref * rot_123,rot_ref) * sqrt(14) +v = log(rot_ref * rot_123,rot_ref,SO3TangentSpace.rightVector); v * sqrt(14) -log(rot_123 * rot_ref,rot_ref,'left') * sqrt(14) +v = log(rot_123 * rot_ref,rot_ref,SO3TangentSpace.leftVector); v * sqrt(14) {% endhighlight %} {% highlight plaintext %} -rot_123 = rotation - - Bunge Euler angles in degree - phi1 Phi phi2 - 87.0892 33.2984 320.219 - - ans = vector3d + x y z + 1 2 3 ans = vector3d + x y z + 1 2 3 {% endhighlight %} -

The other way round

Given a skew symmetric matrix S or a disorientation vector v we may use the command exp to apply this rotational pertubation to a reference rotation rot_ref

+

The other way round

Given a skew symmetric matrix S or a disorientation vector v we may use the command exp to apply this rotational perturbation to a reference rotation rot_ref

{% highlight matlab %} -S = logm(rot_ref * rot_123,rot_ref); +% the truth rot_ref * rot_123 -exp(S,rot_ref) -v = log(rot_ref * rot_123,rot_ref); -exp(v,rot_ref) +% using a disorientation vector +exp(v,rot_ref,SO3TangentSpace.rightVector) + +% using a spin tensor +exp(S,rot_ref,SO3TangentSpace.rightSpinTensor) {% endhighlight %} {% highlight plaintext %} @@ -175,12 +176,14 @@

The other way round

Given a skew symmetric matrix S or {% endhighlight %} {% highlight matlab %} -S = logm(rot_123 * rot_ref,rot_ref,'left'); +% the other truth rot_123 * rot_ref -exp(S,rot_ref,'left') -v = log(rot_123 * rot_ref,rot_ref,'left'); -exp(v,rot_ref,'left') +% using a disorientation vector +exp(v,rot_ref,SO3TangentSpace.leftVector) + +% using a spin tensor +exp(S,rot_ref,SO3TangentSpace.leftSpinTensor) {% endhighlight %} {% highlight plaintext %} @@ -204,7 +207,7 @@

The other way round

Given a skew symmetric matrix S or phi1 Phi phi2 74.5535 51.5051 9.61062 {% endhighlight %} -

Disorientations under the presence of crystal symmetry

Under the presence of crystal symmetry the order whether a rotational pertupation is applied from the left or from the right. Lets perform the above calculations step by step in the presence of trigonal crystal symmetry

+

Disorientations under the presence of crystal symmetry

Under the presence of crystal symmetry the order whether a rotational perturbation is applied from the left or from the right. Lets perform the above calculations step by step in the presence of trigonal crystal symmetry

{% highlight matlab %} cs = crystalSymmetry('321'); @@ -212,177 +215,57 @@

Disorientations under the presence of crystal symmetry

Under ori_ref = orientation.byEuler(10*degree,20*degree,30*degree,cs); % next we disturb rot_ref by a rotation about the axis (123) -mori_123 = orientation.byAxisAngle(Miller(1,2,-3,3,cs),1) +mori_123 = orientation.byAxisAngle(Miller(1,2,-3,3,cs),1); % first we multiply from the right ori = ori_ref * mori_123 {% endhighlight %} {% highlight plaintext %} -mori_123 = misorientation (321 → 321) - - Bunge Euler angles in degree - phi1 Phi phi2 - 61.8386 40.0064 340.052 - - ori = orientation (321 → xyz) Bunge Euler angles in degree phi1 Phi phi2 79.3156 43.3785 9.9013 {% endhighlight %} -

and compute the scew symmetric pertubation matrices

-{% highlight matlab %} -S_right_L = matrix(inv(rot_ref)) * T_right -S_right_R = T_right * matrix(inv(rot_ref)) - -S_left_L = matrix(inv(rot_ref)) * T_left -S_left_R = T_left * matrix(inv(rot_ref)) -{% endhighlight %} - -{% highlight plaintext %} -S_right_L = - -0.0000 -0.5892 0.4501 - 0.5893 -0.0001 -0.6709 - -0.4501 0.6710 -0.0001 -S_right_R = - -0.0001 -0.8018 0.5345 - 0.8018 -0.0001 -0.2672 - -0.5345 0.2673 -0.0000 -S_left_L = - -0.0001 -0.8018 0.5345 - 0.8018 -0.0001 -0.2672 - -0.5345 0.2673 -0.0000 -S_left_R = - -0.0001 -0.9575 0.2758 - 0.9575 -0.0001 0.0850 - -0.2758 -0.0850 -0.0000 -{% endhighlight %} -

make it a vector

+

Computing the right tangential vector gives us the disorientation vector in crystal coordinates

{% highlight matlab %} -vR1 = vector3d(spinTensor(S_right_L)) *sqrt(14) -vR2 = inv(rot_ref) * vector3d(spinTensor(S_right_R)) * sqrt(14) +v = log(ori,ori_ref,SO3TangentSpace.rightVector); round(v) -lR1 = rot_ref * vector3d(spinTensor(S_left_L)) *sqrt(14) -lR2 = vector3d(spinTensor(S_left_R)) * sqrt(14) +exp(v,ori_ref,SO3TangentSpace.rightVector) {% endhighlight %} {% highlight plaintext %} -vR1 = vector3d - -vR2 = vector3d - -lR1 = vector3d - -lR2 = vector3d -{% endhighlight %} -

logarithm to vector3d

-{% highlight matlab %} -log(ori_ref * mori_123,ori_ref) - -log(rot_123 * ori_ref,ori_ref,'left') * sqrt(14) -{% endhighlight %} - -{% highlight plaintext %} -ans = Miller (321) - h k i l - 0.2335 0.4671 -0.7006 0.7006 - -ans = vector3d -{% endhighlight %} -

logarithm to skew symmetric matrix

-{% highlight matlab %} -S = logm(ori_ref * mori_123,ori_ref) -round(vector3d(S)) - -S = logm(rot_123 * ori_ref,ori_ref,'left') -vector3d(S) * sqrt(14) -{% endhighlight %} - -{% highlight plaintext %} -S = spinTensor (321) - rank: 2 (3 x 3) - - *10^-2 - 0 -70.06 46.71 - 70.06 0 -53.94 - -46.71 53.94 0 - ans = Miller (321) h k i l 1 2 -3 3 -S = spinTensor (xyz) - rank: 2 (3 x 3) - - *10^-2 - 0 -80.18 53.45 - 80.18 0 -26.73 - -53.45 26.73 0 - -ans = vector3d -{% endhighlight %} -

The other way round

-{% highlight matlab %} -S = logm(ori_ref * mori_123,ori_ref); -ori_ref * mori_123 -exp(S,ori_ref) - -v = log(ori_ref * mori_123,ori_ref); -exp(v,ori_ref) -{% endhighlight %} - -{% highlight plaintext %} -ans = orientation (321 → xyz) - - Bunge Euler angles in degree - phi1 Phi phi2 - 79.3156 43.3785 9.9013 - - -ans = orientation (321 → xyz) - - Bunge Euler angles in degree - phi1 Phi phi2 - 79.3156 43.3785 9.9013 - - ans = orientation (321 → xyz) Bunge Euler angles in degree phi1 Phi phi2 79.3156 43.3785 9.9013 {% endhighlight %} - +

computing the left tangential vector gives us the disorientation vector in specimen coordinates

{% highlight matlab %} -S = logm(rot_123 * ori_ref,ori_ref,'left'); -rot_123 * ori_ref -exp(S,ori_ref,'left') - -v = log(rot_123 * ori_ref,ori_ref,'left'); -exp(v,ori_ref,'left') +v = log(ori,ori_ref,SO3TangentSpace.leftVector) +S = log(ori,ori_ref,SO3TangentSpace.leftSpinTensor) +exp(v,ori_ref,SO3TangentSpace.leftVector) {% endhighlight %} {% highlight plaintext %} -ans = orientation (321 → xyz) - - Bunge Euler angles in degree - phi1 Phi phi2 - 74.5535 51.5051 9.61062 +v = vector3d + x y z + 0.161601 0.428476 0.888985 +S = vector3d + x y z + 0.161601 0.428476 0.888985 ans = orientation (321 → xyz) Bunge Euler angles in degree phi1 Phi phi2 - 74.5535 51.5051 9.61062 - - -ans = orientation (321 → xyz) - - Bunge Euler angles in degree - phi1 Phi phi2 - 74.5535 51.5051 9.61062 + 79.3156 43.3785 9.9013 {% endhighlight %}
\ No newline at end of file diff --git a/pages/documentation_matlab/S1FunHarmonics.html b/pages/documentation_matlab/S1FunHarmonics.html new file mode 100644 index 000000000..7aaa4d519 --- /dev/null +++ b/pages/documentation_matlab/S1FunHarmonics.html @@ -0,0 +1,76 @@ +--- +title: Harmonic Representation of 1 dimensional Spherical Functions + +sidebar: documentation_sidebar +permalink: S1FunHarmonics.html +folder: documentation +toc: false +--- + + + Harmonic Representation of 1 dimensional Spherical Functions + edit page

Functions on the circle are periodic functions. Hence they may be represented as weighted sums of sines and cosines (Fourier series). A spherical function \(f\) can be written as series of the form

\[ f(x) = \sum_{k=-N}^N \hat f_k e^{-ikx} \]

with respect to Fourier coefficients \(\hat f_k\). Note that \(f\) is \(2\pi\)-periodic.

Within the class S1FunHarmonic spherical functions are represented by their Fourier coefficients which are stored in the field fun.fhat. As an example lets define a Fourier series which Fourier coefficients \(\hat f_0 = 1\), \(\hat f_1 = 0\), \(\hat f_{-1} = 3\), \(\hat f_2 = 4\) and \(\hat f_{-2} = 0\)

+{% highlight matlab %} +fun = S1FunHarmonic([0;3;1;0;4]) + +clf +plot(fun) +{% endhighlight %} + +{% highlight plaintext %} +fun = S1FunHarmonic + bandwidth: 2 + +ans = + Line with properties: + + Color: [0 0.4470 0.7410] + LineStyle: '-' + LineWidth: 0.5000 + Marker: 'none' + MarkerSize: 10.5000 + MarkerFaceColor: 'none' + ThetaData: [0 0.0175 0.0349 0.0524 0.0698 0.0873 0.1047 0.1222 … ] + RData: [8 7.9971 7.9884 7.9740 7.9538 7.9278 7.8962 7.8588 … ] + + Use GET to show all properties +{% endhighlight %} +
+{% include inline_image.html file="S1FunHarmonics_01.png" %} +

More practically, periodic functions appear after density estimation from circular data, e.g. of the azimuth angle of three dimensional vectors

+{% highlight matlab %} +% some random directions +v = vector3d.rand(1000); + +% perform density estimation of the azimuth angle +fun = calcDensity(v.rho,'periodic') + +clf +plot(fun,'linewidth',2) +{% endhighlight %} + +{% highlight plaintext %} +fun = S1FunHarmonic + bandwidth: 59 + isReal: true + +ans = + Line with properties: + + Color: [0 0.4470 0.7410] + LineStyle: '-' + LineWidth: 2 + Marker: 'none' + MarkerSize: 10.5000 + MarkerFaceColor: 'none' + ThetaData: [0 0.0175 0.0349 0.0524 0.0698 0.0873 0.1047 0.1222 … ] + RData: [0.9451 0.9483 0.9480 0.9426 0.9314 0.9144 0.8929 … ] + + Use GET to show all properties +{% endhighlight %} +
+{% include inline_image.html file="S1FunHarmonics_02.png" %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/S2FunBingham.html b/pages/documentation_matlab/S2FunBingham.html index dae4bf116..a2c0ca9d7 100644 --- a/pages/documentation_matlab/S2FunBingham.html +++ b/pages/documentation_matlab/S2FunBingham.html @@ -12,29 +12,17 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->The Spherical Bingham Distribution - edit page

The Bingham distribution on the sphere is an antipodal symmetric distribution (Bingham, 1974) with a probabiliy density function given by

\[p_{b}(\hat{x}\vert AKA^T) = \frac{1}{F(\kappa_{1},\kappa_{2},\kappa_{3})}\exp (\hat{x}^T AZA^T \hat{x})\]

where \(A\) is an orthognal covariance matrix, and \(Z\) a concentration matrix with \(\mathrm{diag}(\kappa_{1},\kappa_{2},\kappa_{3})\) with \(\kappa_{1} < \kappa_{2} < \kappa_{3}\).

In mtex \(Z\) is given by Z = [k1,k2,k3] with k3 = 0 and \(A\) is given by three orthognal vectors.

Bingham, C., An Antipodally Symmetric Distribution on the Sphere, The Annals of Statistics Vol. 2, No. 6 (Nov., 1974), pp. 1201-1225

+ edit page

The Bingham distribution on the sphere is an antipodal symmetric distribution (Bingham, 1974) with a probability density function given by

\[p_{b}(\hat{x}\vert AKA^T) = \frac{1}{F(\kappa_{1},\kappa_{2},\kappa_{3})}\exp (\hat{x}^T AZA^T \hat{x})\]

where \(A\) is an orthogonal covariance matrix, and \(Z\) a concentration matrix with \(\mathrm{diag}(\kappa_{1},\kappa_{2},\kappa_{3})\) with \(\kappa_{1} < \kappa_{2} < \kappa_{3}\).

In MTEX \(Z\) is given by Z = [k1,k2,k3] with k3 = 0 and \(A\) is given by three orthogonal vectors.

Bingham, C., An Antipodally Symmetric Distribution on the Sphere, The Annals of Statistics Vol. 2, No. 6 (Nov., 1974), pp. 1201-1225

{% highlight matlab %} % A simple example: -Z = [-10 -4 0] -a = rotation.rand(1).*vector3d([xvector yvector zvector]) +Z = [-10 -4 0]; +a = rotation.rand(1).*vector3d([xvector yvector zvector]); bs2 = BinghamS2(Z,a); plot(bs2) {% endhighlight %} - -{% highlight plaintext %} -Z = - -10 -4 0 - -a = vector3d - size: 1 x 3 - x y z - -0.348691 -0.351483 0.868835 - 0.77315 0.416118 0.478628 - -0.529768 0.838633 0.126652 -{% endhighlight %}
{% include inline_image.html file="S2FunBingham_01.png" %} -

Meaning of \(Z\)

\(k1 = k2\) defines a rotationally symmetric point maximum and \(k2 = 0\) defines a girdle distribution.

+

Meaning of \(Z\)

\(k1 = k2\) defines a rotational symmetric point maximum and \(k2 = 0\) defines a girdle distribution.

{% highlight matlab %} close kappa = [0 4 8 12 24]; @@ -51,7 +39,7 @@ end end end -CLim(mtexFig,'equal') +setColorRange('equal') mtexFig.drawNow; {% endhighlight %}
diff --git a/pages/documentation_matlab/S2FunConcept.html b/pages/documentation_matlab/S2FunConcept.html index ed87f9330..91f03cdee 100644 --- a/pages/documentation_matlab/S2FunConcept.html +++ b/pages/documentation_matlab/S2FunConcept.html @@ -23,7 +23,6 @@ {% highlight plaintext %} pdf = S2FunHarmonicSym (xyz (222)) - symmetry: "222" bandwidth: 25 antipodal: true isReal: true @@ -39,7 +38,7 @@ {% highlight plaintext %} ans = - 2.6095 + 1.1780 {% endhighlight %}

We may also plot the function in any spherical projection

{% highlight matlab %} @@ -58,6 +57,13 @@ localMax = vector3d size: 6 x 1 antipodal: true + x y z + 0.665345 0.338549 0.665357 + 0.665333 0.665372 0.338544 + 0.338446 0.665332 0.665423 + 1 0 0 + 0 1 0 + 0 0 1 {% endhighlight %}
{% include inline_image.html file="S2FunConcept_02.png" %} diff --git a/pages/documentation_matlab/S2FunMultivariate.html b/pages/documentation_matlab/S2FunMultivariate.html index 0b09cff6a..dc4f25455 100644 --- a/pages/documentation_matlab/S2FunMultivariate.html +++ b/pages/documentation_matlab/S2FunMultivariate.html @@ -56,7 +56,7 @@ size: 9 x 1 bandwidth: 2 {% endhighlight %} -
  • This command stores the nine first spherical harmonics in sF3

Operations which differ from an univariate S2FunHarmonic

Some default matrix and vector operations

You can concatenate and refer to functions as Matlab does with vectors and matrices

+
  • This command stores the nine first spherical harmonics in sF3

Operations which differ from an univariate S2FunHarmonic

Some default matrix and vector operations

You can concatenate and refer to functions as MATLAB does with vectors and matrices

{% highlight matlab %} sF4 = [sF1; sF2]; sF4(2:3); @@ -73,7 +73,7 @@ size(sF2); sF3 = reshape(sF3, 3, []); {% endhighlight %} -

sum and mean

If we do not specify further options to sum or mean they give we the integral or the mean value back for each function. You could also calculate the conventional sum or the meanvalue over a dimension of a multivariate S2FunHarmonic.

+

sum and mean

If we do not specify further options to sum or mean they give we the integral or the mean value back for each function. You could also calculate the conventional sum or the mean value over a dimension of a multivariate S2FunHarmonic.

{% highlight matlab %} sum(sF1, 1); sum(sF3, 2); @@ -83,4 +83,17 @@ % this computes the minimum along the first dimension min(sF3,[],1); {% endhighlight %} -

Remark on the matrix product

At this point the matrix product is implemented per element and not as the usual matrix product.

Visualization of multivariate S2FunHarmonic

The same plot commands as for univariate S2FunHarmonic work on multivariate as well. The difference is that, now, each component is plotted next to one another.

\ No newline at end of file +

Remark on the matrix product

At this point the matrix product is implemented per element and not as the usual matrix product.

Visualization of multivariate S2FunHarmonic

The same plot commands as for univariate S2FunHarmonic work on multivariate as well. The difference is that, now, each component is plotted next to one another.

+{% highlight matlab %} +% +% +% +%
+% ok<*VUNUS> +% +% +%
+% +% +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/S2FunOperations.html b/pages/documentation_matlab/S2FunOperations.html index f603be97a..9b9a4df8e 100644 --- a/pages/documentation_matlab/S2FunOperations.html +++ b/pages/documentation_matlab/S2FunOperations.html @@ -160,7 +160,6 @@

Differentiation

The differential of a spherical function in a {% highlight plaintext %} sFs = S2FunHarmonicSym (112) - symmetry: 112, X||a*, Y||b*, Z||c* bandwidth: 128 isReal: true {% endhighlight %} diff --git a/pages/documentation_matlab/S2FunSym.html b/pages/documentation_matlab/S2FunSym.html index e08f0b455..49249d020 100644 --- a/pages/documentation_matlab/S2FunSym.html +++ b/pages/documentation_matlab/S2FunSym.html @@ -43,7 +43,6 @@ {% highlight plaintext %} sFs2 = S2FunHarmonicSym (6/m) - symmetry: 6/m, X||a*, Y||b, Z||c* bandwidth: 128 antipodal: true isReal: true diff --git a/pages/documentation_matlab/S2FunVectorField.html b/pages/documentation_matlab/S2FunVectorField.html index 3f2a5d459..8d40fff97 100644 --- a/pages/documentation_matlab/S2FunVectorField.html +++ b/pages/documentation_matlab/S2FunVectorField.html @@ -69,11 +69,6 @@

Operations

Basic arithmetic operations

Again the 2.*sVF1; sVF1./4; S2Fun.smiley .* sVF1; {% endhighlight %} - -{% highlight plaintext %} -Warning: M is too large, instead we are giving you the largest quadrature grid -we got. -{% endhighlight %}

dot product with a vector or another vector field

{% highlight matlab %} dot(sVF1, sVF2); dot(sVF1, vector3d(0, 0, 1)); @@ -105,28 +100,18 @@

Visualization

One can use the default

Some fun

-{% highlight matlab %} -clf - -sVF = grad(S2Fun.smiley) -plot(dot(sVF,sVF)) -{% endhighlight %} - -{% highlight plaintext %} -sVF = S2VectorFieldHarmonic - bandwidth: 129 +% +% +% +%
+% ok<*VUNUS> +% +% +%
+% +% {% endhighlight %}
-{% include inline_image.html file="S2FunVectorField_03.png" %} -
-{% highlight matlab %} -plot(dot(sVF,zvector)) -{% endhighlight %} -
-{% include inline_image.html file="S2FunVectorField_04.png" %} +{% include inline_image.html file="S2FunVectorField_02.png" %}
\ No newline at end of file diff --git a/pages/documentation_matlab/S2Kernels.html b/pages/documentation_matlab/S2Kernels.html index 947072dd8..c97225c74 100644 --- a/pages/documentation_matlab/S2Kernels.html +++ b/pages/documentation_matlab/S2Kernels.html @@ -18,7 +18,7 @@ surf(psi,'resolution',2*degree,'EdgeColor','none') hold on -arrow3d(2*zvector,'labeled') +arrow3d(2.4*zvector,'labeled','arrowwidth',0.01) hold off axis off {% endhighlight %} @@ -37,13 +37,13 @@ {% endhighlight %}
{% include inline_image.html file="S2Kernels_02.png" %} -

Examples of spherical kernel functions are

  • the de la Vallee Poussin kernel @S2DeLaValleePoussinKernel
  • the Schulz defocusing kernel @SchulzDefocusingKernel
  • the Dirichlet kernel @S2DirichletKernel
  • the Bump kernel @S2BumpKernel
  • the Abel Poussin kernel @S2AbelPoussinKernel.html de >
  • the vom Mises kernel

Legendre coefficients

Every spherical kernel function \(\psi\) can be associated with a function \(\Psi \colon [-1,1] \to \mathbb R\) defined on the interval \([-1,1]\) by \(\psi(v) = \Psi(v \cdot e_3)\). It turn out to be usefull to \(\Psi\) approximate \(\Psi\) by a expansion into Legendre polynomials \(P_n\) of degree \(n\), i.e.,

\[ \psi(t) = \sum\limits_{n=0}^{\infty} \hat\psi_n \, \mathcal P_{n}(t) \]

These Legendre coefficients are stored as the field psi.A and can be easily visualized using the command plotSpectra.

+

Examples of spherical kernel functions are

  • the de la Vallee Poussin kernel @S2DeLaValleePoussinKernel
  • the Schulz defocusing kernel @SchulzDefocusingKernel
  • the Dirichlet kernel @S2DirichletKernel
  • the Bump kernel @S2BumpKernel
  • the Abel Poussin kernel @S2AbelPoussinKernel.html de >
  • the vom Mises kernel

Legendre coefficients

Every spherical kernel function \(\psi\) can be associated with a function \(\Psi \colon [-1,1] \to \mathbb R\) defined on the interval \([-1,1]\) by \(\psi(v) = \Psi(v \cdot e_3)\). It turn out to be useful to \(\Psi\) approximate \(\Psi\) by a expansion into Legendre polynomials \(P_n\) of degree \(n\), i.e.,

\[ \psi(t) = \sum\limits_{n=0}^{\infty} \hat\psi_n \, \mathcal P_{n}(t) \]

These Legendre coefficients are stored as the field psi.A and can be easily visualized using the command plotSpectra.

{% highlight matlab %} -plotSpektra(psi) +plotSpektra(psi,'linewidth',2) {% endhighlight %}
{% include inline_image.html file="S2Kernels_03.png" %} -

Applications

Spherical kernel functions have different applications in MTEX. Those include

  • kernel density estimation of directional data using the command calcDensity
  • defocusing correction of XRD data
  • etimation of the habit plane normal distribution using the command calcGBND
  • definition of fibe ODFs using the command fibreODF

The de La Vallee Poussin Kernel

The spherical de la Vallee Poussin kernel is defined by

\[ K(t) = (1+\kappa)\,(\frac{1+t}{2})^{\kappa}\]

for \(t\in[0,1]\). The de la Vallee Poussin kernel additionaly has the unique property that for a given halfwidth it can be described exactly by a finite number of Fourier coefficients. This kernel is recommended for Texture analysis as it is always positive and there is no truncation error in Fourier space.

Hence we can define the de la Vallee Poussin kernel \(\psi_{\kappa}\) depending on a parameter \(\kappa \in \mathbb N \setminus \{0\}\) by its finite Legendre polynomial expansion

\[ \psi_{\kappa}(t) = \sum\limits_{n=0}^{L} a_n(\kappa) \mathcal P_{n}(t).\]

We obtain the Legendre coefficients \(a_n(\kappa)\) by \(a_0=1\), \(a_1=\frac{\kappa}{2+\kappa}\) and the three term recurence relation

\[ (\kappa+l+2) a_{l+1} = -(2l+1)\,a_l + (\kappa-l+1)\,a_{l-1}.\]

Lets construct two of them.

+

Applications

Spherical kernel functions have different applications in MTEX. Those include

  • kernel density estimation of directional data using the command calcDensity
  • defocusing correction of XRD data
  • estimation of the habit plane normal distribution using the command calcGBND
  • definition of fibe ODFs using the command fibreODF

The de la Vallee Poussin Kernel

The spherical de la Vallee Poussin kernel is defined by

\[ K(t) = (1+\kappa)\,(\frac{1+t}{2})^{\kappa}\]

for \(t\in[0,1]\). The de la Vallee Poussin kernel additionally has the unique property that for a given halfwidth it can be described exactly by a finite number of Fourier coefficients. This kernel is recommended for Texture analysis as it is always positive and there is no truncation error in Fourier space.

Hence we can define the de la Vallee Poussin kernel \(\psi_{\kappa}\) depending on a parameter \(\kappa \in \mathbb N \setminus \{0\}\) by its finite Legendre polynomial expansion

\[ \psi_{\kappa}(t) = \sum\limits_{n=0}^{L} a_n(\kappa) \mathcal P_{n}(t).\]

We obtain the Legendre coefficients \(a_n(\kappa)\) by \(a_0=1\), \(a_1=\frac{\kappa}{2+\kappa}\) and the three term recurrence relation

\[ (\kappa+l+2) a_{l+1} = -(2l+1)\,a_l + (\kappa-l+1)\,a_{l-1}.\]

Lets construct two of them.

{% highlight matlab %} psi1 = S2DeLaValleePoussinKernel('halfwidth',15*degree) psi2 = S2DeLaValleePoussinKernel('halfwidth',20*degree) @@ -111,7 +111,7 @@ {% endhighlight %}
{% include inline_image.html file="S2Kernels_07.png" %} -

The Bump kernel

The spherical bump kernel is a radial symmetric kernel function depending on the halfwidth \(r\in (0,pi)\). The function value is 0, if the angle is greater then the halfwidth \(r\). Otherwise it is 1.

The main problem of the bump kernel is that we need lots of legendre coefficients to describe it. That possibly can result in high runtimes.

+

The Bump kernel

The spherical bump kernel is a radial symmetric kernel function depending on the halfwidth \(r\in (0,pi)\). The function value is 0, if the angle is greater then the halfwidth \(r\). Otherwise it is 1.

The main problem of the bump kernel is that we need lots of Legendre coefficients to describe it. That possibly can result in high runtimes.

{% highlight matlab %} psi1 = S2BumpKernel(30*degree) psi2 = S2BumpKernel(50*degree) diff --git a/pages/documentation_matlab/SO3FunApproximationInterpolation.html b/pages/documentation_matlab/SO3FunApproximationInterpolation.html index 81484dea5..e52f33bab 100644 --- a/pages/documentation_matlab/SO3FunApproximationInterpolation.html +++ b/pages/documentation_matlab/SO3FunApproximationInterpolation.html @@ -25,41 +25,44 @@ {% include inline_image.html file="SO3FunApproximationInterpolation_01.png" %}

Now, we want to find a function which coincides with the given function values in the nodes reasonably well.

Interpolation

Interpolation is done by the interpolate command of class SO3Fun

{% highlight matlab %} -SO3F = SO3Fun.interpolate(nodes, S.values,'exact'); +psi = SO3DeLaValleePoussinKernel('halfwidth',7.5*degree) +SO3F = SO3Fun.interpolate(nodes, S.values,'exact','kernel',psi); plot(SO3F) {% endhighlight %} + +{% highlight plaintext %} +psi = SO3DeLaValleePoussinKernel + bandwidth: 33 + halfwidth: 7.5° +{% endhighlight %}
{% include inline_image.html file="SO3FunApproximationInterpolation_02.png" %}

The interpolation is done by lsqr. Hence the error is not in machine precision.

{% highlight matlab %} -norm(SO3F.eval(nodes) - S.values) +norm(SO3F.eval(nodes) - S.values) / norm(S.values) {% endhighlight %} {% highlight plaintext %} ans = - 2.5025 + 0.0943 {% endhighlight %} -

If we don't restrict ourselfs to the given function values in the nodes, we have more freedom, which can be seen in the case of approximation.

Approximation

In contrast to interpolation we are now not restricted to the function values in the nodes but still want to keep the error reasonably small.

One way is to interpolate the function similary as before, without the option 'exact'.

Another way is to approximate the rotational function with a series of Wigner-D functions (Harmonic series). We don't take as many Wigner-D functions as there are nodes, such that we are in the overdetermined case. In that way we don't have a chance of getting the error in the nodes zero but hope for a smoother approximation. This can be achieved by the approximation command of the class SO3FunHarmonic

+

If we don't restrict ourselfs to the given function values in the nodes, we have more freedom, which can be seen in the case of approximation.

Approximation

In contrast to interpolation we are now not restricted to the function values in the nodes but still want to keep the error reasonably small.

One way is to interpolate the function similarly as before, without the option 'exact'.

Another way is to approximate the rotational function with a series of Wigner-D functions (Harmonic series). We don't take as many Wigner-D functions as there are nodes, such that we are in the overdetermined case. In that way we don't have a chance of getting the error in the nodes zero but hope for a smoother approximation. This can be achieved by the approximation command of the class SO3FunHarmonic

{% highlight matlab %} SO3F2 = SO3FunHarmonic.approximation(nodes, S.values); plot(SO3F2) {% endhighlight %} - -{% highlight plaintext %} -Warning: calcVoronoiVolume is inexact up to now. -{% endhighlight %}
{% include inline_image.html file="SO3FunApproximationInterpolation_03.png" %} -

Plotting this function, we can immidiately see, that we have a much smoother function. But one has to keep in mind that the error in the data nodes is not zero as in the case of interpolation.

+

Plotting this function, we can immediately see, that we have a much smoother function. But one has to keep in mind that the error in the data nodes is not zero as in the case of interpolation.

{% highlight matlab %} -norm(eval(SO3F, nodes) - S.values) +norm(eval(SO3F2, nodes) - S.values) / norm(S.values) {% endhighlight %} {% highlight plaintext %} ans = - 2.5025 + 0.2612 {% endhighlight %} -

But this may not be of great importance like in the case of function approximation from noisy function values, where we don't know the exact function values anyways.

The strategy underlying the approximation-command to obtain such an approximation works via Wigner-D functions (Basics of rotational harmonics). For that, we seek for so-called Fourier-coefficients \({\bf \hat f} = (\hat f^{0,0}_0,\dots,\hat f^{N,N}_N)^T\) such that

\[ g(x) = \sum_{n=0}^N\sum_{k,l = -n}^n \hat f_n^{k,l} D_n^{k,l}(x) \]

approximates our function. A basic strategy to achieve this is through least squares, where we minimize the functional

\[ \sum_{m=1}^M|f(x_m)-g(x_m)|^2 \]

for the data nodes \(x_m\), \(m=1,\dots,M\), \(f(x_m)\) the target function values and \(g(x_m)\) our approximation evaluated in the given data nodes.

This can be done by the lsqr function of Matlab, which efficiently seeks for roots of the derivative of the given functional (also known as normal equation). In the process we compute the matrix-vector product with the Fourier-matrix multible times, where the Fourier-matrix is given by

\[ F = [D_n^{k,l}(x_m)]_{m = 1,\dots,M;~n = 0,\dots,N,\,k,l = -n,\dots,n}. \]

This matrix-vector product can be computed efficiently with the use of the nonequispaced SO(3) Fourier transform NSOFT or faster by the combination of an Wigner-transform together with a NFFT.

We end up with the Fourier-coefficients of our approximation \(g\), which describe our approximation.

Quadrature

Assume we have some experiment which yields an ODF or some general SO3Fun, i.e. some evaluation routine.

+

But this may not be of great importance like in the case of function approximation from noisy function values, where we don't know the exact function values anyways.

The strategy underlying the approximation-command to obtain such an approximation works via Wigner-D functions (Basics of rotational harmonics). For that, we seek for so-called Fourier-coefficients \({\bf \hat f} = (\hat f^{0,0}_0,\dots,\hat f^{N,N}_N)^T\) such that

\[ g(x) = \sum_{n=0}^N\sum_{k,l = -n}^n \hat f_n^{k,l} D_n^{k,l}(x) \]

approximates our function. A basic strategy to achieve this is through least squares, where we minimize the functional

\[ \sum_{m=1}^M|f(x_m)-g(x_m)|^2 \]

for the data nodes \(x_m\), \(m=1,\dots,M\), \(f(x_m)\) the target function values and \(g(x_m)\) our approximation evaluated in the given data nodes.

This can be done by the lsqr method of Matlab, which efficiently seeks for roots of the derivative of the given functional (also known as normal equation). In the process we compute the matrix-vector product with the Fourier-matrix multible times, where the Fourier-matrix is given by

\[ F = [D_n^{k,l}(x_m)]_{m = 1,\dots,M;~n = 0,\dots,N,\,k,l = -n,\dots,n}. \]

This matrix-vector product can be computed efficiently with the use of the nonequispaced SO(3) Fourier transform NSOFT or faster by the combination of an Wigner-transform together with a NFFT.

We end up with the Fourier-coefficients of our approximation \(g\), which describe our approximation.

Quadrature

Assume we have some experiment which yields an ODF or some general SO3Fun, i.e. some evaluation routine.

{% highlight matlab %} mtexdata dubna odf = calcODF(pf,'resolution',5*degree,'zero_Range') @@ -122,7 +125,7 @@ {% endhighlight %} {% highlight plaintext %} -Elapsed time is 10.462793 seconds. +Elapsed time is 5.314106 seconds. F1 = SO3FunHarmonic (Quartz → xyz) bandwidth: 50 @@ -156,7 +159,7 @@ {% endhighlight %} {% highlight plaintext %} -Elapsed time is 6.008804 seconds. +Elapsed time is 2.615315 seconds. F2 = SO3FunHarmonic (Quartz → xyz) bandwidth: 50 diff --git a/pages/documentation_matlab/SO3FunConcept.html b/pages/documentation_matlab/SO3FunConcept.html index a2145fb27..7da932cf9 100644 --- a/pages/documentation_matlab/SO3FunConcept.html +++ b/pages/documentation_matlab/SO3FunConcept.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Orientation Dependent Functions - edit page

An orientation dependent function is a function that assigns to each rotation or orientation a numerical value. An import example of a rotational function is the orientation density function (ODF) that assignes to each crystal orientation the probability of its occurence within a specimen. Other examples are the Schmidt or the Taylor factor as a function of the crystal orientation.

Definition of a orientation dependent function

Within MTEX a rotational function is represented by a variable of type SO3Fun. Let us consider as an example the function that takes an orientation and returns it rotational angle modulo cubic crystal symmetry. In MTEX the rotational angle is computed by the command angle(ori). In order to turn this correspondence into a SO3Fun we use the command SO3FunHandle and pass the angle command as an anonymous function.

+ edit page

An orientation dependent function is a function that assigns to each rotation or orientation a numerical value. An import example of a rotational function is the orientation density function (ODF) that assigns to each crystal orientation the probability of its occurrence within a specimen. Other examples are the Schmidt or the Taylor factor as a function of the crystal orientation.

Definition of a orientation dependent function

Within MTEX a rotational function is represented by a variable of type SO3Fun. Let us consider as an example the function that takes an orientation and returns it rotational angle modulo cubic crystal symmetry. In MTEX the rotational angle is computed by the command angle(ori). In order to turn this correspondence into a SO3Fun we use the command SO3FunHandle and pass the angle command as an anonymous function.

{% highlight matlab %} % define the crystal symmetry cs = crystalSymmetry('432'); @@ -23,8 +23,9 @@ {% highlight plaintext %} SO3F = SO3FunHandle (432 → xyz) + eval: @(ori)angle(ori)./degree {% endhighlight %} -

Many more methods for defining orientation dependent functions are discussed here.

The entire information abot the orientation dependent function is now stored in the variable SO3F. In order to determine its value for a specific orientation ori the function eval(ori) is used

+

Many more methods for defining orientation dependent functions are discussed here.

The entire information about the orientation dependent function is now stored in the variable SO3F. In order to determine its value for a specific orientation ori the function eval(ori) is used

{% highlight matlab %} ori = orientation.rand(cs) SO3F.eval(ori) @@ -35,10 +36,10 @@ Bunge Euler angles in degree phi1 Phi phi2 - 206.155 55.7455 253.26 + 261.066 133.335 273.128 ans = - 42.9263 + 44.5458 {% endhighlight %}

Plotting an orientation Dependent Function

Orientation dependent functions are most of visualized by sections according to the third Euler angle \(\varphi_2\)

{% highlight matlab %} @@ -62,7 +63,7 @@

Plotting an orientation Dependent Function

Orientation depende {% endhighlight %}

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

as obviously, the function value is constant in each section. Many more methods for visualizing orientation dependent functions are discussed here.

Computing with orientation dependent functions

The power of representing an orientation dependent functions as a variables of type SO3Fun is that we may apply to it a large number of analysis tools. In particular, one can add, subtract and mutiply orientation dependent functions, plot them in various projections or detect the local minima or maxima. In the case of our example function the local maxima refers to the orientations with maximum rotational angle in cubic symmetry. We may compute them by the command max

+

as obviously, the function value is constant in each section. Many more methods for visualizing orientation dependent functions are discussed here.

Computing with orientation dependent functions

The power of representing an orientation dependent functions as a variables of type SO3Fun is that we may apply to it a large number of analysis tools. In particular, one can add, subtract and multiply orientation dependent functions, plot them in various projections or detect the local minima or maxima. In the case of our example function the local maxima refers to the orientations with maximum rotational angle in cubic symmetry. We may compute them by the command max

{% highlight matlab %} [value,ori] = max(SO3F,'numLocal',10,'accuracy',0.001*degree) {% endhighlight %} @@ -88,7 +89,7 @@

Plotting an orientation Dependent Function

Orientation depende 90.0002 45.0001 225 0.000124236 45 315 {% endhighlight %} -

We observe that there are exactly six symetrically not equivalent orientations that realize an orientation angle of about 62.994 degree and form the vertices of the fundamental region in orienation space

+

We observe that there are exactly six symmetrically not equivalent orientations that realize an orientation angle of about 62.994 degree and form the vertices of the fundamental region in orientation space

{% highlight matlab %} color = ind2color(repmat(1:length(ori),numSym(cs),1)); plot(ori.symmetrise,color,'axisAngle','filled','markerSize',20,'restrict2FundamentalRegion') @@ -119,7 +120,7 @@

Plotting an orientation Dependent Function

Orientation depende -

as superposition of fibre elements

+

as superposition of fiber elements

@@ -149,7 +150,7 @@

Plotting an orientation Dependent Function

Orientation depende -

explicitely given by a formula

+

explicitly given by a formula

@@ -158,7 +159,7 @@

Plotting an orientation Dependent Function

Orientation depende -

All representations allow the same operations which are specified for the abstact class SO3Fun. In particular it is possible to calculate with \(SO(3)\) functions as with ordinary numbers, i.e., you can add, multiply arbitrary functions, take the mean, integrate them or compute gradients, see Operations.

Generalizations of Rotational Functions

+

All representations allow the same operations which are specified for the abstract class SO3Fun. In particular it is possible to calculate with \(SO(3)\) functions as with ordinary numbers, i.e., you can add, multiply arbitrary functions, take the mean, integrate them or compute gradients, see Operations.

Generalizations of Rotational Functions

@@ -72,7 +72,7 @@

Input

Columns

diff --git a/pages/function_reference_matlab/EBSD.rotate.html b/pages/function_reference_matlab/EBSD.rotate.html index 226984879..c511097e1 100644 --- a/pages/function_reference_matlab/EBSD.rotate.html +++ b/pages/function_reference_matlab/EBSD.rotate.html @@ -12,9 +12,9 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

rotate EBSD

Syntax

+ edit page

rotate EBSD maps

Syntax

{% highlight matlab %} -% roate the whoole data set about the z-axis by 90*degree +% rotate EBSD map about the z-axis by 10*degree ebsd = rotate(ebsd,10*degree) {% endhighlight %} diff --git a/pages/function_reference_matlab/SO3FunBingham.rotate_outer.html b/pages/function_reference_matlab/EBSD.rotate_outer.html similarity index 66% rename from pages/function_reference_matlab/SO3FunBingham.rotate_outer.html rename to pages/function_reference_matlab/EBSD.rotate_outer.html index 3125e6f28..fcaf94b2c 100644 --- a/pages/function_reference_matlab/SO3FunBingham.rotate_outer.html +++ b/pages/function_reference_matlab/EBSD.rotate_outer.html @@ -2,7 +2,7 @@ title: rotate_outer sidebar: function_reference_sidebar -permalink: SO3FunBingham.rotate_outer.html +permalink: EBSD.rotate_outer.html folder: function_reference toc: false --- @@ -11,9 +11,9 @@ rotate_outer - edit page

rotate

Syntax

+ -->rotate_outer + edit page

rotate EBSD, same as EBSD/rotate

Syntax

{% highlight matlab %} -SO3F = rotate_outer(SO3F,rot,varargin) +ebsd = rotate_outer(ebsd,rot,varargin) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/EBSD.smooth.html b/pages/function_reference_matlab/EBSD.smooth.html index 9f65d4d75..63cccaba3 100644 --- a/pages/function_reference_matlab/EBSD.smooth.html +++ b/pages/function_reference_matlab/EBSD.smooth.html @@ -105,6 +105,11 @@

Input

plot(ebsd,oM.orientation2color(ebsd.orientations)) hold off {% endhighlight %} + +{% highlight plaintext %} +Warning: Possibly applying an orientation to an object in +specimen coordinates! +{% endhighlight %}

{% include inline_image.html file="EBSD.smooth_01.png" %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/EBSD.spatialProfile.html b/pages/function_reference_matlab/EBSD.spatialProfile.html index d28cf0565..f6c6bede5 100644 --- a/pages/function_reference_matlab/EBSD.spatialProfile.html +++ b/pages/function_reference_matlab/EBSD.spatialProfile.html @@ -86,6 +86,8 @@

Input

{% endhighlight %} {% highlight plaintext %} +saving data to /home/hielscher/mtex/master/data/twins.mat + ebsd = EBSD Phase Orientations Mineral Color Symmetry Crystal reference frame diff --git a/pages/function_reference_matlab/EBSD.updateUnitCell.html b/pages/function_reference_matlab/EBSD.updateUnitCell.html index ad5bd8348..74d687bb6 100644 --- a/pages/function_reference_matlab/EBSD.updateUnitCell.html +++ b/pages/function_reference_matlab/EBSD.updateUnitCell.html @@ -14,6 +14,6 @@ -->updateUnitCell edit page

this function should be called after the spatial coordinates of an EBSD data set have been modified

Syntax

{% highlight matlab %} -ebsd = updateUnitCell(ebsd,uc) +ebsd = updateUnitCell(ebsd) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/EBSDhex.KAM.html b/pages/function_reference_matlab/EBSDhex.KAM.html index df8c92365..2c161e593 100644 --- a/pages/function_reference_matlab/EBSDhex.KAM.html +++ b/pages/function_reference_matlab/EBSDhex.KAM.html @@ -30,7 +30,7 @@ {% endhighlight %} {% highlight matlab %} -% consider also second order neigbors +% consider also second order neighbors kam = KAM(ebsd, 'order', 2); plot(ebsd, kam./degree) {% endhighlight %} diff --git a/pages/function_reference_matlab/EBSDsquare.KAM.html b/pages/function_reference_matlab/EBSDsquare.KAM.html index c12aa1abf..e6d003dfb 100644 --- a/pages/function_reference_matlab/EBSDsquare.KAM.html +++ b/pages/function_reference_matlab/EBSDsquare.KAM.html @@ -30,7 +30,7 @@ {% endhighlight %} {% highlight matlab %} -% consider also second order neigbors +% consider also second order neighbors kam = KAM(ebsd,'order',2); plot(ebsd,kam./degree) {% endhighlight %} @@ -71,5 +71,13 @@

Input

take not the mean but the maximum misorientation angle

+ + + +
diff --git a/pages/documentation_matlab/SO3FunDefinition.html b/pages/documentation_matlab/SO3FunDefinition.html index bf27ecedf..bc32c8623 100644 --- a/pages/documentation_matlab/SO3FunDefinition.html +++ b/pages/documentation_matlab/SO3FunDefinition.html @@ -107,9 +107,11 @@ @(ori)angle(ori)./degree SO3F1 = SO3FunHandle (xyz → xyz) + eval: @(ori)angle(ori)./degree SO3F2 = SO3FunHandle (m-3m → xyz) + eval: @(ori)angle(ori)./degree {% endhighlight %}

Now we are able to evaluate this SO3FunHandle

{% highlight matlab %} @@ -119,8 +121,8 @@ {% highlight plaintext %} ans = - 142.6484 - 134.7919 + 161.1531 + 171.3382 {% endhighlight %}

And following that, it is easy to describe every SO3Fun by an SO3FunHandle.

{% highlight matlab %} @@ -129,6 +131,7 @@ {% highlight plaintext %} ans = SO3FunHandle (xyz → xyz) + eval: @(rot)SO3F1.eval(rot) {% endhighlight %}

Definition of Harmonic Series on SO(3)

The class SO3FunHarmonic described rotational functions by there harmonic series. MTEX is very fast by computing with this SO3FunHarmonic's. Hence sometimes it might be a good idea to expand any SO3Fun in its harmonic series. Therefore only the command SO3FunHarmonic is needed. But note that this approximation may lead to inaccuracies.

{% highlight matlab %} @@ -150,7 +153,7 @@ SO3F4 = SO3FunHarmonic (m-3m → xyz) isReal: false bandwidth: 19 - weight: 0.34 + weight: 0.77 {% endhighlight %}

The bandwith decribes the maximal harmonic degree of the harmonic series expansion.

By the property isReal we are able to change between real and complex valued SO3FunHarmonic's. Note that creation of an real vealued SO3FunHarmonic changes the Fourier coefficient vector. So it is not possible to reconstruct the previous function. But computing with real valued functions is much faster.

{% highlight matlab %} @@ -162,16 +165,16 @@ {% highlight plaintext %} ans = - -3.8112 + 0.4626i - 32.2917 + 2.1982i + 21.5138 + 0.8503i + 6.8277 - 1.6646i SO3F4 = SO3FunHarmonic (m-3m → xyz) bandwidth: 19 - weight: 0.34 + weight: 0.77 ans = - -3.8112 - 32.2917 + 21.5138 + 6.8277 {% endhighlight %}

For further information on the Fourier coefficients, the bandwidth and other properties , see Harmonic Representation of Rotational Functions.

Definition of Radial Basis Functions

Radial Basis functions are of class SO3FunRBF. They are defined by a kernel function SO3Kernel which is cenetered on orientations with some weights.

{% highlight matlab %} @@ -240,9 +243,10 @@ harmonic component bandwidth: 19 - weight: 0.34 + weight: 0.77 function handle component + eval: @(ori)angle(ori)./degree multimodal components kernel: de la Vallee Poussin, halfwidth 10° diff --git a/pages/documentation_matlab/SO3FunHarmonicRepresentation.html b/pages/documentation_matlab/SO3FunHarmonicRepresentation.html index 5d51b79b2..32e886840 100644 --- a/pages/documentation_matlab/SO3FunHarmonicRepresentation.html +++ b/pages/documentation_matlab/SO3FunHarmonicRepresentation.html @@ -57,7 +57,7 @@

Fourier Coefficients

Within the class + -->Multivariate Orientation Dependent Functions edit page

Structural conventions of the input and output of multivariate SO3FunHarmonics

In this part we deal with multivariate functions of the form

\[ f\colon \mathcal{SO}(3) \to \mathbb R^n. \]

  • the structure of the nodes @rotations is always interpreted as a column vector
  • the node index is the first dimension
  • the dimensions of the SO3FunHarmonic itself is counted from the second dimension

For example we got four nodes \(R_1, R_2, R_3\) and \(R_4\) and six functions \(f_1, f_2, f_3, f_4, f_5\) and \(f_6\), which we want to store in a 3x2 array, then the following scheme applies to function evaluations:

\[ F(:, :, 1) = \pmatrix{f_1(v_1) & f_2(v_1) & f_3(v_1) \cr f_1(v_2) & f_2(v_2) & f_3(v_2) \cr f_1(v_3) & f_2(v_3) & f_3(v_3) \cr f_1(v_4) & f_2(v_4) & f_3(v_4)} \quad\mathrm{and}\quad F(:, :, 2) = \pmatrix{f_4(v_1) & f_5(v_1) & f_6(v_1) \cr f_4(v_2) & f_5(v_2) & f_6(v_2) \cr f_4(v_3) & f_5(v_3) & f_6(v_3) \cr f_4(v_4) & f_5(v_4) & f_6(v_4)}. \]

For the intern Fourier-coefficient matrix the first dimension is reserved for the Fourier-coefficients of a single function; the dimensions of the functions itself begins again with the second dimension.

If \(\bf{\hat f}_1, \bf{\hat f}_2, \bf{\hat f}_3, \bf{\hat f}_4, \bf{\hat f}_5\) and \(\bf{\hat f}_6\) would be the column vectors of the Fourier-coefficients of the functions above, internally they would be stored in \(\hat F\) as follows. \[ \hat F(:, :, 1) = \pmatrix{\bf{\hat f}_1 & \bf{\hat f}_2 & \bf{\hat f}_3} \quad\mathrm{and}\quad \hat F(:, :, 2) = \pmatrix{\bf{\hat f}_4 & \bf{\hat f}_5 & \bf{\hat f}_6}. \]

Defining a multivariate SO3FunHarmonic

Definition via function values

At first we need some vertices

{% highlight matlab %} nodes = equispacedSO3Grid(crystalSymmetry,specimenSymmetry,'points',1e5); @@ -19,22 +19,23 @@ {% endhighlight %}

Next we define function values for the vertices

{% highlight matlab %} -y = [SO3Fun.dubna(nodes), (nodes.a.*nodes.b).^(1/4)]; +y = [SO3Fun.dubna(nodes), (nodes.a .* nodes.b).^(1/4)]; nodes.CS = SO3Fun.dubna.CS; {% endhighlight %}

Now the actual command to get a (2x1) SO3F1 of type \(~\) SO3FunHarmonic is

{% highlight matlab %} -SO3F1 = SO3FunHarmonic.approximation(nodes, y) +SO3F1 = SO3FunHarmonic.approximation(nodes, y,'maxit',10) {% endhighlight %} {% highlight plaintext %} -Warning: calcVoronoiVolume is inexact up to now. +Warning: The Voronoi decomposition is calculated. This may +take some time. SO3F1 = SO3FunHarmonic (Quartz → xyz) isReal: false size: 2 x 1 - bandwidth: 47 - weight: 0.82 + bandwidth: 42 + weight: 1 {% endhighlight %}

It is also possible to interpolate one component by an SO3FunRBF, that means

{% highlight matlab %} @@ -63,6 +64,7 @@ {% highlight plaintext %} SO3F3 = SO3FunHarmonic (Quartz → xyz) + isReal: false size: 4 x 1 bandwidth: 50 weight: 1.1 @@ -79,7 +81,7 @@ bandwidth: 1 weight: 1 {% endhighlight %} -

Operations which differ from an univariate SO3FunHarmonic

Some default matrix and vector operations

You can concatenate and refer to functions as Matlab does with vectors and matrices

+

Operations which differ from an univariate SO3FunHarmonic

Some default matrix and vector operations

You can concatenate and refer to functions as MATLAB does with vectors and matrices

{% highlight matlab %} SO3F5 = [SO3F1; SO3F3]; SO3F5(2:4) @@ -90,7 +92,7 @@ isReal: false size: 3 x 1 bandwidth: 50 - weight: 0.236+0.098i + weight: 0.49+0.2i {% endhighlight %}

You can conjugate the Fourier-coefficients and transpose/ctranspose the multivariate SO3FunHarmonic.

{% highlight matlab %} @@ -103,8 +105,8 @@ ans = SO3FunHarmonic (Quartz → xyz) isReal: false size: 1 x 2 - bandwidth: 47 - weight: 0.82 + bandwidth: 42 + weight: 1 {% endhighlight %}

Some other operations

{% highlight matlab %} @@ -134,8 +136,8 @@ {% highlight plaintext %} ans = SO3FunHarmonic (Quartz → xyz) isReal: false - bandwidth: 47 - weight: 1.051+0.098i + bandwidth: 42 + weight: 1.49+0.2i ans = SO3FunHarmonic (xyz → xyz) @@ -153,9 +155,9 @@ {% highlight plaintext %} ans = Columns 1 through 7 - 0.5000 -0.9437 -1.2247 -1.7321 -0.6124 -0.8660 -0.6124 + 1.0000 -1.7320 -1.2247 -1.7320 -1.2247 -1.7321 -1.2247 Columns 8 through 10 - -1.7321 -1.2247 -0.9437 + -1.7320 -1.2247 -1.7320 {% endhighlight %}

Remark on the matrix product

At this point the matrix product is implemented pointwise and not as the usual matrix product.

{% highlight matlab %} @@ -168,10 +170,10 @@ ans = SO3FunHarmonic (xyz → xyz) isReal: false size: 2 x 5 - bandwidth: 48 - weight: 0.41 + bandwidth: 43 + weight: 1 {% endhighlight %} -

Visualization of multivariate SO3FunHarmonic

Similary to the univariate case we also can look at the Fourier coefficients of multivariate functions.

+

Visualization of multivariate SO3FunHarmonic

Similarly to the univariate case we also can look at the Fourier coefficients of multivariate functions.

{% highlight matlab %} plotSpektra(SO3F3) {% endhighlight %} @@ -183,8 +185,11 @@

Visualization of multivariate SO3FunHarmonic

Similary to the {% endhighlight %} {% highlight plaintext %} -Warning: You try to plot an multivariate function. Plot the desired -components manually. In the following the first component is plotted. +Warning: You try to plot an multivariate function. Plot the +desired components manually. In the following the first +component is plotted. +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. {% endhighlight %}

{% include inline_image.html file="SO3FunMultivariate_02.png" %} @@ -194,14 +199,33 @@

Visualization of multivariate SO3FunHarmonic

Similary to the {% endhighlight %} {% highlight plaintext %} -Warning: You try to plot an multivariate function. Plot the desired -components manually. In the following the first component is plotted. +Warning: You try to plot an multivariate function. Plot the +desired components manually. In the following the first +component is plotted. +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. {% endhighlight %}

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

while the plot along a specific fibre includes all components.

{% highlight matlab %} plotFibre(SO3F3,fibre.beta) + +% +% +% +%
+% ok<*VUNUS> +% +% +%
+% +% +{% endhighlight %} + +{% highlight plaintext %} +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. {% endhighlight %}
{% include inline_image.html file="SO3FunMultivariate_04.png" %} diff --git a/pages/documentation_matlab/SO3FunOperations.html b/pages/documentation_matlab/SO3FunOperations.html index 370498ca8..560d97e0a 100644 --- a/pages/documentation_matlab/SO3FunOperations.html +++ b/pages/documentation_matlab/SO3FunOperations.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Operations on Rotational Functions - edit page

The idea of variables of type SO3Fun is to calculate with rotational functions similarly as Matlab does with vectors and matrices. In order to illustrate this we consider the following two rotational functions

An ODF determined from XRD data

+ edit page

The idea of variables of type SO3Fun is to calculate with rotational functions similarly as MATLAB does with vectors and matrices. In order to illustrate this we consider the following two rotational functions

An ODF determined from XRD data

{% highlight matlab %} SO3F1 = SO3Fun.dubna @@ -113,7 +113,7 @@ ans = 2.2873 {% endhighlight %} -

Local Extrema

The above mentioned functions min and max have very different use cases

  • if a single rotational function is provided the global maximum / minimum of the function is computed
  • if two rotational functions are provied, a rotational function defined as the pointwise min/max between these two functions is computed
  • if a rotational function and a single number are passed as arguments a rotational function defined as the pointwise min/max between the function and the value is computed
+

Local Extrema

The above mentioned functions min and max have very different use cases

  • if a single rotational function is provided the global maximum / minimum of the function is computed
  • if two rotational functions are provided, a rotational function defined as the pointwise min/max between these two functions is computed
  • if a rotational function and a single number are passed as arguments a rotational function defined as the pointwise min/max between the function and the value is computed
{% highlight matlab %} % * if additionally the option 'numLocal' is provided the certain number of % local minima / maxima is computed @@ -164,7 +164,7 @@

Differentiation

The gradient of a \(SO(3)\) function in a spe {% highlight plaintext %} ans = SO3TangentVector - TagentSpace: left + TagentSpace: leftVector x y z 1.50362 -8.98149 -1.57404 {% endhighlight %} @@ -183,8 +183,7 @@

Differentiation

The gradient of a \(SO(3)\) function in a spe {% highlight plaintext %} G = SO3VectorFieldHarmonic (Quartz → xyz) bandwidth: 48 - - plotting 2000 random orientations out of 5172 given orientations + tangent space: leftVector {% endhighlight %}

{% include inline_image.html file="SO3FunOperations_07.png" %} diff --git a/pages/documentation_matlab/SO3FunSymmetricFunctions.html b/pages/documentation_matlab/SO3FunSymmetricFunctions.html index b1cb5041f..92bdc64fe 100644 --- a/pages/documentation_matlab/SO3FunSymmetricFunctions.html +++ b/pages/documentation_matlab/SO3FunSymmetricFunctions.html @@ -49,9 +49,9 @@ {% highlight plaintext %} ans = - 0.0266 0.0266 0.0266 0.0266 0.0266 0.0266 + 0.4376 0.4376 0.4376 0.4376 0.4376 0.4376 ans = - 0.0266 0.0266 0.0266 0.0266 0.0266 0.0266 + 0.4376 0.4376 0.4376 0.4376 0.4376 0.4376 {% endhighlight %}

The symmetries have, for example, an influence on the plot domain.

{% highlight matlab %} @@ -81,24 +81,29 @@ SO3F2 = SO3FunHarmonic (xyz → xyz) isReal: false bandwidth: 9 - weight: 0.66 + weight: 1 ans = - 0.6594 - 0.1356 - 0.8415 - 0.1153 - 0.9864 - 0.9954 - 0.2812 - 0.7690 - 0.2734 - 0.8753 + 0.9995 + 0.9343 + 0.7401 + 0.0611 + 0.5717 + 0.8529 + 0.6035 + 0.0860 + 0.9749 + 0.3638 {% endhighlight %} {% highlight matlab %} plot(SO3F2) {% endhighlight %} + +{% highlight plaintext %} +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. +{% endhighlight %}
{% include inline_image.html file="SO3FunSymmetricFunctions_02.png" %}

Changing the symmetry has no effect on the Fourier coefficients. No we are only plotting the given function on some fundamental region.

@@ -111,24 +116,29 @@ SO3F2 = SO3FunHarmonic (121 → xyz) isReal: false bandwidth: 9 - weight: 0.66 + weight: 1 ans = - 0.6594 - 0.1356 - 0.8415 - 0.1153 - 0.9864 - 0.9954 - 0.2812 - 0.7690 - 0.2734 - 0.8753 + 0.9995 + 0.9343 + 0.7401 + 0.0611 + 0.5717 + 0.8529 + 0.6035 + 0.0860 + 0.9749 + 0.3638 {% endhighlight %} {% highlight matlab %} plot(SO3F2) {% endhighlight %} + +{% highlight plaintext %} +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. +{% endhighlight %}
{% include inline_image.html file="SO3FunSymmetricFunctions_03.png" %}

Symmetrizing the Fourier coefficients transforms the coefficients. So we symmetrize the function and it is no longer possible to go back to the non symmetrized function from before.

@@ -141,30 +151,40 @@ SO3F2 = SO3FunHarmonic (121 → xyz) isReal: false bandwidth: 9 - weight: 0.66 + weight: 1 ans = - 0.6594 - 0.0000i - 0.0101 + 0.0000i + 0.9995 - 0.0000i + 0.4366 + 0.0000i 0.0000 + 0.0000i - -0.0101 - 0.0000i - 0.3526 + 0.0000i + -0.4366 - 0.0000i + -0.0159 + 0.0000i 0.0000 + 0.0000i - -0.3526 - 0.0000i - -0.0531 + 0.0000i + 0.0159 - 0.0000i + -0.1389 + 0.0000i 0.0000 + 0.0000i - 0.0531 - 0.0000i + 0.1389 - 0.0000i {% endhighlight %} {% highlight matlab %} plot(SO3F2) {% endhighlight %} + +{% highlight plaintext %} +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. +{% endhighlight %}
{% include inline_image.html file="SO3FunSymmetricFunctions_04.png" %}

Now the function is symmetrised on the full rotation group.

{% highlight matlab %} plot(SO3F2,'complete') {% endhighlight %} + +{% highlight plaintext %} +Warning: Imaginary part of complex valued SO3FunHarmonic is +ignored. In the following only the real part is plotted. +{% endhighlight %}
{% include inline_image.html file="SO3FunSymmetricFunctions_05.png" %}

Note that you can expand every SO3Fun to an SO3FunHarmonic

diff --git a/pages/documentation_matlab/SO3FunTangentSpace.html b/pages/documentation_matlab/SO3FunTangentSpace.html index f12e9223e..f57af7b4b 100644 --- a/pages/documentation_matlab/SO3FunTangentSpace.html +++ b/pages/documentation_matlab/SO3FunTangentSpace.html @@ -12,12 +12,12 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->The Tangent Space on the Rotation Group - edit page

The tangent space of the rotation group at some rotation \(R\) has 2 different representations. There is a left and a right representation.

The left tangent space is defined by

\[ T_R SO(3) = \{ S \cdot R | S=-S^T \} = \mathfrac{so}(3) \cdot R, \]

where \(\mathfrac{so}(3)\) describes the set of all skew symmetric matices, i.e. spinTensor's.

+ edit page

The tangent space of the rotation group at some rotation \(R\) has 2 different representations. There is a left and a right representation.

The left tangent space is defined by

\[ T_R SO(3) = \{ S \cdot R | S=-S^T \} = \mathfrak{so}(3) \cdot R, \]

where \(\mathfrak{so}(3)\) describes the set of all skew symmetric matrices, i.e. spinTensor's.

{% highlight matlab %} R = rotation.byAxisAngle(xvector,20*degree) S1 = spinTensor(vector3d(0,0,1)) % left tangent vector -matrix(S1)*matrix(R) +matrix(S1) * matrix(R) {% endhighlight %} {% highlight plaintext %} @@ -39,7 +39,7 @@ 1.0000 0 0 0 0 0 {% endhighlight %} -

Analogously the right tangent space is defined by

\[ T_R SO(3) = \{ R \cdot S | S=-S^T \} = R \cdot \mathfrac{so}(3). \]

+

Analogously the right tangent space is defined by

\[ T_R SO(3) = \{ R \cdot S | S=-S^T \} = R \cdot \mathfrak{so}(3). \]

{% highlight matlab %} % right tangent vector S2 = spinTensor(vector3d(0,sin(20*degree),cos(20*degree))) @@ -59,7 +59,7 @@ 1.0000 0 0 0.0000 0 0 {% endhighlight %} -

Note that this spaces are the same.

In MTEX a tangent vectors is defined by its spinTensor and an attribute which describes whether it is right or left. Moreover the spinTensor is saved as vector3d, in the following way:

+

Note that the left and right tangent spaces describes the same in different notations.

In MTEX a tangent vectors is defined by its spinTensor and an attribute which describes whether it is right or left. Moreover the spinTensor is saved as vector3d, in the following way:

{% highlight matlab %} vL = SO3TangentVector(vector3d(1,2,3)) S = spinTensor(vL) @@ -67,7 +67,7 @@ {% highlight plaintext %} vL = SO3TangentVector - TagentSpace: left + TagentSpace: leftVector x y z 1 2 3 @@ -80,29 +80,29 @@ {% endhighlight %}

Note that the default tangent space representation is left. We can construct an right tangent vector by

{% highlight matlab %} -vR = SO3TangentVector(vector3d(1,2,3),'right') +vR = SO3TangentVector(vector3d(1,2,3),SO3TangentSpace.rightVector) {% endhighlight %} {% highlight plaintext %} vR = SO3TangentVector - TagentSpace: right + TagentSpace: rightVector x y z 1 2 3 {% endhighlight %} -

Here vL and vR have the same coordinates in different spaces (bases). Hence they describe different tangent vectors.

We can also transform left tangent vectors to right tangent vectors and otherwise. Therefore the rotation in which the tangent space is located is necessary.

+

Here vL and vR have the same coordinates in different spaces (bases). Hence they describe different tangent vectors.

We can also transform left tangent vectors to right tangent vectors and vice versa. Therefore the rotation in which the tangent space is located is necessary.

{% highlight matlab %} vR = right(vL,R) -vL = left(vL,R) +vL = left(vR,R) {% endhighlight %} {% highlight plaintext %} vR = SO3TangentVector - TagentSpace: right + TagentSpace: rightVector x y z 1 2.90545 2.13504 vL = SO3TangentVector - TagentSpace: left + TagentSpace: leftVector x y z 1 2 3 {% endhighlight %} @@ -132,35 +132,35 @@

Vector Fields

Vector fields on the rotation group are function F.grad(rot) % right gradient in rot -inv(rot).*F.grad(rot) +inv(rot) .* F.grad(rot) F.grad(rot,'right') {% endhighlight %} {% highlight plaintext %} ans = SO3TangentVector size: 3 x 1 - TagentSpace: left + TagentSpace: leftVector x y z - -0.165707 -0.146911 0.753701 - -3.10667 -0.548756 4.87704 - 7.05267 -10.4397 5.58295 + 1.00585 0.37514 0.636968 + -0.497833 0.450432 0.76233 + -1.42856 -1.04571 0.975959 ans = vector3d size: 3 x 1 - x y z - -0.755162 -0.0609238 -0.207665 - 1.31834 -5.17006 2.29576 - 10.6387 -8.30365 -2.78625 + x y z + -1.00361 -0.66682 0.326066 + -0.476121 -0.207738 0.872942 + 0.749084 1.08557 1.53206 ans = SO3TangentVector size: 3 x 1 - TagentSpace: right - x y z - -0.75519 -0.060939 -0.207677 - 1.31837 -5.17007 2.29575 - 10.6389 -8.30395 -2.78651 + TagentSpace: rightVector + x y z + -1.00361 -0.66682 0.326066 + -0.476121 -0.207738 0.872942 + 0.749084 1.08557 1.53206 {% endhighlight %} -

The gradient can also computed as function, i.e. as SO3VectorField, which internal is an 3 dimensional SO3Fun.

+

The gradient can also be computed as function, i.e. as SO3VectorField, which internal is an 3 dimensional SO3Fun.

{% highlight matlab %} GL = F.grad GR = F.grad('right') @@ -172,47 +172,62 @@

Vector Fields

Vector fields on the rotation group are function {% highlight plaintext %} GL = SO3VectorFieldHarmonic (Quartz → xyz) bandwidth: 48 + tangent space: leftVector -GR = SO3VectorFieldHandle (Quartz → xyz) - tangent space: right +GR = SO3VectorFieldHarmonic (1 → xyz) + bandwidth: 48 + tangent space: rightVector ans = SO3TangentVector size: 3 x 1 - TagentSpace: left + TagentSpace: leftVector x y z - -0.167735 -0.14833 0.756079 - -3.11199 -0.548966 4.88006 - 7.05963 -10.4417 5.579 + 1.00844 0.370942 0.637215 + -0.502043 0.453057 0.760681 + -1.42649 -1.04067 0.975877 ans = SO3TangentVector size: 3 x 1 - TagentSpace: right - x y z - -0.75519 -0.060939 -0.207677 - 1.31837 -5.17007 2.29575 - 10.6389 -8.30395 -2.78651 + TagentSpace: rightVector + x y z + -1.00725 -0.663954 0.324358 + -0.474384 -0.212146 0.875155 + 0.744835 1.08231 1.53102 {% endhighlight %}

Again we are able to change the tangent space

{% highlight matlab %} -left(GL) -right(GR) +left(GR) +right(GL) {% endhighlight %} {% highlight plaintext %} -ans = SO3VectorFieldHarmonic (Quartz → xyz) +ans = SO3VectorFieldHarmonic (1 → xyz) bandwidth: 48 + tangent space: leftVector -ans = SO3VectorFieldHandle (Quartz → xyz) - tangent space: right +ans = SO3VectorFieldHarmonic (1 → xyz) + bandwidth: 48 + tangent space: rightVector {% endhighlight %} -

Note that the symmetries do not work in the same way as for SO3Fun's. Dependent from the choosed tangent space representation (left/right) one of the symmetries has other properties.

In case of right tangent space the evaluation in symmetric orientations only make sense w.r.t. the left symmetry. In case of left tangent space otherwise.

+

Note that the symmetries do not work in the same way as for SO3Fun's. Dependent from the chosen tangent space representation (left/right) one of the symmetries has other properties.

In case of right tangent space the evaluation in symmetric orientations only make sense w.r.t. the left symmetry. In case of left tangent space vice versa.

{% highlight matlab %} ori = orientation.rand(GL.CS,GL.SS) GR.eval(ori.symmetrise) GL.eval(ori.symmetrise) + +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} @@ -220,29 +235,29 @@

Vector Fields

Vector fields on the rotation group are function Bunge Euler angles in degree phi1 Phi phi2 - 348.732 67.3017 199.518 + 215.332 119.003 270.806 ans = SO3TangentVector size: 6 x 1 - TagentSpace: right + TagentSpace: rightVector x y z - -0.237325 -2.49064 0.378127 - 2.03829 1.45084 -0.378127 - -2.03829 1.45084 0.378127 - 0.237325 -2.49064 -0.378127 - 2.27562 1.03978 0.378127 - -2.27562 1.03978 -0.378127 + -0.384057 -1.03362 -0.302917 + 0.703115 0.849415 0.302917 + -0.703115 0.849415 -0.302917 + 0.384057 -1.03362 0.302917 + 1.08717 0.184208 -0.302917 + -1.08717 0.184208 0.302917 ans = SO3TangentVector size: 6 x 1 - TagentSpace: left - x y z - -0.485747 0.695781 2.38237 - -0.485747 0.695781 2.38237 - -0.485747 0.695781 2.38237 - -0.485747 0.695781 2.38237 - -0.485747 0.695781 2.38237 - -0.485747 0.695781 2.38237 + TagentSpace: leftVector + x y z + 0.897173 0.530842 0.470023 + 0.897173 0.530842 0.470023 + 0.897173 0.530842 0.470023 + 0.897173 0.530842 0.470023 + 0.897173 0.530842 0.470023 + 0.897173 0.530842 0.470023 {% endhighlight %}

\ No newline at end of file diff --git a/pages/documentation_matlab/SO3FunVectorField.html b/pages/documentation_matlab/SO3FunVectorField.html index 252fe5ead..3250f8114 100644 --- a/pages/documentation_matlab/SO3FunVectorField.html +++ b/pages/documentation_matlab/SO3FunVectorField.html @@ -1,5 +1,5 @@ --- -title: SO3VectorField +title: Vector Fields in Orientation Space sidebar: documentation_sidebar permalink: SO3FunVectorField.html @@ -11,188 +11,296 @@ SO3VectorField - edit page

SO3VectorField handles three-dimensional functions on the rotation group. For instance the gradient of an univariate SO3FunHarmonic can return a SO3VectorFieldHarmonic.

Defining a SO3VectorFieldHandle

Analogous to SO3FunHandle we are able to define SO3VectorFields by an anonymous function.

+ -->Vector Fields in Orientation Space + edit page

Vector fields in orientation space model orientation dependent spin as it occurs for instance in the Taylor or Sachs model. Another typical example are gradients of orientation distribution functions.

Orientation Dependent Spin Tensors as Vector Fields

According to Taylor theory the strain acting on a crystal with orientation ori is compensated by the action of different slip systems. The antisymmetric portion of deformation tensors of these active slip systems gives a spin tensors that describes the local misorientation the crystal undergoes under deformation. In MTEX the spin tensor W as a function of the orientation ori is computed as a variable of type SO3VectorField by the command calcTaylor.

{% highlight matlab %} -f = @(rot) vector3d(rot.phi1, rot.phi2, 0*rot.phi1); +% consider bcc symmetry and slip systems +cs = crystalSymmetry('432'); +sS = slipSystem.bcc(cs) -SO3VF = SO3VectorFieldHandle(f) +% consider plane stain +q = 0; +epsilon = strainTensor(diag([1 -q -(1-q)])) + +% compute the orientation depended spin tensor +[~,~,W] = calcTaylor(epsilon,sS.symmetrise) {% endhighlight %} {% highlight plaintext %} -SO3VF = SO3VectorFieldHandle (xyz → xyz) +sS = slipSystem (432) + size: 1 x 3 + + u v w | h k l CRSS + 1 -1 1 0 1 1 1 + -1 1 1 2 1 1 1 + -1 1 1 3 2 1 1 + +epsilon = strainTensor (xyz) + type: Lagrange + rank: 2 (3 x 3) + + 1 0 0 + 0 0 0 + 0 0 -1 + +W = SO3VectorFieldHarmonic (432 → xyz) + bandwidth: 32 + tangent space: rightSpinTensor {% endhighlight %} -

Note that the evaluations are of class vector3d

+

Lets visualize the spin tensor in Euler angle sections

{% highlight matlab %} -rot = rotation.rand(2); -SO3VF.eval(rot) +sP = phi1Sections(cs,specimenSymmetry('222')); +sP.phi1 = (10:20:70)*degree; + +% plot the Taylor factor +plot(W,sP,'resolution',7.5*degree,'layout',[2 2]) +{% endhighlight %} +
+{% include inline_image.html file="SO3FunVectorField_01.png" %} +

We observe how according to the orientation the Taylor model predicts a misorientation of the corresponding crystal. For a specific (set of) orientation ori we can retrieve the spin tensor by evaluating the vector field W at this position

+{% highlight matlab %} +% the spin tensor for the copper orientation +WCopper = W.eval(orientation.copper(cs)) {% endhighlight %} {% highlight plaintext %} -ans = SO3TangentVector - size: 2 x 1 - TagentSpace: left - x y z - 3.45169 2.85055 0 - 5.15112 5.66982 0 +WCopper = spinTensor (432) + rank: 2 (3 x 3) + + *10^-2 + 0 0 32.15 + 0 0 32.15 + -32.15 -32.15 0 {% endhighlight %} -

Defining a SO3VectorFieldHarmonic

Definition via SO3VectorField

We can expand any SO3VectorField in an SO3VectorFieldHarmonic directly by the command SO3VectorFieldHarmonic

+

The Norm of a Vector Field

The norm of the spin tensor directly relates to the amount of misorientation. We may compute the amount of misorientations as a function of orientation by the command norm and determine the orientation of maximum misorientation by

{% highlight matlab %} -SO3VectorFieldHarmonic(SO3VF,'bandwidth',16) +% determine the orientation of maximum misorientation +[~,oriMax] = max(norm(W)) + +% visualize the amount of misorientation +plot(norm(W),sP,'resolution',0.5*degree,'layout',[2 2]) +mtexColorMap LaboTeX + +% plot the vector field on top +hold on +plot(W,sP,'resolution',7.5*degree,'color','black') +hold off + +annotate(oriMax) {% endhighlight %} {% highlight plaintext %} -ans = SO3VectorFieldHarmonic (xyz → xyz) - bandwidth: 16 +oriMax = misorientation (432 → 1) + + Bunge Euler angles in degree + phi1 Phi phi2 + 271.318 45.3713 116.559 {% endhighlight %} -

Definition via function values

At first we need some example rotations

+
+{% include inline_image.html file="SO3FunVectorField_02.png" %} +

As the vector field W corresponds to the rotational axis of the local misorientation we may check how much this axis corresponds with a predefined axis, e.g. [100], by computing the inner product dot(W,d) between the vector field W and the predefined axis d.

{% highlight matlab %} -nodes = equispacedSO3Grid(specimenSymmetry('1'),'points',1e3); -nodes = nodes(:); +plot(dot(W,Miller(1,0,0,cs)),sP,'layout',[2 2]) +mtexColorMap blue2red +mtexColorbar {% endhighlight %} -

Next, we define function values for the rotations

+
+{% include inline_image.html file="SO3FunVectorField_03.png" %} +

The Flux of a Vector Field

If we interpret the vector field W as a velocity field for the different crystal orientations. Then its divergence is a scalar field that indicates where orientations condense. In this interpretation a sink corresponds to negative flux / divergence and a source to positive flux / divergence.

{% highlight matlab %} -y = vector3d.byPolar(sin(3*nodes.angle), nodes.phi2+pi/2); +flux = W.div + +plot(flux,sP,'resolution',0.5*degree,'layout',[2 2],'faceAlpha',0.5) +mtexColorMap blue2red +mtexColorbar + +hold on +plot(W,sP,'resolution',7.5*degree,'color','black') +hold off {% endhighlight %} -

Now the actual command to get SO3VF1 of type SO3VectorFieldHarmonic

+ +{% highlight plaintext %} +flux = SO3FunHarmonic (432 → xyz) + bandwidth: 32 + weight: 0 +{% endhighlight %} +
+{% include inline_image.html file="SO3FunVectorField_04.png" %} +

The Curl of a Vector Field

The counterpart of the flux is the curl of a vector field which describes the axis of local rotation within the crystal orientations

{% highlight matlab %} -SO3VF1 = SO3VectorFieldHarmonic.approximation(nodes, y,'bandwidth',16) +c = W.curl + +plot(c,sP,'resolution',7.5*degree,'layout',[2 2],'color','black') {% endhighlight %} {% highlight plaintext %} -Warning: The given vector3d values v are assumed to describe elements w.r.t. -the left side tangent space. If you want them to be right sided use -SO3TangentVector(v,'right') instead. -Warning: calcVoronoiVolume is inexact up to now. - -SO3VF1 = SO3VectorFieldHarmonic (xyz → xyz) - bandwidth: 16 +c = SO3VectorFieldHarmonic (432 → xyz) + bandwidth: 32 + tangent space: leftVector {% endhighlight %} -

Definition via function handle

If we have a function handle for the function we could create a S2VectorFieldHarmonic via quadrature. At first lets define a function handle which takes rotation as an argument and returns a vector3d:

Now we can call the quadrature command to get SO3VF2 of type SO3VectorFieldHarmonic

+
+{% include inline_image.html file="SO3FunVectorField_05.png" %} +

The Gradient of Orientation distribution Functions

A second natural usage of vector fields is as gradients of orientation dependent functions, e.g. ODF. Lets consider the following ODF of a quartz specimen

{% highlight matlab %} -SO3VF2 = SO3VectorFieldHarmonic.quadrature(@(v) f(v),'bandwidth',16) +odf = SO3Fun.dubna {% endhighlight %} {% highlight plaintext %} -Warning: The given function_handle is assumed to describe elements w.r.t. the -left side tangent space. If you want them to be right sided use -SO3VectorFieldHandle(fun,SRight,SLeft,'right') instead. +odf = SO3FunRBF (Quartz → xyz) -SO3VF2 = SO3VectorFieldHarmonic (xyz → xyz) - bandwidth: 16 + multimodal components + kernel: de la Vallee Poussin, halfwidth 5° + center: 19848 orientations, resolution: 5° + weight: 1 {% endhighlight %} -

Definition via SO3FunHarmonic

If we directly call the constructor with a multivariate SO3FunHarmonic with three entries it will create a SO3VectorFieldHarmonic with SO3F(1), SO3F(2), and SO3F(3) the \(x\), \(y\), and \(z\) component.

+

Then its gradient is computed by the command odf.grad

{% highlight matlab %} -SO3F = SO3FunHarmonic(rand(1e3, 3)) -SO3VF3 = SO3VectorFieldHarmonic(SO3F) +g = odf.grad {% endhighlight %} {% highlight plaintext %} -SO3F = SO3FunHarmonic (xyz → xyz) - isReal: false - size: 3 x 1 - bandwidth: 9 - weight: 0.89 - - -SO3VF3 = SO3VectorFieldHarmonic (xyz → xyz) - isReal: false - bandwidth: 9 +g = SO3VectorFieldHarmonic (Quartz → xyz) + bandwidth: 48 + tangent space: leftVector {% endhighlight %} -

Operations

Basic arithmetic operations

Again the basic mathematical operations are supported:

addition/subtraction of a vector field and a vector or addition/subtraction of two vector fields

+

Lets visualize the ODF together with its gradient in a sigma section plot

{% highlight matlab %} -SO3VF1 + SO3VF2 -SO3VF1 + vector3d.X -SO3VF1 - SO3VF2 -SO3VF2 - vector3d(sqrt(2)/2, sqrt(2)/2, 0); +plot(odf,'sigma') +hold on +plot(g,'linewidth',1.5,'color','black','resolution',7.5*degree) +hold off +{% endhighlight %} +
+{% include inline_image.html file="SO3FunVectorField_06.png" %} +

We observe how the gradients all points towards the closest local maximum. This is actually the foundation of the steepest descent algorithm used by MTEX in the commands max(odf) and calcComponents(odf)

As the gradient of a function is a vector field we may compute its curl and divergence. From mathematics we know that the curl must be zero

+{% highlight matlab %} +plot(g.curl,'sigma') +{% endhighlight %} +
+{% include inline_image.html file="SO3FunVectorField_07.png" %} +

and the divergence coincides with the Laplacian of the

+{% highlight matlab %} +plot(g.div,'sigma',60*degree) +nextAxis +plot(laplace(SO3FunHarmonic(odf)),'sigma',60*degree) +mtexColorbar +{% endhighlight %} +
+{% include inline_image.html file="SO3FunVectorField_08.png" %} +

The fact that the curl of a vector field is zero is actually equivalent to the fact that the vector field is the gradient of some potential field, which can be computed by the command antiderivative(g) and coincides exactly with the original ODF odf.

+{% highlight matlab %} +odf2 = g.antiderivative + +plot(odf2,'sigma') +{% endhighlight %} + +{% highlight plaintext %} +odf2 = SO3FunHarmonic (Quartz → xyz) + bandwidth: 48 + weight: 0 +{% endhighlight %} +
+{% include inline_image.html file="SO3FunVectorField_09.png" %} +

Overview of Operations for Orientational Vector Fields

The following operations are defined for vector fields VF, VF1, VF2

Definition of Orientational Vector Fields

Explicitly by an Anonymous Function

Analogous to SO3FunHandle we are able to define SO3VectorFields by an anonymous function.

+{% highlight matlab %} +% cubic symmetry +cs = crystalSymmetry('432') + +% product of rotational axis and rotational angle +f = @(mori) axis(mori) .* angle(mori); + +% define the vector field +VF = SO3VectorFieldHandle(f,cs,cs) + +% evaluating the vector field gives what we expect +round(VF.eval(orientation.byAxisAngle(vector3d(1,2,3),10*degree))) {% endhighlight %} {% highlight plaintext %} -ans = SO3VectorFieldHarmonic (xyz → xyz) - bandwidth: 16 +cs = crystalSymmetry + + symmetry: 432 + elements: 24 + a, b, c : 1, 1, 1 -ans = SO3VectorFieldHarmonic (xyz → xyz) - bandwidth: 16 +VF = SO3VectorFieldHandle (432 → 432) + tangent space: leftVector -ans = SO3VectorFieldHarmonic (xyz → xyz) - bandwidth: 16 +ans = SO3TangentVector + TagentSpace: leftVector + x y z + 1 2 3 {% endhighlight %} -

multiplication/division by a scalar or a SO3Fun

+

But plotting does not -- TODO!!!

{% highlight matlab %} -2.*SO3VF1; SO3VF1./4; -SO3F = SO3FunHarmonic.example; -SO3F.SRight = specimenSymmetry; -SO3F = SO3F.symmetrise; -SO3F .* SO3VF1; +% plot it +quiver3(VF,'axisAngle','resolution',7.5*degree,'color','black','linewidth',2) {% endhighlight %} -

dot product with a vector or another vector field

+
+{% include inline_image.html file="SO3FunVectorField_10.png" %} +

Definition via SO3VectorField

We can expand any SO3VectorField in an SO3VectorFieldHarmonic directly by the command SO3VectorFieldHarmonic

{% highlight matlab %} -dot(SO3VF1, SO3VF2) -dot(SO3VF1, vector3d(0, 0, 1)); +SO3VectorFieldHarmonic(VF) {% endhighlight %} {% highlight plaintext %} -ans = SO3FunHarmonic (xyz → xyz) - bandwidth: 32 - weight: 0.026 +ans = SO3VectorFieldHarmonic (432 → 432) + bandwidth: 64 + tangent space: leftVector {% endhighlight %} -

cross product with a vector or another vector field

+

Definition via function values

At first we need some example rotations

{% highlight matlab %} -cross(SO3VF1, SO3VF2); -cross(SO3VF1, vector3d(0, 0, 1)); +nodes = equispacedSO3Grid(specimenSymmetry('1'),'points',1e3); +nodes = nodes(:); {% endhighlight %} -

mean vector of the vector field

+

Next, we define function values for the rotations

{% highlight matlab %} -mean(SO3VF1); +y = vector3d.byPolar(sin(3*nodes.angle), nodes.phi2+pi/2); {% endhighlight %} -

rotation of the vector field

+

Now the actual command to get SO3VF1 of type SO3VectorFieldHarmonic

{% highlight matlab %} -r = rotation.byEuler( [pi/4 0 0]); -rotate(SO3VF1, r); +SO3VF1 = SO3VectorFieldHarmonic.approximation(nodes, y) {% endhighlight %} -

pointwise norm of the vectors

-{% highlight matlab %} -norm(SO3VF1); + +{% highlight plaintext %} +Warning: The given vector3d values v are assumed to +describe elements w.r.t. the left side tangent space. If +you want them to be right sided use +SO3TangentVector(v,SO3TangentSpace.rightVector) instead. + +SO3VF1 = SO3VectorFieldHarmonic (xyz → xyz) + bandwidth: 8 + tangent space: leftVector {% endhighlight %} -

Visualization

One can use the default plot-command

+

Definition via function handle

If we have a function handle for the function we could create a S2VectorFieldHarmonic via quadrature. At first lets define a function handle which takes rotation as an argument and returns a vector3d:

Now we can call the quadrature command to get SO3VF2 of type SO3VectorFieldHarmonic

{% highlight matlab %} -plot(SO3VF1); +SO3VF2 = SO3VectorFieldHarmonic.quadrature(@(v) f(v)) {% endhighlight %} {% highlight plaintext %} -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! +SO3VF2 = SO3VectorFieldHarmonic (xyz → xyz) + bandwidth: 64 + tangent space: leftVector {% endhighlight %} -
-{% include inline_image.html file="SO3FunVectorField_01.png" %} -
  • same as quiver(sVF1)

or the 3D plot of the rotation group with the vectors on itself

+

Definition via SO3FunHarmonic

If we directly call the constructor with a multivariate SO3FunHarmonic with three entries it will create a SO3VectorFieldHarmonic with SO3F(1), SO3F(2), and SO3F(3) the \(x\), \(y\), and \(z\) component.

{% highlight matlab %} -clf; -quiver3(SO3VF2); +SO3F = SO3FunHarmonic(rand(1e3, 3)) +SO3VF3 = SO3VectorFieldHarmonic(SO3F) {% endhighlight %} {% highlight plaintext %} -Warning: Setting the "WindowButtonDownFcn" property is not permitted while this -mode is active. -Warning: Setting the "WindowButtonUpFcn" property is not permitted while this -mode is active. -Warning: Setting the "KeyPressFcn" property is not permitted while this mode is -active. -Warning: Setting the "WindowScrollWheelFcn" property is not permitted while -this mode is active. +SO3F = SO3FunHarmonic (xyz → xyz) + isReal: false + size: 3 x 1 + bandwidth: 9 + weight: 0.88 + + +SO3VF3 = SO3VectorFieldHarmonic (xyz → xyz) + isReal: false + bandwidth: 9 + tangent space: leftVector {% endhighlight %} -
-{% include inline_image.html file="SO3FunVectorField_02.png" %} -
\ No newline at end of file +
\ No newline at end of file diff --git a/pages/documentation_matlab/SO3Kernels.html b/pages/documentation_matlab/SO3Kernels.html index 76fba83d0..b8977a88f 100644 --- a/pages/documentation_matlab/SO3Kernels.html +++ b/pages/documentation_matlab/SO3Kernels.html @@ -48,8 +48,8 @@ center: 1 orientations Bunge Euler angles in degree - phi1 Phi phi2 weight - 141.882 140.95 64.6812 1 + phi1 Phi phi2 weight + 89.685 73.6229 145.348 1 {% endhighlight %}
{% include inline_image.html file="SO3Kernels_02.png" %} diff --git a/pages/documentation_matlab/SchmidtFactor.html b/pages/documentation_matlab/SchmidtFactor.html index 1c295c6ac..05cef0ab3 100644 --- a/pages/documentation_matlab/SchmidtFactor.html +++ b/pages/documentation_matlab/SchmidtFactor.html @@ -52,6 +52,8 @@ {% highlight plaintext %} r = vector3d + x y z + 0.267261 0.534522 0.801784 {% endhighlight %}

the Schmid factor for the slip system [0-11](111) is defined by

{% highlight matlab %} @@ -82,7 +84,7 @@ ans = 0.1750 {% endhighlight %} -

Ommiting the tension direction r the command SchmidFactor returns the Schmid factor as a spherical function

+

Omitting the tension direction r the command SchmidFactor returns the Schmid factor as a spherical function

{% highlight matlab %} SF = sS.SchmidFactor @@ -98,7 +100,7 @@ {% highlight plaintext %} SF = S2FunHarmonic - bandwidth: 64 + bandwidth: 4 antipodal: true isReal: true @@ -107,6 +109,8 @@ pos = vector3d antipodal: true + x y z + 0.408361 -0.0917056 0.908202 {% endhighlight %}
{% include inline_image.html file="SchmidtFactor_01.png" %} @@ -155,7 +159,7 @@

Active Slip System

In general a crystal contains not only one -1 -1 0 1 -1 1 1 0 -1 -1 1 -1 1 1 {% endhighlight %} -

The option antipodal indicates that Burgers vectors in oposite direction should not be distinguished. Now

+

The option antipodal indicates that Burgers vectors in opposite direction should not be distinguished. Now

{% highlight matlab %} tau = sSAll.SchmidFactor(r) {% endhighlight %} @@ -244,28 +248,28 @@

Active Slip System

In general a crystal contains not only one u v w | h k l CRSS 0 -1 1 1 1 1 1 - 0 1 -1 1 1 1 1 1 0 -1 1 1 1 1 - -1 0 1 1 1 1 1 -1 1 0 1 1 1 1 + 0 1 -1 1 1 1 1 + -1 0 1 1 1 1 1 1 -1 0 1 1 1 1 -1 1 0 1 1 -1 1 - 1 -1 0 1 1 -1 1 -1 0 -1 1 1 -1 1 - 1 0 1 1 1 -1 1 0 -1 -1 1 1 -1 1 + 1 -1 0 1 1 -1 1 + 1 0 1 1 1 -1 1 0 1 1 1 1 -1 1 0 -1 1 -1 1 1 1 - 0 1 -1 -1 1 1 1 -1 0 -1 -1 1 1 1 - 1 0 1 -1 1 1 1 -1 -1 0 -1 1 1 1 + 0 1 -1 -1 1 1 1 + 1 0 1 -1 1 1 1 1 1 0 -1 1 1 1 1 0 -1 1 -1 1 1 - -1 0 1 1 -1 1 1 -1 -1 0 1 -1 1 1 - 1 1 0 1 -1 1 1 0 -1 -1 1 -1 1 1 + -1 0 1 1 -1 1 1 + 1 1 0 1 -1 1 1 0 1 1 1 -1 1 1 {% endhighlight %}

@@ -283,7 +287,7 @@

Active Slip System

In general a crystal contains not only one {% highlight plaintext %} tau = S2FunHarmonic size: 24 x 1 - bandwidth: 64 + bandwidth: 4 antipodal: true isReal: true {% endhighlight %} @@ -461,6 +465,26 @@

Active Slip System

In general a crystal contains not only one quiver ( grains , sSGrains.b) quiver ( grains , sSGrains.trace) hold off + +% +% +% +%

+% ok<*ASGLU> +% +% +%
+% +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="SchmidtFactor_11.png" %} diff --git a/pages/documentation_matlab/SelectingGrains.html b/pages/documentation_matlab/SelectingGrains.html index 59b4bafa6..3bd445c1e 100644 --- a/pages/documentation_matlab/SelectingGrains.html +++ b/pages/documentation_matlab/SelectingGrains.html @@ -39,7 +39,7 @@ {% endhighlight %}
{% include inline_image.html file="SelectingGrains_01.png" %} -

Selecting grains by mouse

The most easiest way to select a grain is by using the mouse and the command selectInteractive which allows you to select an arbitrary amount of grains. The index of the selected grains appear as the global variable indSelected in your workspace

+

Selecting grains by mouse

The most easiest way to select a grain is by using the mouse and the command selectInteractive which allows you to select an arbitrary amount of grains. The index of the selected grains appear as the global variable indSelected in your workspace

{% highlight matlab %} selectInteractive(grains,'lineColor','gold') @@ -69,7 +69,7 @@ triple points: 10 Id Phase Pixels phi1 Phi phi2 GOS - 94 1 323 131 64 250 0.00796443 + 94 1 323 131 64 250 0.00795279 {% endhighlight %}
{% include inline_image.html file="SelectingGrains_02.png" %} @@ -102,19 +102,19 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 4 524 Forsterite mmm - boundary segments: 204 (8292 µm) + boundary segments: 204 (8293 µm) inner boundary segments: 0 (0 µm) triple points: 23 Id Phase Pixels phi1 Phi phi2 GOS 26 1 1 130 68 258 0 - 62 1 181 131 64 245 0.00699418 - 94 1 323 131 64 250 0.00796443 + 62 1 181 131 64 245 0.0069762 + 94 1 323 131 64 250 0.00795279 123 1 19 144 74 250 0.0103623 {% endhighlight %}
{% include inline_image.html file="SelectingGrains_04.png" %} -

Indexing by a Property

In order the generalize the above concept lets remember that the variable grains is essentially a large vector of grains. Thus when applying a function like area to this variable we obtain a vector of the same lenght with numbers representing the area of each grain

+

Indexing by a Property

In order the generalize the above concept lets remember that the variable grains is essentially a large vector of grains. Thus when applying a function like area to this variable we obtain a vector of the same length with numbers representing the area of each grain

{% highlight matlab %} grain_area = grains.area; {% endhighlight %} @@ -124,14 +124,14 @@ {% endhighlight %}
{% include inline_image.html file="SelectingGrains_05.png" %} -

As a second application, we can ask for the largest grain within our data set. The maximum value and its position within a vector are found by the Matlab command max.

+

As a second application, we can ask for the largest grain within our data set. The maximum value and its position within a vector are found by the MATLAB command max.

{% highlight matlab %} [max_area,max_id] = max(grain_area) {% endhighlight %} {% highlight plaintext %} max_area = - 4.1013e+06 + 4.1008e+06 max_id = 208 {% endhighlight %} @@ -214,7 +214,7 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 1 118 14093 Forsterite mmm - boundary segments: 3541 (147821 µm) + boundary segments: 3541 (147820 µm) inner boundary segments: 14 (312 µm) triple points: 257 @@ -240,14 +240,14 @@ triple points: 79 Id Phase Pixels phi1 Phi phi2 GOS - 99 1 1448 166 127 259 0.0134158 - 119 1 1047 89 99 224 0.00765479 - 122 1 1208 153 68 237 0.00807919 + 99 1 1448 166 127 259 0.0135419 + 119 1 1047 89 99 224 0.00769356 + 122 1 1208 153 68 237 0.00808163 208 1 1545 167 81 251 0.012969 {% endhighlight %}
{% include inline_image.html file="SelectingGrains_10.png" %} -

The grainId and how to select EBSD inside specific grains

Besides, the list of grains the command calcGrains returns also two other output arguments.

+

The grainId and how to select EBSD inside specific grains

Besides, the list of grains the command calcGrains returns also two other output arguments.

{% highlight matlab %} plot(grains) largeGrains = grains(grains.grainSize > 50); @@ -295,7 +295,7 @@ {% endhighlight %}
{% include inline_image.html file="SelectingGrains_12.png" %} -

Boundary grains

Sometimes it is desirable to remove all boundary grains as they might distort grain statistics. To do so one should remember that each grain boundary has a property grainId which stores the ids of the neigbouring grains. In the case of an outer grain boundary, one of the neighbouring grains has the id zero. We can filter out all these boundary segments by

+

Boundary grains

Sometimes it is desirable to remove all boundary grains as they might distort grain statistics. To do so one should remember that each grain boundary has a property grainId which stores the ids of the neighboring grains. In the case of an outer grain boundary, one of the neighboring grains has the id zero. We can filter out all these boundary segments by

{% highlight matlab %} % ids of the outer boundary segment outerBoundary_id = any(grains.boundary.grainId==0,2); @@ -325,9 +325,20 @@ {% highlight matlab %} grains(grain_id) = [] {% endhighlight %} -

However, boundary grains can be selected more easily be the command isBoundary.

+

However, boundary grains can be selected more easily be the command isBoundary.

{% highlight matlab %} plot(grains(~grains.isBoundary)) + +% +% +% +%
+% ok<*GVMIS> +% +% +%
+% +% {% endhighlight %}
{% include inline_image.html file="SelectingGrains_15.png" %} diff --git a/pages/documentation_matlab/ShapeParameters.html b/pages/documentation_matlab/ShapeParameters.html index 313421d97..657e5fd19 100644 --- a/pages/documentation_matlab/ShapeParameters.html +++ b/pages/documentation_matlab/ShapeParameters.html @@ -286,9 +286,9 @@ ans = 1 ans = - 1.9540e+03 + 1.9613e+03 {% endhighlight %} -

Hereby grainSize referes to the number of pixels that belong to a certain grain while area represents the actual area measured in (µm)^2. We may analyze the distribution of grains by grain area using a histogram.

+

Hereby grainSize refers to the number of pixels that belong to a certain grain while area represents the actual area measured in (µm)^2. We may analyze the distribution of grains by grain area using a histogram.

{% highlight matlab %} close all histogram(grains.area) @@ -299,7 +299,16 @@ {% include inline_image.html file="ShapeParameters_02.png" %}

Note the large amount of very small grains. A more realistic histogram we obtain if we do not plot the number of grains at the y-axis but its total area. This can be achieved with the command histogram(grains) or hist(grains)

{% highlight matlab %} -hist(grains) +hist(grains) %#ok +{% endhighlight %} + +{% highlight plaintext %} +ans = + 0.5294 0.8078 0.9804 +ans = + 0.5608 0.7373 0.5608 +ans = + 0.8549 0.6471 0.1255 {% endhighlight %}
{% include inline_image.html file="ShapeParameters_03.png" %} @@ -309,7 +318,7 @@ {% endhighlight %}
{% include inline_image.html file="ShapeParameters_04.png" %} -

Simarly as grainSize and area, the one-dimensional meassures boundarySize and perimeter give the length of the grain boundary as number of segments and in µm, respectively.

+

Similarly as grainSize and area, the one-dimensional measures boundarySize and perimeter give the length of the grain boundary as number of segments and in µm, respectively.

{% highlight matlab %} grains(9).boundarySize grains(9).perimeter @@ -319,9 +328,9 @@ ans = 4 ans = - 233.1561 + 233.2508 {% endhighlight %} -

We may compute these quantities also explicitely from the grain boundary segents. In the following code the first command returns simply the number of boundary segments while the second one gives the total length of the boundary by summing up the length of each individual boundary segment

+

We may compute these quantities also explicitly from the grain boundary segments. In the following code the first command returns simply the number of boundary segments while the second one gives the total length of the boundary by summing up the length of each individual boundary segment

{% highlight matlab %} length(grains(9).boundary) sum(grains(9).boundary.segLength) @@ -331,7 +340,7 @@ ans = 4 ans = - 233.1561 + 233.2508 {% endhighlight %}

Radius, diameter, equivalent radius, equivalent perimeter and shape factor

Another, one dimensional measure is the diameter which refers to the longest distance between any two boundary points and is given im µm as well

{% highlight matlab %} @@ -340,7 +349,7 @@

Radius, diameter, equivalent radius, equivalent perimeter and shape f {% highlight plaintext %} ans = - 106.0660 + 106.0000 {% endhighlight %}

The diameter is a special case of the caliper or Feret diameter of a grain that is explained in detail in the section Projection based parameters.

In contrast the equivalent radius is the radius of a circle with the same area as the grain. Naturally, the equivalent radius is always smaller than the actual radius of the grains. Similarly, the equivalent perimeter is defined as the perimeter of the circle the same area and is always smaller then the actual perimeter.

{% highlight matlab %} @@ -351,11 +360,11 @@

Radius, diameter, equivalent radius, equivalent perimeter and shape f {% highlight plaintext %} ans = - 49.8787 + 49.9725 ans = - 156.6986 + 156.9931 {% endhighlight %} -

As a consequence, the ratio between between actual grain perimeter and the equivalent perimeter, the so called shape factor, is always larger then 1. The shapeFactor amd measures how different a certain shape is from a circle.

+

As a consequence, the ratio between between actual grain perimeter and the equivalent perimeter, the so called shape factor, is always larger then 1. The shapeFactor and measures how different a certain shape is from a circle.

{% highlight matlab %} plot(grains,grains.shapeFactor) mtexColorbar('title','shape factor') @@ -413,6 +422,6 @@

Radius, diameter, equivalent radius, equivalent perimeter and shape f {% highlight plaintext %} fractalDimension = - 1.0338 + 1.0339 {% endhighlight %}

It is important to understand that the fractal dimension computed this way heavily depends on the smoothing applied to the grain boundaries.

\ No newline at end of file diff --git a/pages/documentation_matlab/SigmaSections.html b/pages/documentation_matlab/SigmaSections.html index a180e9225..dbd82050d 100644 --- a/pages/documentation_matlab/SigmaSections.html +++ b/pages/documentation_matlab/SigmaSections.html @@ -151,7 +151,7 @@ % since h1 is not a symmetry axis of the crystal we need to consider % all rotations up to 360 degree -oS.omega = [0:20:340]*degree; +oS.omega = (0:20:340)*degree; plot(odf,oS) {% endhighlight %} diff --git a/pages/documentation_matlab/SingleSlipModel.html b/pages/documentation_matlab/SingleSlipModel.html index c742e7db0..6712964fb 100644 --- a/pages/documentation_matlab/SingleSlipModel.html +++ b/pages/documentation_matlab/SingleSlipModel.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Sigle Slip Model - edit page

Details to this model can be found in

The Continuity Equation

The evolution of the orientation distribution function (ODF) \(f(g)\) with respect to a crystallopgraphic spin \(\Omega(g)\) is governed by the continuity equation

\[\frac{\partial}{\partial t} f + \nabla f \cdot \Omega + f \text{ div } \Omega = 0\]

The solution of this equation depends on the initial texture \(f_0(g)\) at time zero and the crystallographic spin \(\Omega(g)\). In this model we assume the initial texture to be isotrope, i.e., \(f_0 = 1\) and the crystallopgraphic spin be associated with a single slip system. The full ODF will be later modelled as a superposition of the single slip models.

In this example we consider Olivine with has orthorhombic symmetry

+ edit page

Details to this model can be found in

The Continuity Equation

The evolution of the orientation distribution function (ODF) \(f(g)\) with respect to a crystallographic spin \(\Omega(g)\) is governed by the continuity equation

\[\frac{\partial}{\partial t} f + \nabla f \cdot \Omega + f \text{ div } \Omega = 0\]

The solution of this equation depends on the initial texture \(f_0(g)\) at time zero and the crystallographic spin \(\Omega(g)\). In this model we assume the initial texture to be isotropic, i.e., \(f_0 = 1\) and the crystallographic spin be associated with a single slip system. The full ODF will be later modeled as a superposition of the single slip models.

In this example we consider Olivine with has orthorhombic symmetry

{% highlight matlab %} csOli = crystalSymmetry('222',[4.779 10.277 5.995],'mineral','olivine'); csOrtho = crystalSymmetry('222',[18.384, 8.878, 5.226],'mineral','orthopyroxene'); @@ -52,16 +52,17 @@ {% endhighlight %}

and make for the orientation dependent strain rate tensor \(e(g)\) the ansatz \(e_{ij}(g) = \gamma(g) S_{ij}(g)\). Fitting this ansatz to a given a macroscopic strain tensor

{% highlight matlab %} -E = strainRateTensor([1 0 0; 0 0 0; 0 0 -1]) +E = 0.3 * strainRateTensor([1 0 0; 0 0 0; 0 0 -1]) {% endhighlight %} {% highlight plaintext %} E = strainRateTensor (xyz) rank: 2 (3 x 3) - 1 0 0 - 0 0 0 - 0 0 -1 + *10^-2 + 30 0 0 + 0 0 0 + 0 0 -30 {% endhighlight %}

via minimizing the square difference

\[\int_{SO(3)} \sum_{i,j} (e_{i,j}(g) - E_{i,j})^2 dg \to \text{min}\]

the orientation dependent strain rate tensor is identified as

\[e(g) = 2 \left< S(g), E \right> S(g)\]

and the corresponding crystallographic spin tensor as

\[\Omega_i(g) = \epsilon_{ijk} e_{jk}(g)\]

This can be modeled in MTEX via

{% highlight matlab %} @@ -72,16 +73,18 @@ % this is in specimen coordinates Omega = @(ori) -SO3TangentVector(spinTensor(((ori * S(2)) : E) .* (ori * S(2)))); +% turn in into a harmonic function Omega = SO3VectorFieldHarmonic.quadrature(Omega,csOli) {% endhighlight %} {% highlight plaintext %} Omega = SO3VectorFieldHarmonic (olivine → xyz) bandwidth: 3 + tangent space: leftVector {% endhighlight %} {% highlight matlab %} -% We may visualize the orientation depedence of the spin tensor by plotting +% We may visualize the orientation dependence of the spin tensor by plotting % its divergence in sigma sections and on top of it the spin tensors as a % quiver plot @@ -95,7 +98,7 @@ {% endhighlight %}
{% include inline_image.html file="SingleSlipModel_01.png" %} -

The divergence plots can be read as follows. Negative (blue) regions indicate orientations that increase in volume, whereas positive regions indicate orientations that decrease in volume. Accordingly, we expect the texture to become more and more concentrated within the blue regions. In the example example illustrated above with only the second slip system beeing active, we would expect the c-axis to align more and more with the the z-direction.

Solutions of the Continuity Equation

The solutions of the continuity equation can be analytically computed and are available via the command SO3FunSBF. This command takes as input the specific slips system sS and the makroscopic strain tensor E

+

The divergence plots can be read as follows. Negative (blue) regions indicate orientations that increase in volume, whereas positive regions indicate orientations that decrease in volume. Accordingly, we expect the texture to become more and more concentrated within the blue regions. In the example example illustrated above with only the second slip system being active, we would expect the c-axis to align more and more with the the z-direction.

Solutions of the Continuity Equation

The solutions of the continuity equation can be analytically computed and are available via the command SO3FunSBF. This command takes as input the specific slips system sS and the macroscopic strain tensor E

{% highlight matlab %} odf1 = SO3FunSBF(sSOli(1),E) odf2 = SO3FunSBF(sSOli(2),E) @@ -107,26 +110,28 @@ odf1 = SO3FunSBF (olivine → xyz) slip system: (010)[100] - strain: 1 0 -1 + strain: 0.3 0 -0.3 odf2 = SO3FunSBF (olivine → xyz) slip system: (001)[100] - strain: 1 0 -1 + strain: 0.3 0 -0.3 odf3 = SO3FunSBF (olivine → xyz) slip system: (010)[001] - strain: 1 0 -1 + strain: 0.3 0 -0.3 odf4 = SO3FunSBF (orthopyroxene → xyz) slip system: (100)[001] - strain: 1 0 -1 + strain: 0.3 0 -0.3 {% endhighlight %}

Lets check our expectation from the last paragraph by visualizing the odf corresponding to the second slip system in sigma sections

{% highlight matlab %} +figure(1) plotSection(odf2,'sigma') +mtexColorbar {% endhighlight %}
{% include inline_image.html file="SingleSlipModel_02.png" %} @@ -139,28 +144,57 @@ {% endhighlight %}
{% include inline_image.html file="SingleSlipModel_03.png" %} -

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

+

We could also have computed the solution of the continuity equation numerically. To this end we utilize the command doEulerStep which takes as input the crystallographic spin tensor Omega, the initial odf odf0 and the number of iterations to be performed.

{% highlight matlab %} -plotPDF(odf1,h,'resolution',2*degree,'colorRange','equal') +% the starting ODF +odf0 = uniformODF(csOli); + +% the transformed ODF +odf = doEulerStep(2*Omega,odf0,40) + +figure(2) +plot(odf,'sigma') mtexColorbar {% endhighlight %} + +{% highlight plaintext %} +odf = SO3FunHarmonic (olivine → xyz) + bandwidth: 28 + weight: 1 +{% endhighlight %}
{% include inline_image.html file="SingleSlipModel_04.png" %} +

Indeed the error between the numerical solution and the theoretical solution is neglectable small. We may quantify the difference by

+{% highlight matlab %} +mean(abs(odf - odf2)) +{% endhighlight %} + +{% highlight plaintext %} +ans = + 0.0011 +{% endhighlight %} +

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_05.png" %}
{% highlight matlab %} plotPDF(odf3,h,'resolution',2*degree,'colorRange','equal') mtexColorbar {% endhighlight %}
-{% include inline_image.html file="SingleSlipModel_05.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

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

Checking the for steady state

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

+{% 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.

{% highlight matlab %} plotSection(div(odf2 .* Omega),'sigma') mtexColorMap blue2red @@ -168,5 +202,5 @@ setColorRange(max(abs(clim))*[-1,1]) {% endhighlight %}
-{% include inline_image.html file="SingleSlipModel_07.png" %} +{% include inline_image.html file="SingleSlipModel_08.png" %}
\ No newline at end of file diff --git a/pages/documentation_matlab/SlipSystems.html b/pages/documentation_matlab/SlipSystems.html index 6ece3d99b..0c22b754a 100644 --- a/pages/documentation_matlab/SlipSystems.html +++ b/pages/documentation_matlab/SlipSystems.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Slip Systems - edit page

Plastic deformation in crystaline materials almost exclusively appears as dislocation along lattice planes. Such deformations are described by the normal vector n of the lattice plane and direction b of the slip. In the case of hexagonal alpha-Titanium with

+ edit page

Plastic deformation in crystalline materials almost exclusively appears as dislocation along lattice planes. Such deformations are described by the normal vector n of the lattice plane and direction b of the slip. In the case of hexagonal alpha-Titanium with

{% highlight matlab %} cs = crystalSymmetry('622',[3,3,4.7],'x||a','mineral','Titanium (Alpha)') {% endhighlight %} @@ -46,7 +46,7 @@ h k i l 0 1 -1 0 {% endhighlight %} -

Putting both incredience together we can define a slip system in MTEX by

+

Putting both ingredients together we can define a slip system in MTEX by

{% highlight matlab %} sSBasal = slipSystem(b,n) {% endhighlight %} @@ -82,7 +82,7 @@ 1 -2 1 0 0 0 0 1 1 -2 1 1 0 0 0 0 1 1 {% endhighlight %} -

The length of the burgers vector, i.e., the amount of displacment is

+

The length of the burgers vector, i.e., the amount of displacement is

{% highlight matlab %} sSBasalSym.b.norm {% endhighlight %} @@ -128,6 +128,17 @@

Rotating slip systems

By definition the slip system and accor % transfer slip system into specimen coordinates ori * sSBasal + +% +% +% +%

+% ok<*NASGU> +% +% +%
+% +% {% endhighlight %} {% highlight plaintext %} @@ -135,12 +146,12 @@

Rotating slip systems

By definition the slip system and accor Bunge Euler angles in degree phi1 Phi phi2 - 65.4874 70.4485 359.561 + 294.483 17.5963 18.9304 ans = slipSystem (xyz) - x y z | x y z - -0.16 1.74 2.44 0.18 -0.08 0.07 + x y z | x y z + 2.79 0.64 0.89 -0.06 -0.03 0.2 {% endhighlight %}

\ No newline at end of file diff --git a/pages/documentation_matlab/SubGrainBoundaries.html b/pages/documentation_matlab/SubGrainBoundaries.html index a22d7fc05..5b229678b 100644 --- a/pages/documentation_matlab/SubGrainBoundaries.html +++ b/pages/documentation_matlab/SubGrainBoundaries.html @@ -35,8 +35,8 @@ Phase Grains Pixels Mineral Symmetry Crystal reference frame 0 289 58967 Ferrite 432 - boundary segments: 12324 (2559 µm) - inner boundary segments: 28501 (3609 µm) + boundary segments: 12315 (2559 µm) + inner boundary segments: 28501 (3608 µm) triple points: 473 Properties: meanRotation, GOS diff --git a/pages/documentation_matlab/TaylorHex.html b/pages/documentation_matlab/TaylorHex.html index 5cee4b30c..c92236847 100644 --- a/pages/documentation_matlab/TaylorHex.html +++ b/pages/documentation_matlab/TaylorHex.html @@ -15,6 +15,7 @@ edit page

This examples models the texture evolution of rolled magnesium under unixaxial tension using the Taylor model. The undeformed material is assumed to have a basal fibre texture perpendicular to tension direction. Then tension experiment has been performed twice: at room temperature and at 250 degree Celcius. The strain at fracture was approx. 30 percent and 70 percent, respectively.

Setting up hexagonal crystal symmetry

First we need to set up hexagonal crystal symmetry.

{% highlight matlab %} cs = crystalSymmetry.load('Mg-Magnesium.cif') +cs = cs.properGroup; {% endhighlight %} {% highlight plaintext %} @@ -29,6 +30,7 @@

Setting up the basal fibre texture

Second, we set up the initial fibre texture which has the c-axis perpendicular to the (x,y)-sheet plane and the a-axes are randomized. This is typical for rolled Mg-sheet

{% highlight matlab %} odf = fibreODF(cs.cAxis, vector3d.Z); +%odf = uniformODF(cs) {% endhighlight %}

Plot polefigures of generated initial state without strains

define crystal orientations of interest for polefigures and plot figure

{% highlight matlab %} @@ -92,18 +94,18 @@

Defining strain tensors

Due to constant volume law, the sum of

Calculate texture evolution

The Tayor calculation is used to get the resulting spin of each vector as well as the coeffeicients for each slip system for cold and hot state

{% highlight matlab %} % simulated an initial orientation distribution of 10000 grains -ori = odf.discreteSample(10000); +ori = odf.discreteSample(100000); % apply the Taylor model -[~,bCold,Wcold] = calcTaylor( inv(ori) .* epsCold, sScold); -[~,bWarm,Wwarm] = calcTaylor( inv(ori) .* epsWarm, sSwarm); +[~,bCold,WcoldD] = calcTaylor( inv(ori) .* epsCold, sScold); +[~,bWarm,WwarmD] = calcTaylor( inv(ori) .* epsWarm, sSwarm); {% endhighlight %}

Apply the Taylor spin to the initial orientation distribution

{% highlight matlab %} -oriCold = ori .* orientation(-Wcold); -oriWarm = ori .* orientation(-Wwarm); +oriCold = ori .* orientation(-WcoldD); +oriWarm = ori .* orientation(-WwarmD); {% endhighlight %} -

Plot pole figures in comparison to inital texture

+ {% highlight matlab %} nextAxis %create a new axis on the existing figure and put along side plotPDF(oriCold,h,'antipodal','contourf','grid','grid_res',30*degree) diff --git a/pages/documentation_matlab/TaylorModel.html b/pages/documentation_matlab/TaylorModel.html index 282713f94..74e01445f 100644 --- a/pages/documentation_matlab/TaylorModel.html +++ b/pages/documentation_matlab/TaylorModel.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Taylor Model - edit page

basic settings

display pole figure plots with RD on top and ND west

+ edit page

Basic Settings

display pole figure plots with RD on top and ND west

{% highlight matlab %} plotx2north @@ -25,22 +25,26 @@ setMTEXpref('pfAnnotations',pfAnnotations); {% endhighlight %} -

Set up

consider cubic crystal symmetry

+

Slip in Body Centered Cubic Materials

In the following we consider crystallographic slip in bcc materials

{% highlight matlab %} +% define the slip systems in bcc cs = crystalSymmetry('432'); +sS = slipSystem.bcc(cs) +{% endhighlight %} -% define a family of slip systems -sS = slipSystem.bcc(cs); - -% some plane strain +{% highlight plaintext %} +sS = slipSystem (432) + size: 1 x 3 + + u v w | h k l CRSS + 1 -1 1 0 1 1 1 + -1 1 1 2 1 1 1 + -1 1 1 3 2 1 1 +{% endhighlight %} +

under plane strain

+{% highlight matlab %} 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); {% endhighlight %} {% highlight plaintext %} @@ -51,80 +55,84 @@

Set up

consider cubic crystal symmetry

1 0 0 0 0 0 0 0 -1 - +{% endhighlight %} +

The orientation dependence of the Taylor factor

For a family of slip systems sS the Taylor factor M describes the total amount of slip activity that is required to deform a crystal in orientation ori according to strain epsilon. In MTEX this can be computed by the command calcTaylor.

+{% highlight matlab %} +% 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); + +M +W +{% endhighlight %} + +{% highlight plaintext %} ori = orientation (432 → xyz) Bunge Euler angles in degree phi1 Phi phi2 0 30 15 + +M = + 2.1208 + +W = spinTensor (432) + rank: 2 (3 x 3) + + *10^-2 + 0 51 65.65 + -51 0 -23.04 + -65.65 23.04 0 {% endhighlight %} -

The orientation dependence of the Taylor factor

For a fixed strain tensor epsilon and slip systems sS the Taylor factor

+

When called without specifying an orientation the command calcTaylor computes the Taylor factor M as well as the spin tensors W as orientation dependent functions, which can be easily visualized and analyzed.

{% highlight matlab %} -% 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 +[M,~,W] = calcTaylor(epsilon,sS.symmetrise) {% endhighlight %} {% highlight plaintext %} -Elapsed time is 17.796326 seconds. +M = SO3FunHarmonic (432 → xyz) + bandwidth: 32 + weight: 3.1 + + +W = SO3VectorFieldHarmonic (432 → xyz) + bandwidth: 32 + tangent space: rightSpinTensor {% endhighlight %} -
-{% include inline_image.html file="TaylorModel_01.png" %} -

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.

+

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

{% highlight matlab %} -% compute the Taylor factor independent from the orientations -tic -[TaylorF,~,Spin] = calcTaylor(epsilon,sS.symmetrise,'bandwidth',32); -toc +% set up an phi1 section plot +sP = phi1Sections(cs,specimenSymmetry('222')); +sP.phi1 = (0:10:90)*degree; % plot the Taylor factor -plotSection(TaylorF,'phi1',(0:10:90)*degree) - +plot(M,'smooth',sP) mtexColorbar -{% endhighlight %} -{% highlight plaintext %} -Elapsed time is 48.215846 seconds. +hold on +plot(W,'color','black') +hold off {% endhighlight %}
-{% include inline_image.html file="TaylorModel_02.png" %} -

The orientation dependence of the spin

Compare Fig. 8 of the above paper

+{% include inline_image.html file="TaylorModel_01.png" %} +

The orientation dependence of the spin

The norm of the spin tensor is exactly the angle of misorientation a crystal with the corresponding orientation experiences according to Taylor theory. Compare Fig. 8 of the above paper

{% highlight matlab %} -sP.plot(W.angle./degree,'smooth') +plot(norm(W)/degree,'smooth',sP,'resolution',0.5*degree) mtexColorbar {% endhighlight %}
-{% include inline_image.html file="TaylorModel_03.png" %} +{% include inline_image.html file="TaylorModel_02.png" %}

Display the crystallographic spin in sigma sections

{% highlight matlab %} sP = sigmaSections(cs,specimenSymmetry); -oriGrid = sP.makeGrid('resolution',2.5*degree); -W = Spin.eval(oriGrid(:)); -sP.plot(spinTensor(W.').angle./degree,'smooth') +plot(norm(W)./degree,'smooth',sP) mtexColorbar {% endhighlight %}
-{% include inline_image.html file="TaylorModel_04.png" %} -

Most active slip direction

Next we consider a real world data set.

+{% include inline_image.html file="TaylorModel_03.png" %} +

Identification of the most active slip directions

Next we consider a real world data set

{% highlight matlab %} mtexdata csl @@ -157,7 +165,7 @@

The orientation dependence of the Taylor factor

For a fixed st Properties: meanRotation, GOS {% endhighlight %} -

Next we apply the Taylor model to each grain of our data set

+

and apply the Taylor model to each grain of our data set

{% highlight matlab %} % some strain q = 0; @@ -189,7 +197,7 @@

The orientation dependence of the Taylor factor

For a fixed st % index of the most active slip system - largest b [~,bMaxId] = max(b,[],2); -% rotate the moste active slip system in specimen coordinates +% rotate the most active slip system in specimen coordinates sSGrains = grains.meanOrientation .* sS(bMaxId); % visualize slip direction and slip plane for each grain @@ -200,15 +208,15 @@

The orientation dependence of the Taylor factor

For a fixed st hold off {% endhighlight %}

-{% include inline_image.html file="TaylorModel_05.png" %} +{% include inline_image.html file="TaylorModel_04.png" %}

plot the most active slip directions observe that they point all towards the lower hemisphere - why? they do change if q is changed

{% highlight matlab %} figure(2) plot(sSGrains.b) {% endhighlight %}
-{% include inline_image.html file="TaylorModel_06.png" %} -

Texture evolution during rolling

+{% include inline_image.html file="TaylorModel_05.png" %} +

Texture evolution during rolling

{% highlight matlab %} % define some random orientations rng(0) @@ -221,13 +229,13 @@

The orientation dependence of the Taylor factor

For a fixed st numIter = 100; % compute the Taylor factors and the orientation gradients -[~,~,Spin] = calcTaylor(epsilon ./ numIter, sS.symmetrise); +[~,~,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).').'; + W = spinTensor(spin.eval(ori).').'; % rotate the individual orientations ori = ori .* orientation(-W); @@ -248,24 +256,20 @@

The orientation dependence of the Taylor factor

For a fixed st mtexColorbar {% endhighlight %}

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

restore MTEX preferences

+{% include inline_image.html file="TaylorModel_06.png" %} +

restore MTEX preferences

{% highlight matlab %} setMTEXpref('pfAnnotations',storepfA); -{% endhighlight %} -

Inverse Taylor

Use with care!

-{% highlight matlab %} -oS = axisAngleSections(cs,cs,'antipodal'); -oS.angles = 10*degree; - -ori = oS.makeGrid; -[M,b,eps] = calcInvTaylor(ori,sS.symmetrise); +% +% +% +%
+% ok<*ASGLU> +% +% +%
+% +% {% endhighlight %} - -{% highlight matlab %} -plot(oS,M,'contourf') -{% endhighlight %} -
-{% include inline_image.html file="TaylorModel_08.png" %} -
\ No newline at end of file +
\ No newline at end of file diff --git a/pages/documentation_matlab/TensorArithmetics.html b/pages/documentation_matlab/TensorArithmetics.html index 9369cbef5..93d29a7da 100644 --- a/pages/documentation_matlab/TensorArithmetics.html +++ b/pages/documentation_matlab/TensorArithmetics.html @@ -20,7 +20,7 @@ % addition and multiplication T = T1 + 2 * T2; -% pointwise product +% point-wise product T = T1 .* T2; {% endhighlight %}

Tensor Products

Tensor product are the canonical way how tensors interact with each other. As an example consider a rank 4 stiffness tensor

@@ -55,7 +55,7 @@

Tensor Products

Tensor product are the canonical way how tenso 0 0 0 0 0 -1 {% endhighlight %} -

according to the formula

\[\sigma_{ij} =\sum_{k,l} C_{ijkl} \epsilon_{kl}\]

and turns it into the stress tensor \(\sigma\). In MTEX such tensor products can be computed in its most general form by the command EinsteinSum.

+

according to the formula

\[\sigma_{ij} =\sum_{k,l} C_{ijkl} \epsilon_{kl}\]

and turns it into the stress tensor \(\sigma\). In MTEX such tensor products can be computed in its most general form by the command EinsteinSum.

{% highlight matlab %} sigma = EinsteinSum(C,[1 2 -1 -2],eps,[-1 -2]) {% endhighlight %} @@ -68,7 +68,7 @@

Tensor Products

Tensor product are the canonical way how tenso 0 -8.65 0 0 0 -161.9 {% endhighlight %} -

here the negative numbers indicate the indices which are summed up. Each pair of equal negative numbers corresponds to one sum. The positive numbers indicate the order of the dimensions of the resulting tensor. Accordingly we can compute the outer product

\[ (a \otimes b)_{ij} = a_i b_j \]

beween two rank one tensors

+

here the negative numbers indicate the indices which are summed up. Each pair of equal negative numbers corresponds to one sum. The positive numbers indicate the order of the dimensions of the resulting tensor. Accordingly we can compute the outer product

\[ (a \otimes b)_{ij} = a_i b_j \]

between two rank one tensors

{% highlight matlab %} a = tensor([1;2;3],'rank',1); b = tensor([0;2;1],'rank',1); @@ -95,7 +95,7 @@

Tensor Products

Tensor product are the canonical way how tenso ans = 7 {% endhighlight %} -

As a final example we consider the linear compressibility in a certain direction v which can be computed by the formula

\[ c = \sum_{i,j,k} S_{ijkk} v_i v_j \]

where \(C = S^{-1}\) is the inverse of the comcompliance thensor, i.e. the stiffness tensor

+

As a final example we consider the linear compressibility in a certain direction v which can be computed by the formula

\[ c = \sum_{i,j,k} S_{ijkk} v_i v_j \]

where \(C = S^{-1}\) is the inverse of the compliance tensor, i.e. the stiffness tensor

{% highlight matlab %} v = xvector; S = inv(C) @@ -118,7 +118,7 @@

Tensor Products

Tensor product are the canonical way how tenso c = 460.2500 {% endhighlight %} -

Here we used the inv to compute the inverse of any rank 2 or rank 4 tensor. There are shortcuts in MTEX for specific tensor products. E.g. the relation between stress and strain can be more compactly written as a edouble dot product

+

Here we used the command inv to compute the inverse of any rank 2 or rank 4 tensor. There are shortcuts in MTEX for specific tensor products. E.g. the relation between stress and strain can be more compactly written as a double dot product

{% highlight matlab %} C * eps C : eps @@ -139,7 +139,7 @@

Tensor Products

Tensor product are the canonical way how tenso 0 -8.65 0 0 0 -161.9 {% endhighlight %} -

The double dot product between two rank two tensors is essentially their inner product and can be equivalently computed from the trace of their matrix product

+

The double dot product between two rank two tensors is essentially their inner product and can be equivalently computed from the trace of their matrix product

{% highlight matlab %} T1 : T2 trace(T1 * T2') @@ -148,11 +148,11 @@

Tensor Products

Tensor product are the canonical way how tenso {% highlight plaintext %} ans = - 2.0068 + 1.8183 ans = - 2.0068 + 1.8183 ans = - 2.0068 + 1.8183 {% endhighlight %}

Determinant

For rank two tensors we can compute the determinant of the tensor by the command det

{% highlight matlab %} @@ -161,7 +161,7 @@

Determinant

For rank two tensors we can compute the determina {% highlight plaintext %} ans = - -0.0759 + -0.0224 {% endhighlight %}

Rotating a tensor

Rotation a tensor is done by the command rotate. Let's define a rotation

{% highlight matlab %} diff --git a/pages/documentation_matlab/TensorAverage.html b/pages/documentation_matlab/TensorAverage.html index 5b2a3cfdb..181ccf386 100644 --- a/pages/documentation_matlab/TensorAverage.html +++ b/pages/documentation_matlab/TensorAverage.html @@ -32,7 +32,7 @@ % define maximum acceptable MAD value MAD_MAXIMUM= 1.3; -% eliminate all meassurements with MAD larger than MAD_MAXIMUM +% eliminate all measurements with MAD larger than MAD_MAXIMUM ebsd(ebsd.mad >MAD_MAXIMUM) = [] plot(ebsd(inpolygon(ebsd,[2000 0 1400 375]))) @@ -53,7 +53,7 @@ {% endhighlight %}
{% include inline_image.html file="TensorAverage_02.png" %} -

Import the elastic stiffness tensors

The elastic stiffness tensor of glaucophane was reported in Bezacier et al. 2010 (Tectonophysics) with respect to the crystal reference frame

+

Import the elastic stiffness tensors

The elastic stiffness tensor of Glaucophane was reported in Bezacier et al. 2010 (Tectonophysics) with respect to the crystal reference frame

{% highlight matlab %} CS_Tensor_glaucophane = crystalSymmetry('2/m',[9.5334,17.7347,5.3008],... [90.00,103.597,90.00]*degree,'X||a*','Z||c','mineral','Glaucophane'); @@ -71,11 +71,11 @@ [ 2.35 -4.78 -23.74 0.00 52.82 0.00];... [ 0.00 0.00 0.00 8.89 0.00 51.24]]; {% endhighlight %} -

The stiffness tensor in MTEX is defined via the command stiffnessTensor.

+

The stiffness tensor in MTEX is defined via the command stiffnessTensor.

{% highlight matlab %} C_glaucophane = stiffnessTensor(Cij,CS_Tensor_glaucophane,'density',rho_glaucophane); {% endhighlight %} -

The elastic stiffness tensor of epidote was reported in Aleksandrov et al. 1974 'Velocities of elastic waves in minerals at atmospheric pressure and increasing the precision of elastic constants by means of EVM (in Russian)', Izv. Acad. Sci. USSR, Geol. Ser.10, 15-24, with respect to the crystal reference frame

+

The elastic stiffness tensor of Epidote was reported in Aleksandrov et al. 1974 'Velocities of elastic waves in minerals at atmospheric pressure and increasing the precision of elastic constants by means of EVM (in Russian)', Izv. Acad. Sci. USSR, Geol. Ser.10, 15-24, with respect to the crystal reference frame

{% highlight matlab %} CS_Tensor_epidote = crystalSymmetry('2/m',[8.8877,5.6275,10.1517],... [90.00,115.383,90.00]*degree,'X||a*','Z||c','mineral','Epidote'); @@ -94,7 +94,7 @@ [ 0.00 0.00 0.00 -2.30 0.00 79.50]]; -% And now we define the epidote stiffness tensor as a MTEX variable +% And now we define the Epidote stiffness tensor as a MTEX variable C_epidote = stiffnessTensor(Cij,CS_Tensor_epidote,'density',rho_epidote); {% endhighlight %} @@ -102,7 +102,7 @@

The Average Tensor from EBSD Data

The Voigt, Reuss, and Hill {% highlight matlab %} [CVoigt,CReuss,CHill] = calcTensor(ebsd({'Epidote','Glaucophane'}),C_glaucophane,C_epidote); {% endhighlight %} -

The Voigt and Reuss are averaging schemes for obtaining estimates of the effective elastic constants in polycrystalline materials. The Voigt average assumes that the elastic strain field in the aggregate is constant everywhere, so that the strain in every position is equal to the macroscopic strain of the sample. CVoigt is then estimated by a volume average of local stiffnesses C(gi), where gi is the orientation given by a triplet of Euler angles and with orientation gi, and volume fraction V(i). This is formally described as

\( \left<T\right>^{\text{Voigt}} = \sum_{m=1}^{M} T(\mathtt{ori}_{m})\)

The Reuss average on the other hand assumes that the stress field in the aggregate is constant, so the stress in every point is set equal to the macroscopic stress. CReuss is therefore estimated by the volume average of local compliances S(gi) and can be described as

\( \left<T\right>^{\text{Reuss}} = \left[ \sum_{m=1}^{M} T(\mathtt{ori}_{m})^{-1} \right]^{-1}\)

For weakly anisotropic phases (e.g. garnet), Voigt and Reuss averages are very close to each other, but with increasing elastic anisotropy, the values of the Voigt and Reuss bounds vary considerably

The estimate of the elastic moduli of a given aggregate nevertheless should lie between the Voigt and Reuss average bounds, as the stress and strain distributions should be somewhere between the uniform strain (Voigt bound) and uniform stress.

Hill (1952) showed that the arithmetic mean of the Voigt and Reuss bounds (called Hill or Voigt-Reuss-Hill average) is very often close to the experimental values (although there is no physical justification for this behavior).

Averaging the elastic stiffness of an aggregate based on EBSD data

for a single phase (e.g. glaucophane) the syntax is

+

The Voigt and Reuss are averaging schemes for obtaining estimates of the effective elastic constants in polycrystalline materials. The Voigt average assumes that the elastic strain field in the aggregate is constant everywhere, so that the strain in every position is equal to the macroscopic strain of the sample. CVoigt is then estimated by a volume average of local stiffness C(gi), where gi is the orientation given by a triplet of Euler angles and with orientation gi, and volume fraction V(i). This is formally described as

\( \left<T\right>^{\text{Voigt}} = \sum_{m=1}^{M} T(\mathtt{ori}_{m})\)

The Reuss average on the other hand assumes that the stress field in the aggregate is constant, so the stress in every point is set equal to the macroscopic stress. CReuss is therefore estimated by the volume average of local compliance S(gi) and can be described as

\( \left<T\right>^{\text{Reuss}} = \left[ \sum_{m=1}^{M} T(\mathtt{ori}_{m})^{-1} \right]^{-1}\)

For weakly anisotropic phases (e.g. garnet), Voigt and Reuss averages are very close to each other, but with increasing elastic anisotropy, the values of the Voigt and Reuss bounds vary considerably

The estimate of the elastic moduli of a given aggregate nevertheless should lie between the Voigt and Reuss average bounds, as the stress and strain distributions should be somewhere between the uniform strain (Voigt bound) and uniform stress.

Hill (1952) showed that the arithmetic mean of the Voigt and Reuss bounds (called Hill or Voigt-Reuss-Hill average) is very often close to the experimental values (although there is no physical justification for this behavior).

Averaging the elastic stiffness of an aggregate based on EBSD data

for a single phase (e.g. Glaucophane) the syntax is

{% highlight matlab %} [CVoigt_glaucophane,CReuss_glaucophane,CHill_glaucophane] = calcTensor(ebsd('glaucophane'),C_glaucophane); {% endhighlight %} @@ -115,7 +115,7 @@

The Average Tensor from an ODF

The Voigt, Reuss, and Hill ave [CVoigt_glaucophane, CReuss_glaucophane, CHill_glaucophane] = ... calcTensor(odf_gl,C_glaucophane); {% endhighlight %} -

To visualize the polycrystalline glaucophane wave velocities we can use the command plotSeismicVelocities

+

To visualize the polycrystalline Glaucophane wave velocities we can use the command plotSeismicVelocities

{% highlight matlab %} plotSeismicVelocities(CHill_glaucophane) {% endhighlight %} diff --git a/pages/documentation_matlab/TensorDefinition.html b/pages/documentation_matlab/TensorDefinition.html index f9da9afcc..a9ee49adf 100644 --- a/pages/documentation_matlab/TensorDefinition.html +++ b/pages/documentation_matlab/TensorDefinition.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Defining Tensorial Properties - edit page

Physical laws describe the relationship between physical properties. The most simplest laws are linear ones and are of the form

\[ y = \mathbf A x \]

where \(x\) and \(y\) are the physical properties and \(\mathbf A\) is a material constant. In a typical example \(y\) could be the force applied to a spring, \(x\) the displacement and \(A\) describes the stiffnes of the spring which is essentially Hooks law.

As soon as we consider more general forces and displacements they can not be described anymore by scalar numbers \(x\) and \(y\) but vectors or matrices are required. In its most general form the displacment is describes by a strain matrix \(\sigma_{ij}\) and the force is described by a stiffness matrix \(\varepsilon_{kl}\). In this setting the linear relationship between the two matrices is described by the compliance tensor \(\mathbf C_{ijkl}\) which can be seen as a 4 dimensional generalization of a matrix.

More, general a tensor of rank \(r\) is a "matrix" of dimension \(r\). If \(r=0\) we speek of scalars, if \(r=1\) these are vectors and for \(r=2\) they are classical \(3 \times 3\) matrices.

In the following we explain how tensors of arbitrary rank can be defined in MTEX. Independent of the rank any tensor is represented in MTEX by a variable of type tensor.

Scalars (tensors of zero rank)

In physics, properties like temperature or density are not connected to any specific direction of the body they are measured. These non-directional physical quantities are called scalars, and they are defined by a single number. In MTEX, a scalar is defined by:

+ edit page

Physical laws describe the relationship between physical properties. The most simplest laws are linear ones and are of the form

\[ y = \mathbf A x \]

where \(x\) and \(y\) are the physical properties and \(\mathbf A\) is a material constant. In a typical example \(y\) could be the force applied to a spring, \(x\) the displacement and \(A\) describes the stiffness of the spring which is essentially Hooks law.

As soon as we consider more general forces and displacements they can not be described anymore by scalar numbers \(x\) and \(y\) but vectors or matrices are required. In its most general form the displacement is describes by a strain matrix \(\sigma_{ij}\) and the force is described by a stiffness matrix \(\varepsilon_{kl}\). In this setting the linear relationship between the two matrices is described by the compliance tensor \(\mathbf C_{ijkl}\) which can be seen as a 4 dimensional generalization of a matrix.

More, general a tensor of rank \(r\) is a "matrix" of dimension \(r\). If \(r=0\) we speak of scalars, if \(r=1\) these are vectors and for \(r=2\) they are classical \(3 \times 3\) matrices.

In the following we explain how tensors of arbitrary rank can be defined in MTEX. Independent of the rank any tensor is represented in MTEX by a variable of type tensor.

Scalars (tensors of zero rank)

In physics, properties like temperature or density are not connected to any specific direction of the body they are measured. These non-directional physical quantities are called scalars, and they are defined by a single number. In MTEX, a scalar is defined by:

{% highlight matlab %} M = 5; t = tensor(M,'rank',0) @@ -37,7 +37,7 @@

Vectors (tensors of first rank)

In contrast to scalars, other 2 3 {% endhighlight %} -

where 1, 2 and 3 are the components related to the axes A1, A2 and A3. As rank 1 tensors are essentialy vectors we can freely convert tensors to vector3d and vice verca.

+

where 1, 2 and 3 are the components related to the axes A1, A2 and A3. As rank 1 tensors are essentially vectors we can freely convert tensors to vector3d and vice versa.

{% highlight matlab %} % define a tensor from a vector t = tensor(vector3d.X) @@ -55,6 +55,8 @@

Vectors (tensors of first rank)

In contrast to scalars, other 0 ans = vector3d + x y z + 1 0 0 {% endhighlight %}

Matrices (tensors of second rank)

We have now to expand the idea of a vector to three-dimensional space. Let's take the example of stress (force per unit of area). Imagine a cube of material subjected to load as shown below. As can be seen, one can measure ther stresses in this cube in various directions, and in various planes. These measurements will for a second rank sensor, where each component is associated with a pair of axes, taken in an specific order. The generalized second rank stress tensor can be written as

\[ \sigma_{ij} = \left[\begin{array}{ccc} \sigma_{11} & \sigma_{12} & \sigma_{13} \\ \sigma_{21} & \sigma_{22} & \sigma_{23} \\ \sigma_{31} & \sigma_{32} & \sigma_{33} \\ \end{array}\right] \]

In MTEX, a second-rank tensor where only the main diagonal components are of interest is defined as

{% highlight matlab %} @@ -402,9 +404,9 @@

Tensors (tensors of fourth rank)

Fourth rank tensors are tenso rank: 2 (3 x 3) *10^-2 - 9.04 95.71 64.86 - 24.31 93.89 73.52 - 89.5 66.56 77.23 + 84.48 76.5 24.49 + 54.57 32.88 45.76 + 73.35 14.65 32.51 {% endhighlight %}

The Levi Civita tensor

The Levi-Civita symbol \(\epsilon_{ijk}\) is a third rank tensor and is defined by 0, if \(i=j\), \(j=k\) or \(k=1\), by 1, if \((i,j,k)=(1,2,3)\), \((2,3,1)\) or \((3,1,2)\) and by \(-1\), if \((i,j,k)=(3,2,1)\), \((1,3,2)\) or \((2,1,3)\). The Levi-Civita symbol allows the cross product of two vectors in 3D Euclidean space and the determinant of a square matrix to be expressed in Einstein's index notation. With MTEX the Levi Civita tensor is expressed as

{% highlight matlab %} diff --git a/pages/documentation_matlab/TensorVisualisation.html b/pages/documentation_matlab/TensorVisualisation.html index 0e1f4d142..ac5f0cf33 100644 --- a/pages/documentation_matlab/TensorVisualisation.html +++ b/pages/documentation_matlab/TensorVisualisation.html @@ -12,11 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Tensor Visualization - edit page

TODO

Please extend this chapter

Visualization

The default plot for each tensor is its directional magnitude, i.e. for each direction x it is plotted Q(x) = T_ijkl x_i x_j x_k x_l

+ edit page

TODO

Please extend this chapter

Visualization

The default plot for each tensor is its directional magnitude, i.e. for each direction \(x\) we plot the quantity \(Q(x) = T_ijkl x_i x_j x_k x_l\)

{% highlight matlab %} setMTEXpref('defaultColorMap',blue2redColorMap); - C = stiffnessTensor.rand plot(C,'complete','upper') @@ -27,9 +26,9 @@ rank: 2 (3 x 3) *10^-2 - 21.69 50.18 78.96 - 7.71 61.17 39.31 - 79.47 47.15 69.34 + 88.01 62.13 13.11 + 86.29 19.25 91.91 + 23.48 86.59 47.97 {% endhighlight %}
{% include inline_image.html file="TensorVisualisation_01.png" %} diff --git a/pages/documentation_matlab/TiBetaReconstruction.html b/pages/documentation_matlab/TiBetaReconstruction.html index 156eae8f1..835268fef 100644 --- a/pages/documentation_matlab/TiBetaReconstruction.html +++ b/pages/documentation_matlab/TiBetaReconstruction.html @@ -63,7 +63,7 @@ OR: (110) || (0001) [1-11] || [-2110] p2c fit: 0.82°, 1.2°, 1.6°, 3.1° (quintiles) - c2c fit: 0.71°, 1°, 1.3°, 1.7° (quintiles) + c2c fit: 0.71°, 0.99°, 1.3°, 1.7° (quintiles) {% endhighlight %}

The output of the job variable allows you to keep track of the amount of already recovered parent grains. Using the variable job you have access to the following properties

  • job.grainsIn - the input grains
  • job.grains - the grains at the current stage of reconstruction
  • job.ebsdIn - the input EBDS data
  • job.ebsd - the ebsd data at the current stage of reconstruction
  • job.mergeId - the relationship between the input grains job.grainsIn and the current grains job.grains, i.e., job.grainsIn(ind) goes into the merged grain job.grains(job.mergeId(ind))
  • job.numChilds - number of childs of each current parent grain
  • job.parenGrains - the current parent grains
  • job.childGrains - the current child grains
  • job.isTransformed - which of the grainsMeasured have a computed parent
  • job.isMerged - which of the grainsMeasured have been merged into a parent grain
  • job.transformedGrains - child grains in grainsMeasured with computed parent grain

Additionaly, the parentGrainReconstructor class provides the following operations for parent grain reconstruction. These operators can be applied multiple times and in any order to archieve the best possible reconstruction.

  • job.calcVariantGraph - compute the variant graph
  • job.clusterVariantGraph - compute votes from the variant graph
  • job.calcGBVotes - detect child/child and parent/child grain boundaries
  • job.calcTPVotes - detect child/child/child triple points
  • job.calcParentFromVote - recover parent grains from votes
  • job.calcParentFromGraph - recover parent grains from graph clustering
  • job.mergeSimilar - merge similar parent grains
  • job.mergeInclusions - merge inclusions

The main line of the variant graph based reconstruction algorithm is as follows. First we compute the variant graph using the command job.calcVariantGraph

{% highlight matlab %} @@ -81,7 +81,7 @@ p2c fit: 0.82°, 1.2°, 1.6°, 3.1° (quintiles) c2c fit: 0.71°, 1°, 1.3°, 1.7° (quintiles) - variant graph: 615100 entries + variant graph: 615123 entries {% endhighlight %}

In a second step we cluster the variant graph and at the same time compute probabilites for potential parent orientations using the command job.clusterVariantGraph

{% highlight matlab %} @@ -97,7 +97,7 @@ OR: (110) || (0001) [1-11] || [-2110] p2c fit: 0.82°, 1.2°, 1.6°, 3.1° (quintiles) - c2c fit: 0.71°, 0.99°, 1.3°, 1.7° (quintiles) + c2c fit: 0.72°, 0.99°, 1.3°, 1.7° (quintiles) votes: 61115 x 1 probabilities: 100%, 99%, 96%, 88% (quintiles) @@ -172,7 +172,7 @@ phase mineral symmetry grains area reconstructed parent Ti (BETA) 432 40 100% 100% - child Ti (alpha) 622 263 0.21% + child Ti (alpha) 622 261 0.21% OR: (110) || (0001) [1-11] || [-2110] p2c fit: 3.3°, 6°, 18°, 32° (quintiles) @@ -191,10 +191,6 @@ color = ipfKey.orientation2color(parentEBSD('Ti (Beta)').orientations); plot(parentEBSD('Ti (Beta)'),color,'figSize','large') {% endhighlight %} - -{% highlight plaintext %} -Warning: Packet ID calculation assuming {111}_p||{110}_c -{% endhighlight %}
{% include inline_image.html file="TiBetaReconstruction_05.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

diff --git a/pages/documentation_matlab/TransformationTexture.html b/pages/documentation_matlab/TransformationTexture.html index c04fc659e..9365b1239 100644 --- a/pages/documentation_matlab/TransformationTexture.html +++ b/pages/documentation_matlab/TransformationTexture.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Transformation Texture - edit page

Transformation Texture

During phase transformation or twinning the orientation of a crystal rapidly flips from an initial state oriA into a transformed state oriB. This relationship between the initial and transformed state can be described by an orientation relationsship OR. To make the situation more precise, we consider the phase transformation from austenite to ferrite via the Nishiyama Wassermann orientation relationship

+ edit page

Transformation Texture

During phase transformation or twinning the orientation of a crystal rapidly flips from an initial state oriA into a transformed state oriB. This relationship between the initial and transformed state can be described by an orientation relationship OR. To make the situation more precise, we consider the phase transformation from austenite to ferrite via the Nishiyama Wassermann orientation relationship

{% highlight matlab %} % parent and child crystal symmetry csP = crystalSymmetry('432','mineral','Austenite'); @@ -31,7 +31,7 @@ Bunge Euler angles in degree phi1 Phi phi2 - 265.859 67.5885 74.076 + 48.4641 88.1693 158.931 {% endhighlight %}

is transformed in one of the following Ferrite orientations

{% highlight matlab %} @@ -44,18 +44,18 @@ Bunge Euler angles in degree phi1 Phi phi2 - 133.421 103.843 27.5401 - 336.097 149.406 61.9742 - 64.0023 71.8827 289.081 - 357.606 59.5182 249.643 - 215.094 53.6437 186.433 - 84.0733 66.6251 101.9 - 217.332 73.0137 5.41418 - 126.898 147.392 138.223 - 130.516 42.9577 318.756 - 90.2652 158.15 285.282 - 17.3372 67.7702 60.7902 - 124.538 86.4803 206.73 + 88.1838 112.697 342.55 + 329.873 113.216 96.2497 + 56.3001 42.8593 249.448 + 292.141 26.4907 294.641 + 182.75 96.601 193.475 + 79.533 52.3014 53.6058 + 187.686 115.492 14.8591 + 41.1175 133.511 70.1362 + 128.625 66.109 272.324 + 18.7476 124.54 235.899 + 337.793 25.0672 73.1235 + 93.935 94.0384 163.898 {% endhighlight %}

These 12 Ferrite orientations are called variants of the orientation relationship. Lets visualize them in a pole figure plot

{% highlight matlab %} @@ -96,11 +96,11 @@ Bunge Euler angles in degree phi1 Phi phi2 weight - 265.859 67.5885 74.076 1 + 48.4641 88.1693 158.931 1 {% endhighlight %}
{% include inline_image.html file="TransformationTexture_02.png" %} -

We can draw some random orientations according this model ODF and apply the same commands variants to compute all transfomed orientations in one step

+

We can draw some random orientations according this model ODF and apply the same commands variants to compute all transformed orientations in one step

{% highlight matlab %} % number of discrete orientations n = 10000; @@ -144,7 +144,7 @@ {% highlight matlab %} % texture index of the transformed ODF computed from discrete orientations odfBSim = calcDensity(oriBSim) -textureindex(odfBSim) +norm(odfBSim)^2 {% endhighlight %} {% highlight plaintext %} @@ -152,20 +152,16 @@ bandwidth: 25 weight: 1 -Warning: The command textureindex is depreciated! Please use squared norm -instead. ans = - 3.4863 + 3.4889 {% endhighlight %} {% highlight matlab %} % texture index of the directly computed transformed ODF -textureindex(odfB) +norm(odfB)^2 {% endhighlight %} {% highlight plaintext %} -Warning: The command textureindex is depreciated! Please use squared norm -instead. ans = 17.4509 {% endhighlight %} diff --git a/pages/documentation_matlab/TriplePointBasedReconstruction.html b/pages/documentation_matlab/TriplePointBasedReconstruction.html index 0e5eab34b..c358674a7 100644 --- a/pages/documentation_matlab/TriplePointBasedReconstruction.html +++ b/pages/documentation_matlab/TriplePointBasedReconstruction.html @@ -62,11 +62,11 @@ phase mineral symmetry grains area reconstructed parent Ti (BETA) 432 430 0.23% 0% - child Ti (alpha) 622 49194 100% + child Ti (alpha) 622 49120 100% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 0.83°, 1.2°, 1.6°, 3.2° (quintiles) - c2c fit: 0.69°, 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.

{% highlight matlab %} @@ -78,13 +78,13 @@

Compute parent orientations from triple junctions

In present d phase mineral symmetry grains area reconstructed parent Ti (BETA) 432 430 0.23% 0% - child Ti (alpha) 622 49194 100% + child Ti (alpha) 622 49120 100% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 0.83°, 1.2°, 1.6°, 3.2° (quintiles) - c2c fit: 0.7°, 0.99°, 1.3°, 1.7° (quintiles) + p2c fit: 0.83°, 1.2°, 1.7°, 3.2° (quintiles) + c2c fit: 0.69°, 0.98°, 1.3°, 1.7° (quintiles) - votes: 41446 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.

From all remaining triple points the command calcTPVotes compute a list of votes stored in job.votes that contain for each child grain the most likely parent orientation and a corresponding probability job.votes.prob. We may visualize this probability for each grain

@@ -103,14 +103,14 @@

Compute parent orientations from triple junctions

In present d ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 33300 84% 67% - child Ti (alpha) 622 16324 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: 1°, 1.5°, 2°, 2.8° (quintiles) + p2c fit: 0.94°, 1.4°, 1.8°, 2.3° (quintiles) + c2c fit: 1°, 1.5°, 1.9°, 2.7° (quintiles) - votes: 8576 x 1 + 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

@@ -141,12 +141,12 @@

Compute parent orientations from triple junctions

In present d ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 48058 99% 97% - child Ti (alpha) 622 1566 1.1% + parent Ti (BETA) 432 47995 99% 97% + child Ti (alpha) 622 1555 1% OR: (110) || (0001) [1-11] || [-2110] - p2c fit: 14°, 34°, 38°, 42° (quintiles) - c2c fit: 1.5°, 2.8°, 9.9°, 24° (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) @@ -155,8 +155,8 @@

Compute parent orientations from triple junctions

In present d ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 48510 99% 98% - child Ti (alpha) 622 1114 0.67% + 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) @@ -169,8 +169,8 @@

Compute parent orientations from triple junctions

In present d ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 48531 99% 98% - child Ti (alpha) 622 1093 0.65% + 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) @@ -194,8 +194,8 @@

Compute parent orientations from triple junctions

In present d ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 158 99% 98% - child Ti (alpha) 622 1075 0.65% + 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) @@ -219,7 +219,7 @@

Compute parent orientations from triple junctions

In present d ans = parentGrainReconstructor phase mineral symmetry grains area reconstructed - parent Ti (BETA) 432 67 100% 100% + parent Ti (BETA) 432 66 100% 100% child Ti (alpha) 622 70 0.093% OR: (110) || (0001) [1-11] || [-2110] diff --git a/pages/documentation_matlab/TriplePoints.html b/pages/documentation_matlab/TriplePoints.html index 76ac68637..809461fa0 100644 --- a/pages/documentation_matlab/TriplePoints.html +++ b/pages/documentation_matlab/TriplePoints.html @@ -111,12 +111,12 @@ gB_Fo = grainBoundary Segments length mineral 1 mineral 2 - 255 10793 µm Forsterite Forsterite + 255 10794 µm Forsterite Forsterite gB_large = grainBoundary Segments length mineral 1 mineral 2 - 55 2387 µm Forsterite Forsterite + 55 2388 µm Forsterite Forsterite {% endhighlight %}

{% include inline_image.html file="TriplePoints_04.png" %} diff --git a/pages/documentation_matlab/TwinningBoundaries.html b/pages/documentation_matlab/TwinningBoundaries.html index 082779e68..1a2845124 100644 --- a/pages/documentation_matlab/TwinningBoundaries.html +++ b/pages/documentation_matlab/TwinningBoundaries.html @@ -110,11 +110,11 @@

Properties of grain boundaries

A variable of type grain bounda Bunge Euler angles in degree phi1 Phi phi2 - 209.646 93.9045 210.23 + 29.9378 93.904 30.4111 plane parallel direction parallel fit -(1-10-1) || (10-11) [01-1-1] || [1-10-1] 0.48° +(1-101) || (10-1-1) [01-11] || [1-101] 0.466° {% endhighlight %}

Bases on the output above we may now define the special orientation relationship as

{% highlight matlab %} diff --git a/pages/documentation_matlab/VPSCImport.html b/pages/documentation_matlab/VPSCImport.html index 1872d6113..970636941 100644 --- a/pages/documentation_matlab/VPSCImport.html +++ b/pages/documentation_matlab/VPSCImport.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Import from VPSC - edit page

VPSC is a crystal plasticity code originally written by Ricardo Lebensohn and Carlos Tome from Los Alamos National Laboratory - USA.

Original code can be requested to lebenso@lanl.gov

https://public.lanl.gov/lebenso/

Import the orientations generated by VPSC

Running a simulation in VPSC ussually results in an output file TEX_PH1.OUT which contains multiple sets of orientations for different strain levels. As these files does not contain any information on the crystal symmetry we need to specify it first

+ edit page

VPSC is a crystal plasticity code originally written by Ricardo Lebensohn and Carlos Tome from Los Alamos National Laboratory - USA.

Original code can be requested to lebenso@lanl.gov

https://public.lanl.gov/lebenso/

Import the orientations generated by VPSC

Running a simulation in VPSC usually results in an output file TEX_PH1.OUT which contains multiple sets of orientations for different strain levels. As these files does not contain any information on the crystal symmetry we need to specify it first

{% highlight matlab %} cs = crystalSymmetry('222', [4.762 10.225 5.994],'mineral', 'olivine'); {% endhighlight %} @@ -21,12 +21,10 @@ % put in here the path to the VPSC output files path2file = [mtexDataPath filesep 'VPSC']; -odf = ODF.load([path2file filesep 'TEX_PH1.OUT'],'halfwidth',10*degree,'CS',cs) +odf = SO3Fun.load([path2file filesep 'TEX_PH1.OUT'],'halfwidth',10*degree,'CS',cs) {% endhighlight %} {% highlight plaintext %} -Warning: The class ODF and also ODF.load is depreciated. Please -use instead SO3Fun.load odf = 1×9 cell array Columns 1 through 3 @@ -36,7 +34,7 @@ Columns 7 through 9 {1×1 SO3FunHarmonic} {1×1 SO3FunHarmonic} {1×1 SO3FunHarmonic} {% endhighlight %} -

The individuel ODFs can be accessed by odf{id}

+

The individual ODFs can be accessed by odf{id}

{% highlight matlab %} % lets plot the second ODF plotSection(odf{2},'sigma','figSize','normal') diff --git a/pages/documentation_matlab/VectorDefinition.html b/pages/documentation_matlab/VectorDefinition.html index 603254583..421796d66 100644 --- a/pages/documentation_matlab/VectorDefinition.html +++ b/pages/documentation_matlab/VectorDefinition.html @@ -19,6 +19,8 @@ {% highlight plaintext %} v = vector3d + x y z + 1 2 3 {% endhighlight %}

This gives a single vector with coordinates (1,1,0) with respect to the X, Y, Z coordinate system. Lets visualize this vector

{% highlight matlab %} @@ -51,6 +53,8 @@ {% highlight plaintext %} v = vector3d + x y z + 0 2 3 {% endhighlight %}

Polar Coordinates

A second way to define specimen directions is by polar coordinates, i.e. by its polar angle and its azimuth angle. This is done by the option polar.

{% highlight matlab %} @@ -65,6 +69,8 @@

Polar Coordinates

A second way to define specimen directions i {% highlight plaintext %} v = vector3d + x y z + 0.612372 0.612372 0.5 {% endhighlight %}

{% include inline_image.html file="VectorDefinition_03.png" %} diff --git a/pages/documentation_matlab/VectorGrids.html b/pages/documentation_matlab/VectorGrids.html index 2775db366..8b54ccca6 100644 --- a/pages/documentation_matlab/VectorGrids.html +++ b/pages/documentation_matlab/VectorGrids.html @@ -12,51 +12,68 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Spherical Grids - edit page
+ edit page

MTEX supports a wide varity of spherical grids. Those include the regularS2Grid, the MTEX equispaced grid, the HealPix grid and the Fibonacci grid. Lets define them with an resulution of 7 degrees

{% highlight matlab %} -grid1 = regularS2Grid('resolution',7*degree) +% the regular grid +grid{1} = regularS2Grid('resolution',7*degree); -plot(grid1,'upper') +% the MTEX equispaced grid +grid{2} = equispacedS2Grid('resolution',7*degree); + +% the HealPix grid +grid{3} = HEALPixS2Grid('resolution',7*degree); + +% and the Fibonaci Grid +grid{4} = fibonacciS2Grid('resolution',7*degree); + +% store the names of the grids +names = {'regular','equispaced','HealPix','Fibonaci'}; {% endhighlight %} +

Plotting them indicates that there are quite some differences, especially close to the poles.

+{% highlight matlab %} +plot(grid{1},'upper','layout',[2,2]) +mtexTitle(names{1}) -{% highlight plaintext %} -grid1 = S2Grid - size: 52 x 27 +for k = 2:4 + nextAxis + plot(grid{k},'upper') + mtexTitle(names{k}) +end {% endhighlight %}
{% include inline_image.html file="VectorGrids_01.png" %} -
+

Comparison of Uniformity

In order to compare the uniformity of the different grids we first perform a density estimation.

{% highlight matlab %} -grid2 = equispacedS2Grid('resolution',7*degree) - -plot(grid2,'upper') -{% endhighlight %} +for k = 1:4 + d(k) = calcDensity(grid{k},'halfwidth',5*degree); +end -{% highlight plaintext %} -grid2 = S2Grid - size: 1 x 812 - resolution: 7.1° +clf +for k = 1:4 + plot(d(k),'upper','layout',[2,2]); + mtexTitle(names{k}) + if k<4, nextAxis, end +end +mtexColorbar {% endhighlight %}
{% include inline_image.html file="VectorGrids_02.png" %} -
+

We visually observe that there are quite some differences between the grids. We may also quantify the different to the uniform distribution by computing

{% highlight matlab %} -grid3 = HEALPixS2Grid('resolution',7*degree) - -plot(grid3,'upper') +norm(d-1).' {% endhighlight %} {% highlight plaintext %} -grid3 = vector3d - size: 768 x 1 +ans = + 4.0141 0.0317 0.0426 0.0201 {% endhighlight %} -
-{% include inline_image.html file="VectorGrids_03.png" %} -

Comparison of Uniformity

+

or

{% highlight matlab %} -plot([grid1.calcDensity,grid2.calcDensity,grid3.calcDensity],'upper') -mtexColorbar +sum(abs(d-1)).' {% endhighlight %} -
-{% include inline_image.html file="VectorGrids_04.png" %} -
\ No newline at end of file + +{% highlight plaintext %} +ans = + 5.7668 0.0600 0.0674 0.0320 +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/documentation_matlab/VectorsDefinition.html b/pages/documentation_matlab/VectorsDefinition.html index 694130cad..161ba01b0 100644 --- a/pages/documentation_matlab/VectorsDefinition.html +++ b/pages/documentation_matlab/VectorsDefinition.html @@ -16,13 +16,13 @@ {% highlight matlab %} v = vector3d(1,1,0); {% endhighlight %} -

This gives a single vector with coordinates (1,1,0) with respect to the x, y , z coordinate system. A second way to define a specimen directions is by its spherical coordinates, i.e. by its polar angle and its azimuth angle. This is done by the option polar.

+

This gives a single vector with coordinates (1,1,0) with respect to the x, y , z coordinate system. A second way to define a specimen directions is by its spherical coordinates, i.e. by its polar angle and its azimuth angle.

{% highlight matlab %} polar_angle = 60*degree; azimuth_angle = 45*degree; v = vector3d.byPolar(polar_angle,azimuth_angle); {% endhighlight %} -

Finally, one can also define a vector as a linear combination of the predefined vectors xvector, yvector, and zvector

+

Finally, one can also define a vector as a linear combination of the predefined vectors xvector, yvector, and zvector

{% highlight matlab %} v = xvector + 2*yvector; {% endhighlight %} @@ -34,16 +34,22 @@

Predefined Vectors

{% highlight plaintext %} ans = vector3d size: 1 x 3 + x y z + 1 0 0 + 0 1 0 + 0 0 1 {% endhighlight %} -

The command vector3d.rand allows to define random unit vectors

+

The command vector3d.rand allows to define random unit vectors

{% highlight matlab %} vector3d.rand {% endhighlight %} {% highlight plaintext %} ans = vector3d + x y z + 0.662949 -0.419611 0.62002 {% endhighlight %} -

Similarly, the commands vector3d.ones, vector3d.zeros and vector3d.nan allow to define vectors of ones, zeros and nan.

+

Similarly, the commands vector3d.ones, vector3d.zeros and vector3d.nan allow to define vectors of ones, zeros and nan.

{% highlight matlab %} [vector3d.ones vector3d.zeros vector3d.nan] {% endhighlight %} @@ -51,5 +57,9 @@

Predefined Vectors

{% highlight plaintext %} ans = vector3d size: 1 x 3 + x y z + 1 1 1 + 0 0 0 + NaN NaN NaN {% endhighlight %}
\ No newline at end of file diff --git a/pages/documentation_matlab/VectorsOperations.html b/pages/documentation_matlab/VectorsOperations.html index 1e8eea373..833eca7ef 100644 --- a/pages/documentation_matlab/VectorsOperations.html +++ b/pages/documentation_matlab/VectorsOperations.html @@ -19,6 +19,8 @@ {% highlight plaintext %} v = vector3d + x y z + 1 2 0 {% endhighlight %}

Moreover, all basic vector operations as "+", "-", "*", inner product, cross product are implemented in MTEX.

{% highlight matlab %} @@ -27,6 +29,8 @@ {% highlight plaintext %} u = vector3d + x y z + 4 0 0 {% endhighlight %}

Besides the standard linear algebra operations, there are also the following functions available in MTEX.

@@ -118,6 +122,8 @@ {% highlight plaintext %} u = vector3d + x y z + 1 0 0 {% endhighlight %}

Lists of vectors

As any other MTEX variable you can combine several vectors to a list of vectors. Additionally, all the operators operations mentioned before will work elementwise on a list of vectors. See Working with lists on how to manipulate lists in Matlab.

Using the brackets v = [v1,v2] two lists of vectors can be joined to a single list. Now each single vector is accesable via v(1) and v(2).

{% highlight matlab %} @@ -128,8 +134,12 @@

Lists of vectors

As any other MTEX variable you can combine se {% highlight plaintext %} ans = vector3d + x y z + 1 2 0 ans = vector3d + x y z + 1 0 0 {% endhighlight %}

When calculating with concatenated specimen directions all operations are performed componentwise for each specimen direction.

{% highlight matlab %} @@ -151,6 +161,12 @@

Lists of vectors

As any other MTEX variable you can combine se ans = vector3d size: 5 x 1 + x y z + 0.174067 0.983688 0.0453682 + 0.00905843 0.821965 0.569466 + 0.430105 0.900869 0.0586948 + -0.447234 0.0186977 0.894221 + -0.139746 0.555614 0.819612 {% endhighlight %}

gives the first 5 vectors from the list, or by logical indexing. The following command plots all vectors with an polar angle smaller then 60 degree

{% highlight matlab %} diff --git a/pages/documentation_matlab/WignerFunctions.html b/pages/documentation_matlab/WignerFunctions.html index 705f66647..f485cd11f 100644 --- a/pages/documentation_matlab/WignerFunctions.html +++ b/pages/documentation_matlab/WignerFunctions.html @@ -29,9 +29,9 @@ 0.3390 0.8776 0.3390 -0.0612 -0.3390 0.9388 D = - -0.7268 + 0.0871i 0.9546 + 0.7435i 0.1277 + 0.9919i - 0.8593 - 0.8519i -0.2681 + 0.0000i 0.8593 + 0.8519i - 0.1277 - 0.9919i 0.9546 - 0.7435i -0.7268 - 0.0871i + -0.5870 - 0.7635i -1.1906 - 0.2521i 0.6755 - 0.3674i + -0.9255 - 0.7903i 0.1941 + 0.0000i -0.9255 + 0.7903i + 0.6755 + 0.3674i -1.1906 + 0.2521i -0.5870 + 0.7635i {% endhighlight %}

Here the orders \(k\), \(l\) work as row and column indices.

Series Expansion

The Wigner-D functions form an orthonormal basis in \(L_2(SO(3))\). Hence, we can describe functions on the rotation group \(SO(3)\) by there harmonic representation using the class SO3FunHarmonic.

Hence we define the Wigner-D function \(D_1^{1,-1}\) by

{% highlight matlab %} @@ -47,9 +47,9 @@ weight: 0 ans = - 0.1277 - 0.9919i + 0.6755 + 0.3674i {% endhighlight %} -

Various normalizations for the Wigner-D functions are common in the literature.

Here we define the \(L_2\)-norm by

\[ \| f \|_2 = \left(\frac1{8\pi^2}\,\int_{SO(3)} \lvert f( {\bf R}) \rvert^2 \,\mathrm d {\bf R} \right)^{1/2} \]

such that the norm of the constant function \(f=1\) is \(1\). Take a look on the section Integration of SO3Fun's.

Using that definition the Wigner-D functions in MTEX are normalized, i.e. \(\| D_n^{k,l} \|_2 = 1\) for all \(n,k,l\).

+

Various normalization for the Wigner-D functions are common in the literature.

Here we define the \(L_2\)-norm by

\[ \| f \|_2 = \left(\frac1{8\pi^2}\,\int_{SO(3)} \lvert f( {\bf R}) \rvert^2 \,\mathrm d {\bf R} \right)^{1/2} \]

such that the norm of the constant function \(f=1\) is \(1\). Take a look on the section Integration of SO3Fun's.

Using that definition the Wigner-D functions in MTEX are normalized, i.e. \(\| D_n^{k,l} \|_2 = 1\) for all \(n,k,l\).

{% highlight matlab %} norm(D) {% endhighlight %} @@ -58,4 +58,17 @@ ans = 1 {% endhighlight %} -

Some important formulas for Wigner-D functions

The Wigner-D functions are the matrix elements of the representations \(D_n \colon SO(3) \to \mathbb C^{(2n+1)\times(2n+1)}\) on \(SO(3)\). Since representations are group homomorphisms, we have \(D_n( {\bf R} \, {\bf Q} ) = \frac1{\sqrt{2n+1}} \, D_n( {\bf Q} ) \, D_n( {\bf R} ).\) Hence we get

\[ D_n^{k,l}( {\bf R} \, {\bf Q} ) = \frac1{2n+1} \sum_{j=-n}^n D_n^{k,j}( {\bf Q} )\,D_n^{j,l}( {\bf R} ). \]

Some symmetry properties of Wigner-D functions yields

\[ D_n^{k,l}( {\bf R} ) = \overline{D_n^{l,k}( {\bf R}^{-1} )}. \]

Symmetry properties of Wigner-d functions

The Wigner-d functions by construction fulfill a lot of symmetry properties. Some importants are

\[ d_n^{k,l}(x) = d_n^{-k,-l}(x) = (-1)^{k+l}\, d_n^{l,k}(x) = (-1)^{k+l}\, d_n^{-l,-k}(x)\]

\[ d_n^{k,l}(x) = (-1)^{n+k+l}\,d_n^{-k,l}(-x) = (-1)^{n+k+l}\,d_n^{k,-l}(-x) \]

\[d_n^{k,l}(\cos\beta) = (-1)^{k+l}\,d_n^{k,l}(\cos(-\beta))\]

\ No newline at end of file +

Some important formulas for Wigner-D functions

The Wigner-D functions are the matrix elements of the representations \(D_n \colon SO(3) \to \mathbb C^{(2n+1)\times(2n+1)}\) on \(SO(3)\). Since representations are group homomorphisms, we have \(D_n( {\bf R} \, {\bf Q} ) = \frac1{\sqrt{2n+1}} \, D_n( {\bf Q} ) \, D_n( {\bf R} ).\) Hence we get

\[ D_n^{k,l}( {\bf R} \, {\bf Q} ) = \frac1{2n+1} \sum_{j=-n}^n D_n^{k,j}( {\bf Q} )\,D_n^{j,l}( {\bf R} ). \]

Some symmetry properties of Wigner-D functions yields

\[ D_n^{k,l}( {\bf R} ) = \overline{D_n^{l,k}( {\bf R}^{-1} )}. \]

Symmetry properties of Wigner-d functions

The Wigner-d functions by construction fulfill a lot of symmetry properties. Some important are

\[ d_n^{k,l}(x) = d_n^{-k,-l}(x) = (-1)^{k+l}\, d_n^{l,k}(x) = (-1)^{k+l}\, d_n^{-l,-k}(x)\]

\[ d_n^{k,l}(x) = (-1)^{n+k+l}\,d_n^{-k,l}(-x) = (-1)^{n+k+l}\,d_n^{k,-l}(-x) \]

\[d_n^{k,l}(\cos\beta) = (-1)^{k+l}\,d_n^{k,l}(\cos(-\beta))\]

+{% highlight matlab %} +% +% +% +%
+% ok<*NASGU> +% +% +%
+% +% +{% endhighlight %} + \ No newline at end of file diff --git a/pages/documentation_matlab/changelog.html b/pages/documentation_matlab/changelog.html index 58a376c57..079bdc928 100644 --- a/pages/documentation_matlab/changelog.html +++ b/pages/documentation_matlab/changelog.html @@ -12,22 +12,22 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->MTEX Changelog - edit page

MTEX 6.0.beta.1 9/2023

Pseudo 3d EBSD and Grain maps

With version 6.0 MTEX starts to support pseudo 3d EBSD data. This means that EBSD maps are not longer supposed to are in the xy-plane. For example it is now possible to consider EBSD maps that represent the three faces of a cube. To make this possible multiple changes at the core of MTEX had to be introduced:

  • ebsd.pos gives the position of the EBSD measurements and is of type vector3d
  • many grain properties like vertices grains.V, centroid grains.centroid or long axis grains.longAxis are now of type vector3d.
  • ebsd.N, grains.N gives the normal direction of a EBSD map
  • it is not possible to merge EBSD maps with different normal direction into one variable

Free three dimensional plotting of EBSD maps, pole figures, etc.

  • Plotting of EBSD and grain maps is now possible in 3d
  • The alignment of x, y and z on the screen is now controlled by an object of type @plottingConvention. The code
+ edit page

MTEX 6.0.beta.4 4/2024

Pseudo 3d EBSD and Grain maps

With version 6.0, MTEX starts to support pseudo 3d EBSD data. This means that EBSD maps are no longer restricted to the xy-plane. For example it is now possible to consider EBSD maps that represent the three faces of a cube. To make this possible, multiple changes at the core of MTEX had to be introduced:

  • ebsd.pos gives the position of the EBSD measurements and is of type vector3d
  • many grain properties like vertices grains.V, centroid grains.centroid or long axis grains.longAxis are now of type vector3d.
  • ebsd.N, grains.N gives the normal direction of a EBSD map
  • it is not possible to merge EBSD maps with different normal direction into one variable

Free three dimensional plotting of EBSD maps, pole figures, etc.

  • Plotting of EBSD and grain maps is now possible in 3d
  • The alignment of x, y and z on the screen is now controlled by an object of type @plottingConvention. The code
{% highlight matlab %} -how2plot = plottinConvention +how2plot = plottingConvention how2plot.outOfScreen = ebsd.N how2plot.east = yvector plot(ebsd, how2plot) {% endhighlight %} -

would plot an EBSD map with its normal direction out of the screen an the y-vector pointing to north. * A default plotting convention can be stored directly in the EBSD or grain variable via

+

would plot an EBSD map with its normal direction out of the screen and the y-vector pointing to north. * A default plotting convention can be stored directly in the EBSD or grain variable via

{% highlight matlab %} ebsd.plottingConvention = how2plot {% endhighlight %} -
  • The plotting convention can also passed to any spherical plot. This allows e.g. to plot pole figures with an arbitrary direction sticking out of the screen.

Interface to Neper Neper is an open source software package for 3d polycrystal generation and meshing. It is now possible to call Neper from within MTEX, simulate microstructures, generated slices through a 3d volume and import those slices into MTEX. Have a look at NeperInterface for more information.

MTEX 5.10.1 9/2023

This is mainly a bug fix release.

MTEX 5.10.0 5/2023

Weigthed Burgers Vector

With the function weightedBurgersVec(ebsd) it is now possible to compute the weighted burgers vector both, using the integral approach as well as the differentical approach.

Bain Group Determination

The function calcVariantId now returns an id for the variant, the packet and the Bain group. The usage of this function is demonstrated here.

Numerous minor addon, speed improvements, bug fixes

  • New option 'max' to angle(mori) to compute the largest misorientation angle. Helpful for identifying twinning.
  • Added checks for symmetry and positive definiteness when defining stress, strain and ellasticity tensors.
  • Add morphological filter erode(ebsd) as a simple method for data cleaning in EBSD maps.
  • Pseudesymmetries like now natively supported using the syntax crystalSymmetry('532')
  • symmetrise(t,'iso') return the isotropic portion of a tensor
  • symmetricDecomposition computes the symmetric decomposition of a tensor
  • normalize the Taylor factor according to the strain
  • display boundary length as default output
  • better import of h5 files
  • many more fixes and speed improvements

MTEX 5.9.0 2/2023

Habit Plane Detection

MTEX 5.9 includes powerful functions for the determination of predominant habit planes and habit plane distributions. For the setting of a fully transformed microstructure the are described in the paper plane determination from reconstructed parent phase orientation maps. Those functions include

Orientation dependent functions

The orientation distribution function (ODF) describes the relative volume of crystal orientations within a material. As such it is a function that associates to each orientation a number with unit mrd (multiples of random distribution). However, in material science many other orientation dependend functions are of importance, e.g., the Taylor factor with respect to some outer strain depends on the local orientation. While ODFs have ever since been at the heart of MTEX, this release is the first one that includes full support for orientation dependent functions. Those functions are called SO3Fun and behave similar to sphercial functions S2Fun. In particular one can

  • add, substract, multiply and divide with them
  • compare them
  • detect global and local extrema
  • visualize them in 3d and 2d sections
  • compute gradients

While implementing these new features we also significantly speeded up all operations related with ODF operations. A full documentation of these new features can be found here.

MTEX 5.8.2 11/2022

This is mainly a bug fix release. New functionalities include

MTEX 5.8.0 01/2022

MTEX 5.8 improves further on parent grain reconstruction by implementing the novel variant graph algorithm which is faster and more accurate than the prvious grain graph algorithm.

Improved parent grain reconstruction

Along with the new reconstruction algorithm the following new features have been implemented:

  • manual interactive parent orientation selection using selectInteractive(job)
  • new option 'reconsiderAll' in <parentGrainReconstructor.calcGBVotes.html calcGBVotes(job) to recheck all asignments of parent orientations.
  • new option 'bestFit' in <parentGrainReconstructor.calcGBVotes.html calcGBVotes(job) to consider only the best fitting neighbor
  • job.votes is now a table which contains the parentId votes and the probabilities for all grains

Misc Changes

  • new option 'region' for plot(ebsd) to plot only a rectangular subregion of the map

MTEX 5.7.0 05/2021

MTEX 5.7 improves on parent grain reconstruction. Changes include:

Improved parent grain reconstruction

  • The ordering of the variants is stored within the OR misorientation p2c as p2c.variantMap. In particular the variants in p2c.variants are ordered by default according to the Morito convention. This can be easily check by the command round2Miller(p2c.variants)
  • The command job.calcGBVotes and job.calcTPVotes compute votes associated with probabilities that are stored in job.votes and can easily be analyzed.
  • The options 'noP2C' and 'noC2C' have been replaced by 'p2c' and 'c2c'.
  • New option job.useBoundaryMisorienation which makes the parent grain reconstructor to use the misorientations along the grain boundaries instead of the misorientations between the grain mean orientations.
  • added ShojiNishiyama orientation relationship.

Other Changes

  • The command findByOrientation accepts a fibre as input.
  • The antipodal axisAngleColorKey allows for option 'antipodal'.

MTEX 5.6.1 03/2021

This is mainly a bug fix release.

MTEX 5.6.0 01/2021

MTEX 5.6 greatly simplifies parent grain reconstruction by introducing the class parentGrainReconstructor. During the reconstruction procedure this class keeps track of the correspondence between measured child grains and the reconstructed parent grains. It provides the following functions for recovering parent orientations which can be applied multiple times and in any order to archieve the best possible reconstruction.

The usage of this new class is demonstrated in Beta Titanium Reconstruction and Parent Martensite Reconstruction.

Compatibility fixes

MTEX 5.6 fixes several incompatibilities with Matlab versions earlier then 2019b.

MTEX 5.5.0 11/2020

Orientation Embeddings

Orientational embeddings are tensorial representations of orientations with the specific property that each class of symmetrically equivalent orientations has a unique tensor representation. In contrast to the well known representation by Rodrigues vectors those embeddings do not suffer from boundary effects, i.e., the Euclidean distance between the tensors is always close to the misorientation angle. This allows to lift any method that works for multivariate data to orientations. More details of this representation can be found in the chaper orientation embeddings and the paper

  • R. Hielscher, L. Lippert, Isometric Embeddings of Quotients of the Rotation Group Modulo Finite Symmetries, arXiv:2007.09664, 2020.

Low Angle Boundaries

With MTEX 5.5 we make low angle grain boundary analsis much more straight forward by allowing to pass to the command calcGrains two thresholds, i.e.,

+
  • The plotting convention can also be passed to any spherical plot. This allows e.g. to plot pole figures with an arbitrary direction pointing out of the screen.
  • As consequence 'upper' and 'lower' refers to the outOFScreen direction.

Interface to Neper Neper is an open source software package for 3d polycrystal generation and meshing. It is now possible to call Neper from within MTEX, simulate micro-structures, generated slices through a 3d volume and import those slices into MTEX. Have a look at NeperInterface for more information.

MTEX 5.11.0 3/2024

MTEX 5.11 will be the last release before MTEX 6.0. It significantly improves grain reconstruction from 2d EBSD data.

Much Faster Grain Reconstruction

Thanks to using the jc_voronoi as tessellation method and some addition speedups grain reconstruction is now more than 10 times faster then previously. The method used for Voronoi tessellation is now specified in mtex_settings by the option 'VoronoiMethod'. You may want to set this option to 'qhull' if you experience problems with the 'jcvoronoi' engine.

Much Better Grain Reconstruction

With MTEX 5.11 MTEX uses alpha shapes to determine the shape of the grains in the presence of large unindexed regions. Those alpha shapes are controlled by a single parameter 'alpha' with specifies to which extend indexed regions are allowed to grow into not indexed regions. Have a look at grain reconstruction for an illustration of the new method.

Vector Fields in Orientation Space

Functionality of Vector Fields in Orientation Space has been greatly extended. It includes now functions to compute the divergence div(vF), the curl curl(vF) and the antiderivative of a vector field vF on orientation space. This new functionality can be used to efficiently model texture evolution by numerically solving the continuity equation as it is demonstrated for the single slip model. Crucial for this approach is the new command doEulerStep which updates an ODF or a list of orientation according to a vector field an orientation space which may be given e.g. by the Taylor model.

Lankford Parameter

The command calcLankford allows for the computation of the Lankford or R-value. A full discussion of the corresponding analysis can be found here.

Transformation ODF

The command variants(p2c,odfParent) takes now as a second input a parent ODF and return the child ODF under the assumption that all variants appear with the same frequency. This is in more detail explained in the section Transformation Texture.

Inner Planes in Crystal Shapes

Using the commands plotInnerFace, plot(cS,sS) and arrow3d it is now possible to plot internal lattice planes, directions or slip systems into the crystal shape. This is explained in more detail at Crystal Shapes.

Numerous minor improvements and bug fixes

MTEX 5.10.1 9/2023

This is mainly a bug fix release.

MTEX 5.10.0 5/2023

Weighted Burgers Vector

With the function weightedBurgersVec(ebsd) it is now possible to compute the weighted burgers vector both, using the integral approach as well as the differential approach.

Bain Group Determination

The function calcVariantId now returns an id for the variant, the packet and the Bain group. The usage of this function is demonstrated here.

Numerous minor addon, speed improvements, bug fixes

  • New option 'max' to angle(mori) to compute the largest misorientation angle. Helpful for identifying twinning.
  • Added checks for symmetry and positive definiteness when defining stress, strain and elasticity tensors.
  • Add morphological filter erode(ebsd) as a simple method for data cleaning in EBSD maps.
  • Pseudesymmetries like 532 are now natively supported using the syntax crystalSymmetry('532')
  • symmetrise(t,'iso') return the isotropic portion of a tensor
  • symmetricDecomposition computes the symmetric decomposition of a tensor
  • normalize the Taylor factor according to the strain
  • display boundary length as default output
  • better import of h5 files
  • many more fixes and speed improvements

MTEX 5.9.0 2/2023

Habit Plane Detection

MTEX 5.9 includes powerful functions for the determination of predominant habit planes and habit plane distributions. For the setting of a fully transformed microstructure the are described in the paper plane determination from reconstructed parent phase orientation maps. Those functions include

Orientation dependent functions

The orientation distribution function (ODF) describes the relative volume of crystal orientations within a material. As such it is a function that associates to each orientation a number with unit mrd (multiples of random distribution). However, in material science many other orientation depended functions are of importance, e.g., the Taylor factor with respect to some outer strain depends on the local orientation. While ODFs have ever since been at the heart of MTEX, this release is the first one that includes full support for orientation dependent functions. Those functions are called SO3Fun and behave similar to spherical functions S2Fun. In particular one can

  • add, subtract, multiply and divide with them
  • compare them
  • detect global and local extrema
  • visualize them in 3d and 2d sections
  • compute gradients

While implementing these new features we also significantly speed up all operations related with ODF operations. A full documentation of these new features can be found here.

MTEX 5.8.2 11/2022

This is mainly a bug fix release. New functionalities include

MTEX 5.8.0 01/2022

MTEX 5.8 improves further on parent grain reconstruction by implementing the novel variant graph algorithm which is faster and more accurate than the previous grain graph algorithm.

Improved parent grain reconstruction

Along with the new reconstruction algorithm the following new features have been implemented:

  • manual interactive parent orientation selection using selectInteractive(job)
  • new option 'reconsiderAll' in <parentGrainReconstructor.calcGBVotes.html calcGBVotes(job) to recheck all assignments of parent orientations.
  • new option 'bestFit' in <parentGrainReconstructor.calcGBVotes.html calcGBVotes(job) to consider only the best fitting neighbor
  • job.votes is now a table which contains the parentId votes and the probabilities for all grains

Misc Changes

  • new option 'region' for plot(ebsd) to plot only a rectangular subregion of the map

MTEX 5.7.0 05/2021

MTEX 5.7 improves on parent grain reconstruction. Changes include:

Improved parent grain reconstruction

  • The ordering of the variants is stored within the OR misorientation p2c as p2c.variantMap. In particular the variants in p2c.variants are ordered by default according to the Morito convention. This can be easily check by the command round2Miller(p2c.variants)
  • The command job.calcGBVotes and job.calcTPVotes compute votes associated with probabilities that are stored in job.votes and can easily be analyzed.
  • The options 'noP2C' and 'noC2C' have been replaced by 'p2c' and 'c2c'.
  • New option job.useBoundaryMisorienation which makes the parent grain reconstructor to use the misorientations along the grain boundaries instead of the misorientations between the grain mean orientations.
  • added ShojiNishiyama orientation relationship.

Other Changes

  • The command findByOrientation accepts a fiber as input.
  • The antipodal axisAngleColorKey allows for option 'antipodal'.

MTEX 5.6.1 03/2021

This is mainly a bug fix release.

MTEX 5.6.0 01/2021

MTEX 5.6 greatly simplifies parent grain reconstruction by introducing the class parentGrainReconstructor. During the reconstruction procedure this class keeps track of the correspondence between measured child grains and the reconstructed parent grains. It provides the following functions for recovering parent orientations which can be applied multiple times and in any order to achieve the best possible reconstruction.

The usage of this new class is demonstrated in Beta Titanium Reconstruction and Parent Martensite Reconstruction.

Compatibility fixes

MTEX 5.6 fixes several incompatibilities with MATLAB versions earlier then 2019b.

MTEX 5.5.0 11/2020

Orientation Embedding

Orientational embeddings are tensorial representations of orientations with the specific property that each class of symmetrically equivalent orientations has a unique tensor representation. In contrast to the well known representation by Rodrigues vectors those embeddings do not suffer from boundary effects, i.e., the Euclidean distance between the tensors is always close to the misorientation angle. This allows to lift any method that works for multivariate data to orientations. More details of this representation can be found in the chapter orientation embeddings and the paper

  • R. Hielscher, L. Lippert, Isometric Embeddings of Quotients of the Rotation Group Modulo Finite Symmetries, arXiv:2007.09664, 2020.

Low Angle Boundaries

With MTEX 5.5 we make low angle grain boundary analysis much more straight forward by allowing to pass to the command calcGrains two thresholds, i.e.,

{% highlight matlab %} grains = calcGrains(ebsd,'threshold',[10*degree 1*degree]) {% endhighlight %} -

generates grains bounded by high angle grain boundaries with a threshold of 10 degree and inner low angle boundaries with an threshold of 1 degree. The latter ones are stored as grains.innerBoundary. In order to estimate the density of inner boundaries per grain the commands subBoundaryLength and subBoundarySize have been introduced. The documentation page Subgrain Boundaries describes the analysis of low angle boundaries in more detail.

New Functionalities

  • For single phase EBSD maps you can access the orientations now more easily by ebsd.orientations instead of ebsd('indexed').orientations. Orientations corresponding to not indexed pixels will be returned as NaN and thus automatically ignored during any further computation.
  • grains.isBoundary checks grains to be boundary grains
  • grains.isInclusion checks grains to be inclusions
  • merge(grains,'inclusions') merges inclusions into their hosts
  • merge(grains,'threshold',delta) merges grains with a certain misorientation angle
  • interpolation of EBSD maps at arbitrary coordinates by the command interp works now for hexagonal grids as well. In particular this allows to remap EBSD data from hexagonal to square grids and vice versa. Have a look at the chapter Interpolation for more details.
  • calcMis2Mean computes the misorientation to a grain reference orientation, i.e., the grain reference orientation deviation (GROD).
  • KAM computation has been speeded up signigicantly for hexonal and square grids. Make sure to use the command ebsd = ebsd.gridify before the KAM computation.
  • new option 'edgeAlpha' to control the transparency of grain boundaries, e.g. in depedency of the misorientation angle.
  • more easily add new / change phases in an EBSD map by one of the following commands
+

generates grains bounded by high angle grain boundaries with a threshold of 10 degree and inner low angle boundaries with an threshold of 1 degree. The latter ones are stored as grains.innerBoundary. In order to estimate the density of inner boundaries per grain the commands subBoundaryLength and subBoundarySize have been introduced. The documentation page Subgrain Boundaries describes the analysis of low angle boundaries in more detail.

New Functionalities

  • For single phase EBSD maps you can access the orientations now more easily by ebsd.orientations instead of ebsd('indexed').orientations. Orientations corresponding to not indexed pixels will be returned as NaN and thus automatically ignored during any further computation.
  • grains.isBoundary checks grains to be boundary grains
  • grains.isInclusion checks grains to be inclusions
  • merge(grains,'inclusions') merges inclusions into their hosts
  • merge(grains,'threshold',delta) merges grains with a certain misorientation angle
  • interpolation of EBSD maps at arbitrary coordinates by the command interp works now for hexagonal grids as well. In particular this allows to remap EBSD data from hexagonal to square grids and vice versa. Have a look at the chapter Interpolation for more details.
  • calcMis2Mean computes the misorientation to a grain reference orientation, i.e., the grain reference orientation deviation (GROD).
  • KAM computation has been speed up significantly for hexagonal and square grids. Make sure to use the command ebsd = ebsd.gridify before the KAM computation.
  • new option 'edgeAlpha' to control the transparency of grain boundaries, e.g. in dependency of the misorientation angle.
  • more easily add new / change phases in an EBSD map by one of the following commands
{% highlight matlab %} ebsd(ind).orientations = orientation.byEuler(0,0,0,CSNew) ebsd(ind).CS = CSNew @@ -36,7 +36,7 @@ {% highlight matlab %} plot([vector3d.Z, vector3d.Z + 0.5 * vector3d.rand],'arrow') {% endhighlight %} -
  • export(ebsd,fileName) allows to export to EBSD data to .ang, .ctf, .crc and .hdf5 files, thanks to Azdiar Gazder
  • new function rot = fit(l,r) to compute the rotations that best rotates all the vectors l onto the vectors r

Important Bug Fixes

  • volume(odf) gave wrong results in the presense of specimen symmetry and for centers close to the boundary of the fundamental region.

MTEX 5.4.0 7/2020

Parent Grain Reconstruction

MTEX now includes a number of functions for variant analysis and to recover parent grain structure. Examples include beta phase reconstruction in Titanium and Martensite reconstruction from Austenite grains. The reconstruction is mainly build around the following new commands

  • calcParent computes the best fitting parent orientations from child orientations
  • calcChildVariants seperates child variants into packets
  • calcParent2Child computes best fitting parent to child orientation relationship from child to child misorientations
  • variants computes all parent or child variants

New Functionalities

  • new function ebsd.interp to interpolate EBSD maps at arbitrary x,y coordinates, example
  • smooth(grains) keeps now triple points and outer boundary fixed by default
  • the field grains.triplePoints.angles returns the angles between the boundaries at the triple points
  • new option 'removeQuadruplePoints' to calcGrains
  • harmonic approximation of spherical functions respecting symmetry
  • export(ebsd,'fileName.ang') exports to .ang files
  • neighbours(grains) now returns a list of pairs of neighboring grains
  • grains.numNeighbours returns the number of neighboring grains
  • selectByGrainId allows to select boundary segments by pairs of grains
  • new helper function majorityVote
  • new option 'noAntipodal' for many commands like symmetrise, unique, dot, angle
  • new predefined orientation relationship orientation.Burgers

MTEX 5.3.1 6/2020

New Functions

Bug Fixes

  • loading ang files
  • importong ODFs
  • inverse pole figures misses orientations
  • convex hull of grains has now correct boundaries
  • Other Changes*
  • vector3d/mean now returns not normalized vectors
  • new flag noAntipodal to supress antipodal symmetry in calculations

MTEX 5.3.0 4/2020

MTEX 5.3 is a humble release without big shiny improvements. On the other hand is has seen some internal changes which lead to significant speed improvements in some functions. Technicaly speaking the class symmetry is not derived from rotation anymore but is a handle class. From the users perspective almost no change will be noticed. Developers should replace length(cs) by numSym(cs).

Much Better and Faster Halfquadratic Filter

Denoising of EBSD data using the halfQuadraticFilter is now about 10 times faster, handles outliers much better and runs natively on hexagonal grids.

New Functions

MTEX 5.2.3 11/2019

  • replaced calcODF(ori) by calcDensity(ori)
  • bug fix in ODF reconstruction from XRD data
  • bug fix in EBSD export to ctf
  • bug fix in grain reconstruction
  • some more minor bug fixes

MTEX 5.2.0 10/2019

New Documentation

MTEX got a new homepage which was needed to include a much more exhaustive online documentation which has now

  • a sidebar for quick navigation
  • a search field
  • a complete function reference to all MTEX functions and classes
  • UML diagrams illustrating the hierarchy of the classes
  • much more content

The new documentation is not yet perfect though we are working hard to improve it. Thatswhy we are extremely happy for everybody who contributes additions to the documentation. This includes the correction of spelling errors, theoretical parts, examples etc. Check out how to contribute to the documentation.

More Colors

All plotting commands in MTEX support now much more colors. By default all the color names of the CSS palette can be choosen, e.g., aqua, orange, gold, goldenrod, etc. To see a full list of supported colors do

colornames_view

The following function have been included to handle colors more efficiently

  • str2rgb convert color str to RGB color
  • ind2color convert index to distrinct RGB colors, good for loops

Improved Import Wizard

Importing EBSD data using the import wizard allows to interactively realign the data and check with respect to the pole figures.

Speed Improvements

Support for hexagonal EBSD grids

The function gridify now works also for EBSD data measured on a hexagonal grid. As a consequence denoising and GND computation for those data is also on the way.

Plastic Deformations

MTEX 5.2. introduces a bunch of new tensor classes to make modelling of plastic deformations more straight forward.

The relationships between those tensors are explained in the section plastic deformations.

Spherical Bingham Distribution

Nativ support for spherical Bingham distributions, including the abbility to fit them to directional distributions.

Tensors

Improved Figure Layout

  • fix layout
  • plot at fixed positions

Misc Changes

  • allow to export EBSD data to .ctf thanks to Frank Niessen
  • compute the volume of a crystal shape
  • label crystal faces in crystal shapes
  • new function std for computing the standard deviation of orientations
  • new function calcKearnsFactor
  • grainBoundary.ebsdId is now the id and not the index of the EBSD data
  • allow to index ebsd data and grains by id using {} brackets
+
  • export(ebsd,fileName) allows to export to EBSD data to .ang, .ctf, .crc and .hdf5 files, thanks to Azdiar Gazder
  • new function rot = fit(l,r) to compute the rotations that best rotates all the vectors l onto the vectors r

Important Bug Fixes

  • volume(odf) gave wrong results in the presence of specimen symmetry and for centers close to the boundary of the fundamental region.

MTEX 5.4.0 7/2020

Parent Grain Reconstruction

MTEX now includes a number of functions for variant analysis and to recover parent grain structure. Examples include beta phase reconstruction in Titanium and Martensite reconstruction from Austenite grains. The reconstruction is mainly build around the following new commands

  • calcParent computes the best fitting parent orientations from child orientations
  • calcChildVariants separates child variants into packets
  • calcParent2Child computes best fitting parent to child orientation relationship from child to child misorientations
  • variants computes all parent or child variants

New Functionalities

  • new function ebsd.interp to interpolate EBSD maps at arbitrary x,y coordinates, example
  • smooth(grains) keeps now triple points and outer boundary fixed by default
  • the field grains.triplePoints.angles returns the angles between the boundaries at the triple points
  • new option 'removeQuadruplePoints' to calcGrains
  • harmonic approximation of spherical functions respecting symmetry
  • export(ebsd,'fileName.ang') exports to .ang files
  • neighbours(grains) now returns a list of pairs of neighboring grains
  • grains.numNeighbours returns the number of neighboring grains
  • selectByGrainId allows to select boundary segments by pairs of grains
  • new helper function majorityVote
  • new option 'noAntipodal' for many commands like symmetrise, unique, dot, angle
  • new predefined orientation relationship orientation.Burgers

MTEX 5.3.1 6/2020

New Functions

Bug Fixes

  • loading ang files
  • importing ODFs
  • inverse pole figures misses orientations
  • convex hull of grains has now correct boundaries
  • Other Changes*
  • vector3d/mean now returns not normalized vectors
  • new flag noAntipodal to supress antipodal symmetry in calculations

MTEX 5.3.0 4/2020

MTEX 5.3 is a humble release without big shiny improvements. On the other hand is has seen some internal changes which lead to significant speed improvements in some functions. Technically speaking the class symmetry is not derived from rotation anymore but is a handle class. From the users perspective almost no change will be noticed. Developers should replace length(cs) by numSym(cs).

Much Better and Faster Halfquadratic Filter

Denoising of EBSD data using the halfQuadraticFilter is now about 10 times faster, handles outliers much better and runs native on hexagonal grids.

New Functions

MTEX 5.2.3 11/2019

  • replaced calcODF(ori) by calcDensity(ori)
  • bug fix in ODF reconstruction from XRD data
  • bug fix in EBSD export to ctf
  • bug fix in grain reconstruction
  • some more minor bug fixes

MTEX 5.2.0 10/2019

New Documentation

MTEX got a new homepage which was needed to include a much more exhaustive online documentation which has now

  • a sidebar for quick navigation
  • a search field
  • a complete function reference to all MTEX functions and classes
  • UML diagrams illustrating the hierarchy of the classes
  • much more content

The new documentation is not yet perfect though we are working hard to improve it. That's why we are extremely happy for everybody who contributes additions to the documentation. This includes the correction of spelling errors, theoretical parts, examples etc. Check out how to contribute to the documentation.

More Colors

All plotting commands in MTEX support now much more colors. By default all the color names of the CSS palette can be chosen, e.g., aqua, orange, gold, goldenrod, etc. To see a full list of supported colors do

colornames_view

The following function have been included to handle colors more efficiently

  • str2rgb convert color str to RGB color
  • ind2color convert index to distrinct RGB colors, good for loops

Improved Import Wizard

Importing EBSD data using the import wizard allows to interactively realign the data and check with respect to the pole figures.

Speed Improvements

Support for hexagonal EBSD grids

The function gridify now works also for EBSD data measured on a hexagonal grid. As a consequence denoising and GND computation for those data is also on the way.

Plastic Deformations

MTEX 5.2. introduces a bunch of new tensor classes to make modelling of plastic deformations more straight forward.

The relationships between those tensors are explained in the section plastic deformations.

Spherical Bingham Distribution

Native support for spherical Bingham distributions, including the ability to fit them to directional distributions.

Tensors

Improved Figure Layout

  • fix layout
  • plot at fixed positions

Misc Changes

  • allow to export EBSD data to .ctf thanks to Frank Niessen
  • compute the volume of a crystal shape
  • label crystal faces in crystal shapes
  • new function std for computing the standard deviation of orientations
  • new function calcKearnsFactor
  • grainBoundary.ebsdId is now the id and not the index of the EBSD data
  • allow to index ebsd data and grains by id using {} brackets
{% highlight matlab %} ebsd{id} grains{id} @@ -46,7 +46,7 @@ scatter(v,'numbered') % plot vectors with numbers scatter(v,'MarkerFaceColor','none') % plot vectors with colored empty marks {% endhighlight %} -

MTEX 5.1.0 04/2018

Dislocation systems

Starting with version 5.1 MTEX introduces a class representing dislocation systems. Dislocation systems may be lists of edge or screw dislocations and are either defined by its burgers and line vectors

+

MTEX 5.1.0 04/2018

Dislocation systems

Starting with version 5.1 MTEX introduces a class representing dislocation systems. Dislocation systems may be lists of edge or screw dislocations and are either defined by its burgers and line vectors

{% highlight matlab %} cs = crystalSymmetry('432') b = Miller(1,1,0,cs,'uvw') @@ -62,7 +62,7 @@

MTEX 5.1.0 04/2018

Dislocation systems

Starting {% highlight matlab %} dS = dislocationSystem.fcc(cs) {% endhighlight %} -

More information how to calculate with dislocation systems can be found here.

Geometrically neccesary dislocations

The newly introduced dislocation systems play an important role when computing geometrically neccesary dislocations from EBSD data. The workflow is illustrate the script GND and consists of the following steps:

  1. define the dominant dislocation systems
  2. transform the dislocation systems into specimen coordinates for each pixel of the EBSD map
  3. compute the curvature tensor for each pixel in the EBSD map
  4. fit the dislocation systems to the curvature tensors.
  5. compute the total energy in each pixel

Tensor arithmetics

dyad, trace, det, mean, diag, eye, sym

Birefringence

MTEX 5.1 includes some basic methods to analyze and simulate optically isotropic materials. This includes the computation of the optical axis, birefringence and spectral transmission. The new features are demonstrated in BirefringenceDemo.

Color Keys

In MTEX 5.1 the color keys used for coloring EBSD have been a bit reorganised.

  • seperate classes for directional color keys. So far these classes are HSVDirectionKey, HKLDirectionKey, TSLDirectionKey. This has become neccesary as some orientation color keys depend directional color keys with different symmetry.
  • new color key axisAngleColorKey that implements the coloring described in K. Thomsen, K. Mehnert, P. W. Trimby and A. Gholinia: Quaternion-based disorientation coloring of orientation maps, Ultramicroscopy, 2017. In central idea is to colorise the misorientation axis with respect to the specimen reference system.

Spherical functions

  • new function discreteSample to compute random samples from spherical density functions
  • new option to symmetrise to symmetrise a spherical function with respect to an axis

Misc

  • new fuction fitEllipse to assign ellipses to grains
  • the functions symmetrise(tensor) and symmetrise(S2F) do support symmetrisation with respect to a certain axis.
  • the function export(ori) allows to export arbitrary additional properties together with the Euler angles, e.g. the half axes and orientation of the grain ellipses
  • the function loadOrientation_generic allows to import arbitrary additional properties together with the orientations, e.g., weights
  • new option logarithmic
  • new function grad to compute the gradient of and ODF at a certain orientation
  • explicitely set the number of rows and columns in a MTEXFigure plot with
  • EBSD hdf5 interface works now for Bruker data as well

MTEX 5.0.0 03/2018

Replace all executables by two mex files

In MTEX many functionalities are based on the non equispaced fast Fourier transform (NFFT). Until now this dependency was kept under the hood, or more precisely, hidden in external executable files which often caused troubles on MAC systems. Starting with MTEX 5.0. all the executables have been replaced by two mex files provided by the NFFT package. This change (hopefully) comes with the following advantages

  • better compatibility with MAC systems, no SIP disabled required
  • increased performance, e.g., due to multi core support
  • better maintainability, as all MTEX code is now Matlab code
  • the pole figure to ODF inversion algorithm is now entirely implemented in Matlab making it simple to tweak it or add more sophisticated inversion algorithms

Spherical functions

Many functions in MTEX compute directional dependent properties, e.g. pole figures, inverse pole figures, wave velocities, density distribution of misorientation axis or boundary normals. Until now those functions took as an input an of vector of directions and gave as an output a corresponding vector of function values, e.g. the command

+

More information how to calculate with dislocation systems can be found here.

Geometrically neccesary dislocations

The newly introduced dislocation systems play an important role when computing geometrically neccesary dislocations from EBSD data. The workflow is illustrate the script GND and consists of the following steps:

  1. define the dominant dislocation systems
  2. transform the dislocation systems into specimen coordinates for each pixel of the EBSD map
  3. compute the curvature tensor for each pixel in the EBSD map
  4. fit the dislocation systems to the curvature tensors.
  5. compute the total energy in each pixel

Tensor arithmetics

dyad, trace, det, mean, diag, eye, sym

Birefringence

MTEX 5.1 includes some basic methods to analyze and simulate optically isotropic materials. This includes the computation of the optical axis, birefringence and spectral transmission. The new features are demonstrated in BirefringenceDemo.

Color Keys

In MTEX 5.1 the color keys used for coloring EBSD have been a bit reorganised.

  • seperate classes for directional color keys. So far these classes are HSVDirectionKey, HKLDirectionKey, TSLDirectionKey. This has become neccesary as some orientation color keys depend directional color keys with different symmetry.
  • new color key axisAngleColorKey that implements the coloring described in K. Thomsen, K. Mehnert, P. W. Trimby and A. Gholinia: Quaternion-based disorientation coloring of orientation maps, Ultramicroscopy, 2017. In central idea is to colorise the misorientation axis with respect to the specimen reference system.

Spherical functions

  • new function discreteSample to compute random samples from spherical density functions
  • new option to symmetrise to symmetrise a spherical function with respect to an axis

Misc

  • new fuction fitEllipse to assign ellipses to grains
  • the functions symmetrise(tensor) and symmetrise(S2F) do support symmetrisation with respect to a certain axis.
  • the function export(ori) allows to export arbitrary additional properties together with the Euler angles, e.g. the half axes and orientation of the grain ellipses
  • the function loadOrientation_generic allows to import arbitrary additional properties together with the orientations, e.g., weights
  • new option logarithmic
  • new function grad to compute the gradient of and ODF at a certain orientation
  • explicitely set the number of rows and columns in a MTEXFigure plot with
  • EBSD hdf5 interface works now for Bruker data as well

MTEX 5.0.0 03/2018

Replace all executables by two mex files

In MTEX many functionalities are based on the non equispaced fast Fourier transform (NFFT). Until now this dependency was kept under the hood, or more precisely, hidden in external executable files which often caused troubles on MAC systems. Starting with MTEX 5.0. all the executables have been replaced by two mex files provided by the NFFT package. This change (hopefully) comes with the following advantages

  • better compatibility with MAC systems, no SIP disabled required
  • increased performance, e.g., due to multi core support
  • better maintainability, as all MTEX code is now Matlab code
  • the pole figure to ODF inversion algorithm is now entirely implemented in Matlab making it simple to tweak it or add more sophisticated inversion algorithms

Spherical functions

Many functions in MTEX compute directional dependent properties, e.g. pole figures, inverse pole figures, wave velocities, density distribution of misorientation axis or boundary normals. Until now those functions took as an input an of vector of directions and gave as an output a corresponding vector of function values, e.g. the command

{% highlight matlab %} pfi = calcPDF(odf,Miller(1,0,0,odf.CS),r) {% endhighlight %} @@ -179,13 +179,13 @@

MTEX 5.1.0 04/2018

Dislocation systems

Starting {% highlight matlab %} plotSection(1./vp,vector3d.Y) {% endhighlight %} -

see here for more information.

Other new functions

  • odf.grad computes the gradient of an ODF at some orientation
  • grain2d.hist can now plot histogram of arbitrary properties
  • fibreVolume works also for specimen symmetry
  • allow to change the length of the scaleBar in EBSD plots

MTEX 4.5.2 11/2017

This is mainly a bug fix release

  • some more functions get tab completetion for input arguments
  • the option 'MarkerSize' can also be a vector to allow for varying Markersize
  • new option 'noSymmetry' for plotPDF and plotSection

orientation relation ships

  • new functions for computing variants and parents for a orientation relation ship *
  • new predefined orientation relation ship
+

see here for more information.

Other new functions

  • odf.grad computes the gradient of an ODF at some orientation
  • grain2d.hist can now plot histogram of arbitrary properties
  • fibreVolume works also for specimen symmetry
  • allow to change the length of the scaleBar in EBSD plots

MTEX 4.5.2 11/2017

This is mainly a bug fix release

  • some more functions get tab completetion for input arguments
  • the option 'MarkerSize' can also be a vector to allow for varying Markersize
  • new option 'noSymmetry' for plotPDF and plotSection

orientation relation ships

  • new functions for computing variants and parents for a orientation relation ship *
  • new predefined orientation relation ship
{% highlight matlab %} gT = GreningerTrojano(csAlpha,csGamma) ori_childs = ori_parent * inv(gT.variants) ori_parents = ori_child * gT.parents {% endhighlight %} -

MTEX 4.5.1 08/2017

This is mainly a bug fix release

  • some functions get tab completetion for input arguments
  • allow different colormaps in one figure
  • updated interfaces
  • added Levi Civita permutation tensor
  • improved round2Miller
  • grains.boundary('phase2','phase1') rearranges the misorientation to be from phase2 to phase 1

MTEX 4.5 03/2017

3d orientation plots

MTEX 4.5 supports plotting of orientations, fibres, and ODFs in 3d in various projections like

  • Bunge Euler angles
  • Rodrigues Frank space
  • axis angles space

Misorientations

  • MTEX introduces round2Miller which determines to an arbitrary misorientation mori two pairs of lower order Miller indeces such that which are aligned by mori
  • MTEX includes now some of the important misorientation relationsships like
+

MTEX 4.5.1 08/2017

This is mainly a bug fix release

  • some functions get tab completetion for input arguments
  • allow different colormaps in one figure
  • updated interfaces
  • added Levi Civita permutation tensor
  • improved round2Miller
  • grains.boundary('phase2','phase1') rearranges the misorientation to be from phase2 to phase 1

MTEX 4.5 03/2017

3d orientation plots

MTEX 4.5 supports plotting of orientations, fibres, and ODFs in 3d in various projections like

  • Bunge Euler angles
  • Rodrigues Frank space
  • axis angles space

Misorientations

  • MTEX introduces round2Miller which determines to an arbitrary misorientation mori two pairs of lower order Miller indeces such that which are aligned by mori
  • MTEX includes now some of the important misorientation relationsships like
{% highlight matlab %} orientation.Bain(cs) orientation.KurdjumovSachs(cs) @@ -204,7 +204,7 @@

MTEX 4.5.1 08/2017

This is mainly a bug fix release

< {% highlight matlab %} mtexColorbar('Title','this is a title') {% endhighlight %} -

Bug Fix This release contains several important bug fixes compare to MTEX 4.4.

MTEX 4.4 01/2017

Slip Systems

MTEX 4.4 introduces support for slip systems. Slip systems are defined by a plane normal and a slip direction

+

Bug Fix This release contains several important bug fixes compare to MTEX 4.4.

MTEX 4.4 01/2017

Slip Systems

MTEX 4.4 introduces support for slip systems. Slip systems are defined by a plane normal and a slip direction

{% highlight matlab %} sSFCC = slipSystem(Miller(0,1,-1,cs,'uvw'),Miller(1,1,1,cs,'hkl')); {% endhighlight %} @@ -271,12 +271,12 @@

MTEX 4.5.1 08/2017

This is mainly a bug fix release

< plot(centerRec.project2FundamentalRegion,'MarkerSize',10,'MarkerFaceColor','r','MarkerEdgeColor','k') hold off {% endhighlight %} -

MTEX 4.3.2 07/2016

Alignment of Miller plots

You can now specify the alignment of the crystal a-axis or b-axis in Miller plots by

+

MTEX 4.3.2 07/2016

Alignment of Miller plots

You can now specify the alignment of the crystal a-axis or b-axis in Miller plots by

{% highlight matlab %} plota2north, plota2east, plota2south, plota2west plotb2north, plotb2east, plotb2south, plotb2west {% endhighlight %} -

This might also be specify in mtex_settings.m mtex_settings.

MTEX 4.3 - 03/2016

Alignment of Miller plots

Starting with MTEX 4.3 plots with respect to the crystal coordinate system, i.e., inverse pole figure plots, misorientation axis plot, ipf keys, are always aligned such that the b-axis points towards east. This follows the convention given in the International Table of Crystallography. The alignment can be adjusted using the option xAxisAlignment

+

This might also be specify in mtex_settings.m mtex_settings.

MTEX 4.3 - 03/2016

Alignment of Miller plots

Starting with MTEX 4.3 plots with respect to the crystal coordinate system, i.e., inverse pole figure plots, misorientation axis plot, ipf keys, are always aligned such that the b-axis points towards east. This follows the convention given in the International Table of Crystallography. The alignment can be adjusted using the option xAxisAlignment

{% highlight matlab %} plot(Miller(1,0,0,cs),'xAxisAlignment',30*degree) {% endhighlight %} @@ -301,7 +301,7 @@

MTEX 4.3.2 07/2016

Alignment of Miller plots

You {% highlight matlab %} ebsd.calcGND {% endhighlight %} -

Auxilary new functionality

  • grain2d.calcParis - Percentile Average Relative Indented Surface
  • tensor.diag
  • reduce works now also for EBSD data on Hex grids

MTEX 4.2 - 11/2015

MTEX 4.2 introduces basic functionality for triple junction analysis in grain maps.

Triple points

Triple points are automatically computed during grain reconstruction and can be accessed by

+

Auxilary new functionality

  • grain2d.calcParis - Percentile Average Relative Indented Surface
  • tensor.diag
  • reduce works now also for EBSD data on Hex grids

MTEX 4.2 - 11/2015

MTEX 4.2 introduces basic functionality for triple junction analysis in grain maps.

Triple points

Triple points are automatically computed during grain reconstruction and can be accessed by

{% highlight matlab %} grains.triplePoints grains.boundary.triplePoints @@ -347,7 +347,7 @@

MTEX 4.3.2 07/2016

Alignment of Miller plots

You {% highlight matlab %} cs1 <= cs2 {% endhighlight %} -

Further, the largest proper subgroup of some crystal symmetry cs is now accessible by

cs.properSubGroup

MTEX 4.1 - 09/2015

MTEX 4.1 introduces new possibilities to the analysis of misorientations. For the first time, it covers all geometric aspects of misorientations between arbitrary crystal symmetries. Furthermore, MTEX 4.1 introduces filters to smooth EBSD data.

Smoothing of EBSD Data

Smoothing of EBSD data might be necessary if the orientation data are corrupted by noise which influences the estimation of orientation dependent properties like KAM or GND. The general syntax for smoothing EBSD data is

+

Further, the largest proper subgroup of some crystal symmetry cs is now accessible by

cs.properSubGroup

MTEX 4.1 - 09/2015

MTEX 4.1 introduces new possibilities to the analysis of misorientations. For the first time, it covers all geometric aspects of misorientations between arbitrary crystal symmetries. Furthermore, MTEX 4.1 introduces filters to smooth EBSD data.

Smoothing of EBSD Data

Smoothing of EBSD data might be necessary if the orientation data are corrupted by noise which influences the estimation of orientation dependent properties like KAM or GND. The general syntax for smoothing EBSD data is

{% highlight matlab %} ebsd = smooth(ebsd) {% endhighlight %} @@ -492,7 +492,7 @@

MTEX 4.3.2 07/2016

Alignment of Miller plots

You cs.Aaxis cs.AaxisRec {% endhighlight %} -

  • compute KAM with misorientation angle threshold or grain boundary threshold

MTEX 4.0.0 - 10/2014

MTEX 4 is a complete rewrite of the internal class system which was required to keep MTEX compatible with upcoming Matlab releases. Note that MTEX 3.5 will not work on Matlab versions later than 2014a. As a positive side effect, the syntax has been made more consistent and powerful. On the bad side MTEX 3.5. code will need some adaption to run on MTEX 4. There are two general principles to consider

Use dot indexing instead of getting and setting methods

The syntax

+
  • compute KAM with misorientation angle threshold or grain boundary threshold

MTEX 4.0.0 - 10/2014

MTEX 4 is a complete rewrite of the internal class system which was required to keep MTEX compatible with upcoming Matlab releases. Note that MTEX 3.5 will not work on Matlab versions later than 2014a. As a positive side effect, the syntax has been made more consistent and powerful. On the bad side MTEX 3.5. code will need some adaption to run on MTEX 4. There are two general principles to consider

Use dot indexing instead of getting and setting methods

The syntax

{% highlight matlab %} h = get(m,'h') m = set(m,'h',h+1) @@ -641,7 +641,7 @@

MTEX 4.3.2 07/2016

Alignment of Miller plots

You {% highlight matlab %} Miller(2,-1,-1,0,crystalSymmetry('-3m'),'UVTW') {% endhighlight %} -

Improved graphics

MTEX can now display colorbars next to pole figure, tensor or ODF plots and offers much more powerfull options to customize the plots with titles, legends, etc.

Functionality that has been (temporarily) removed

This can be seen as a todo list.

  • 3d EBSD data handling + 3d grains
  • some grain functions like aspectRatio, equivalent diameter
  • logarithmic scaling of plots
  • 3d plot of ODFs
  • some of the orientation color maps
  • fibreVolume in the presence of specimen symmetry
  • Dirichlet kernel
  • patala colorcoding for some symmetry groups
  • v.x = 0
  • misorientation analysis is not yet complete
  • some colormaps, e.g. blue2red switched
  • histogram of volume fractions of CSL boundaries
  • remove id from EBSD?
  • changing the phase of a grain should change phases in the boundary
  • KAM and GOSS may be improved
  • write import wizard for orientations, vectors, tensors.

MTEX 3.5.0 - 12/2013

Misorientation colorcoding

  • Patala colormap for misorientations
  • publication: S. Patala, J. K. Mason, and C. A. Schuh, Improved representations of misorientation information for grain boundary, science, and engineering, Prog. Mater. Sci., vol. 57, no. 8, pp. 1383-1425, 2012.
  • implementation: Oliver Johnson
  • syntax:
+

Improved graphics

MTEX can now display colorbars next to pole figure, tensor or ODF plots and offers much more powerfull options to customize the plots with titles, legends, etc.

Functionality that has been (temporarily) removed

This can be seen as a todo list.

  • 3d EBSD data handling + 3d grains
  • some grain functions like aspectRatio, equivalent diameter
  • logarithmic scaling of plots
  • 3d plot of ODFs
  • some of the orientation color maps
  • fibreVolume in the presence of specimen symmetry
  • Dirichlet kernel
  • patala colorcoding for some symmetry groups
  • v.x = 0
  • misorientation analysis is not yet complete
  • some colormaps, e.g. blue2red switched
  • histogram of volume fractions of CSL boundaries
  • remove id from EBSD?
  • changing the phase of a grain should change phases in the boundary
  • KAM and GOSS may be improved
  • write import wizard for orientations, vectors, tensors.

MTEX 3.5.0 - 12/2013

Misorientation colorcoding

  • Patala colormap for misorientations
  • publication: S. Patala, J. K. Mason, and C. A. Schuh, Improved representations of misorientation information for grain boundary, science, and engineering, Prog. Mater. Sci., vol. 57, no. 8, pp. 1383-1425, 2012.
  • implementation: Oliver Johnson
  • syntax:
{% highlight matlab %} plotBoundary(grains('Fo'),'property','misorientation','colorcoding','patala') {% endhighlight %} @@ -662,7 +662,7 @@

MTEX 4.3.2 07/2016

Alignment of Miller plots

You {% highlight matlab %} poly = selectPolygon {% endhighlight %} -

Bug fixes

  • .osc, .rw1 interfaces improved
  • .ang, .ctf interfaces give a warning if called without one of the options convertSpatial2EulerReferenceFrame or convertEuler2SpatialReferenceFrame
  • fixed: entropy should never be imaginary
  • removed function SO3Grid/union
  • improved MTEX startup
  • many other bug fixes
  • MTEX-3.5.0 should be compatible with Matlab 2008a

MTEX 3.4.2 - 06/2013

bugfix release

  • fixed some inverse pole figure color codings
  • option south is working again in pole figure plots
  • geometric mean in tensor averagin, thanks to Julian Mecklenburgh
  • improved support of osc EBSD format
  • tensor symmetry check error can be turned of and has a more detailed error message
  • improved syntax for Miller Miller(x,y,z,'xyz',CS) Miller('polar',theta,rho,CS)
  • ensure same marker size in EBSD pole figure plots
  • allow plotting Schmid factor for grains and EBSD data
  • allow to annotate Miller to AxisDistribution plots
  • improved figure export
  • allow for negative phase indices in EBSD data
  • bug fix: https://code.google.com/p/mtex/issues/detail?id=115
  • improved ODF fibre plot

MTEX 3.4.1 - 04/2013

bugfix release

  • much improved graphics export to png and jpg files
  • improved import wizard
  • Miller(2,0,0) is now different from Miller(1,0,0)
  • new EBSD interfaces h5, Bruker, Dream3d
  • various speedups
  • fix: startup error http://code.google.com/p/mtex/issues/detail?id=99
  • fix: Rigaku csv interface

MTEX 3.4.0 - 03/2013

New plotting engine

MTEX 3.4 features a completely rewritten plotting engine. New features include

  • The alignment of the axes in the plot is now described by the options xAxisDirection which can be north, west, south, or east, and zAxisDirection which can be outOfPlane or intoPlane. Accordingly, there are now the commands
+

Bug fixes

  • .osc, .rw1 interfaces improved
  • .ang, .ctf interfaces give a warning if called without one of the options convertSpatial2EulerReferenceFrame or convertEuler2SpatialReferenceFrame
  • fixed: entropy should never be imaginary
  • removed function SO3Grid/union
  • improved MTEX startup
  • many other bug fixes
  • MTEX-3.5.0 should be compatible with Matlab 2008a

MTEX 3.4.2 - 06/2013

bugfix release

  • fixed some inverse pole figure color codings
  • option south is working again in pole figure plots
  • geometric mean in tensor averagin, thanks to Julian Mecklenburgh
  • improved support of osc EBSD format
  • tensor symmetry check error can be turned of and has a more detailed error message
  • improved syntax for Miller Miller(x,y,z,'xyz',CS) Miller('polar',theta,rho,CS)
  • ensure same marker size in EBSD pole figure plots
  • allow plotting Schmid factor for grains and EBSD data
  • allow to annotate Miller to AxisDistribution plots
  • improved figure export
  • allow for negative phase indices in EBSD data
  • bug fix: https://code.google.com/p/mtex/issues/detail?id=115
  • improved ODF fibre plot

MTEX 3.4.1 - 04/2013

bugfix release

  • much improved graphics export to png and jpg files
  • improved import wizard
  • Miller(2,0,0) is now different from Miller(1,0,0)
  • new EBSD interfaces h5, Bruker, Dream3d
  • various speedups
  • fix: startup error http://code.google.com/p/mtex/issues/detail?id=99
  • fix: Rigaku csv interface

MTEX 3.4.0 - 03/2013

New plotting engine

MTEX 3.4 features a completely rewritten plotting engine. New features include

  • The alignment of the axes in the plot is now described by the options xAxisDirection which can be north, west, south, or east, and zAxisDirection which can be outOfPlane or intoPlane. Accordingly, there are now the commands
{% highlight matlab %} plotzOutOfPlane, plotzIntoPlane {% endhighlight %} @@ -741,7 +741,7 @@

MTEX 4.3.2 07/2016

Alignment of Miller plots

You {% highlight matlab %} setMTEXpref('propertyName','propertyValue') {% endhighlight %} -

MTEX 3.3.2 - 01/2013

bugfix release

MTEX 3.3.1 - 07/2012

bugfix release

  • fix: single/double convention get sometimes wrong with tensors
  • fix: tensor checks did not respect rounding errors
  • fix: ingorePhase default is now none
  • fix: calcAngleDistribution works with ODF option
  • fix: respect rounding errors when importing pole figures and ODFs

MTEX 3.3.0 - 06/2012

Grains: change of internal representation

Reimplementation of the whole grain part:

  • The classes @grain, @polygon, @polyeder do not exist any longer. The functionality of the classes is mainly replaced by the classes @GrainSet, @Grain2d and @Grain3d
  • The class @GrainSet explicitly stores EBSD. To access EBSD data within a single grain or a set of grains use
+

MTEX 3.3.2 - 01/2013

bugfix release

MTEX 3.3.1 - 07/2012

bugfix release

  • fix: single/double convention get sometimes wrong with tensors
  • fix: tensor checks did not respect rounding errors
  • fix: ingorePhase default is now none
  • fix: calcAngleDistribution works with ODF option
  • fix: respect rounding errors when importing pole figures and ODFs

MTEX 3.3.0 - 06/2012

Grains: change of internal representation

Reimplementation of the whole grain part:

  • The classes @grain, @polygon, @polyeder do not exist any longer. The functionality of the classes is mainly replaced by the classes @GrainSet, @Grain2d and @Grain3d
  • The class @GrainSet explicitly stores EBSD. To access EBSD data within a single grain or a set of grains use
{% highlight matlab %} get(grains,'EBSD') {% endhighlight %} @@ -751,4 +751,4 @@

MTEX 3.3.2 - 01/2013

bugfix release

  • fi symmetry('cubic','mineral','Fe'),... symmetry('cubic','mineral','Mg')}; {% endhighlight %} -

    By default, calcGrains does also use the 'not Indexed' phase.

    • create customized orientation colormaps

    Other

    • the comand set_mtex_option is obsolete. Use the matlab command setMTEXpref(...) instead. Additionally, one can now see all options by the command getpref('mtex')

    MTEX 3.2.3 - 03/2012

    bugfix release

    MTEX 3.2.1 - 11/2011

    New Features

    • Import and Export to VPSC
    • export EBSD data with all properties
    • improved ODF calculation from pole figures by using quadrature weights for the pole figure grid
    • implemented spherical Voronoi decomposition and computation of spherical quadrature weights
    • plot odf-space in omega-sections, the i.e. generalization of sigma-sections

    Bug Fixes

    • S2Grid behaves more like vector3d
    • vector3d/eq takes antipodal symmetry into account
    • Euler angle conversion was sometimes wrong
    • tensors multiplication was sometimes wrong
    • rank 3 tensors get options 'doubleConvention' and 'singleConvention' for the conversion into the Voigt matrix representation
    • documentation fixes
    • Miller('[100]') gives not the correct result
    • import wizard now generates correct CS definition
    • import filter for uxd files should now work more reliable

    MTEX 3.2 - 05/2011

    3d EBSD Analysis

    This release for the first time supports 3d EBSD data. In particular, MTEX is now able to

    • import 3d EBSD data from stacked files
    • visualize 3d EBSD data by plotting interactive slices through the specimen
    • 3d grain detection
    • the topology of 3d grains, i.e. boundaries, neighboring grains, etc.

    Misorientation Analysis

    • computation of the uncorrelated misorientation distribution (MDF) for one or two ODFs
    • computation of the theoretical angle distribution of an ODF or MDF
    • computation of the misorientation to mean for EBSD data

    New Syntax for EBSD and grain variables

    EBSD and grain variables can now be indexed by phase, region or grain / ebsd variables. Let us assume we have a two phase ebsd variable containing 'Fe' and 'Mg' then can restrict our dataset to the Fe - phase only by writing

    ebsd('Fe')

    The same works with grains and also with more than one phase. Please have a look into the documentation for information how to index ebsd and grain variables.

    Accordingly the following syntax is now depreciated.

    calcODF(ebsd,'phase',2)

    It should be replaced by

    calcODF(ebsd('Fe'))

    Other Enhangments

    • better import and export of pole figures, odfs and EBSD data
    • automatic centering of a specimen with respect to its specimen symmetry
    • download and import tensors from http://www.materialproperties.org/
    • new interfaces for Rigaku, Siemens, Bruker and many other X-ray devices and formats
    • support for rank three tensors, i.e, for piezo electricity tensors
    • improved documentation
    • many bug fixes

    MTEX 3.1 - 03/2011

    Tensor Arithmetics This release introduces tensor analysis into MTEX, this includes

    • import of tensors via the import wizard
    • basic tensor operations: multiplication, rotation, inversion
    • advanced visualization
    • computation of averaged tensors from EBSD data and ODFs
    • computation of standard elasticity tensors like: Youngs modulus, linear compressibility, Christoffel tensor, elastic wave velocities

    Other Enhancements

    • support for different crystal reference frame conventions
    • automatic conversion between different reference frames
    • definition of crystal directions in direct and reciprocal space
    • more predefines orientations: Cube, CubeND22, CubeND45, CubeRD, Goss, Copper, SR, Brass, PLage, QLage, ...
    • improved EBSD and grain plots
    • new and improved interfaces
    • many bug fixes

    MTEX 3.0 - 10/2010

    Crystal Geometry

    This release contains a completely redesigned crystal geometry engine which is thought to be much more intuitive and flexible. In particular, it introduces two new classes rotation and orientation which make it much easier to work with crystal orientations. Resulting features are

    • no more need for quaternions
    • support for Bunge, Roe, Matthies, Kocks, and Canova Euler angle convention
    • a simple definition of fibres
    • simply check whether two orientations are symmetrically equivalent

    Other Enhancements

    • automatic kernel selection in ODF estimation from EBSD data
    • support for Bingham model ODFs
    • estimation of Bingham parameters from EBSD data
    • faster and more accurate EBSD simulation
    • faster grain reconstruction
    • improved documentation
    • improved output
    • MTEX is now compatible with NFFT 3.1.3

    MTEX 2.0 - 10/2009

    Grain Analysis for EBSD Data

    MTEX is now able to partition spatial EBSD data into grains. This allows for the computation of various grain characteristics, as well as the computation and visualization of the grain boundaries and neighborhood relationships. Main features are:

    • Grains statistics (area, diameter, mean orientation, ...)
    • Missorientation analysis
    • Interactive selection of grains by various criteria
    • ODF-calculations for any subset of grains
    • A large palette of plotting possibilities.

    Visualization Improvements

    • ODF fibre plot
    • support for different x-axis alignment - plotx2north, plotx2east
    • plot EBSD data with respect to arbitrary properties
    • plot zero regions of ODFs and pole figures white
    • pole figure contour plots
    • color triangle for spatial EBSD plots

    General Improvements

    • ODF import / export
    • rotate EBSD data
    • Pole figure normalization
    • improved interfaces and import wizard
    • speed improvement of several side-functions as well as core-functions of @quaternions and spherical grids.

    Incompatible Changes to Previous Versions

    • The flags reduced and axial have been replaced by the flag antipodal

    MTEX 1.2 - 05/2009

    Improved EBSD import

    • import-weighted EBSD (e.g. from odf modeling)
    • new HKL and Chanel interfaces (.ang and .ctf files)
    • import of multiple phases
    • import of arbitrary properties as MAD, detection error, etc.

    Improved EBSD plotting

    • plot EBSD data in axis angle and Rodrigues space
    • annotations in these spaces
    • plot arbitrary properties as MAD, detection error, etc.
    • better orientation colorcoding
    • superpose odf, pole figure and EBSD plots
    • better interpolation

    General Improvements

    • support for different crystal geometry setups
    • faster and more accurate volume computation
    • improved function modalorientation
    • improved documentation

    Incompatible Changes to Previous Versions

    • The flag reduced has been replaced by the flag axial

    MTEX 1.1 - 12/2008

    Improved Import Wizzard

    • Load CIF files to specify crystal geometry
    • Import EBSD data with coordinates
    • More options to specify the alignment of the specimen coordinate system
    • support for popla *.epf files, *.plf files, and *.nja files

    Improved Pole Figure Analysis

    • Background correction and defocusing
    • Outlier detection and elimination

    Improved EBSD Data Support

    • Spatial plot of EBSD data
    • Modify EBSD data in the same way as pole figures

    Improved Plotting

    • GUI to modify plots more easily
    • Annotate orientations into pole figure plots
    • Annotate orientations into ODF sections
    • Coordinate systems for ODF and pole figure plots
    • More flexible and consistent option system
    • Default plotting options like FontSize, Margin, ...
    • Speed improvements

    Bug Fixes

    • ModalOrientation works now much better
    • Plot (0,0) coordinate in ODF plot at upper left
    • Fixed a bug in ODF estimation from EBSD data

    MTEX 1.0 - 06/2008

    New Installer Including Binaries for Windows, Linux, and Max OSX

    • MTEX ships now with an automated installer and binaries for Windows, Linux, and Mac OSX. This makes it in unnecessary to install any additional library and to compile the toolbox. (Thanks to F. Bachmann, C. Randau, and F. Wobbe)

    New ODF Class

    • The new function FourierODF provides an easy way to define ODFs via their Fourier coefficients. In particular, MTEX allows now to calculate with those ODFs in the same manner as with any other ODFs.

    New Interfaces

    • New PoleFigure interface for xrdml data (F. Bachmann)

    Improved Plotting

    • Plot EBSD data and continuous ODFs into one plot
    • Miller indices and specimen directions can now be plotted directly into pole figures or inverse pole figures.
    • New plotting option north, south for spherical plots
    • Improved colorbar handling
    • Spherical grids
    • More spherical projections

    Incompatible Changes With Previous Releases

    • The flag hemisphere in S2Grid has been replaced by north, south, and antipodal making it more consistent with the plotting routine.

    Improved Documentation

    MTEX comes now with over 500 help pages explaining the mathematical concepts, the philosophy behind MTEX and the syntax and usage of all 300 functions available in MTEX. Furthermore, you find numerous examples and tutorials on ODF estimation, data import, calculation of texture characteristics, ODF and pole figure plotting, etc.

    Bug Fixes

    • Fixed zero range method
    • Fixed automatic ghost correction
    • Fixed some loadPoleFigure issues
    • Many other bug fixes.

    MTEX 0.4 - 04/2008

    Speed Improvements

    New Support of EBSD Data Analysis

    • Import EBSD data from arbitrary data formats.
    • New class EBSD to store and manipulate with EBSD data.
    • Plot pole figures and inverse pole figures from EBSD data.
    • Recover ODFs from EBSD data via kernel density estimation.
    • Estimate Fourier coefficients from EBSD data.
    • Simulate EBSD data from ODFs.
    • Export EBSD data.

    New Functions

    • fibreVolume calculates the volume fraction within a fibre.
    • plotSpektra plots the Fourier coefficients of an ODF.
    • setcolorrange and the plotting option colorrange allow for consistent color coding for arbitrary plots.
    • A colorbar can be added to any plots.
    • mat2quat and quat2mat convert rotation matrices to quaternions and vice versa.

    Incompatible Changes With Previous Releases

    • New, more flexible syntax for the generation of S2Grids
    • Slightly changed the syntax of unimodalODF and fibreODF.
    • Default plotting options are set to {}, i.e. 'antipodal' has to add manually if desired
    • Crystal symmetry triclinic is not called tricline anymore.

    MTEX 0.3 - 10/2007

    • new function fourier to calculate the Fourier coefficents of an arbitrary ODF
    • new option ghost correction in function calcODF
    • new option zero range in function calcODF
    • new function loadEBSD to import EBSD data
    • simplified syntax for the import of diffraction data
    • new import wizard for pole figure data
    • support of triclinic crystal symmetry with arbitrary angles between the axes
    • default plotting options may now be specified in mtex_settings.m
    • new plot option 3d for a three-dimensional spherical plot of pole figures
    • contour levels may be specified explicitly in all plot functions plotodf, plotpdf and plotipdf
    • new plot option logarithmic
    • many bugfixes

    MTEX 0.2 - 07/2007

    • new functions texture index, entropy, volume
    • creatly improved help
    • improved installation
    • new options for plotting routines for specific ODF sections
    • many bugfixes

    MTEX 0.1 - 03/2007

    • initial release
\ No newline at end of file +

By default, calcGrains does also use the 'not Indexed' phase.

  • create customized orientation colormaps

Other

  • the comand set_mtex_option is obsolete. Use the matlab command setMTEXpref(...) instead. Additionally, one can now see all options by the command getpref('mtex')

MTEX 3.2.3 - 03/2012

bugfix release

MTEX 3.2.1 - 11/2011

New Features

  • Import and Export to VPSC
  • export EBSD data with all properties
  • improved ODF calculation from pole figures by using quadrature weights for the pole figure grid
  • implemented spherical Voronoi decomposition and computation of spherical quadrature weights
  • plot odf-space in omega-sections, the i.e. generalization of sigma-sections

Bug Fixes

  • S2Grid behaves more like vector3d
  • vector3d/eq takes antipodal symmetry into account
  • Euler angle conversion was sometimes wrong
  • tensors multiplication was sometimes wrong
  • rank 3 tensors get options 'doubleConvention' and 'singleConvention' for the conversion into the Voigt matrix representation
  • documentation fixes
  • Miller('[100]') gives not the correct result
  • import wizard now generates correct CS definition
  • import filter for uxd files should now work more reliable

MTEX 3.2 - 05/2011

3d EBSD Analysis

This release for the first time supports 3d EBSD data. In particular, MTEX is now able to

  • import 3d EBSD data from stacked files
  • visualize 3d EBSD data by plotting interactive slices through the specimen
  • 3d grain detection
  • the topology of 3d grains, i.e. boundaries, neighboring grains, etc.

Misorientation Analysis

  • computation of the uncorrelated misorientation distribution (MDF) for one or two ODFs
  • computation of the theoretical angle distribution of an ODF or MDF
  • computation of the misorientation to mean for EBSD data

New Syntax for EBSD and grain variables

EBSD and grain variables can now be indexed by phase, region or grain / ebsd variables. Let us assume we have a two phase ebsd variable containing 'Fe' and 'Mg' then can restrict our dataset to the Fe - phase only by writing

ebsd('Fe')

The same works with grains and also with more than one phase. Please have a look into the documentation for information how to index ebsd and grain variables.

Accordingly the following syntax is now depreciated.

calcODF(ebsd,'phase',2)

It should be replaced by

calcODF(ebsd('Fe'))

Other Enhangments

  • better import and export of pole figures, odfs and EBSD data
  • automatic centering of a specimen with respect to its specimen symmetry
  • download and import tensors from http://www.materialproperties.org/
  • new interfaces for Rigaku, Siemens, Bruker and many other X-ray devices and formats
  • support for rank three tensors, i.e, for piezo electricity tensors
  • improved documentation
  • many bug fixes

MTEX 3.1 - 03/2011

Tensor Arithmetics This release introduces tensor analysis into MTEX, this includes

  • import of tensors via the import wizard
  • basic tensor operations: multiplication, rotation, inversion
  • advanced visualization
  • computation of averaged tensors from EBSD data and ODFs
  • computation of standard elasticity tensors like: Youngs modulus, linear compressibility, Christoffel tensor, elastic wave velocities

Other Enhancements

  • support for different crystal reference frame conventions
  • automatic conversion between different reference frames
  • definition of crystal directions in direct and reciprocal space
  • more predefines orientations: Cube, CubeND22, CubeND45, CubeRD, Goss, Copper, SR, Brass, PLage, QLage, ...
  • improved EBSD and grain plots
  • new and improved interfaces
  • many bug fixes

MTEX 3.0 - 10/2010

Crystal Geometry

This release contains a completely redesigned crystal geometry engine which is thought to be much more intuitive and flexible. In particular, it introduces two new classes rotation and orientation which make it much easier to work with crystal orientations. Resulting features are

  • no more need for quaternions
  • support for Bunge, Roe, Matthies, Kocks, and Canova Euler angle convention
  • a simple definition of fibres
  • simply check whether two orientations are symmetrically equivalent

Other Enhancements

  • automatic kernel selection in ODF estimation from EBSD data
  • support for Bingham model ODFs
  • estimation of Bingham parameters from EBSD data
  • faster and more accurate EBSD simulation
  • faster grain reconstruction
  • improved documentation
  • improved output
  • MTEX is now compatible with NFFT 3.1.3

MTEX 2.0 - 10/2009

Grain Analysis for EBSD Data

MTEX is now able to partition spatial EBSD data into grains. This allows for the computation of various grain characteristics, as well as the computation and visualization of the grain boundaries and neighborhood relationships. Main features are:

  • Grains statistics (area, diameter, mean orientation, ...)
  • Missorientation analysis
  • Interactive selection of grains by various criteria
  • ODF-calculations for any subset of grains
  • A large palette of plotting possibilities.

Visualization Improvements

  • ODF fibre plot
  • support for different x-axis alignment - plotx2north, plotx2east
  • plot EBSD data with respect to arbitrary properties
  • plot zero regions of ODFs and pole figures white
  • pole figure contour plots
  • color triangle for spatial EBSD plots

General Improvements

  • ODF import / export
  • rotate EBSD data
  • Pole figure normalization
  • improved interfaces and import wizard
  • speed improvement of several side-functions as well as core-functions of @quaternions and spherical grids.

Incompatible Changes to Previous Versions

  • The flags reduced and axial have been replaced by the flag antipodal

MTEX 1.2 - 05/2009

Improved EBSD import

  • import-weighted EBSD (e.g. from odf modeling)
  • new HKL and Chanel interfaces (.ang and .ctf files)
  • import of multiple phases
  • import of arbitrary properties as MAD, detection error, etc.

Improved EBSD plotting

  • plot EBSD data in axis angle and Rodrigues space
  • annotations in these spaces
  • plot arbitrary properties as MAD, detection error, etc.
  • better orientation colorcoding
  • superpose odf, pole figure and EBSD plots
  • better interpolation

General Improvements

  • support for different crystal geometry setups
  • faster and more accurate volume computation
  • improved function modalorientation
  • improved documentation

Incompatible Changes to Previous Versions

  • The flag reduced has been replaced by the flag axial

MTEX 1.1 - 12/2008

Improved Import Wizzard

  • Load CIF files to specify crystal geometry
  • Import EBSD data with coordinates
  • More options to specify the alignment of the specimen coordinate system
  • support for popla *.epf files, *.plf files, and *.nja files

Improved Pole Figure Analysis

  • Background correction and defocusing
  • Outlier detection and elimination

Improved EBSD Data Support

  • Spatial plot of EBSD data
  • Modify EBSD data in the same way as pole figures

Improved Plotting

  • GUI to modify plots more easily
  • Annotate orientations into pole figure plots
  • Annotate orientations into ODF sections
  • Coordinate systems for ODF and pole figure plots
  • More flexible and consistent option system
  • Default plotting options like FontSize, Margin, ...
  • Speed improvements

Bug Fixes

  • ModalOrientation works now much better
  • Plot (0,0) coordinate in ODF plot at upper left
  • Fixed a bug in ODF estimation from EBSD data

MTEX 1.0 - 06/2008

New Installer Including Binaries for Windows, Linux, and Max OSX

  • MTEX ships now with an automated installer and binaries for Windows, Linux, and Mac OSX. This makes it in unnecessary to install any additional library and to compile the toolbox. (Thanks to F. Bachmann, C. Randau, and F. Wobbe)

New ODF Class

  • The new function FourierODF provides an easy way to define ODFs via their Fourier coefficients. In particular, MTEX allows now to calculate with those ODFs in the same manner as with any other ODFs.

New Interfaces

  • New PoleFigure interface for xrdml data (F. Bachmann)

Improved Plotting

  • Plot EBSD data and continuous ODFs into one plot
  • Miller indices and specimen directions can now be plotted directly into pole figures or inverse pole figures.
  • New plotting option north, south for spherical plots
  • Improved colorbar handling
  • Spherical grids
  • More spherical projections

Incompatible Changes With Previous Releases

  • The flag hemisphere in S2Grid has been replaced by north, south, and antipodal making it more consistent with the plotting routine.

Improved Documentation

MTEX comes now with over 500 help pages explaining the mathematical concepts, the philosophy behind MTEX and the syntax and usage of all 300 functions available in MTEX. Furthermore, you find numerous examples and tutorials on ODF estimation, data import, calculation of texture characteristics, ODF and pole figure plotting, etc.

Bug Fixes

  • Fixed zero range method
  • Fixed automatic ghost correction
  • Fixed some loadPoleFigure issues
  • Many other bug fixes.

MTEX 0.4 - 04/2008

Speed Improvements

New Support of EBSD Data Analysis

  • Import EBSD data from arbitrary data formats.
  • New class EBSD to store and manipulate with EBSD data.
  • Plot pole figures and inverse pole figures from EBSD data.
  • Recover ODFs from EBSD data via kernel density estimation.
  • Estimate Fourier coefficients from EBSD data.
  • Simulate EBSD data from ODFs.
  • Export EBSD data.

New Functions

  • fibreVolume calculates the volume fraction within a fibre.
  • plotSpektra plots the Fourier coefficients of an ODF.
  • setcolorrange and the plotting option colorrange allow for consistent color coding for arbitrary plots.
  • A colorbar can be added to any plots.
  • mat2quat and quat2mat convert rotation matrices to quaternions and vice versa.

Incompatible Changes With Previous Releases

  • New, more flexible syntax for the generation of S2Grids
  • Slightly changed the syntax of unimodalODF and fibreODF.
  • Default plotting options are set to {}, i.e. 'antipodal' has to add manually if desired
  • Crystal symmetry triclinic is not called tricline anymore.

MTEX 0.3 - 10/2007

  • new function fourier to calculate the Fourier coefficents of an arbitrary ODF
  • new option ghost correction in function calcODF
  • new option zero range in function calcODF
  • new function loadEBSD to import EBSD data
  • simplified syntax for the import of diffraction data
  • new import wizard for pole figure data
  • support of triclinic crystal symmetry with arbitrary angles between the axes
  • default plotting options may now be specified in mtex_settings.m
  • new plot option 3d for a three-dimensional spherical plot of pole figures
  • contour levels may be specified explicitly in all plot functions plotodf, plotpdf and plotipdf
  • new plot option logarithmic
  • many bugfixes

MTEX 0.2 - 07/2007

  • new functions texture index, entropy, volume
  • creatly improved help
  • improved installation
  • new options for plotting routines for specific ODF sections
  • many bugfixes

MTEX 0.1 - 03/2007

  • initial release
\ No newline at end of file diff --git a/pages/download/download.md b/pages/download/download.md index 2a109a193..1f4965965 100644 --- a/pages/download/download.md +++ b/pages/download/download.md @@ -26,6 +26,8 @@ features and syntax changes. File Name ||| Release Date||| Comments ||| Downloads :-|-|-|:-|-|-|:-|-|-|- +[**mtex-5.11.1.zip**](https://github.com/mtex-toolbox/mtex/releases/download/mtex-5.11.1/mtex-5.11.1.zip) ||| March 2024 ||| better grain reconstruction ||| ![](https://img.shields.io/github/downloads/mtex-toolbox/mtex/mtex-5.11.1/total?color=%23FFFFFF&label=%20&logoColor=%23FFFFFF&style=flat-square)  +[**mtex-6.0.beta3.zip**](https://github.com/mtex-toolbox/mtex/releases/download/mtex-6.0.beta3/mtex-6.0.beta3.zip) ||| March 2024 ||| pseudo 3d EBSD ||| ![](https://img.shields.io/github/downloads/mtex-toolbox/mtex/mtex-6.0.beta3/total?color=%23FFFFFF&label=%20&logoColor=%23FFFFFF&style=flat-square)  [**mtex-6.0.beta2.zip**](https://github.com/mtex-toolbox/mtex/releases/download/mtex-6.0.beta2/mtex-6.0.beta2.zip) ||| September 2023 ||| pseudo 3d EBSD ||| ![](https://img.shields.io/github/downloads/mtex-toolbox/mtex/mtex-6.0.beta2/total?color=%23FFFFFF&label=%20&logoColor=%23FFFFFF&style=flat-square)  [**mtex-5.10.2.zip**](https://github.com/mtex-toolbox/mtex/releases/download/mtex-5.10.2/mtex-5.10.2.zip) ||| September 2023 ||| bug fixes ||| ![](https://img.shields.io/github/downloads/mtex-toolbox/mtex/mtex-5.10.2/total?color=%23FFFFFF&label=%20&logoColor=%23FFFFFF&style=flat-square)  [**mtex-5.10.0.zip**](https://github.com/mtex-toolbox/mtex/releases/download/mtex-5.10.0/mtex-5.10.0.zip) ||| May 2023 ||| weighted Burgers vector ||| ![](https://img.shields.io/github/downloads/mtex-toolbox/mtex/mtex-5.10.0/total?color=%23FFFFFF&label=%20&logoColor=%23FFFFFF&style=flat-square)  diff --git a/pages/examples_matlab/ExGrains.html b/pages/examples_matlab/ExGrains.html new file mode 100644 index 000000000..7dbf363d5 --- /dev/null +++ b/pages/examples_matlab/ExGrains.html @@ -0,0 +1,16 @@ +--- +title: Grain Examples +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExGrains.html +folder: examples +toc: false +--- + + + Grain Examples + edit page + author:

Grain Examples

\ No newline at end of file diff --git a/pages/examples_matlab/ExIceSphericity.html b/pages/examples_matlab/ExIceSphericity.html new file mode 100644 index 000000000..4072a8ee0 --- /dev/null +++ b/pages/examples_matlab/ExIceSphericity.html @@ -0,0 +1,163 @@ +--- +title: Grain Boundary Statistics in Deformed Ice +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExIceSphericity.html +folder: examples +toc: false +--- + + + Grain Boundary Statistics in Deformed Ice + edit page + author: Sheng Fan, Department of Geology, University of Otago, Dunedin, New Zealand +

The sphericity as measure for grain boundary irregularity

Deformed polycrystalline materials such as ice often contain large grains interlocking with smaller grains, with many irregular grain boundaries. Boundary irregularity is hard to judge by visual inspection and it is better to use quantitative measures of boundary irregularity to infer processes across different deformation conditions. Here, we quantify the irregularity of each grain’s boundary by introducing a sphericity parameter \(\Psi\) which is calculated in 2-D from grain area A, grain boundary perimeter P, and area equivalent grain radius R by the formula

\[\Psi = \frac{A}{P \cdot R}\]

The grain sphericity \(\Psi\) is a useful indicator for grain boundary irregularity because it measures how closely a grain’s boundary resembles the circumference of a perfect circle. It decreases from \(\Psi = 0.5\), where the grain has a perfect circular shape, to \(\Psi = 0\) where the grain boundary is infinitely irregular. The statistics of grain boundary sphericity can be used to segregate recrystallised grains from remnant original grains (please refer to the paper for more details).

Data

The EBSD data set used in this demonstration (PIL185.ctf) is available from https://doi.org/10.6084/m9.figshare.13456550. The EBSD data were collected with a step size of 5 µm and representeds an ice sample deformed at -20°C to 12 percent axial strain. Let's import the data and reconstruct some grains.

+{% highlight matlab %} +% plotting convention +plotx2east +plotzIntoPlane + +% import the data +path = [mtexExamplePath filesep 'ExGrains' filesep ]; +ebsd = EBSD.load([path 'PIL185.ctf'],'convertSpatial2EulerReferenceFrame'); + +% critical misorientation for grain reconstruction +threshold = 10 *degree; + +% first pass at reconstructing grains +[grains, ebsd.grainId] = calcGrains(ebsd('ice'),'angle',threshold); + +% remove ebsd data that correspond to up to 4 pixel grains +ebsd(grains(grains.grainSize < 5)) = []; + +% redo grain reconstruction - interpolate non-indexed space +[grains, ebsd.grainId] = calcGrains(ebsd('ice'),'angle',threshold); + +% remove all boundary grains +grains(grains.isBoundary) = []; + +% remove too small irregular grains +grains(grains.grainSize < grains.boundarySize / 2) = []; + +% plot the result +plot(ebsd,ebsd.orientations) + +hold on +plot(grains.boundary) +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExIceSphericity_01.png" %} +

Computation of the Sphericity

Next, let's calculate and plot the sphericity parameter of each ice grain by making use of the functions grains.area, grains.perimeter and grains.equivalentRadius

+{% highlight matlab %} +% directly use the formula from the first paragraph +Psi = grains.area ./ grains.perimeter('withInclusion') ./ grains.equivalentRadius; + +% plot the result +plot(grains, Psi, 'colorrange', [0 0.5]) + +mtexColorbar ('title','Sphericity Parameter') +mtexColorMap jet +clear Psi +{% endhighlight %} +
+{% include inline_image.html file="ExIceSphericity_02.png" %} +

Influence of EBSD step size on sphericity parameter

Next we investigate how step size influences grain boundary irregularity measurements. To do this, we can artificially increase the step size of the EBSD data to from 10 up to 100 μm. Then, we choose one representative grain (one with a large number of pixels) and see how the sphericity parameter changes as the EBSD step size increases.

+{% highlight matlab %} +newMtexFigure('layout',[4,5]) +for i = 1:20 + + % now, we increase the step size of EBSD data artifically + ebsd_reduced = reduce(ebsd,i); + + % reconstruct grains using function calcGrains + grains_reduced = calcGrains(ebsd_reduced('ice')); + + % choose a grain with a large pixel number within the EBSD map with 5 + % micron step size, from each reduced EBSD map by location + grain = grains_reduced(findByLocation(grains_reduced('ice'), [1357 1952])); + + % calculate the sphericity parameter + Psi(i) = grain.area ./ (grain.perimeter('withInclusion') .* grain.equivalentRadius); + + % calculate the number of pixels + gS(i) = grain.grainSize; + + % plot evolution of grain geometry as step size increases + if i>1, nextAxis; end + plot(grain, Psi(i),'doNotDraw','micronbar','off') + mtexTitle([int2str(5*i) '\(\mu\)m'],'doNotDraw'); + +end + +setColorRange([0 0.5]) +mtexColorMap jet +mtexColorbar ('title', 'sphericity parameter') +{% endhighlight %} +
+{% include inline_image.html file="ExIceSphericity_03.png" %} +

Now we are able to plot the sphericity parameter as a function of the step size.

+{% highlight matlab %} +clf +scatter (gS, Psi, 150,5:5:100,'filled','MarkerEdgeColor','k','linewidth', 1.5) +colormap gray + +C = colorbar; +C.Label.String = 'EBSD step size, \mum'; +C.Ticks = 5:10:100; +xlabel('LOG (number of pixels)') +ylabel('Sphericity parameter') +set (gca, 'xscale', 'log') +{% endhighlight %} +
+{% include inline_image.html file="ExIceSphericity_04.png" %} +

Influence of grain boundary smoothness on sphericity parameter

Due to the square shape of pixels (prescribed by Oxford Instruments software), boundary elements lie either vertically or horizontally within the plane of analysis. Grains containing fewer pixels (i.e., smaller grains in maps with a fixed step size) appear more pixelated than grains containing numerous pixels. MTEX allows us to reduce artificial pixelation of grain boundary elements by applying the function smooth, which enhances the overall grain boundary smoothness by interpolating the coordinates of grain boundary elements while triple junction points remain locked or unlocked. In this study, we choose to lock the triple junction during grain boundary smoothening.

+{% highlight matlab %} +newMtexFigure('layout',[3,3],'figSize','normal'); + +% find all grains with more than 2000 pixels +grains = grains(grains.grainSize > 2000); + +for m = 1:36 + + % Smooth grain boundary to reduce pixelation, a larger m (smoothening + % parameter corresponds to a greater grain boundary smoothening + smoothGrains = smooth(grains, m); + + % calculate the sphericity parameter for smoothed grains + Psi(m) = median(smoothGrains.area ./ smoothGrains.equivalentRadius ./ smoothGrains.perimeter('withInclusion') ); + + if mod(m,4)~=1, continue; end + + % Visualise the evolution of grain boundary geometry as the smoothening + % parameter increases, using a grain as an example + + % select grain + grain = smoothGrains(findByLocation(smoothGrains, [1357 1952])); + + % plot it + if m>1, nextAxis; end + plot(grain, grain.area ./ grain.equivalentRadius ./ grain.perimeter('withInclusion'),... + 'micronbar','off','doNotDraw'); + mtexTitle(['m=',int2str(m)],'doNotDraw'); + +end + +setColorRange([0 0.5]) +mtexColorbar jet +{% endhighlight %} +
+{% include inline_image.html file="ExIceSphericity_05.png" %} +

Finally we plot the sphericity as a function of the smoothening parameter

+{% highlight matlab %} +clf +plot(1:length(Psi), Psi, 'o') +xlabel ('Smooth parameter') +ylabel ('Sphericity parameter') +{% endhighlight %} +
+{% include inline_image.html file="ExIceSphericity_06.png" %} +

References

\ No newline at end of file diff --git a/pages/examples_matlab/ExNeutronData.html b/pages/examples_matlab/ExNeutronData.html new file mode 100644 index 000000000..3c622fb84 --- /dev/null +++ b/pages/examples_matlab/ExNeutronData.html @@ -0,0 +1,16 @@ +--- +title: script_ExNeutronData +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExNeutronData.html +folder: examples +toc: false +--- + + + script_ExNeutronData + edit page + author:
\ No newline at end of file diff --git a/pages/examples_matlab/ExParentGrainReconstruction.html b/pages/examples_matlab/ExParentGrainReconstruction.html new file mode 100644 index 000000000..a9322d3e9 --- /dev/null +++ b/pages/examples_matlab/ExParentGrainReconstruction.html @@ -0,0 +1,16 @@ +--- +title: script_ExParentGrainReconstruction +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExParentGrainReconstruction.html +folder: examples +toc: false +--- + + + script_ExParentGrainReconstruction + edit page + author:
\ No newline at end of file diff --git a/pages/examples_matlab/ExPlasticity.html b/pages/examples_matlab/ExPlasticity.html new file mode 100644 index 000000000..33b1a2764 --- /dev/null +++ b/pages/examples_matlab/ExPlasticity.html @@ -0,0 +1,16 @@ +--- +title: script_ExPlasticity +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExPlasticity.html +folder: examples +toc: false +--- + + + script_ExPlasticity + edit page + author:
\ No newline at end of file diff --git a/pages/examples_matlab/ExSeismicPlots.html b/pages/examples_matlab/ExSeismicPlots.html new file mode 100644 index 000000000..8bdc07a8c --- /dev/null +++ b/pages/examples_matlab/ExSeismicPlots.html @@ -0,0 +1,294 @@ +--- +title: Seismic velocities and anisotropy +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExSeismicPlots.html +folder: examples +toc: false +--- + + + Seismic velocities and anisotropy + edit page + author:

Calculalating and plotting elastic velocities from elastic stiffness Cijkl tensor and density (by David Mainprice).

Crystal Symmetry and definition of the elastic stiffness tensor

crystal symmetry - Orthorhombic mmm Olivine structure (4.7646 10.2296 5.9942 90.00 90.00 90.00)

+{% highlight matlab %} +cs_tensor = crystalSymmetry('mmm',[4.7646,10.2296,5.9942],... + 'x||a','z||c','mineral','Olivine'); +{% endhighlight %} +

Import 4th rank tensor as 6 by 6 matrix

Olivine elastic stiffness (Cij) tensor in GPa Abramson E.H., Brown J.M., Slutsky L.J., and Zaug J.(1997) The elastic constants of San Carlos olivine to 17 GPa. Journal of Geophysical Research 102: 12253-12263.

Enter tensor as 6 by 6 matrix,M line by line.

+{% highlight matlab %} +M = [[320.5 68.15 71.6 0 0 0];... + [ 68.15 196.5 76.8 0 0 0];... + [ 71.6 76.8 233.5 0 0 0];... + [ 0 0 0 64 0 0];... + [ 0 0 0 0 77 0];... + [ 0 0 0 0 0 78.7]]; + +% Define density (g/cm3) +rho=3.355; + +% Define tensor object in MTEX +% Cij -> Cijkl - elastic stiffness tensor +C = stiffnessTensor(M,cs_tensor,'density',rho) +{% endhighlight %} + +{% highlight plaintext %} +C = stiffnessTensor (Olivine) + density: 3.355 + unit : GPa + rank : 4 (3 x 3 x 3 x 3) + + tensor in Voigt matrix representation: + 320.5 68.2 71.6 0 0 0 + 68.2 196.5 76.8 0 0 0 + 71.6 76.8 233.5 0 0 0 + 0 0 0 64 0 0 + 0 0 0 0 77 0 + 0 0 0 0 0 78.7 +{% endhighlight %} +

Compute seismic velocities as functions on the sphere

+{% highlight matlab %} +[vp,vs1,vs2,pp,ps1,ps2] = C.velocity('harmonic'); +{% endhighlight %} +

Plotting section

Here we set preference for a nice plot.

+{% highlight matlab %} +% plotting convention - plot a-axis to east +plota2east; + +% set colour map to seismic color map : blue2redColorMap +setMTEXpref('defaultColorMap',blue2redColorMap) + +% some options +blackMarker = {'Marker','s','MarkerSize',10,'antipodal',... + 'MarkerEdgeColor','white','MarkerFaceColor','black','doNotDraw'}; +whiteMarker = {'Marker','o','MarkerSize',10,'antipodal',... + 'MarkerEdgeColor','black','MarkerFaceColor','white','doNotDraw'}; + +% some global options for the titles +%titleOpt = {'FontSize',getMTEXpref('FontSize'),'visible','on'}; %{'FontSize',15}; +titleOpt = {'visible','on','color','k'}; + +% Setup multiplot +% define plot size [origin X,Y,Width,Height] +mtexFig = mtexFigure('position',[0 0 1000 1000]); + +% set up spacing between subplots default is 10 pixel +%mtexFig.innerPlotSpacing = 20; + +% Standard Seismic plot with 8 subplots in 3 by 3 matrix +% +% Plot matrix layout +% 1 Vp 2 AVs 3 S1 polarizations +% 4 Vs1 5 Vs2 6 dVs +% 7 Vp/Vs1 8 Vp/Vs2 +% +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_01.png" %} +
+{% highlight matlab %} +%************************************************************************** +% Vp : Plot P-wave velocity (km/s) +%************************************************************************** + +% Plot P-wave velocity (km/s) +plot(vp,'contourf','complete','upper') +mtexTitle('Vp (km/s)',titleOpt{:}) + +% extrema +[maxVp, maxVpPos] = max(vp); +[minVp, minVpPos] = min(vp); + +% percentage anisotropy +AVp = 200*(maxVp-minVp) / (maxVp+minVp); + +% mark maximum with black square and minimum with white circle +hold on +plot(maxVpPos.symmetrise,blackMarker{:}) +plot(minVpPos.symmetrise,whiteMarker{:}) +hold off + +% subTitle +xlabel(['Vp Anisotropy = ',num2str(AVp,'%6.1f')],titleOpt{:}) +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_02.png" %} +

AVS : Plot S-wave anisotropy percentage for each proppagation direction

defined as AVs = 200*(Vs1-Vs2)/(Vs1+Vs2)

+{% highlight matlab %} +% create a new axis +nextAxis + +% Plot S-wave anisotropy (percent) +AVs = 200*(vs1-vs2)./(vs1+vs2); +plot(AVs,'contourf','complete','upper'); +mtexTitle('S-wave anisotropy (%)',titleOpt{:}) + +% Max percentage anisotropy +[maxAVs,maxAVsPos] = max(AVs); +[minAVs,minAVsPos] = min(AVs); + +xlabel(['Max Vs Anisotropy = ',num2str(maxAVs,'%6.1f')],titleOpt{:}) + +% mark maximum with black square and minimum with white circle +hold on +plot(maxAVsPos.symmetrise,blackMarker{:}) +plot(minAVsPos.symmetrise,whiteMarker{:}) +hold off + +% mark crystal axes +text([xvector,yvector,zvector],{'[100] ','[010] ','[001]'},... + 'backgroundcolor','w','doNotDraw'); +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_03.png" %} +

S1 Polarization: Plot fastest S-wave (Vs1) polarization directions

+{% highlight matlab %} +% create a new axis +nextAxis + +plot(AVs,'contourf','complete','upper'); +mtexTitle('Vs1 polarization',titleOpt{:}) + +hold on +plot(ps1,'linewidth',2,'color','black','doNotDraw') +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_04.png" %} +

Vs1 : Plot Vs1 velocities (km/s)

+{% highlight matlab %} +% create a new axis +nextAxis + +plot(vs1,'contourf','doNotDraw','complete','upper'); +mtexTitle('Vs1 (km/s)',titleOpt{:}) + +% Percentage anisotropy +[maxS1,maxS1pos] = max(vs1); +[minS1,minS1pos] = min(vs1); +AVs1=200*(maxS1-minS1)./(maxS1+minS1); + +xlabel(['Vs1 Anisotropy = ',num2str(AVs1,'%6.1f')],titleOpt{:}) + +hold on +plot(ps1,'linewidth',2,'color','black') + +% mark maximum with black square and minimum with white circle +hold on +plot(maxS1pos.symmetrise,blackMarker{:}) +plot(minS1pos.symmetrise,whiteMarker{:}) +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_05.png" %} +

Vs2 : Plot Vs2 velocities (km/s)

+{% highlight matlab %} +% create a new axis +nextAxis + +plot(vs2,'contourf','doNotDraw','complete','upper'); +mtexTitle('Vs2 (km/s)',titleOpt{:}) + +% Percentage anisotropy +[maxS2,maxS2pos] = max(vs2); +[minS2,minS2pos] = min(vs2); +AVs2=200*(maxS2-minS2)./(maxS2+minS2); +xlabel(['Vs2 Anisotropy = ',num2str(AVs2,'%6.1f')],titleOpt{:}) + +hold on +plot(ps2,'linewidth',2,'color','black') + +% mark maximum with black square and minimum with white circle +hold on +plot(maxS2pos.symmetrise,blackMarker{:}) +plot(minS2pos.symmetrise,whiteMarker{:}) +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_06.png" %} +

dVs : Plot Velocity difference Vs1-Vs2 (km/s) plus Vs1 polarizations

+{% highlight matlab %} +% create a new axis +nextAxis + +dVs = vs1-vs2; +plot(dVs,'contourf','complete','upper'); +mtexTitle('dVs=Vs1-Vs2 (km/s)',titleOpt{:}) + +% Max percentage anisotropy +[maxdVs,maxdVsPos] = max(dVs); +[mindVs,mindVsPos] = min(dVs); + +xlabel(['Max dVs (km/s) = ',num2str(maxdVs,'%6.2f')],titleOpt{:}) + +% mark maximum with black square and minimum with white circle +hold on +plot(maxdVsPos.symmetrise,blackMarker{:}) +plot(mindVsPos.symmetrise,whiteMarker{:}) +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_07.png" %} +

Vp/Vs1 : Plot Vp/Vs1 ratio (no units)

+{% highlight matlab %} +% create a new axis +nextAxis + +vpvs1 = vp./vs1; +plot(vpvs1,'contourf','complete','upper'); +mtexTitle('Vp/Vs1',titleOpt{:}) + +% Percentage anisotropy +[maxVpVs1,maxVpVs1Pos] = max(vpvs1); +[minVpVs1,minVpVs1Pos] = min(vpvs1); +AVpVs1=200*(maxVpVs1-minVpVs1)/(maxVpVs1+minVpVs1); + +xlabel(['Vp/Vs1 Anisotropy = ',num2str(AVpVs1,'%6.1f')],titleOpt{:}) + +% mark maximum with black square and minimum with white circle +hold on +plot(maxVpVs1Pos.symmetrise,blackMarker{:}) +plot(minVpVs1Pos.symmetrise,whiteMarker{:}) +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_08.png" %} +

Vp/Vs2 : Plot Vp/Vs2 ratio (no units)

+{% highlight matlab %} +% create a new axis +nextAxis + +vpvs2 = vp./vs2; +plot(vpvs2,'contourf','complete','upper'); +mtexTitle('Vp/Vs2',titleOpt{:}) + +% Percentage anisotropy +[maxVpVs2,maxVpVs2Pos] = max(vpvs2); +[minVpVs2,minVpVs2Pos] = min(vpvs2); +AVpVs2=200*(maxVpVs2-minVpVs2)/(maxVpVs2+minVpVs2); + +xlabel(['Vp/Vs2 Anisotropy = ',num2str(AVpVs2,'%6.1f')],titleOpt{:}) + +% mark maximum with black square and minimum with white circle +hold on +plot(maxVpVs2Pos.symmetrise,blackMarker{:}) +plot(minVpVs2Pos.symmetrise,whiteMarker{:}) +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_09.png" %} +
+{% highlight matlab %} +% add colorbars to all plots +mtexColorbar +drawNow(gcm,'figSize','large') + +% reset old colormap +setMTEXpref('defaultColorMap',WhiteJetColorMap) +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicPlots_10.png" %} +
\ No newline at end of file diff --git a/pages/examples_matlab/ExSeismicVelocitySingleCrystalDemo2d.html b/pages/examples_matlab/ExSeismicVelocitySingleCrystalDemo2d.html new file mode 100644 index 000000000..3f7de287a --- /dev/null +++ b/pages/examples_matlab/ExSeismicVelocitySingleCrystalDemo2d.html @@ -0,0 +1,289 @@ +--- +title: Seismic velocities and anisotropy - single crystal plots +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExSeismicVelocitySingleCrystalDemo2d.html +folder: examples +toc: false +--- + + + Seismic velocities and anisotropy - single crystal plots + edit page + author:

Plot 2D velocity surfaces - phase, slowness & wavefront For given plane normal direction, for example xvector, yvector or zvector Stishovite (SiO2) at high pressure

David Mainprice 1/05/2018

The Elastic Stiffness Tensor of Stishovite

Reference: Elastic constants Stishovite, Weidner et al 1982 JGR
+Reference: Crystal Structure Sinclair and Ringwood 78 Nature P422
+d=4.2901
+{% highlight matlab %} +% Define density (g/cm3) + rho= 4.2901; + +% elastic Cij stiffness tensor (GPa) as matrix M + M = ... + [[ 453.00 211.00 203.00 0.00 0.00 0.00];... + [ 211.00 453.00 203.00 0.00 0.00 0.00];... + [ 203.00 203.00 776.00 0.00 0.00 0.00];... + [ 0.00 0.00 0.00 252.00 0.00 0.00];... + [ 0.00 0.00 0.00 0.00 252.00 0.00];... + [ 0.00 0.00 0.00 0.00 0.00 302.00]]; + +% define cartesian tensor crystal crystalSymmetry & frame +cs_Tensor = crystalSymmetry('4/mmm',[ 4.9133 4.9133 5.4048],... + [ 90.0000 90.0000 90.0000]*degree,'x||a','z||c',... + 'mineral','Stishovite 1982'); +% +% define elastic stiffness tensor Cijkl +C = stiffnessTensor(M,cs_Tensor,'density',rho); +{% endhighlight %} +

compute wave velocities and polarization directions

+{% highlight matlab %} +% the propagation direction is just the vector normal to the sphere +prop = S2AxisFieldHarmonic.normal; + +% the wave velocities and polarization directions as directional dependend +% functions +[vp,vs1,vs2,pp,ps1,ps2] = velocity(C); +{% endhighlight %} +

Plotting settings

+{% highlight matlab %} +% plane normal direction for 2d sections +planeNormal = vector3d.Z; + +% plotting convention - plot X-axis to east +plotx2east; + +% close all open graphics +close all + +% some global options for the titles +%titleOpt = {'FontSize',getMTEXpref('FontSize'),'visible','on','color','k'}; +titleOpt = {'FontSize',25}; +% option for legend +legendOpt = {'location','best'}; +% option for mtexColorbar +ColorbarOpt = {'location','southoutside'}; +% options for sections +optSec = {'color','interp','linewidth',5,'doNotDraw'}; +% options for quiver +optQuiver = {'linewidth',5,'autoScaleFactor',0.25,'doNotDraw'}; +% options for prop +optQuiverProp = {'color','k','linewidth',2,'autoScaleFactor',0.15,'doNotDraw'}; +{% endhighlight %} +

1: Phase velocity surface (km/s)

+{% highlight matlab %} +figure(1) + +% phase velocities +plotSection(vp,planeNormal,optSec{:}) +hold on +plotSection(vs1,planeNormal,optSec{:}) +plotSection(vs2,planeNormal,optSec{:}) + +% polarization directions +quiverSection(vp,pp,planeNormal,'color','c',optQuiver{:}) +quiverSection(vs1,ps1,planeNormal,'color','g',optQuiver{:}) +quiverSection(vs2,ps2,planeNormal,'color','m',optQuiver{:}) + +% plot propagation directions as reference +quiverSection(vp,prop,planeNormal,optQuiverProp{:}) +quiverSection(vs1,prop,planeNormal,optQuiverProp{:}) +quiverSection(vs2,prop,planeNormal,optQuiverProp{:}) + +axis off tight +legend('Vp','Vs1','Vs2','pp','ps1','ps2','X',legendOpt{:}) +mtexTitle('Phase velocity surfaces (km/s)',titleOpt{:}) + +% seismic velocity slow = red 2 blue =fast +mtexColorMap red2blue +mtexColorbar('Title','(km/s)',ColorbarOpt{:}) + +% Az El for planeNormal = Z +%view(0,85) +hold off +drawNow(gcm,'figSize','large') +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicVelocitySingleCrystalDemo2d_01.png" %} +

2: Slowness surface (s/km)

+{% highlight matlab %} +figure(2) + +% slowness +plotSection(1./vp,planeNormal,optSec{:}) +hold on +plotSection(1./vs1,planeNormal,optSec{:}) +plotSection(1./vs2,planeNormal,optSec{:}) + +% polarization directions +quiverSection(1./vp,pp,planeNormal,'color','c',optQuiver{:}) +quiverSection(1./vs1,ps1,planeNormal,'color','g',optQuiver{:}) +quiverSection(1./vs2,ps2,planeNormal,'color','m',optQuiver{:}) + +% plot propagation directions as reference +quiverSection(1./vp,prop,planeNormal,optQuiverProp{:}) +quiverSection(1./vs1,prop,planeNormal,optQuiverProp{:}) +quiverSection(1./vs2,prop,planeNormal,optQuiverProp{:}) + +axis off tight +legend('Vp','Vs1','Vs2','pp','ps1','ps2','X',legendOpt{:}) +mtexTitle('Slowness surfaces (km/s)',titleOpt{:}) + +% seismic slowness slow = blue 2 red =fast +mtexColorMap blue2red +mtexColorbar('Title','(s/km)',ColorbarOpt{:}) + +% Az El for planeNormal = Z +%view(0,85) +hold off +drawNow(gcm,'figSize','large') +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicVelocitySingleCrystalDemo2d_02.png" %} +

Select the two S-waves (Vs1 and Vs2 where Vs1>Vs2 in velocity)

by the orientation of the polarization vectors ps1 and ps2 with respect to the specimen Z direction. So that sv (v=vertical) is S-wave with polarization closest to Z sh (h=horizontal) has the polarization closest to the plane normal to Z Both polarizations pairs (sv and sh) and (ps1 and ps2) are orthogonal

which values to switch this defines a function which is either one or zero

+{% highlight matlab %} +id = angle(ps1,vector3d.Z) <= 89.9*degree; +vsv = id .* vs1 + (1-id) .* vs2; +vsh = id .* vs2 + (1-id) .* vs1; +psv = id .* ps1 + (1-id) .* ps2; +psh = id .* ps2 + (1-id) .* ps1; +{% endhighlight %} +

1: Phase velocity surface (km/s) with sv1 & vs2

+{% highlight matlab %} +figure(1) +% phase velocities +plotSection(vp,planeNormal,optSec{:}) +hold on +plotSection(vs1,planeNormal,optSec{:}) +plotSection(vs2,planeNormal,optSec{:}) + +% polarization directions +quiverSection(vp,pp,planeNormal,'color','c',optQuiver{:}) +quiverSection(vs1,ps1,planeNormal,'color','g',optQuiver{:}) +quiverSection(vs2,ps2,planeNormal,'color','m',optQuiver{:}) + +% plot propagation directions as reference +quiverSection(vp,prop,planeNormal,optQuiverProp{:}) +quiverSection(vs1,prop,planeNormal,optQuiverProp{:}) +quiverSection(vs2,prop,planeNormal,optQuiverProp{:}) + +axis off tight +legend('Vp','Vs1','Vs2','pp','ps1','ps2','X',legendOpt{:}) +mtexTitle('Phase velocity surfaces (km/s)',titleOpt{:}) + +mtexColorMap blue2red +mtexColorbar('Title','(km/s)',ColorbarOpt{:}) + +% Az El for planeNormal = Z +%view(0,85) +hold off +drawNow(gcm,'figSize','large') +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicVelocitySingleCrystalDemo2d_03.png" %} +

2: Phase velocity surface (km/s) with svs & vsh

+{% highlight matlab %} +figure(2) +% phase velocities +plotSection(vp,planeNormal,optSec{:}) +hold on +plotSection(vsv,planeNormal,optSec{:}) +plotSection(vsh,planeNormal,optSec{:}) + +% polarization directions +quiverSection(vp,pp,planeNormal,'color','c',optQuiver{:}) +quiverSection(vsv,ps1,planeNormal,'color','g',optQuiver{:}) +quiverSection(vsh,ps2,planeNormal,'color','m',optQuiver{:}) + +% plot propagation directions as reference +quiverSection(vp,prop,planeNormal,optQuiverProp{:}) +quiverSection(vsv,prop,planeNormal,optQuiverProp{:}) +quiverSection(vsh,prop,planeNormal,optQuiverProp{:}) + +axis off tight +legend('Vp','Vsv','Vsh','pp','ps1','ps2','X',legendOpt{:}) +mtexTitle('Phase velocity surfaces (km/s)',titleOpt{:}) + +mtexColorMap blue2red +mtexColorbar('Title','(km/s)',ColorbarOpt{:}) + +% Az El for planeNormal = Z +%view(0,85) +hold off +drawNow(gcm,'figSize','large') +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicVelocitySingleCrystalDemo2d_04.png" %} +

3: plot slowness in plane normal Z

+{% highlight matlab %} +figure(3) +plotSection(1./vp,planeNormal,optSec{:}) +hold on +plotSection(1./vs1,planeNormal,optSec{:}) +plotSection(1./vs2,planeNormal,optSec{:}) + +% polarization vectors pp,ps1,ps2 +quiverSection(1./vp,pp,planeNormal,'color','c',optQuiver{:}) +quiverSection(1./vs1,ps1,planeNormal,'color','g',optQuiver{:}) +quiverSection(1./vs2,ps2,planeNormal,'color','m',optQuiver{:}) + +% propagation vectors (prop) +quiverSection(1./vp,prop,planeNormal,optQuiverProp{:}) +quiverSection(1./vs1,prop,planeNormal,optQuiverProp{:}) +quiverSection(1./vs2,prop,planeNormal,optQuiverProp{:}) + +axis off tight +legend('Sp','Ss1','Ss2','Sp','Ss1','Ss2','X',legendOpt{:}) +mtexTitle('Stishovite : Slowness surfaces (s/km)',titleOpt{:}) +% seismic slowness slow = blue 2 red =fast +mtexColorMap red2blue +mtexColorbar('Title','(s/km)',ColorbarOpt{:}) + +hold off +drawNow(gcm,'figSize','large') +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicVelocitySingleCrystalDemo2d_05.png" %} +

Compute WaveFront as spherical functions: EnergyVectors Evp, Evs1 & Evs2

+{% highlight matlab %} +Evp = energyVector(C,[],vp,pp); +Evs1 = energyVector(C,[],vs1,ps1); +Evs2 = energyVector(C,[],vs2,ps2); +{% endhighlight %} +

plot wavefront in plane normal Z

+{% highlight matlab %} +close all + +% Vp,Vs1,Vs2 wavefronts with motif +%optSec = {'linewidth',5,'doNotDraw'}; +optSec = {'color','interp','linewidth',2,'doNotDraw'}; +plotSection(Evp,planeNormal,optSec{:}) +hold on +plotSection(Evs1,planeNormal,optSec{:}) +plotSection(Evs2,planeNormal,optSec{:}) +% +% polarization vectors pp,ps1,ps2 +quiverSection(Evp,Evp,planeNormal,'color','c',optQuiver{:}) +quiverSection(Evs1,Evs1,planeNormal,'color','g',optQuiver{:}) +quiverSection(Evs2,Evs2,planeNormal,'color','m',optQuiver{:}) + +% propagation vectors (prop) +quiverSection(Evp,prop,planeNormal,optQuiverProp{:}) +quiverSection(Evs1,prop,planeNormal,optQuiverProp{:}) +quiverSection(Evs2,prop,planeNormal,optQuiverProp{:}) + +axis off tight +legend('Evp','Es1','Es2','Epv','Eps1','Eps2','X',legendOpt{:}) +mtexTitle('Stishovite : Wavefront surfaces (km/s)',titleOpt{:}) + +mtexColorbar('Title','(km/s)',ColorbarOpt{:}) + +hold off +drawNow(gcm,'figSize','large') + +% End of demo +{% endhighlight %} +
+{% include inline_image.html file="ExSeismicVelocitySingleCrystalDemo2d_06.png" %} +
\ No newline at end of file diff --git a/pages/examples_matlab/ExSeismics.html b/pages/examples_matlab/ExSeismics.html new file mode 100644 index 000000000..2e2059f91 --- /dev/null +++ b/pages/examples_matlab/ExSeismics.html @@ -0,0 +1,16 @@ +--- +title: script_ExSeismics +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExSeismics.html +folder: examples +toc: false +--- + + + script_ExSeismics + edit page + author:
\ No newline at end of file diff --git a/pages/examples_matlab/ExSlipSystemAlumina.html b/pages/examples_matlab/ExSlipSystemAlumina.html new file mode 100644 index 000000000..5497cfd5d --- /dev/null +++ b/pages/examples_matlab/ExSlipSystemAlumina.html @@ -0,0 +1,191 @@ +--- +title: Slip System Analysis in \(\alpha\)-Alumina +last_updated: 25-Mar-2024 +sidebar: examples_sidebar +permalink: ExSlipSystemAlumina.html +folder: examples +toc: false +--- + + + Slip System Analysis in \(\alpha\)-Alumina + edit page + author: Ruben Wagner, Robert Lehnert, TU Bergakademie Freiberg, Institute +

of Materials Engineering, Germany

Data Import

The following EBSD maps has been measured by Ruben Wagner TUBAF, Institute of Materials Engineering, 2022 within the project SFB 920. It shows an alumina inclusions in 42CrMo4 steel after nanoindentation.

+{% highlight matlab %} +% set crystal symmetry +cs = crystalSymmetry.load('Al2O3-Corundum.cif'); + +% set plotting convention +setMTEXpref('xAxisDirection','east'); +setMTEXpref('zAxisDirection','intoPlane'); + +% import data +path = [mtexExamplePath filesep 'ExPlasticity' filesep ]; +ebsd = EBSD.load([path 'K1_C_16_EBSD_original_bc.txt'],... + {'notIndexed',cs,'notIndexed'},'interface','csv','silent'); + +% rotate the data in the right reference frame +rot = rotation.byEuler(90*degree,180*degree,0*degree); +ebsd = rotate(ebsd('indexed'),rot,'keepXY'); +{% endhighlight %} +

Initial grain reconstruction and visualization

+{% highlight matlab %} +% reconstruct grain structure +[grains,ebsd.grainId] = calcGrains(ebsd,'angle',1*degree); + +cKey = ipfColorKey(cs); +cKey.inversePoleFigureDirection = vector3d(1,0,0); + +figure(2) +plot(ebsd,cKey.orientation2color(ebsd.orientations)) +hold on +plot(grains.boundary,grains.boundary.misrotation.angle./degree,'linewidth',3) +hold off +mtexColorbar +{% endhighlight %} +
+{% include inline_image.html file="ExSlipSystemAlumina_01.png" %} +

Correct for misindexiation due to pseudosymmetry

Looking at the raw data we observe several neighbouring measurements that are exactly 180 degree rotated with respect to each other. This is indicated by color coded grain boundaries. It is suspected that this misorientation occurs as the EBSD system has a hard time to distinguish the Kikuchi pattern of two orientations that differ by a rotation about the c-axis by 180 degree.

In order to correct for this misindexiation we proceed as follows

# Identify grain boundaries due to pseudo symmetry
+# Merge grains with common pseudo symmetry grain boundaries and
+compute the dominant orientation of the merged grains
+# Correct the EBSD data according to the pseudo symmetry

1. Identify boundaries between pseudosymmetric grains

+{% highlight matlab %} +% all Corundum Corundum boundaries +gB = grains.boundary('indexed'); + +% define the pseudo symmetry +pseudoSym = orientation.byAxisAngle(cs.cAxis,180*degree); + +% allow for a three 3 degree threshold +ispseudoBnd = angle(gB.misorientation,pseudoSym)<3*degree; +{% endhighlight %} +

2. Merge grains with common pseudo symmetry grain boundaries This results is two big grains as visualised below

+{% highlight matlab %} +[grains, parentId] = grains.merge(gB(ispseudoBnd),'calcMeanOrientation',... + @(g) updateOri(g,pseudoSym)); + +plot(grains,cKey.orientation2color(grains.meanOrientation)) +{% endhighlight %} +
+{% include inline_image.html file="ExSlipSystemAlumina_02.png" %} +

3. Correct the EBSD data according to the pseudo symmetry

+{% highlight matlab %} +% find all EBSD data which differ by the computed grain orientation by +% about 180 degree +flipPseudo = ~(angle(ebsd.orientations,grains(parentId(ebsd.grainId)).meanOrientation)> 10*degree); + +ebsd(flipPseudo).orientations = ebsd(flipPseudo).orientations * pseudoSym; + +cKey.inversePoleFigureDirection = zvector; +plot(ebsd,cKey.orientation2color(ebsd.orientations)) +{% endhighlight %} +
+{% include inline_image.html file="ExSlipSystemAlumina_03.png" %} +

Data cleaning

We perform some more data cleaning steps including

  1. removing too small grains
  2. filling of the not indexed pixels
+{% highlight matlab %} +% redo grain reconstruction +[grains,ebsd.grainId] = calcGrains(ebsd,'angle',1*degree); + +% and remove little grains +ebsd(grains(grains.grainSize<4)) = []; +[grains,ebsd.grainId] = calcGrains(ebsd,'angle',1*degree); + +% filling EBSD holes +F = halfQuadraticFilter; +F.alpha=0.3; +ebsdS = smooth(ebsd,F,'fill',grains); + +% visualize the result +cKey.inversePoleFigureDirection = zvector; +plot(ebsdS,cKey.orientation2color(ebsdS.orientations)) + +hold on +plot(ebsd, ebsd.bc,'FaceAlpha',0.3) +colormap gray % make the image grayscale +mtexColorbar +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSlipSystemAlumina_04.png" %} +

Schmid Factor Analysis

Next we compute the the active slip system during pressure in z-direction. The possible dominant slip systems in alumina are described in Mao2011 and 2012 as

+{% highlight matlab %} +n = Miller(1,0,-1,1,cs,'HKIL'); +b = Miller(-1,2,-1,0,cs,'UVTW'); +sS = slipSystem(b,n) +{% endhighlight %} + +{% highlight plaintext %} +sS = slipSystem (Corundum) + + U V T W | H K I L CRSS + -1 2 -1 0 1 0 -1 1 1 +{% endhighlight %} +

Next we determine the Schmid factor for all symmetrically equivalent slip systems.

+{% highlight matlab %} +% rotate symmetrically equivalent slip systems into specimen coordinates of +% each grain +sSLocal = grains.meanOrientation * sS.symmetrise('antipodal'); + +% compute Schmid factor according Z axis +sigma = stressTensor.uniaxial(vector3d.Z); +SF = abs(sSLocal.SchmidFactor(sigma)); + +% sort the slips system according to their Schmid factor from largest to +% smallest +[SF, reorder] = sort(SF,2,"descend"); +reorder = sub2ind(size(reorder),repmat((1:size(reorder,1))',1,size(reorder,2)),reorder); +sSLocal = sSLocal(reorder); +{% endhighlight %} +

Finally, we plot the trace of the slip planes together with the slip direction in the EBSD map.

+{% highlight matlab %} +figure(2) +cKey.inversePoleFigureDirection = zvector; +plot(ebsdS,cKey.orientation2color(ebsdS.orientations)) + +hold on +plot(ebsd, ebsd.bc,'FaceAlpha',0.3) +colormap gray % make the image grayscale +hold off + +order = 1; + +hold on +% visualize the trace of the slip plane +quiver(grains,sSLocal(:,order).trace,'color','blue','linewidth',5) + +% and the slip direction +quiver(grains,sSLocal(:,order).b,'color','gray','linewidth',5) + +hold off +{% endhighlight %} +
+{% include inline_image.html file="ExSlipSystemAlumina_05.png" %} +
+{% highlight matlab %} +function ori = updateOri(grains,pseudoSym) + +ori = grains.meanOrientation; + +cId = 1+calcCluster(ori,'weights',grains.grainSize); + +% variant 1 +[~,isTrue] = max(accumarray(cId(:),grains.grainSize)); + +% variant 2 +%[~,isTrue] = max(accumarray(cId(:),grains.numNeighbors)); + +ori(cId ~= isTrue) = ori(cId ~= isTrue) * pseudoSym; + +ori = mean(ori,'weigths',grains.grainSize,'robust'); + +end +{% endhighlight %} + +{% highlight plaintext %} +... +{% endhighlight %} +

References

\ No newline at end of file diff --git a/pages/examples_matlab/Examples.html b/pages/examples_matlab/Examples.html index ff07ba7c7..040423111 100644 --- a/pages/examples_matlab/Examples.html +++ b/pages/examples_matlab/Examples.html @@ -1,15 +1,31 @@ --- title: Examples -last_updated: 30-Oct-2019 +last_updated: 03-Feb-2024 sidebar: examples_sidebar permalink: Examples.html folder: examples toc: false --- - - - Examples - edit page
\ No newline at end of file + --> +Examples + + + + + + + + edit page + author: +
+ + +
+ + diff --git a/pages/examples_matlab/Forsterite_to_WadsleyiteMainprice.html b/pages/examples_matlab/Forsterite_to_WadsleyiteMainprice.html index c5e2ac5f4..9a725fad0 100644 --- a/pages/examples_matlab/Forsterite_to_WadsleyiteMainprice.html +++ b/pages/examples_matlab/Forsterite_to_WadsleyiteMainprice.html @@ -1,6 +1,6 @@ --- title: script_Forsterite_to_WadsleyiteMainprice -last_updated: 10-Sep-2021 +last_updated: 25-Mar-2024 sidebar: examples_sidebar permalink: Forsterite_to_WadsleyiteMainprice.html folder: examples @@ -11,7 +11,7 @@ script_Forsterite_to_WadsleyiteMainprice + -->script_Forsterite_to_WadsleyiteMainprice edit page author:
{% highlight matlab %} @@ -23,12 +23,7 @@ % David Mainprice 23/01/2018 % {% endhighlight %} -

Clear workspace and close all plot

-{% highlight matlab %} -clear all -close all -{% endhighlight %} -

Specify Crystal Symmetries

+

Specify Crystal Symmetries

{% highlight matlab %} % crystal symmetry Fo_CS = crystalSymmetry('222', [4.756 10.207 5.98], 'mineral', 'Forsterite', 'color', 'light green') @@ -36,7 +31,7 @@

Specify Crystal Symmetries

{% endhighlight %} {% highlight plaintext %} -Fo_CS = crystalSymmetry +Fo_CS = crystalSymmetry mineral : Forsterite color : light green @@ -45,7 +40,7 @@

Specify Crystal Symmetries

a, b, c : 4.8, 10, 6 -Wad_CS = crystalSymmetry +Wad_CS = crystalSymmetry mineral : Wadsleyite color : light blue @@ -53,42 +48,29 @@

Specify Crystal Symmetries

elements: 4 a, b, c : 5.7, 11, 8.3 {% endhighlight %} -

Define Burgers orientation relation between parent and child phases

+

Define Burgers orientation relation between parent and child phases

                <html>
+                   <table class="usertable">
+                      <tr>
+                         <td>
+                               <p>(01-1)Wad &amp; [001]ol</p>
+                         </td>
+                      </tr>
+                   </table>
+                </html>
    Parent           Child
                <html>
+                   <table class="usertable"/>
+                </html>
{% highlight matlab %} -%************************************************************************** -% -% -%
-% -% -% -%
-%

(01-1)Wad & [001]ol

-%
-% -% -% -% -% Parent Child -% -% -% -% -% - Fo2Wa = orientation.map(... Miller(1,0,0,Fo_CS,'hkl'),Miller(0,1,-1,Wad_CS,'hkl'),... Miller(0,0,1,Fo_CS,'uvw'),Miller(1,0,0,Wad_CS,'uvw')) {% endhighlight %} {% highlight plaintext %} -Fo2Wa = misorientation (Forsterite -> Wadsleyite) +Fo2Wa = misorientation (Forsterite → Wadsleyite) - Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 90 90 305.769 0 + (001) || (100) [010] || [011] {% endhighlight %} -

axis/angle pair for Forsterite to Wadsleyite misorientation

+

axis/angle pair for Forsterite to Wadsleyite misorientation

{% highlight matlab %} mis_axis_wrt_Fo = round(axis(Fo2Wa)) mis_axis_wrt_Wad = round(Miller(mis_axis_wrt_Fo,Wad_CS,'hkl')) @@ -96,19 +78,17 @@

axis/angle pair for Forsterite to Wadsleyite misorientation

{% endhighlight %} {% highlight plaintext %} -mis_axis_wrt_Fo = Miller - symmetry: 222 +mis_axis_wrt_Fo = Miller (222) h k l -1 -3 1 -mis_axis_wrt_Wad = Miller - mineral: Wadsleyite (222) +mis_axis_wrt_Wad = Miller (Wadsleyite) h k l -2 -12 3 mis_angle_Fo_Wad = 95.4115 {% endhighlight %} -

generate Child Wadsleyite orientations using misorientation 'Forsterite2Wadsleyite'

+

generate Child Wadsleyite orientations using misorientation 'Forsterite2Wadsleyite'

{% highlight matlab %} % Forsterite Parent orientation ori_Fo_Parent = orientation.id(Fo_CS) @@ -117,18 +97,18 @@

generate Child Wadsleyite orientations using misorientation 'Forsteri {% endhighlight %} {% highlight plaintext %} -ori_Fo_Parent = orientation (Forsterite -> xyz) +ori_Fo_Parent = orientation (Forsterite → xyz) Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 0 0 0 0 + phi1 Phi phi2 + 0 0 0 -Wad_Child = orientation (Wadsleyite -> xyz) +Wad_Child = orientation (Wadsleyite → xyz) Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 234.231 90 90 0 + phi1 Phi phi2 + 234.231 90 90 {% endhighlight %}

compute all symmetrically possible child orientations - strange angles like 144.231 144.231 0 0 etc - maybe I made a mistake here ? RH: this is incorrect

{% highlight matlab %} @@ -162,114 +142,108 @@

generate Child Wadsleyite orientations using misorientation 'Forsteri Forsterite (222) -Wad_Child_orientations_Symm = orientation (Wadsleyite -> xyz) +Wad_Child_orientations_Symm = orientation (Wadsleyite → xyz) size: 2 x 1 Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 144.231 144.231 0 0 - 324.231 144.231 0 0 + phi1 Phi phi2 + 144.231 144.231 0 + 324.231 144.231 0 -Wad_Child_orientations = orientation (Wadsleyite -> xyz) +Wad_Child_orientations = orientation (Wadsleyite → xyz) size: 2 x 1 Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 305.769 90 270 0 - 234.231 90 90 0 + phi1 Phi phi2 + 305.769 90 270 + 234.231 90 90 -Wad_Child_orientations = orientation (Wadsleyite -> xyz) +Wad_Child_orientations = orientation (Wadsleyite → xyz) size: 1 x 2 Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 234.231 90 90 0 - 305.769 90 270 0 + phi1 Phi phi2 + 234.231 90 90 + 305.769 90 270 -Wad_Child_mori = misorientation (Wadsleyite -> Wadsleyite) +Wad_Child_mori = misorientation (Wadsleyite → Wadsleyite) size: 2 x 1 Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 0 71.5371 180 0 - 0 0 0 0 + phi1 Phi phi2 + 0 71.5371 180 + 0 0 0 -gB_Child_Child = misorientation (Wadsleyite -> Wadsleyite) +gB_Child_Child = misorientation (Wadsleyite → Wadsleyite) - Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 90 0 0 0 + (001) || (001) [100] || [010] {% endhighlight %} -

Parent (Forsterite) to 4 Daughter (Wadsleyite) variants

Mis = inv(O1)*O2

+

Parent (Forsterite) to 4 Daughter (Wadsleyite) variants

Mis = inv(O1) * O2

{% highlight matlab %} -%************************************************************************** % all crystallographically equivalent orientations using symmetry of Parent % Parent (Forsterite) reference orientation Euler (0,0,0) ori_Fo_Parent = orientation('Euler',0,0,0,Fo_CS) % all crystallographically equivalent Child orientations ori_Wad_Childs = symmetrise(ori_Fo_Parent) * inv(Fo2Wa) -%************************************************************************** {% endhighlight %} {% highlight plaintext %} -ori_Fo_Parent = orientation (Forsterite -> xyz) +ori_Fo_Parent = orientation (Forsterite → xyz) Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 0 0 0 0 + phi1 Phi phi2 + 0 0 0 -ori_Wad_Childs = orientation (Wadsleyite -> xyz) +ori_Wad_Childs = orientation (Wadsleyite → xyz) size: 4 x 1 Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 234.231 90 90 0 - 305.769 90 270 0 - 54.2314 90 90 0 - 125.769 90 270 0 + phi1 Phi phi2 + 234.231 90 90 + 305.769 90 270 + 54.2314 90 90 + 125.769 90 270 {% endhighlight %} -

Find all combinations of ori_Wad_Childs to define misorientations for child

+

Find all combinations of ori_Wad_Childs to define misorientations for child

{% highlight matlab %} -%************************************************************************** - n=0; nsymm = length(ori_Wad_Childs); for i=1:nsymm - ori_Wad_Childs(i); - for j=1:nsymm - if(ne(i,j)) - n=n+1; - %fprintf('%i %i %i \n',i,j,n); - Mis_deltaO(n) = inv(ori_Wad_Childs(i))*ori_Wad_Childs(j); - end + ori_Wad_Childs(i); + for j=1:nsymm + if(ne(i,j)) + n=n+1; + %fprintf('%i %i %i \n',i,j,n); + Mis_deltaO(n) = inv(ori_Wad_Childs(i))*ori_Wad_Childs(j); end + end end Mis_deltaO {% endhighlight %} {% highlight plaintext %} -Mis_deltaO = misorientation (Wadsleyite -> Wadsleyite) +Mis_deltaO = misorientation (Wadsleyite → Wadsleyite) size: 1 x 12 Bunge Euler angles in degree - phi1 Phi phi2 Inv. - 0 71.5371 180 0 - 0 180 0 0 - 180 108.463 0 0 - 0 71.5371 180 0 - 180 108.463 0 0 - 0 180 0 0 - 180 180 180 0 - 180 108.463 0 0 - 0 71.5371 180 0 - 180 108.463 0 0 - 180 180 180 0 - 0 71.5371 180 0 + phi1 Phi phi2 + 0 71.5371 180 + 0 180 0 + 180 108.463 0 + 0 71.5371 180 + 180 108.463 0 + 0 180 0 + 180 180 180 + 180 108.463 0 + 0 71.5371 180 + 180 108.463 0 + 180 180 180 + 0 71.5371 180 {% endhighlight %} {% highlight matlab %} diff --git a/pages/examples_matlab/GrainExamples.html b/pages/examples_matlab/GrainExamples.html index d316abdd5..b8d411226 100644 --- a/pages/examples_matlab/GrainExamples.html +++ b/pages/examples_matlab/GrainExamples.html @@ -1,16 +1,30 @@ --- title: Grain Examples -last_updated: 19-Mar-2021 +last_updated: 03-Feb-2024 sidebar: examples_sidebar permalink: GrainExamples.html folder: examples toc: false --- - - - Grain Examples + --> +Grain Examples + + + + + + + edit page - author:

Grain Examples

\ No newline at end of file + author:
+
+

Grain Examples

+
+ + diff --git a/pages/examples_matlab/IceSphericity.html b/pages/examples_matlab/IceSphericity.html index eecac9621..a1a2d5486 100644 --- a/pages/examples_matlab/IceSphericity.html +++ b/pages/examples_matlab/IceSphericity.html @@ -1,6 +1,6 @@ --- title: Grain Boundary Statistics in Deformed Ice -last_updated: 20-Mar-2021 +last_updated: 01-Mar-2024 sidebar: examples_sidebar permalink: IceSphericity.html folder: examples @@ -11,10 +11,10 @@ Grain Boundary Statistics in Deformed Ice + -->Grain Boundary Statistics in Deformed Ice edit page author: Sheng Fan, Department of Geology, University of Otago, Dunedin, New Zealand -

The sphericity as measure for grain boundary irregularity

Deformed polycrystalline materials such as ice often contain large grains interlocking with smaller grains, with many irregular grain boundaries. Boundary irregularity is hard to judge by visual inspection and it is better to use quantitative measures of boundary irregularity to infer processes across different deformation conditions. Here, we quantify the irregularity of each grainÿs boundary by introducing a sphericity parameter \(\Psi\) which is calculated in 2-D from grain area A, grain boundary perimeter P, and area equivalent grain radius R by the formula

\[\Psi = \frac{A}{P \cdot R}\]

The grain sphericity \(\Psi\) is a useful indicator for grain boundary irregularity because it measures how closely a grainÿs boundary resembles the circumference of a perfect circle. It decreases from \(\Psi = 0.5\), where the grain has a perfect circular shape, to \(\Psi = 0\) where the grain boundary is infinitely irregular. The statistics of grain boundary sphericity can be used to segregate recrystallised grains from remnant original grains (please refer to the paper for more details).

Data

The EBSD data set used in this demonstration (PIL185.ctf) is available from https://doi.org/10.6084/m9.figshare.13456550. The EBSD data were collected with a step size of 5 µm and representeds an ice sample deformed at -20°C to 12 percent axial strain. Let's import the data and reconstruct some grains.

+

The sphericity as measure for grain boundary irregularity

Deformed polycrystalline materials such as ice often contain large grains interlocking with smaller grains, with many irregular grain boundaries. Boundary irregularity is hard to judge by visual inspection and it is better to use quantitative measures of boundary irregularity to infer processes across different deformation conditions. Here, we quantify the irregularity of each grain’s boundary by introducing a sphericity parameter \(\Psi\) which is calculated in 2-D from grain area A, grain boundary perimeter P, and area equivalent grain radius R by the formula

\[\Psi = \frac{A}{P \cdot R}\]

The grain sphericity \(\Psi\) is a useful indicator for grain boundary irregularity because it measures how closely a grain’s boundary resembles the circumference of a perfect circle. It decreases from \(\Psi = 0.5\), where the grain has a perfect circular shape, to \(\Psi = 0\) where the grain boundary is infinitely irregular. The statistics of grain boundary sphericity can be used to segregate recrystallised grains from remnant original grains (please refer to the paper for more details).

Data

The EBSD data set used in this demonstration (PIL185.ctf) is available from https://doi.org/10.6084/m9.figshare.13456550. The EBSD data were collected with a step size of 5 µm and representeds an ice sample deformed at -20°C to 12 percent axial strain. Let's import the data and reconstruct some grains.

{% highlight matlab %} % plotting convention plotx2east @@ -65,8 +65,9 @@ {% endhighlight %}
{% include inline_image.html file="IceSphericity_02.png" %} -

Influence of EBSD step size on sphericity parameter

Next we investigate how step size influences grain boundary irregularity measurements. To do this, we can artificially increase the step size of the EBSD data to from 10 up to 100 ÿm. Then, we choose one representative grain (one with a large number of pixels) and see how the sphericity parameter changes as the EBSD step size increases.

+

Influence of EBSD step size on sphericity parameter

Next we investigate how step size influences grain boundary irregularity measurements. To do this, we can artificially increase the step size of the EBSD data to from 10 up to 100 μm. Then, we choose one representative grain (one with a large number of pixels) and see how the sphericity parameter changes as the EBSD step size increases.

{% highlight matlab %} +newMtexFigure('layout',[4,5]) for i = 1:20 % now, we increase the step size of EBSD data artifically diff --git a/pages/examples_matlab/NeutronData.html b/pages/examples_matlab/NeutronData.html index f5b3c62ea..d22ae65a0 100644 --- a/pages/examples_matlab/NeutronData.html +++ b/pages/examples_matlab/NeutronData.html @@ -1,15 +1,31 @@ --- title: script_NeutronData -last_updated: 30-Oct-2019 +last_updated: 03-Feb-2024 sidebar: examples_sidebar permalink: NeutronData.html folder: examples toc: false --- - - - script_NeutronData - edit page
\ No newline at end of file + --> +script_NeutronData + + + + + + + + edit page + author: +
+ + +
+ + diff --git a/pages/examples_matlab/ParameterOptimization.html b/pages/examples_matlab/ParameterOptimization.html new file mode 100644 index 000000000..931aa41e7 --- /dev/null +++ b/pages/examples_matlab/ParameterOptimization.html @@ -0,0 +1,593 @@ +--- +title: Parameter optimization for Parent Grain Reconstruction (PGR) +last_updated: 24-Mar-2024 +sidebar: examples_sidebar +permalink: ParameterOptimization.html +folder: examples +toc: false +--- + + + Parameter optimization for Parent Grain Reconstruction (PGR) + edit page + author: Frank Nießen, Technical University of Denmark, Department of Civil and Mechanical Engineering, Germany +

This script demonstrates a systematic approach on how to get the most out of challenging PGR tasks by systematic tuning of the most critical parameters. The microstructure explored in this example is lath martensite, for which especially the reconstruction of annealing twins in the parent austenite phase is a challenging task. This is the same dataset that is explored in the general documentation for martensite Parent Grain Reconstruction.

As the script is quite long and some sections take some time to execute, I highly recommend running this script section-by-section. You ideally want to follow my talk at the MTEX User Meeting 2024 before or alongside exploring this script.

Data Import

Let us begin by loading the MTEX documentation dataset on martensite from Ref. T. Nyyssönen, P. Peura, V.-T. Kuokkala, Crystallography, Morphology, and Martensite Transformation of Prior Austenite in Intercritically Annealed High-Aluminum Steel, Metall Mater Trans A 49 (2018) 6426–6441.

+{% highlight matlab %} +% get MTEX data +mtexdata martensite silent + +% set plotting convention +setMTEXpref('xAxisDirection','east'); +setMTEXpref('zAxisDirection','outofPlane'); +{% endhighlight %} +

Plot the EBSD data of the child phase

Let us first take a look at the example EBSD data.

+{% highlight matlab %} +% Define color key +ipfKey = ipfColorKey(ebsd); +ipfKey.inversePoleFigureDirection = vector3d.Z; + +% Get colors associated with crystal orientations +colors = ipfKey.orientation2color(ebsd.orientations); + +% Plot the microstructure data +figure('Name','Martensitic microstructure') +plot(ebsd,colors); +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_01.png" %} +

We can see that the dataset only consists of lath martensite, the child phase in this transformation system, and unindexed points. Our aim is to accurately reconstruct the prior austenite microstructure, the parent microstructure in this example.

Explore different threshold angles for child grain reconstruction

Let us explore some different threshold angles to reconstruct the child grains at different levels of detail.

+{% highlight matlab %} +%List of threshold angles +thrsh_angles = [6,3,2,1.5,1]; + +%Prepare plotting +figure; +f(1) = newMtexFigure('layout',[2,3],'Name','Child grain reconstruction at different threshold angles'); + +% Loop over different child grain reconstructions +for ii = 1:length(thrsh_angles) + + % Load data + mtexdata martensite silent + + % Calculate grains with defined angular threshold + [grains,ebsd.grainId] = calcGrains(ebsd('indexed'), 'angle',thrsh_angles(ii)*degree); + ebsd(grains(grains.grainSize < 3)) = []; + [grains,ebsd.grainId] = calcGrains(ebsd('indexed'),'angle',thrsh_angles(ii)*degree); + grains = smooth(grains,5); + + % Plot the orientation data and overlay the grain boundaries + plot(ebsd,ebsd.orientations); + hold on + plot(grains.boundary) + title(strcat("Threshold angle: ", num2str(thrsh_angles(ii),"%.1f"), "^{\circ}"),... + 'interpreter','tex'); + hold off + + % Enable multiplot + if ii < length(thrsh_angles), nextAxis; end +end +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_02.png" %} +
+{% include inline_image.html file="ParameterOptimization_03.png" %} +

From the child grain reconstructions it is apparent that in this dataset threshold values of 1 to 1.5° lead to a significant loss of EBSD data associated with small grains. Therefore only the range of 2-6° is feasible as a starting point for grain reconstruction.

Effect of child grain reconstruction on PGR results

We will now carry out the PGR on child grains reconstructed with the identified angular threshold values. We will otherwise assume reasonable and constant parameters for the PGR to enable comparability. We compare the PGR results as received from the variant graph approach before any post-processing to enable reasonable comparison

+{% highlight matlab %} +% Let us revisit the three largest threshold angles +thrsh_angles = thrsh_angles(1:3); + +%Prepare plotting +figure; +f(2) = newMtexFigure('layout',[1,length(thrsh_angles)],'Name','PGR at different Child grain threshold values'); + +%Child grain reconstruction +for ii = 1:length(thrsh_angles) + + % Load data + mtexdata martensite silent + + % Calculate grains with defined angular threshold + [grains,ebsd.grainId] = calcGrains(ebsd('indexed'), 'angle',thrsh_angles(ii)*degree); + ebsd(grains(grains.grainSize < 3)) = []; + [grains,ebsd.grainId] = calcGrains(ebsd('indexed'),'angle',thrsh_angles(ii)*degree); + grains = smooth(grains,5); + + % set up the PGR job + job = parentGrainReconstructor(ebsd,grains); + + % initial guess for the parent to child orientation relationship + job.p2c = orientation.KurdjumovSachs(job.csParent, job.csChild); + + % refine the OR + job.calcParent2Child; + + % setup the variant graph + job.calcVariantGraph('threshold',2.5*degree,'tolerance',2.5*degree); + + % cluster the variant graph + job.clusterVariantGraph; + + % calculate the parent grain orientations + job.calcParentFromVote('minProb',0.5); + + % plot the parent grains (before any further processing) + plot(job.parentGrains,job.parentGrains.meanOrientation) + title(strcat("Threshold angle: ", num2str(thrsh_angles(ii),"%.1f"), "^{\circ}"),... + 'interpreter','tex'); + + % Enable multiplot + if ii < length(thrsh_angles), nextAxis; end +end +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_04.png" %} +

The effect of child grain reconstruction appears to be quite prominent - the smaller the reconstruction threshold angle the more of the parent grain microstructure is confidently reconstructed. In martensitic steels the misorientation between the different variants is oftentimes quite low which means that grain reconstruction with too large threshold values merges grains that belong to different variants and thereby complicate the PGR. For this example, 2° seems to be the optimum, so we will move forward with that parameter.

Optimizing the orientation relationship (OR)

Next we will check the effect of fitting the OR using the calcParent2Child function vs. assuming several rational ORs on PGR.

+{% highlight matlab %} +% Load data +mtexdata martensite silent + +% Calculate grains with defined angular threshold +[grains,ebsd.grainId] = calcGrains(ebsd('indexed'), 'angle',2*degree); +ebsd(grains(grains.grainSize < 3)) = []; +[grains,ebsd.grainId] = calcGrains(ebsd('indexed'),'angle',2*degree); +grains = smooth(grains,5); + +% Initialize the parent grain reconstructor class +job = parentGrainReconstructor(ebsd,grains); + +% Define some rational ORs typical for lath martensitic steels +KS = orientation.KurdjumovSachs(job.csParent,job.csChild); +NW = orientation.NishiyamaWassermann(job.csParent,job.csChild); +GT = orientation.GreningerTrojano(job.csParent,job.csChild); + +% initial guess for the parent to child orientation relationship +job.p2c = KS; + +% iteratively refine the OR +job.calcParent2Child; + +% collect all ORs (|job.p2c| contains the refined OR) +ORs = [KS,NW,GT,job.p2c]; +ORnames = ["KS","NW","GT","Fitted"]; + +% Show the disorientation between the ORs and the misorientations at the +% microstructure grain boundaries + +%Prepare plotting +figure; +f(3) = newMtexFigure('layout',[2,2],'Name','OR-Fit grain boundary plot'); +fh = figure('Name','OR-Fit histogram'); + +% loop over different ORs +for ii = 1:length(ORs) + %Assign OR as currently active OR + job.p2c = ORs(ii); + + % compute the misfit for all child to child grain neighbours + [fit,c2cPairs] = job.calcGBFit; + + % Plot the misfit in histogram + figure(fh); + hold on + histogram(fit./degree,'BinMethod','sqrt'); + xlabel('Misfit Angle (^{\circ})',"Interpreter","tex"); + ylabel('Counts'); + hold off + + % select grain boundary segments by grain ids + [gB,pairId] = job.grains.boundary.selectByGrainId(c2cPairs); + + % plot the child phase + figure(f(3).parent); + plot(ebsd,ebsd.orientations,'faceAlpha',0.5) + + % and on top of it the boundaries colorized by the misfit + hold on; + % scale fit between 0 and 1 - required for edgeAlpha + plot(gB, 'edgeAlpha', (fit(pairId) ./ degree - 2.5)./2 ,'linewidth',2); + hold off + title(ORnames(ii)); + + % Enable multiplot + if ii < length(ORs), figure(f(3).parent); nextAxis; end +end + +% Adding labels and titles +figure(fh); +grid on +legend(ORnames); +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_05.png" %} +
+{% include inline_image.html file="ParameterOptimization_06.png" %} +

The histogram plot shows that OR refinement yields an OR that is far more representative of the actual OR present in the microstructure. The Greninger-Trojano (GT) OR is closest to the fitted OR. Plotting the fit of the OR onto the grain boundaries showed that the fitted OR nicely outlines the grain boundaries of the parent grains, which is an important prerequisite for successful PGR.

Tune parameters for OR refinement

The OR refinement using calcParent2Child can be fine-tuned with custom choices for the parameters threshold and quantile. The threshold value is the maximum misfit between the OR and grain misorientations to be considered for the optimization of the OR. The quantile value defines which quantile of the misfit distribution (see previous histogram) is considered for optimization of the OR. Whichever criterion cuts off more of the available data will be enforced. The parameters are used to make sure that the parent grain boundaries, which are not OR-related boundaries, can be excluded from the OR refinement procedure in a controlled manner.

+{% highlight matlab %} +% Let us define some parameters +% (you may want to explore more parameter sets) +threshold = [10,10,5,5]; +quantile = [0.9,0.8,0.9,0.8]; + +% Prepare plotting +figure; +f(4) = newMtexFigure('layout',[2,2],'Name','OR-Fit grain boundary plot'); +fh2 = figure('Name','OR-Fit histogram'); + +% loop over different parameter sets +for ii = 1:length(threshold) + + %Assign initial guess for OR + job.p2c = KS; + + % Refine OR + job.calcParent2Child('quantile',quantile(ii),'threshold',threshold(ii)*degree); + + % Compute the misfit for all child to child grain neighbours + [fit,c2cPairs] = job.calcGBFit; + + % Plot misfit distribution in histogram + figure(fh2); + hold on + histogram(fit./degree,'BinMethod','sqrt','facealpha',0.3); + xlabel('Misfit Angle (^{\circ})',"Interpreter","tex"); + ylabel('Counts'); + hold off + + % Select grain boundary segments by grain ids + [gB,pairId] = job.grains.boundary.selectByGrainId(c2cPairs); + + % Plot the child phase + figure(f(4).parent); + plot(ebsd,ebsd.orientations,'faceAlpha',0.5) + % and on top of it the boundaries colorized by the misfit + hold on; + + % Scale fit between 0 and 1 - required for edgeAlpha + plot(gB, 'edgeAlpha', (fit(pairId) ./ degree - 2.5)./2 ,'linewidth',2); + hold off + title(strcat("Threshold: ",num2str(threshold(ii))," Quantile: ", num2str(quantile(ii)))); + + % Enable multiplot + if ii < length(threshold) + figure(f(4).parent); nextAxis; + end +end + +% Adding labels +figure(fh2); +grid on +xlim([0,10]) +legend(append("Thresh.: ",string(threshold),", Quantile: ",string(quantile))); +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_07.png" %} +
+{% include inline_image.html file="ParameterOptimization_08.png" %} +

We only look at the 0° - 10° misfit range to better discern the effect of the different parameter sets. The parameter choice of the calcParent2Child command did not cause drastic changes in the fit of the optimal OR. Threshold values of 10° gave a better fit than 5°, and a quantile value of 0.9 may be slightly better than 0.8. The threshold angle of 10° and the quantile of 0.9 are the default values of the calcParent2Child command. For your dataset, the quantile value should reflect the ratio between prior parent boundaries and OR-related boundaries. In the present case, prior austenite grains are large and filled with a very fine OR-related boundary structure within, meaning that the quantile value does not play a big role. If you have small prior parent grains with little internal OR-related boundary structure you should explore smaller quantile values.

Translating the OR misfit into a probability function

Next, we need to translate the misfit between the OR and the grain misorientations \(\omega\) into an OR probability function \(\Psi\):

\begin{equation} \Psi(\omega) = 1 - \tfrac{1}{2}\left(1 + \mathrm{erf}(2 \tfrac{\omega - \delta}{\sigma})\right). \end{equation}

where \(\delta\) is a threshold value and \(\sigma\) is a tolerance value. The function tends to 1 for grain misorientations that agree well with the OR and to 0 for child grain misorientations that disagree strongly with the OR. The function therefore describes the probability with which two grains belong to the same parent grain. Let us plot this probability function on top of the OR misift distribution from before for few different combinations of the parameters tolerance and threshold.

+{% highlight matlab %} +% Let u assume an OR and iteratively refine it. +job.p2c = KS; +job.calcParent2Child; + +% Plot the misfit histogram +% (|pdf| normalization was chosen to plot the misfit distribution and +% probability function with reference to the same y-axis) +figure('Name','OR-probability functions') +hold on +h = histogram(fit./degree,'BinMethod','sqrt','normalization','pdf',... + 'FaceAlpha',0.3,'DisplayName',"OR misfit distribution"); + +% Parameter sets for tolerance and threshold +tol = [2.5,1.5,1.5,2.0]; +threshold = [2.5,3.5,1.5,5.0]; + +% Define xLim and input vector for function +maxX = 6; +x = 0:0.1:maxX; + +% Add the probability functions to the plot +hold on +xlabel('Misfit Angle (^{\circ})',"Interpreter","tex"); +ylabel('Probability'); + +% Compute the CDF values for the normal distribution +for ii = 1:length(tol) + y = 1 - 0.5 * (1 + erf(2*(x - threshold(ii))./tol(ii))); + hold on + plot(x, y, 'LineWidth', 2, 'DisplayName',... + strcat('Tol: ',num2str(tol(ii)), "^{\circ}, Thresh: ", ... + num2str(threshold(ii)),"^{\circ}")); +end + +% Format plot and figure +grid on; +legend("Interpreter","tex"); +xlim([0,maxX]) +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_09.png" %} +

It can be observed that the different parameter choices for threshold and tolerance give a different weighting to the misfit values. Let us now plot the function values directly onto the grain boundaries to decide which parameter set leads to the best separation of prior parent and OR-related boundaries.

+{% highlight matlab %} +% compute the misfit for all child to child grain neighbors +[fit,c2cPairs] = job.calcGBFit; + +% select grain boundary segments by grain ids +[gB,pairId] = job.grains.boundary.selectByGrainId(c2cPairs); + +%Prepare plotting +figure; +f(5) = newMtexFigure('layout',[2,2],'Name','OR-probability grain boundary plot'); + +%Loop over probability function parameters +for ii = 1:length(tol) + % plot the child phase + plot(ebsd,ebsd.orientations,'faceAlpha',0.5) + % and on top of it the boundaries colorized by the misfit + hold on; + + % scale fit between 0 and 1 with different parameter sets + plot(gB, 'edgeAlpha', (fit(pairId) ./ degree - threshold(ii))./tol(ii) ,'linewidth',2); + hold off + title(strcat('Tol: ',num2str(tol(ii)), "^{\circ}, Thresh: ", ... + num2str(threshold(ii)),"^{\circ}"),"Interpreter","tex"); + + % Enable multiplot + if ii < length(tol) + figure(f(5).parent); nextAxis; + end +end +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_10.png" %} +

We can see that a sharp tolerance of 1.5° and threshold value of 1.5° mark several boundaries as prior austenite boundaries, even though they are in the interior of what appears to be the prior austenite grains. Conversely, a very relaxed value pair of tolerance 2° and threshold 5° does not highlight boundaries that appear to be prior austenite boundaries. The value pair tolerance 2.5° and threshold 2.5° seems to deliver the best result. In the misfit distribution histogram, this parameter set nicely separates the mode of the distribution from the tail to the right. You will have to experiment with these parameters for your own microstructure to get the best possible PGR result.

Evaluating effect of probability functions on PGR

Let us now explore the PGR results that are obtained using the different probability function values. The parameters defining the probability function are passed to the method calcVariantGraph. This method sets up the variant graph, in which all possible parent variants of each grain are represented as nodes. The parent variants of neighboring grains are connected with edges that contain the computed OR probability values.

+{% highlight matlab %} +%Prepare plotting +figure; +f(6) = newMtexFigure('layout',[2,2],'Name','PGR results for different OR-probability functions'); + +%Loop over probability function parameters +for ii = 1:length(tol) + % setup the variant graph + job.calcVariantGraph('threshold',threshold(ii).*degree,... + 'tolerance',tol(ii)*degree); + + % cluster the variant graph + job.clusterVariantGraph; + + % calculate the parent grain orientations + job.calcParentFromVote('minProb',0.5); + + % Plot the PGR result (before any cleaning is applied) + plot(job.parentGrains,job.parentGrains.meanOrientation); + title(strcat('Tol: ',num2str(tol(ii)), "^{\circ}, Thresh:", ... + num2str(threshold(ii)),"^{\circ}"),"Interpreter","tex"); + + % Enable multiplot + if ii < length(tol) + figure(f(6).parent); nextAxis; + end + + % Revert PGR results to allow new PGR with different parameters + job.revert; +end +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_11.png" %} +

We can observe that in the case where the probability function did not lead to a good separation between prior-parent and OR-related boundaries fewer grains have been confidently reconstructed. The first two explored parameter sets give decent PGR result, with the first dataset (subjectively) looking slightly more complete. The difference here is however marginal. It is important to make this evaluation before any post-processing is applied to the reconstructed parent microstructure.

The effect of clustering parameters on the PGR

Having identified an optimal probability function to translate the OR misfit into OR probabilities, the parameters during clustering can be explored. The variant graph relies on a Markovian clustering algorithm, which is originally reported in

van Dongen, Stijn, Graph clustering via a discrete uncoupling process, Siam Journal on Matrix Analysis and Applications 30-1, p121-141, 2008.

and defined in the present application in

R. Hielscher, T. Nyyssönen, F. Niessen, A.A. Gazder, The variant graph approach to improved parent grain reconstruction, Materialia 22 (2022) 101399.

When iteratively applying the Markovian clustering algorithm to the variant graph, edges with high probability are further strengthened and edges with low probability are further weakened, leading to eventual cluster formation. With each iteration the probabilities are extended to an additional order of neighbors, leading to a gradual delocalization of the optimal parent grain orientation solution.

We will explore the two most critical parameters controlling the behavior of the Markovian Clustering algorithm, numIter and inflationPower. The parameter numIter controls the number of iterations for which the clustering algorithm is run, which affects the order of neighbors taken into account and to which degree convergence is approached. The parameter inflationPower, controls the degree of clustering in each iteration. In other words, it decides how rapidly clusters are formed.

+{% highlight matlab %} +% Different settings for inflationPower (alpha) and numIter for +% MCL clustering +alpha = [1,1.05,1.2,1,1.05,1.2]; +numIter = [5,5,5,10,10,10]; + +%Prepare plotting +figure; +f(7) = newMtexFigure('layout',[2,3],'Name','PGR results for different clustering parameters'); + +% Check reconstructed microstructure for different clustering parameters +for ii = 1:length(alpha) + % setup the variant graph + job.calcVariantGraph('threshold',2.5*degree,'tolerance',2.5*degree) + + % cluster the variant graph with different parameters + job.clusterVariantGraph('inflationPower',alpha(ii),'numIter',numIter(ii)); + + % calculate the parent grain orientations + job.calcParentFromVote('minProb',0.5); + + % Plot the PGR result (before any cleaning is applied) + plot(job.parentGrains,job.parentGrains.meanOrientation); + title(strcat('Alpha: ',num2str(alpha(ii)), ", NumIter: ", num2str(numIter(ii)))); + + % Enable multiplot + if ii < length(alpha) + figure(f(7).parent); nextAxis; + end + + % Revert PGR results to allow new PGR with different parameters + job.revert; +end +{% endhighlight %} + +{% highlight plaintext %} +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries + + +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries + + +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries + + +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries + + +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries + + +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_12.png" %} +

It may not be entirely possible to judge the quality of the PGR with having access to a validation dataset (i.e. without knowing the actual parent microstructure), nevertheless some observations can be made: An inflation power of 1.2 seems to be too high, leading to large patches of material that have not been reconstructed. A good indicator for the present microstructure is to check in how far likely annealing twins have been resolved with a realistic morphology and how very small parent grains may become present that are unlikely to be associated with real parent grains. Based on this the choice of an inflation power of 1.05 and numIter of 10 seems to be a good choice, although it is hard to make an objective assessment. Note that an inflation power of 1 means that no clustering is enforced - with this setting the algorithm simply explores the local neighborhood up to the degree of neighbor defined by numIter and bases the most likely parent orientation on the overall probabilities within this region.

Final reconstruction

We can now do the final reconstruction using the optimized parameters and subsequently apply a growth-based PGR algorithm to reconstruct the remaining grains, as well as some post-processing steps to clean up the microstructure. You may also want to play with the parameter minProb of the calcParentFromVote method, which defines the minimum probability for a specific parent orientation required to conduct the PGR of a specific child grain. Lowering this parameter will lead to a more complete, but less confident PGR.

+{% highlight matlab %} +% *** PGR using the Variant Graph Approach + +% setup the variant graph +job.calcVariantGraph('threshold',2.5*degree,'tolerance',2.5*degree) + +% Cluster the variant graph with different parameters +job.clusterVariantGraph('inflationPower',1.05,'numIter',10); + +% Calculate the parent grain orientations +job.calcParentFromVote('minProb',0.5); + +% Plot the PGR result (before any cleaning is applied) +figure; +f(8) = newMtexFigure('layout',[2,2],'Name','Final PGR with cleaning procedure'); +plot(job.parentGrains,job.parentGrains.meanOrientation); +title("Initial Variant Graph PGR") +nextAxis; + +% *** Growth algorithm to fill non-reconstructed regions based on +% previously reconstructed neighboring austenite orientations + +% Calculate new Votes for all parent-child grain combinations. Iterate a +% few times +for ii = 1:5 + job.calcGBVotes('p2c','reconsiderAll'); + job.calcParentFromVote('minProb',0.5); +end + +% Plot the PGR result (before any cleaning is applied) +plot(job.parentGrains,job.parentGrains.meanOrientation); +title("+ Application of growth PGR algorithm") +nextAxis; + +% *** Merge neighboring grains with low parent grain misorientation + +% Merge neighboring parent grains that have <= 7.5° +% misorientation angle to each other +job.mergeSimilar('threshold',7.5*degree); + +% Plot the PGR result after merging similarly oriented grains +plot(job.parentGrains,job.parentGrains.meanOrientation); +title("+ merging similarly oriented grains") +nextAxis; + +% *** Remove small inclusion grains + +% Merge inclusion grains with a size <= 100 into the host grains +job.mergeInclusions('maxSize',100); + +% Plot the PGR result after merging inclusions +plot(job.parentGrains,job.parentGrains.meanOrientation); +title("+ removing small inclusions") +{% endhighlight %} + +{% highlight plaintext %} +ans = parentGrainReconstructor + + phase mineral symmetry grains area reconstructed + parent Iron fcc 432 0 0% 0% + child Iron bcc (old) 432 9338 100% + + OR: (347.3°,9°,56.7°) + c2c fit: 1.2°, 1.6°, 2°, 2.7° (quintiles) + closest ideal OR: (111) || (011) [1-10] || [100] fit: 2.3° + + variant graph: 442995 entries +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_13.png" %} +

We are now finished with the PGR and can, as a last step, plot the child and reconstructed parent EBSD data overlayed with the outlines of the parent grains.

+{% highlight matlab %} +% Prepare plotting +figure; +f(8) = newMtexFigure('layout',[1,2]); + +% Plot the initial orientation data with the prior parent grain outlines +plot(job.ebsdPrior,job.ebsdPrior.orientations); +hold on +plot(job.grains.boundary,'lineWidth',2) +hold off + +% Plot the reconstructed orientation data with the prior parent grain outlines +nextAxis; +parentEBSD = job.calcParentEBSD; +plot(parentEBSD(job.csParent),parentEBSD(job.csParent).orientations); +hold on +plot(job.grains.boundary,'lineWidth',2) +hold off +{% endhighlight %} + +{% highlight plaintext %} +Warning: Packet ID calculation assuming {111}_p||{110}_c +{% endhighlight %} +
+{% include inline_image.html file="ParameterOptimization_14.png" %} +
\ No newline at end of file diff --git a/pages/examples_matlab/PlasticityExamples.html b/pages/examples_matlab/PlasticityExamples.html index 98ce6266c..56df24537 100644 --- a/pages/examples_matlab/PlasticityExamples.html +++ b/pages/examples_matlab/PlasticityExamples.html @@ -1,16 +1,31 @@ --- title: script_PlasticityExamples -last_updated: 05-Oct-2022 +last_updated: 03-Feb-2024 sidebar: examples_sidebar permalink: PlasticityExamples.html folder: examples toc: false --- - - - script_PlasticityExamples + --> +script_PlasticityExamples + + + + + + + edit page - author:
\ No newline at end of file + author:
+
+ + +
+ + diff --git a/pages/examples_matlab/SeismicPlots.html b/pages/examples_matlab/SeismicPlots.html index ba8d78f5c..c96cabbad 100644 --- a/pages/examples_matlab/SeismicPlots.html +++ b/pages/examples_matlab/SeismicPlots.html @@ -1,6 +1,6 @@ --- title: Seismic velocities and anisotropy -last_updated: 30-Oct-2019 +last_updated: 29-Feb-2024 sidebar: examples_sidebar permalink: SeismicPlots.html folder: examples @@ -11,8 +11,9 @@ Seismic velocities and anisotropy - edit page

Calculalating and plotting elastic velocities from elastic stiffness Cijkl tensor and density (by David Mainprice).

Crystal Symmetry and definition of the elastic stiffness tensor

crystal symmetry - Orthorhombic mmm Olivine structure (4.7646 10.2296 5.9942 90.00 90.00 90.00)

+ -->Seismic velocities and anisotropy + edit page + author:

Calculalating and plotting elastic velocities from elastic stiffness Cijkl tensor and density (by David Mainprice).

Crystal Symmetry and definition of the elastic stiffness tensor

crystal symmetry - Orthorhombic mmm Olivine structure (4.7646 10.2296 5.9942 90.00 90.00 90.00)

{% highlight matlab %} cs_tensor = crystalSymmetry('mmm',[4.7646,10.2296,5.9942],... 'x||a','z||c','mineral','Olivine'); @@ -35,12 +36,10 @@ {% endhighlight %} {% highlight plaintext %} - -C = stiffnessTensor +C = stiffnessTensor (Olivine) density: 3.355 unit : GPa rank : 4 (3 x 3 x 3 x 3) - mineral: Olivine (mmm) tensor in Voigt matrix representation: 320.5 68.2 71.6 0 0 0 @@ -49,7 +48,6 @@ 0 0 0 64 0 0 0 0 0 0 77 0 0 0 0 0 0 78.7 - {% endhighlight %}

Compute seismic velocities as functions on the sphere

{% highlight matlab %} diff --git a/pages/examples_matlab/SeismicVelocitySingleCrystalDemo2d.html b/pages/examples_matlab/SeismicVelocitySingleCrystalDemo2d.html index 3a082762a..c46da1273 100644 --- a/pages/examples_matlab/SeismicVelocitySingleCrystalDemo2d.html +++ b/pages/examples_matlab/SeismicVelocitySingleCrystalDemo2d.html @@ -1,6 +1,6 @@ --- title: Seismic velocities and anisotropy - single crystal plots -last_updated: 30-Oct-2019 +last_updated: 19-Mar-2024 sidebar: examples_sidebar permalink: SeismicVelocitySingleCrystalDemo2d.html folder: examples @@ -11,8 +11,9 @@ Seismic velocities and anisotropy - single crystal plots - edit page

plot 2D velocity surfaces - phase, slowness & wavefront For given plane normal direction, for example xvector, yvector or zvector Stishovite (SiO2) at high pressure

David Mainprice 1/05/2018

The Elastic Stiffness Tensor of Stishovite

Reference: Elastic constants Stishovite, Weidner et al 1982 JGR
+      -->Seismic velocities and anisotropy - single crystal plots
+    edit page
+    author: 

Plot 2D velocity surfaces - phase, slowness & wavefront For given plane normal direction, for example xvector, yvector or zvector Stishovite (SiO2) at high pressure

David Mainprice 1/05/2018

The Elastic Stiffness Tensor of Stishovite

Reference: Elastic constants Stishovite, Weidner et al 1982 JGR
 Reference: Crystal Structure Sinclair and Ringwood 78 Nature P422
 d=4.2901
{% highlight matlab %} @@ -20,7 +21,7 @@ rho= 4.2901; % elastic Cij stiffness tensor (GPa) as matrix M - M =.... + M = ... [[ 453.00 211.00 203.00 0.00 0.00 0.00];... [ 211.00 453.00 203.00 0.00 0.00 0.00];... [ 203.00 203.00 776.00 0.00 0.00 0.00];... diff --git a/pages/examples_matlab/Seismics.html b/pages/examples_matlab/Seismics.html index d3f772440..dc380f2ea 100644 --- a/pages/examples_matlab/Seismics.html +++ b/pages/examples_matlab/Seismics.html @@ -1,15 +1,28 @@ --- title: script_Seismics -last_updated: 30-Oct-2019 +last_updated: 03-Feb-2024 sidebar: examples_sidebar permalink: Seismics.html folder: examples toc: false --- - - - script_Seismics - edit page
\ No newline at end of file + --> +script_Seismics + + + + + + + + edit page + author: +
+ + diff --git a/pages/examples_matlab/SlipSystemAlumina.html b/pages/examples_matlab/SlipSystemAlumina.html index 3eff9bdf7..ae585bc8b 100644 --- a/pages/examples_matlab/SlipSystemAlumina.html +++ b/pages/examples_matlab/SlipSystemAlumina.html @@ -1,6 +1,6 @@ --- title: Slip System Analysis in \(\alpha\)-Alumina -last_updated: 05-Oct-2022 +last_updated: 01-Mar-2024 sidebar: examples_sidebar permalink: SlipSystemAlumina.html folder: examples @@ -11,7 +11,7 @@ Slip System Analysis in \(\alpha\)-Alumina + -->Slip System Analysis in \(\alpha\)-Alumina edit page author: Ruben Wagner, Robert Lehnert, TU Bergakademie Freiberg, Institute

of Materials Engineering, Germany

Data Import

The following EBSD maps has been measured by Ruben Wagner TUBAF, Institute of Materials Engineering, 2022 within the project SFB 920. It shows an alumina inclusions in 42CrMo4 steel after nanoindentation.

@@ -24,7 +24,8 @@ setMTEXpref('zAxisDirection','intoPlane'); % import data -ebsd = EBSD.load('K1_C_16_EBSD_original_bc.txt',... +path = [mtexExamplePath filesep 'PlasticityExamples' filesep ]; +ebsd = EBSD.load([path 'K1_C_16_EBSD_original_bc.txt'],... {'notIndexed',cs,'notIndexed'},'interface','csv','silent'); % rotate the data in the right reference frame @@ -185,6 +186,6 @@

Initial grain reconstruction and visualization

{% endhighlight %} {% highlight plaintext %} -... +.... {% endhighlight %}

References

\ No newline at end of file diff --git a/pages/examples_matlab/TOF2PoleFigure.html b/pages/examples_matlab/TOF2PoleFigure.html index 184fa2bdc..3bab588cf 100644 --- a/pages/examples_matlab/TOF2PoleFigure.html +++ b/pages/examples_matlab/TOF2PoleFigure.html @@ -1,6 +1,6 @@ --- title: Convert Time of Flight Neutron Data into Pole Figures -last_updated: 07-May-2020 +last_updated: 29-Feb-2024 sidebar: examples_sidebar permalink: TOF2PoleFigure.html folder: examples @@ -11,8 +11,9 @@ Convert Time of Flight Neutron Data into Pole Figures - edit page

This example demonstrates how to convert SKAT time of flight neutron intensities into pole figure intensities

Step 1: Import and Analyze the Spectra

+ -->Convert Time of Flight Neutron Data into Pole Figures + edit page + author:

This example demonstrates how to convert SKAT time of flight neutron intensities into pole figure intensities

Step 1: Import and Analyze the Spectra

{% highlight matlab %} % import all spectra spec = loadallspectra(fullfile(mtexExamplePath,'NeutronData','Knie_10','Knie_10')); @@ -27,6 +28,7 @@ {% highlight plaintext %} load detector: a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, . calculate background: . + 27 {% endhighlight %}
{% include inline_image.html file="TOF2PoleFigure_01.png" %} diff --git a/pages/function_reference_matlab/EBSD.EBSD.html b/pages/function_reference_matlab/EBSD.EBSD.html index 7786ead39..93c4cc31b 100644 --- a/pages/function_reference_matlab/EBSD.EBSD.html +++ b/pages/function_reference_matlab/EBSD.EBSD.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->EBSD - edit page

class representing EBSD measurements

In MTEX a variable of type EBSD is used to store EBSD measurements as a table with rows containing the orientation, the spatial coordinates and the phase of each indiviudal measurement.

Syntax

+ edit page

class representing EBSD measurements

In MTEX a variable of type EBSD is used to store EBSD measurements as a table with rows containing the orientation, the spatial coordinates and the phase of each individual measurement.

Syntax

{% highlight matlab %} prop.xy = xy; prop.mad = mad; @@ -74,7 +74,7 @@

Input

phase

@@ -173,7 +173,7 @@

Input

prop

diff --git a/pages/function_reference_matlab/EBSD.calcGrains.html b/pages/function_reference_matlab/EBSD.calcGrains.html index 5489891de..91072766b 100644 --- a/pages/function_reference_matlab/EBSD.calcGrains.html +++ b/pages/function_reference_matlab/EBSD.calcGrains.html @@ -46,7 +46,7 @@ {% endhighlight %} {% highlight matlab %} -% markovian clustering algorithm +% Markovian clustering algorithm p = 1.5; % inflation power (default = 1.4) maxIt = 10; % number of iterations (default = 4) delta = 5*degree % variance of the threshold angle @@ -140,7 +140,7 @@

Input

unitCell

@@ -148,7 +148,7 @@

Input

qhull

- specifing the phase of the EBSD object + specifying the phase of the EBSD object
- auxilary properties, e.g., MAD, BC, mis2mean + auxiliary properties, e.g., MAD, BC, mis2mean
- omit voronoi decomposition and treat a unitcell lattice + omit Voronoi decomposition and treat a unitcell lattice
- use qHull for the voronin decomposition + use qHull for the Voronoi decomposition
diff --git a/pages/function_reference_matlab/EBSD.export_crc.html b/pages/function_reference_matlab/EBSD.export_crc.html index e497f80db..ffddc36cb 100644 --- a/pages/function_reference_matlab/EBSD.export_crc.html +++ b/pages/function_reference_matlab/EBSD.export_crc.html @@ -12,8 +12,27 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->export_crc - edit page

Function description: Export EBSD map orientation data from Mtex to proprietary Oxford Instruments HKL Channel 5 *.cpr and *.crc file format. Version 1.0 - Published 08/08/2020

Syntax

+ edit page

export EBSD to *.crc and *.cpr files

Description

Export variable of type EBSD to proprietary Oxford Instruments HKL Channel 5 *.cpr and *.crc file format.

  1. In MTEX's "ebsd.load" script, any EDS data contained in the original *.crc file is ignored. Therefore, in MTEX, the EDS data belonging to an EBSD map needs to be imported and the elemental windows defined separately.
  2. Even if the EDS data belonging to an EBSD map was previously imported and the elemental windows defined, this script ignores it. Consequently, this script does not account for any EDS data stored in the ebsd variable. If and when MTEX implements the introduction of EBSD and EDS data, then a check for value will be introduced to ebsd.opt.cprData.edxwindows.count. If the value it is not zero, then that many number of columns will be should be defined in the ebsdData variable in the getCPRInfo script and "Process *.crc data" section of this script.

Syntax

{% highlight matlab %} -export_crc(ebsd,pfName) +exportCRC(ebsd,fName) {% endhighlight %} -
\ No newline at end of file +

Input

+ + + + + + + + + +
+ ebsd + + EBSD +
+ fname + + path and file name +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/EBSD.export_h5.html b/pages/function_reference_matlab/EBSD.export_h5.html index 0883cd804..edf79c3e7 100644 --- a/pages/function_reference_matlab/EBSD.export_h5.html +++ b/pages/function_reference_matlab/EBSD.export_h5.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->export_h5 - edit page

export EBSD data to a ascii file

Syntax

+ edit page

export EBSD data to a ASCII file

Syntax

{% highlight matlab %} export_h5(ebsd,fname,varargin) {% endhighlight %} diff --git a/pages/function_reference_matlab/EBSD.findByLocation.html b/pages/function_reference_matlab/EBSD.findByLocation.html index 20c233aa2..caef6e3e8 100644 --- a/pages/function_reference_matlab/EBSD.findByLocation.html +++ b/pages/function_reference_matlab/EBSD.findByLocation.html @@ -56,6 +56,8 @@

Input

{% endhighlight %} {% highlight plaintext %} +saving data to /home/hielscher/mtex/master/data/forsterite.mat + ebsd = EBSD Phase Orientations Mineral Color Symmetry Crystal reference frame diff --git a/pages/function_reference_matlab/EBSD.getCPRInfo.html b/pages/function_reference_matlab/EBSD.getCPRInfo.html new file mode 100644 index 000000000..33e581fee --- /dev/null +++ b/pages/function_reference_matlab/EBSD.getCPRInfo.html @@ -0,0 +1,19 @@ +--- +title: getCPRInfo + +sidebar: function_reference_sidebar +permalink: EBSD.getCPRInfo.html +folder: function_reference +toc: false +--- + + + getCPRInfo + edit page

Initialize the nested structure

Syntax

+{% highlight matlab %} +cprInfo = getCPRInfo(ebsd) +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/EBSD.grainMean.html b/pages/function_reference_matlab/EBSD.grainMean.html index 177e885be..aeb10fcc6 100644 --- a/pages/function_reference_matlab/EBSD.grainMean.html +++ b/pages/function_reference_matlab/EBSD.grainMean.html @@ -15,28 +15,25 @@ edit page

grain average property from ebsd properties

Syntax

{% highlight matlab %} % recover grains and store grainId -[grains,ebsd.grainId]=calcGrains(ebsd) +[grains,ebsd.grainId] = calcGrains(ebsd) {% endhighlight %} {% highlight matlab %} % compute average grain property -meanProp = grainMean(ebsd, ebsd.ci); -plot(grains,meanProp(grains.id)) +meanPropG = grainMean(ebsd, ebsd.ci, grains); +plot(grains,meanPropG) {% endhighlight %} {% highlight matlab %} -% ensures meanProp has the same ordering as grains -meanProp = grainMean(ebsd, ebsd.ci, grains); +% compute average grain property for each EBSD pixel +meanPropE = grainMean(ebsd, ebsd.ci, grains); +plot(ebsd,meanPropE) {% endhighlight %} {% highlight matlab %} % take not the mean but the maximum per grain -meanProp = grainMean(ebsd, ebsd.ci, @max); -{% endhighlight %} - -{% highlight matlab %} -% full syntax -meanProp = grainMean(ebsd, prop, grains, method) +meanPropG = grainMean(ebsd, ebsd.ci, grains, @max); +plot(grains,meanPropG) {% endhighlight %}

Input

@@ -77,18 +74,18 @@

Input

- meanProp + meanPropG - average property, sorted by grainId + average property, sorted as grains
- meanProp + meanPropE - average property, same size as grains (if specified) + average property, sorted as EBSD
diff --git a/pages/function_reference_matlab/EBSD.load.html b/pages/function_reference_matlab/EBSD.load.html index 98fd5358c..5162d37b1 100644 --- a/pages/function_reference_matlab/EBSD.load.html +++ b/pages/function_reference_matlab/EBSD.load.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->load - edit page

load ebsd data from file

Description

EBSD.load is a high level method for importing EBSD data from files. If possible it autodetects the format of the file. Supported formats are listed here. Additionally, EBSD data can be read from column aligned text file or excel spread sheets. In those cases it is neccesary to tell MTEX the column positions of the spatial coordinates, the phase information as well as Euler angles.

Syntax

+ edit page

load ebsd data from file

Description

EBSD.load is a high level method for importing EBSD data from files. If possible it autodetects the format of the file. Supported formats are listed here. Additionally, EBSD data can be read from column aligned text file or excel spread sheets. In those cases it is necessary to tell MTEX the column positions of the spatial coordinates, the phase information as well as Euler angles.

Syntax

{% highlight matlab %} ebsd = EBSD.load('filename.ang') ebsd = EBSD.load('filename.ctf') @@ -64,7 +64,7 @@

Input

ColumnNames

- names of the colums to be imported, mandatory are euler 1, euler 2, euler 3 + names of the columns to be imported, mandatory are euler 1, euler 2, euler 3
- postions of the columns to be imported + positions of the columns to be imported
+ weights + + filter mask +

See also

grain2d.GOS

\ No newline at end of file diff --git a/pages/function_reference_matlab/FunctionReference.html b/pages/function_reference_matlab/FunctionReference.html index cad27c9f2..fe60a6d98 100644 --- a/pages/function_reference_matlab/FunctionReference.html +++ b/pages/function_reference_matlab/FunctionReference.html @@ -12,10 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->Function Reference - edit page

Unlike most other texture analysis software MTEX does not have any graphical user interface. Instead the user is suposed to write scripts. Those scripts usually have the following structure

  1. import data
  2. inspect the data
  3. correct the data
  4. analyze the data
  5. plot and export the results of the analysis

During all these steps the data are stored as variables of different type. There are many different types of variables (called classes) for different objects, like vectors, rotations, EBSD data, grains or ODFs. The sidebar on the left lets you browse through all different MTEX class and the corresponding functions.

Variables are generated automatically when data are imported. E.g., the commands

+ edit page

Unlike most other texture analysis software MTEX does not have any graphical user interface. Instead the user is supposed to write scripts. Those scripts usually have the following structure

  1. import data
  2. inspect the data
  3. correct the data
  4. analyze the data
  5. plot and export the results of the analysis

During all these steps the data are stored as variables of different type. There are many different types of variables (called classes) for different objects, like vectors, rotations, EBSD data, grains or ODFs. The sidebar on the left lets you browse through all different MTEX class and the corresponding functions.

Variables are generated automatically when data are imported. E.g., the commands

{% highlight matlab %} fileName = [mtexEBSDPath filesep 'Forsterite.ctf']; -ebsd = EBSD.load(fileName) +ebsd = EBSD.load(fileName,'convertEuler2SpatialReferenceFrame') {% endhighlight %} {% highlight plaintext %} @@ -30,7 +30,7 @@ Properties: bands, bc, bs, error, mad, x, y Scan unit : um {% endhighlight %} -

imports data from the file fileName.ctf and stores them in the variable ebsd of type EBSD.

Next one can pass the variable ebsd to diferent MTEX function. E.g. to plot a phase plot one simply does

+

imports data from the file fileName.ctf and stores them in the variable ebsd of type EBSD.

Next one can pass the variable ebsd to different MTEX function. For generating a phase plot is as simple as

{% highlight matlab %} plot(ebsd) {% endhighlight %} @@ -51,7 +51,7 @@ 3 1991 9064 Diopside 12/m1 X||a*, Y||b*, Z||c boundary segments: 147957 (7.4e+06 µm) - inner boundary segments: 33 (1650 µm) + inner boundary segments: 33 (1652 µm) triple points: 11456 Properties: meanRotation, GOS diff --git a/pages/function_reference_matlab/HEALPixS2Grid.html b/pages/function_reference_matlab/HEALPixS2Grid.html index 8f3c7081d..049d03a7d 100644 --- a/pages/function_reference_matlab/HEALPixS2Grid.html +++ b/pages/function_reference_matlab/HEALPixS2Grid.html @@ -14,19 +14,10 @@ -->HEALPixS2Grid edit page

defines an equispaced spherical grid

Syntax

{% highlight matlab %} -equispacedS2Grid('points',300) -equispacedS2Grid('resolution',5*degree) +S2G = HEALPixS2Grid('resolution',5*degree) {% endhighlight %}

Options

- - - - - - - - - - - - - - - - - - - - - - - - -
- points - - number of points to be generated -
resolution @@ -35,72 +26,5 @@

Options

resolution of the grid

- hemisphere - - 'lower', 'uper', 'complete', 'sphere', 'identified' -
- minRho - - starting rho angle (default 0) -
- maxRho - - maximum rho angle (default 2*pi) -
- minTheta - - starting theta angle (default 0) -
- maxTheta - - maximum theta angle (default pi) -
-

Flags

- - - - - - - - - - - - -
- antipodal - - include antipodal symmetry -
- restrict2MinMax - - restrict margins to min / max -
- no_center - - ommit point at center -
-

See also

regularS2Grid plotS2Grid

\ No newline at end of file +

See also

regularS2Grid plotS2Grid

\ No newline at end of file diff --git a/pages/function_reference_matlab/MLSSolver.MLSSolver.html b/pages/function_reference_matlab/MLSSolver.MLSSolver.html index f174c1b7a..0dd179fca 100644 --- a/pages/function_reference_matlab/MLSSolver.MLSSolver.html +++ b/pages/function_reference_matlab/MLSSolver.MLSSolver.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->MLSSolver - edit page

The class MLSSolver implements the modified least squares solver for reconstructing an ODF from arbitrarily scattered pole figure intensities. The resulting ODF is represented as a weighted sum of unimodal components. The shape and the number of component centers can be specified. The algorithm is explained in detail in A novel pole figure inversion method: specification of the MTEX algorithm, Hielscher, Schaeben: J. of Appl. Cryst., 41(6), 2008.

Syntax

+ edit page

The class MLSSolver implements the modified least squares solver for reconstructing an ODF from arbitrarily scattered pole figure intensities. The resulting ODF is represented as a weighted sum of unimodal components. The shape and the number of component centers can be specified. The algorithm is explained in detail in

  • A novel pole figure inversion method: specification of the MTEX algorithm*, Hielscher, Schaeben: J. of Appl. Cryst., 41(6), 2008.

Syntax

{% highlight matlab %} solver = MLSSolver(pf,'resolution',5*degree,'halfwidth',7.5*degree); [odf,alpha] = solver.calcODF; diff --git a/pages/function_reference_matlab/Miller.smooth.html b/pages/function_reference_matlab/Miller.smooth.html index 8bf547f1d..94aa15080 100644 --- a/pages/function_reference_matlab/Miller.smooth.html +++ b/pages/function_reference_matlab/Miller.smooth.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->smooth - edit page

plot Miller indece

Syntax

+ edit page

contour plot of crystal directions

Syntax

{% highlight matlab %} varargout = smooth(m,varargin) {% endhighlight %} @@ -23,10 +23,35 @@

Input

m - Miller + Miller

Options

- +
+ + + + + + + + + + + + +
+ resolution + + +
+ contour + + +
+ contourf + + +

See also

vector3d.smooth

\ No newline at end of file diff --git a/pages/function_reference_matlab/Miller.unique.html b/pages/function_reference_matlab/Miller.unique.html index 7f288de28..2effb4505 100644 --- a/pages/function_reference_matlab/Miller.unique.html +++ b/pages/function_reference_matlab/Miller.unique.html @@ -14,7 +14,7 @@ -->unique edit page

disjoint list of Miller indices%

Syntax

{% highlight matlab %} -u = unique(m) % find disjoined elements of the vector v +u = unique(m) % find disjoint elements of the vector v u = unique(m,'tolerance',0.01) % use tolerance 0.01 [u,im,iu] = unique(m,varargin)] {% endhighlight %} @@ -33,7 +33,7 @@

Input

tol - double (default 1e-7) + double (default 1e~7) diff --git a/pages/function_reference_matlab/PoleFigure.calcODF.html b/pages/function_reference_matlab/PoleFigure.calcODF.html index 0dbcd676b..9cc56583e 100644 --- a/pages/function_reference_matlab/PoleFigure.calcODF.html +++ b/pages/function_reference_matlab/PoleFigure.calcODF.html @@ -72,7 +72,7 @@

Input

resolution - localization grid for the ansatz fucntions (default = 3/2 resolution(pf)) + localization grid for the ansatz functions (default = 3/2 resolution(pf)) @@ -123,7 +123,7 @@

Input

ensure_descent - stop iteration whenever no procress if observed + stop iteration whenever no progress if observed @@ -131,7 +131,7 @@

Input

force_iter_max - allway go until ITER_MAX + always go until ITER_MAX diff --git a/pages/function_reference_matlab/S2Fun.conv.html b/pages/function_reference_matlab/S2Fun.conv.html new file mode 100644 index 000000000..684d806fb --- /dev/null +++ b/pages/function_reference_matlab/S2Fun.conv.html @@ -0,0 +1,58 @@ +--- +title: conv + +sidebar: function_reference_sidebar +permalink: S2Fun.conv.html +folder: function_reference +toc: false +--- + + + conv + edit page

convolution with a function or a kernel on SO(3)

Syntax

+{% highlight matlab %} +SO3F = conv(sF1,sF2) +sF = conv(sF1,psi) +{% endhighlight %} +

Input

+ + + + + + + + + +
+ sF1, sF2 + + S2Fun +
+ psi + + convolution S2Kernel +
+

Output

+ + + + + + + + + +
+ sF + + S2FunHarmonic +
+ SO3F + + SO3FunHarmonic +
+

See also

S2FunHarmonic.conv S2Kernel.conv SO3Fun.conv SO3FunHarmonic.conv

\ No newline at end of file diff --git a/pages/function_reference_matlab/S2Fun.volume.html b/pages/function_reference_matlab/S2Fun.volume.html new file mode 100644 index 000000000..4c36ccaa8 --- /dev/null +++ b/pages/function_reference_matlab/S2Fun.volume.html @@ -0,0 +1,57 @@ +--- +title: volume + +sidebar: function_reference_sidebar +permalink: S2Fun.volume.html +folder: function_reference +toc: false +--- + + + volume + edit page

ratio of vector3d with a certain vector3d

Description

The function 'volume' returns the ratio of an vector3d that is close to an vector3d (center) by a tolerance (radius) to the volume of the entire spherical function.

Syntax

+{% highlight matlab %} +v = volume(sF,center,radius) +{% endhighlight %} +

Input

+ + + + + + + + + + + + + +
+ sF + + S2Fun +
+ center + + vector3d +
+ radius + + double +
+

Options

+ + + + + +
+ resolution + + resolution of discretization +
+

See also

S2Fun.sum S2Fun.mean

\ No newline at end of file diff --git a/pages/function_reference_matlab/S2FunHarmonic.approximation.html b/pages/function_reference_matlab/S2FunHarmonic.approximation.html index 6eb65926b..9f394ec80 100644 --- a/pages/function_reference_matlab/S2FunHarmonic.approximation.html +++ b/pages/function_reference_matlab/S2FunHarmonic.approximation.html @@ -64,10 +64,10 @@

Input

- W + weights - weight w_n for the node nodes (default: voronoi weights) + weight w_n for the node nodes (default: Voronoi weights) diff --git a/pages/function_reference_matlab/S2FunHarmonic.conv.html b/pages/function_reference_matlab/S2FunHarmonic.conv.html index cc8043eb8..40f836564 100644 --- a/pages/function_reference_matlab/S2FunHarmonic.conv.html +++ b/pages/function_reference_matlab/S2FunHarmonic.conv.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->conv - edit page

spherical convolution of sF with a radial function psi

Syntax

+ edit page

spherical convolution of sF with a radial function psi

There are two S2Funs \(f: \mathbb S^2 /_{s_1} \to \mathbb{C}\) \(g: \mathbb S^2 /_{s_2} \to \mathbb{C}\) given, where \(s_1\) and \(s_2\) denotes the symmetries. Then the convolution \(f*g: {}_{s_2} \backslash SO(3) /_{s_1} \to \mathbb{C}\) is defined by

\[(f * g)(R) = \frac1{4\pi} \int_{S^2} f(R^{-1}\xi) \cdot g(\xi) \, d\xi\]

with \(vol(S^2) = \int_{S^2} 1 \, d\xi = 4\pi\). Note that \(s_1\) is the right symmetry of \(f*g\) and \(s_2\) is the left symmetry.

Syntax

{% highlight matlab %} sF = conv(sF, psi) sF = conv(sF, A) diff --git a/pages/function_reference_matlab/S2FunHarmonic.plus.html b/pages/function_reference_matlab/S2FunHarmonic.plus.html index d1765393b..21ec175d7 100644 --- a/pages/function_reference_matlab/S2FunHarmonic.plus.html +++ b/pages/function_reference_matlab/S2FunHarmonic.plus.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->plus - edit page

impements sF1 + sF2

Syntax

+ edit page

implements sF1 + sF2

Syntax

{% highlight matlab %} sF = sF1+sF2 sF = a+sF1 diff --git a/pages/function_reference_matlab/S2FunMLS.S2FunMLS.html b/pages/function_reference_matlab/S2FunMLS.S2FunMLS.html new file mode 100644 index 000000000..8e504773a --- /dev/null +++ b/pages/function_reference_matlab/S2FunMLS.S2FunMLS.html @@ -0,0 +1,19 @@ +--- +title: S2FunMLS + +sidebar: function_reference_sidebar +permalink: S2FunMLS.S2FunMLS.html +folder: function_reference +toc: false +--- + + + S2FunMLS + edit page

a class representing a function on the sphere

Syntax

+{% highlight matlab %} +on the sphere +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.cumsum.html b/pages/function_reference_matlab/S2FunMLS.eval.html similarity index 53% rename from pages/function_reference_matlab/vector3d.cumsum.html rename to pages/function_reference_matlab/S2FunMLS.eval.html index d5c82c641..b9240286b 100644 --- a/pages/function_reference_matlab/vector3d.cumsum.html +++ b/pages/function_reference_matlab/S2FunMLS.eval.html @@ -1,8 +1,8 @@ --- -title: cumsum +title: eval sidebar: function_reference_sidebar -permalink: vector3d.cumsum.html +permalink: S2FunMLS.eval.html folder: function_reference toc: false --- @@ -11,20 +11,28 @@ cumsum - edit page

cumulative sum of vector3d

Syntax

+ -->eval + edit page

evaluate sF on v via moving least squares (MLS) approximation

Syntax

{% highlight matlab %} -cumsum(v) % sum along the first non singular dimension -cumsum(v,d) % sum along dimension d +vals = sF.eval(v) +vals = eval(sF,v) {% endhighlight %}

Input

+ + + +
+ sF + + the function we want to approximate +
v - vector3d + the points where we want to evaluate the MLS approximation
@@ -32,10 +40,10 @@

Input

- v + vals - vector3d + the values of sF on v
diff --git a/pages/function_reference_matlab/S2FunTri.volume.html b/pages/function_reference_matlab/S2FunTri.volume.html index 1a46e5461..f17739e53 100644 --- a/pages/function_reference_matlab/S2FunTri.volume.html +++ b/pages/function_reference_matlab/S2FunTri.volume.html @@ -12,8 +12,46 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->volume - edit page

Syntax

+ edit page

Description

The function 'volume' returns the ratio of an vector3d that is close to an vector3d (center) by a tolerance (radius) to the volume of the entire spherical function.

Syntax

{% highlight matlab %} -sF = volume(sF1,center,radius) +v = volume(sF,center,radius) {% endhighlight %} -
\ No newline at end of file +

Input

+ + + + + + + + + + + + + +
+ sF + + S2Fun +
+ center + + vector3d +
+ radius + + double +
+

Options

+ + + + + +
+ resolution + + resolution of discretization +
+

See also

S2FunTri.sum S2FunTri.mean

\ No newline at end of file diff --git a/pages/function_reference_matlab/S2Grid.refine.html b/pages/function_reference_matlab/S2Grid.refine.html index ff88559a6..1bebfa6cd 100644 --- a/pages/function_reference_matlab/S2Grid.refine.html +++ b/pages/function_reference_matlab/S2Grid.refine.html @@ -14,7 +14,7 @@ -->refine edit page

refine S2Grid

Syntax

{% highlight matlab %} -[S2G, r]= refine(S2G) +S2G = refine(S2G) {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/S2VectorField.norm.html b/pages/function_reference_matlab/S2VectorField.norm.html index 8b29d00e0..e0431a7e5 100644 --- a/pages/function_reference_matlab/S2VectorField.norm.html +++ b/pages/function_reference_matlab/S2VectorField.norm.html @@ -12,8 +12,8 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->norm - edit page

Syntax

+ edit page

norm of a spherical vector field as a spherical function

Syntax

{% highlight matlab %} -norm(vF) +S2F = norm(vF) {% endhighlight %} -

See also

\ No newline at end of file +
\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Fun.calcComponentsOld.html b/pages/function_reference_matlab/SO3Fun.calcComponentsOld.html deleted file mode 100644 index 98f6fdea4..000000000 --- a/pages/function_reference_matlab/SO3Fun.calcComponentsOld.html +++ /dev/null @@ -1,93 +0,0 @@ ---- -title: calcComponentsOld - -sidebar: function_reference_sidebar -permalink: SO3Fun.calcComponentsOld.html -folder: function_reference -toc: false ---- - - - calcComponentsOld - edit page

heuristic to find modal orientations

Syntax

-{% highlight matlab %} -[modes, volume] = calcComponents(SO3F) -[modes, volume, centerId] = calcComponents(SO3F,'seed',ori) -{% endhighlight %} -

Input

-

- - - - - - - - -
- SO3F - - SO3Fun -
- ori - - initial list of orientation -
-

Output

- - - - - - - - - - - - - -
- modes - - modal orientation -
- volume - - volume of the component -
- centerId - - list of ids to which each initial ori converged to -
-

Options

- - - - - - - - - - - - - -
- resolution - - search-grid resolution -
- angle - - maximum component width used for volume computation -
- exact - - do not dismiss very small modes at the end -
-

See also

SO3Fun.max

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Fun.centerSpecimen.html b/pages/function_reference_matlab/SO3Fun.centerSpecimen.html index 93efcbed0..c2be2bbef 100644 --- a/pages/function_reference_matlab/SO3Fun.centerSpecimen.html +++ b/pages/function_reference_matlab/SO3Fun.centerSpecimen.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->centerSpecimen - edit page

rotates an odf with specimen symmetry into its symmetry axes

centerSpecimen(odf,center) trys to find the normal vectors of orthorhombic symmetry for the x mirror and y mirror plane and calculates an rotation needed to rotate the odf back into these mirror planes. the routine starts with an lookaround grid for a given center (default xvector) to find a starting value for newton iteration.

Syntax

+ edit page

rotates an odf with specimen symmetry into its symmetry axes

centerSpecimen(odf,center) tries to find the normal vectors of orthorhombic symmetry for the x mirror and y mirror plane and calculates an rotation needed to rotate the odf back into these mirror planes. the routine starts with a look around grid for a given center (default xvector) to find a starting value for newton iteration.

Syntax

{% highlight matlab %} [odf,rot,v1,v2] = centerSpecimen(odf,v0,varargin) {% endhighlight %} @@ -31,7 +31,7 @@

Input

v0 - vector3d initial gues for a symmetry axis (default xvector) + vector3d initial guess for a symmetry axis (default xvector) @@ -93,15 +93,15 @@

Input

silent - dont verbose number of initial axes and the newton iteration + don't verbose number of initial axes and the newton iteration - fourier + Fourier - use fourier coefficents as objective function + use Fourier coefficients as objective function @@ -145,6 +145,9 @@

Input

Bunge Euler angles in degree phi1 Phi phi2 6 4 0 + +Warning: Rotating an ODF with specimen symmetry will remove +the specimen symmetry {% endhighlight %}

{% include inline_image.html file="SO3Fun.centerSpecimen_01.png" %} diff --git a/pages/function_reference_matlab/SO3Fun.cor.html b/pages/function_reference_matlab/SO3Fun.cor.html index d7887b1a8..c7d7c0145 100644 --- a/pages/function_reference_matlab/SO3Fun.cor.html +++ b/pages/function_reference_matlab/SO3Fun.cor.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->cor - edit page

correlation between two two SO3Fun

\[ cor(f_1,f_2) = \sqrt{\frac1{8\pi^2} \int_{SO(3)} f_1® f_2® dR\],

Syntax

+ edit page

correlation between two SO3Funs

\[ cor(f_1,f_2) = \sqrt{\frac1{8\pi^2} \int_{SO(3)} f_1® f_2® dR\],

Syntax

{% highlight matlab %} c = cor(SO3F1,SO3F2) {% endhighlight %} diff --git a/pages/function_reference_matlab/SO3Fun.grad.html b/pages/function_reference_matlab/SO3Fun.grad.html index cf6a87814..6b3f52f96 100644 --- a/pages/function_reference_matlab/SO3Fun.grad.html +++ b/pages/function_reference_matlab/SO3Fun.grad.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->grad - edit page

right-sided gradient of an SO3Fun w.r.t. the tangent space basis

Syntax

+ edit page

gradient of an SO3Fun w.r.t. the tangent space basis

Syntax

{% highlight matlab %} G = SO3F.grad % compute the gradient g = SO3F.grad(rot) % evaluate the gradient in rot @@ -60,4 +60,4 @@

Input

-

See also

SO3Fun.eval orientation.exp

\ No newline at end of file +

See also

SO3Fun.eval orientation.exp SO3FunHarmonic.grad SO3FunRBF.grad SO3FunCBF.grad SO3VectorField

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Fun.interpolate.html b/pages/function_reference_matlab/SO3Fun.interpolate.html index af8503119..3b9756f18 100644 --- a/pages/function_reference_matlab/SO3Fun.interpolate.html +++ b/pages/function_reference_matlab/SO3Fun.interpolate.html @@ -42,7 +42,7 @@

Input

SO3F - SO3Fun + SO3FunRBF @@ -53,7 +53,7 @@

Input

lsqr - least squares (Matlab) + least squares (MATLAB) @@ -61,7 +61,7 @@

Input

lsqnonneg - non negative least squares (Matlab, fast) + non negative least squares (MATLAB, fast) diff --git a/pages/function_reference_matlab/SO3Fun.max.html b/pages/function_reference_matlab/SO3Fun.max.html index 40d21933f..dfc1e6f21 100644 --- a/pages/function_reference_matlab/SO3Fun.max.html +++ b/pages/function_reference_matlab/SO3Fun.max.html @@ -138,13 +138,13 @@

Input

{% highlight plaintext %} value = - 5.0394 + 5.0192 ori = orientation (m-3m → xyz (222)) Bunge Euler angles in degree phi1 Phi phi2 - 153.361 48.232 243.45 + 153.394 47.5633 244.002 {% endhighlight %}

{% include inline_image.html file="SO3Fun.max_01.png" %} diff --git a/pages/function_reference_matlab/SO3Fun.mean.html b/pages/function_reference_matlab/SO3Fun.mean.html index 446cd2028..a47526eaf 100644 --- a/pages/function_reference_matlab/SO3Fun.mean.html +++ b/pages/function_reference_matlab/SO3Fun.mean.html @@ -74,9 +74,11 @@

Input

SO3F2 = SO3FunHandle (xyz → xyz) + eval: @(rot)SO3F1.eval(rot) SO3F3 = SO3FunHandle (xyz → xyz) size: 2 x 3 + eval: @(rot)permute(SO3F1,[dim+1,1:dim]).*SO3F2.eval(rot) {% endhighlight %}

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Fun.rotate.html b/pages/function_reference_matlab/SO3Fun.rotate.html index af9403c0e..65183284e 100644 --- a/pages/function_reference_matlab/SO3Fun.rotate.html +++ b/pages/function_reference_matlab/SO3Fun.rotate.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

rotate function on SO(3)

Syntax

+ edit page

rotate function on SO(3) by a rotation

Syntax

{% highlight matlab %} SO3F = rotate(SO3F,rot) +SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

@@ -42,8 +43,8 @@

Input

SO3F

- SO3FunHandle + SO3Fun
-

\ No newline at end of file +

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Fun.rotate_outer.html b/pages/function_reference_matlab/SO3Fun.rotate_outer.html index 5253a7aff..b41fa7cd2 100644 --- a/pages/function_reference_matlab/SO3Fun.rotate_outer.html +++ b/pages/function_reference_matlab/SO3Fun.rotate_outer.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate_outer - edit page

rotate ODF

Syntax

+ edit page

rotate function on SO(3) by multiple rotations

Syntax

{% highlight matlab %} SO3F = rotate_outer(SO3F,rot) +SO3F = rotate_outer(SO3F,rot,'right') {% endhighlight %}

Input

@@ -46,4 +47,4 @@

Input

-

\ No newline at end of file +

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Fun.transformReferenceFrame.html b/pages/function_reference_matlab/SO3Fun.transformReferenceFrame.html new file mode 100644 index 000000000..4449351d5 --- /dev/null +++ b/pages/function_reference_matlab/SO3Fun.transformReferenceFrame.html @@ -0,0 +1,49 @@ +--- +title: transformReferenceFrame + +sidebar: function_reference_sidebar +permalink: SO3Fun.transformReferenceFrame.html +folder: function_reference +toc: false +--- + + + transformReferenceFrame + edit page

change reference frame of an ODF

Syntax

+{% highlight matlab %} +SO3F = transformReferenceFrame(SO3F,cs) +{% endhighlight %} +

Input

+ + + + + + + + + +
+ odf + + SO3Fun +
+ cs + + new crystalSymmetry +
+

Output

+ + + + + +
+ odf + + SO3Fun +
+

Example

cs1 = crystalSymmetry('121',[1 3 2]); cs2 = crystalSymmetry('112',[2 1 3]);

ori = orientation.rand(cs1) odf1 = SO3FunHarmonic(unimodalODF(ori)) %odf1 = BinghamODF([1 0 0 0],ori) %odf1 = SO3FunHandle(@(ori) odf1.eval(ori),odf1.CS) odf2 = transformReferenceFrame(odf1,cs2)

plotPDF(odf1,Miller({1,0,0},{0,0,1},{0,1,0},cs1)) nextAxis(2,1) plotPDF(odf2,Miller({0,1,0},{1,0,0},{0,0,1},cs2))

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunBingham.rotate.html b/pages/function_reference_matlab/SO3FunBingham.rotate.html index c6dc935d1..bcdcca03f 100644 --- a/pages/function_reference_matlab/SO3FunBingham.rotate.html +++ b/pages/function_reference_matlab/SO3FunBingham.rotate.html @@ -14,7 +14,13 @@ -->rotate edit page

rotate function on SO(3) by a rotation

Syntax

{% highlight matlab %} +% rotate in specimen coordinates SO3F = rotate(SO3F,rot) +{% endhighlight %} + +{% highlight matlab %} +% rotate in crystal coordinates, e.g. for phase transformation +% or reference frame transformation SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/SO3FunCBF.calcFourier.html b/pages/function_reference_matlab/SO3FunCBF.calcFourier.html index 2ae568b16..95c5b07e4 100644 --- a/pages/function_reference_matlab/SO3FunCBF.calcFourier.html +++ b/pages/function_reference_matlab/SO3FunCBF.calcFourier.html @@ -12,7 +12,15 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->calcFourier - edit page

compute harmonic coefficients of SO3Fun

Syntax

f_hat = calcFourier(SO3F)
f_hat = calcFourier(SO3F,'bandwidth',L)

Input

+ edit page

compute harmonic coefficients of SO3Fun

Syntax

+{% highlight matlab %} +f_hat = calcFourier(SO3F) +{% endhighlight %} + +{% highlight matlab %} +f_hat = calcFourier(SO3F,'bandwidth',L) +{% endhighlight %} +

Input

diff --git a/pages/function_reference_matlab/SO3FunCBF.grad.html b/pages/function_reference_matlab/SO3FunCBF.grad.html index aa31db6f1..8e6ad456e 100644 --- a/pages/function_reference_matlab/SO3FunCBF.grad.html +++ b/pages/function_reference_matlab/SO3FunCBF.grad.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->grad - edit page

right-sided gradient of an SO3Fun

Description

general formula:

\[s(g1_i) = sum_j c_j DRK(h_j,r_j) g h_j x r_j \]

Syntax

+ edit page

gradient of an SO3FunCBF

Description

general formula:

\[s(g1_i) = sum_j c_j DRK(h_j,r_j) g h_j x r_j \]

Syntax

{% highlight matlab %} G = SO3F.grad % compute the gradient g = SO3F.grad(rot) % evaluate the gradient in rot @@ -60,4 +60,4 @@

Input

-

\ No newline at end of file +

See also

orientation.exp SO3FunHarmonic.grad SO3FunRBF.grad SO3VectorField

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunCBF.rotate.html b/pages/function_reference_matlab/SO3FunCBF.rotate.html index 5de9d4dd9..ca998ecfd 100644 --- a/pages/function_reference_matlab/SO3FunCBF.rotate.html +++ b/pages/function_reference_matlab/SO3FunCBF.rotate.html @@ -12,8 +12,45 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

called by SO3Fun/rotate

Syntax

+ edit page

rotate function on SO(3) by a rotation

Syntax

{% highlight matlab %} -odf = rotate(odf,q,varargin) +% rotate in specimen coordinates +SO3F = rotate(SO3F,rot) {% endhighlight %} -
\ No newline at end of file + +{% highlight matlab %} +% rotate in crystal coordinates, e.g. for phase transformation +% or reference frame transformation +SO3F = rotate(SO3F,rot,'right') +{% endhighlight %} +

Input

+ + + + + + + + + +
+ SO3F + + SO3FunCBF +
+ rot + + rotation +
+

Output

+ + + + + +
+ SO3F + + SO3FunCBF +
+

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunComposition.grad.html b/pages/function_reference_matlab/SO3FunComposition.grad.html index b823b5d6c..73e7215f3 100644 --- a/pages/function_reference_matlab/SO3FunComposition.grad.html +++ b/pages/function_reference_matlab/SO3FunComposition.grad.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->grad - edit page

right-sided gradient of an SO3Fun

Syntax

+ edit page

gradient of an SO3FunComposition

Syntax

{% highlight matlab %} G = SO3F.grad % compute the gradient g = SO3F.grad(rot) % evaluate the gradient in rot diff --git a/pages/function_reference_matlab/SO3FunComposition.rotate.html b/pages/function_reference_matlab/SO3FunComposition.rotate.html index 784799ead..5e5a9ed6d 100644 --- a/pages/function_reference_matlab/SO3FunComposition.rotate.html +++ b/pages/function_reference_matlab/SO3FunComposition.rotate.html @@ -12,23 +12,24 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

rotate ODF

Syntax

+ edit page

rotate function on SO(3) by a rotation

Syntax

{% highlight matlab %} -odf = rotate(odf,rot,varargin) +SO3F = rotate(SO3F,rot) +SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

-
- odf + SO3F - SO3Fun + SO3FunComposition
- q + rot rotation @@ -39,11 +40,11 @@

Input

- rotated odf + SO3F - SO3Fun + SO3FunComposition
-

\ No newline at end of file +

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunComposition.rotate_outer.html b/pages/function_reference_matlab/SO3FunComposition.rotate_outer.html index 07b33ade0..b9db3f675 100644 --- a/pages/function_reference_matlab/SO3FunComposition.rotate_outer.html +++ b/pages/function_reference_matlab/SO3FunComposition.rotate_outer.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate_outer - edit page

rotate a function by a rotation

Syntax

+ edit page

rotate function on SO(3) by multiple rotations

Syntax

{% highlight matlab %} -SO3F = SO3F.rotate_outer(rot) +SO3F = rotate(SO3F,rot) +SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

@@ -23,7 +24,7 @@

Input

SO3F

@@ -42,8 +43,8 @@

Input

SO3F

- SO3FunHandle + SO3FunComposition
- SO3FunHandle + SO3FunComposition
-

\ No newline at end of file +

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunComposition.smooth.html b/pages/function_reference_matlab/SO3FunComposition.smooth.html index e024f2844..e7bb5c7fe 100644 --- a/pages/function_reference_matlab/SO3FunComposition.smooth.html +++ b/pages/function_reference_matlab/SO3FunComposition.smooth.html @@ -52,7 +52,9 @@

Input

halfwidth + + halfwidth of the smoothing kernel +

See also

SO3Fun.smooth

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHandle.rotate_outer.html b/pages/function_reference_matlab/SO3FunHandle.rotate_outer.html index 9b1b32349..1328d6f54 100644 --- a/pages/function_reference_matlab/SO3FunHandle.rotate_outer.html +++ b/pages/function_reference_matlab/SO3FunHandle.rotate_outer.html @@ -12,9 +12,16 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate_outer - edit page

rotate a function by a rotation

Syntax

+ edit page

rotate function on SO(3) by multiple rotations

Syntax

{% highlight matlab %} -SO3F = SO3F.rotate_outer(rot) +% rotate in specimen coordinates +SO3F = rotate(SO3F,rot) +{% endhighlight %} + +{% highlight matlab %} +% rotate in crystal coordinates, e.g. for phase transformation +% or reference frame transformation +SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

@@ -31,7 +38,7 @@

Input

rot

- rotation + rotation, orientation
diff --git a/pages/function_reference_matlab/SO3FunHarmonic.SO3FunHarmonic.html b/pages/function_reference_matlab/SO3FunHarmonic.SO3FunHarmonic.html index 785e7ed94..e34bc4c11 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.SO3FunHarmonic.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.SO3FunHarmonic.html @@ -56,15 +56,24 @@

Input

-

Example

+

Options

+ + + + + +
+ bandwidth + + bandwidth of the harmonic expansion +
+

Example

{% highlight matlab %} -SO3F = SO3FunHarmonic(rand(deg2dim(6),1)) +F = SO3FunHandle(@(rot) rot.angle) {% endhighlight %} {% highlight plaintext %} -SO3F = SO3FunHarmonic (xyz → xyz) - isReal: false - bandwidth: 5 - weight: 0.22 +F = SO3FunHandle (xyz → xyz) + eval: @(rot)rot.angle {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.WignerDmap.html b/pages/function_reference_matlab/SO3FunHarmonic.WignerDmap.html index 41c3c1bec..98c4e103b 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.WignerDmap.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.WignerDmap.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->WignerDmap - edit page

create harmonic Representation of the normalized Wigner-D function with harmonic degree N and indices k,l : D^n_{k,l}

Syntax

+ edit page

create harmonic Representation of the normalized Wigner-D function with harmonic degree N and indices k,l : \(D^n_{k,l}\)

Syntax

{% highlight matlab %} SO3F = SO3FunHarmonic.WignerDmap(N,k,l) SO3F = SO3FunHarmonic.WignerDmap(N,'full') diff --git a/pages/function_reference_matlab/SO3FunHarmonic.approximation.html b/pages/function_reference_matlab/SO3FunHarmonic.approximation.html index 38d4abf3d..32dd92f3c 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.approximation.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.approximation.html @@ -47,12 +47,20 @@

Input

uses constant normalized weights (for example if the nodes are constructed by equispacedSO3Grid) + + + weights + + + weight w_n for the nodes (default: Voronoi weights) + + bandwidth - maximum degree of the Wigner-D functions used to approximate the function + maximum degree of the Wigner-D functions used to approximate the function (Be careful by setting the bandwidth by yourself, since it may yields undersampling) @@ -73,11 +81,19 @@

Input

- weights + regularization - weight w_n for the nodes (default: Voronoi weights) + the energy functional of the lsqr solver is regularized by the Sobolev norm of SO3F (there is given a regularization constant) + + + + + SobolevIndex + + + for regularization (default = 1) -

\ No newline at end of file +

See also

SO3Fun.interpolate SO3FunHarmonic.quadrature SO3VectorFieldHarmonic.approximation

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.calcFourier.html b/pages/function_reference_matlab/SO3FunHarmonic.calcFourier.html index 8577b0a14..254da6274 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.calcFourier.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.calcFourier.html @@ -12,14 +12,22 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->calcFourier - edit page

compute harmonic coefficients of SO3Fun

Syntax

f_hat = calcFourier(SO3F)
f_hat = calcFourier(SO3F,'bandwidth',L)

Input

+ edit page

compute harmonic coefficients of SO3Fun

Syntax

+{% highlight matlab %} +f_hat = calcFourier(SO3F) +{% endhighlight %} + +{% highlight matlab %} +f_hat = calcFourier(SO3F,'bandwidth',L) +{% endhighlight %} +

Input

diff --git a/pages/function_reference_matlab/SO3FunHarmonic.conv.html b/pages/function_reference_matlab/SO3FunHarmonic.conv.html index 1d72437ac..990e1d067 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.conv.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.conv.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->conv - edit page

convolution of an SO3FunHarmonic with a function or a kernel on SO(3)

1) SO3Fun * SO3Fun There are two SO3Funs \(f: {S_f^L\backslash}SO(3){/S_f^R} \to \mathbb{C}\) where \(S_f^L\) is the Left symmetry and \(S_f^R\) is the Right symmetry and \(g: {S_g^L\backslash}SO(3){/S_g^R} \to \mathbb{C}\) given. Then the convolution \( f *L g : _{S_f^L\backslash}SO(3){/S_g^R} \to \mathbb{C}\) is defined by

\[ (f *L g)(R) = \frac1{8\pi^2} \int{SO(3)} f(q) \cdot g(q^{-1}\,R) \, dq \]

and the convolution \( f *R g : _{S_g^L\backslash}SO(3){/S_f^R} \to \mathbb{C}\) is defined by

\[ (f *R g)(R) = \frac1{8\pi^2} \int{SO(3)} f(q) \cdot g(R\,q^{-1}) \, dq \].

with \(vol(SO(3)) = \int_{SO(3)} 1 \, dR = 8\pi^2\). The convolution \(*_L\) is used as default. The convolution of matrices of SO3Functions with matrices of SO3Functions works elementwise.

2) SO3Fun * S2Fun The convolution of an SO3Fun \(f: {S_f^L\backslash}SO(3){/S_f^R} \to \mathbb{C}\) with an S2Fun \(h: \mathbb S^2_{/S_h} \to \mathbb{C}\) yields \(f*h:\mathbb S^2_{/S_f^L} \to \mathbb{C}\) with

\[ (f * h)(\xi) = \frac1{8\pi^2} \int_{SO(3)} f(q) \cdot h(q^{-1}\,\xi) \, dq \].

3) In particular we convolute an SO3Fun with an SO3Kernel similar to the first case. Therefore the Right and Left sided convolution are equivalent. The convolution of an SO3Fun with an S2Kernel works analogue to case 2.

Syntax

+ edit page

convolution of a rotational function with a rotational or spherical function

1. Convolution of two rotational functions

If there are two SO3Fun \(f \colon {}_{S_f^L } \backslash SO(3) /_{S_f^R} \to \mathbb{C}\) where \(S_f^L\) is the left symmetry and \(S_f^R\) is the right symmetry and \(g: {}_{S_g^L} \backslash SO(3) /_{S_g^R} \to \mathbb C\) given. Then the convolution \(f {*}_L g \colon {}_{S_f^L} \backslash SO(3) /_{S_g^R} \to \mathbb C\) is defined by

\[ (f {*}_L g)(R) = \frac{1}{8\pi^2} \int_{SO(3)} f(q) \cdot g(q^{-1}\,R) \, dq \]

and the convolution \(f {*}_R g \colon {}_{S_g^L}\backslash SO(3) /_{S_f^R} \to \mathbb{C}\) is defined by

\[ (f {*}_R g)(R) = \frac1{8\pi^2} \int_{SO(3)} f(q) \cdot g(R\,q^{-1}) \, dq \]

with \(vol(SO(3)) = \int_{SO(3)} 1 \, dR = 8\pi^2\). The convolution \(*_L\) is used as default. The convolution of matrices of SO3Functions with matrices of SO3Functions works elementwise.

2. Convolution of a rotational function with a spherical function

The convolution of an SO3Fun \(f: {}_{S_f^L} \backslash SO(3) /_{S_f^R} \to \mathbb{C}\) with an S2Fun \(h \colon \mathbb S^2 /_{S_h} \to \mathbb C\) yields the S2Fun \(f*h \colon \mathbb S^2/_{S_f^L} \to \mathbb C\) with

\[ (f * h)(\xi) = \frac1{8\pi^2} \int_{SO(3)} f(q) \cdot h(q^{-1}\,\xi) \, dq \]

3. Convolution of a rotational function with a kernel function

In particular we convolute an SO3Fun with an SO3Kernel similar to the first case. Therefore the Right and Left sided convolution are equivalent. The convolution of an SO3Fun with an S2Kernel works analogue to case 2.%

Syntax

{% highlight matlab %} SO3F = conv(SO3F1,SO3F2) SO3F = conv(SO3F1,SO3F2,'Right') diff --git a/pages/function_reference_matlab/SO3FunHarmonic.evalNFSOFT.html b/pages/function_reference_matlab/SO3FunHarmonic.evalNFSOFT.html index c0ef5b2e6..dd4068da8 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.evalNFSOFT.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.evalNFSOFT.html @@ -46,4 +46,4 @@

Input

SO3F - SO3FunCBF + SO3FunHarmonic
-

See also

SO3FunHarmonic.eval SO3FunHarmonic.evalSectionsEquispacedFFT

\ No newline at end of file +

See also

SO3FunHarmonic.eval SO3FunHarmonic.evalEquispacedFFT SO3FunHarmonic.evalSectionsEquispacedFFT

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.evalSectionsEquispacedFFT.html b/pages/function_reference_matlab/SO3FunHarmonic.evalSectionsEquispacedFFT.html index 7d2471644..3ddc6eaf3 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.evalSectionsEquispacedFFT.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.evalSectionsEquispacedFFT.html @@ -66,4 +66,4 @@

Input

-

See also

SO3FunHarmonic.eval SO3FunHarmonic.evalNFSOFT

\ No newline at end of file +

See also

SO3FunHarmonic.eval SO3FunHarmonic.evalNFSOFT SO3FunHarmonic.evalEquispacedFFT

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.evalV2.html b/pages/function_reference_matlab/SO3FunHarmonic.evalV2.html deleted file mode 100644 index b11dfb08a..000000000 --- a/pages/function_reference_matlab/SO3FunHarmonic.evalV2.html +++ /dev/null @@ -1,49 +0,0 @@ ---- -title: evalV2 - -sidebar: function_reference_sidebar -permalink: SO3FunHarmonic.evalV2.html -folder: function_reference -toc: false ---- - - - evalV2 - edit page

evaluates the rotational harmonic on a given set of points using a representation based coefficient transform, that transforms a series of Wigner-D functions into a trivariate fourier series and using NFFT at the end.

Syntax

-{% highlight matlab %} -f = evalV2(F,rot) -{% endhighlight %} -

Input

- - - - - - - - - -
- F - - SO3FunHarmonic -
- rot - - rotation (evaluation nodes) -
-

Output

- - - - - -
- f - - double -
-

See also

SO3FunHarmonic.eval SO3FunHarmonic.evalEquispacedFFT SO3FunHarmonic.evalSectionsEquispacedFFT

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.grad.html b/pages/function_reference_matlab/SO3FunHarmonic.grad.html index 7a1ab391d..c9d81c377 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.grad.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.grad.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->grad - edit page

right-sided gradient of an SO3Fun

Syntax

+ edit page

gradient of an SO3Fun

Syntax

{% highlight matlab %} G = SO3F.grad % compute the gradient g = SO3F.grad(rot) % evaluate the gradient in rot @@ -22,6 +22,11 @@ % go 5 degree in direction of the gradient ori_new = exp(rot,5*degree*normalize(g)) {% endhighlight %} + +{% highlight matlab %} +% the right tangent vector +g = SO3F.grad(rot,SO3TangentSpace.rightVector) +{% endhighlight %}

Input

@@ -60,4 +65,4 @@

Input

-

\ No newline at end of file +

See also

orientation.exp SO3FunRBF.grad SO3FunCBF.grad SO3VectorFieldHarmonic

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.max.html b/pages/function_reference_matlab/SO3FunHarmonic.max.html index c558fb7e2..1383c88c7 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.max.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.max.html @@ -131,18 +131,21 @@

Input

Example

{% highlight matlab %} %find the local maxima of the ODF -mode = calcModes(SantaFe) -plotPDF(SantaFe,Miller(0,0,1,mode.CS)) -annotate(mode) +[value,ori] = max(SantaFe) +plotPDF(SantaFe,Miller(0,0,1,ori.CS)) +annotate(ori) {% endhighlight %} {% highlight plaintext %} -mode = orientation (m-3m → xyz (222)) +value = + 5.0192 + +ori = orientation (m-3m → xyz (222)) Bunge Euler angles in degree phi1 Phi phi2 - 153.361 48.232 243.45 + 153.394 47.5633 244.002 {% endhighlight %}
{% include inline_image.html file="SO3FunHarmonic.max_01.png" %} -

See also

SO3Fun.min SO3Fun.max

\ No newline at end of file +

See also

SO3Fun.min SO3Fun.max SO3Fun.calcComponents

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.norm.html b/pages/function_reference_matlab/SO3FunHarmonic.norm.html index c70c3c3a4..581d1cafd 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.norm.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.norm.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->norm - edit page

Calculate the L2-norm also known as texture index of a SO3FunHarmonic, by using Parsevalls equality for the integral

\[ t = \sqrt{\frac1{8\pi^2}\int_{SO(3)} ^2 dR}\],

with \(vol(SO(3)) = \int_{SO(3)} 1 dR = 8\pi^2\). The Wigner-D functions (one Wigner-coefficient is 1 and all others are 0) are L2-normalized.

Syntax

+ edit page

Calculate the L2-norm also known as texture index of a SO3FunHarmonic, by using Parsevalls equality for the integral

\[ t = \sqrt{\frac1{8\pi^2}\int_{SO(3)} |f® |^2 dR}\],

with \(vol(SO(3)) = \int_{SO(3)} 1 dR = 8\pi^2\). The Wigner-D functions (one Wigner-coefficient is 1 and all others are 0) are L2-normalized.

We can compute the Sobolev norm of an SO3FunHarmonic by

\[ t = \sqrt{ \sum_{n=0}^N (2n+1)^{2s} \, \sum_{k,l=-n}^n \abs{\hat{f}_n^{k,l}}^2 }\],

where \(s\) is the Sobolev index. (The default case \(s=0\) corresponds to the L2-norm.)

Syntax

{% highlight matlab %} t = norm(SO3F) +t = norm(SO3F,'Sobolev') {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/SO3FunHarmonic.numel.html b/pages/function_reference_matlab/SO3FunHarmonic.numel.html deleted file mode 100644 index db8627c14..000000000 --- a/pages/function_reference_matlab/SO3FunHarmonic.numel.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: numel - -sidebar: function_reference_sidebar -permalink: SO3FunHarmonic.numel.html -folder: function_reference -toc: false ---- - - - numel - edit page

Syntax

-{% highlight matlab %} -n = numel(F) -{% endhighlight %} -

See also

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.plotSection.html b/pages/function_reference_matlab/SO3FunHarmonic.plotSection.html index 93ccdf3ec..411e39d25 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.plotSection.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.plotSection.html @@ -105,19 +105,25 @@

Options

- - -
smooth + + smooth plot +
countourf + + filled contour plot +
contour + + contour plot +
@@ -128,20 +134,4 @@

Options

-

Example

-{% highlight matlab %} -% Section plots at specific angles -plotSection(SO3Fun.dubna,'phi2',[15,23,36]*degree) -{% endhighlight %} - -{% highlight plaintext %} -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! -Warning: Can not change plotting convention in sphercical projections after -plotting! -{% endhighlight %} -
-{% include inline_image.html file="SO3FunHarmonic.plotSection_01.png" %} -

See also

saveFigure Plotting

\ No newline at end of file +

Example

% Section plots at specific angles plotSection(SO3Fun.dubna,'phi2',[15,23,36]*degree)

See also

saveFigure Plotting

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.quadratureNFSOFT.html b/pages/function_reference_matlab/SO3FunHarmonic.quadratureNFSOFT.html deleted file mode 100644 index 929dde46f..000000000 --- a/pages/function_reference_matlab/SO3FunHarmonic.quadratureNFSOFT.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: quadratureNFSOFT - -sidebar: function_reference_sidebar -permalink: SO3FunHarmonic.quadratureNFSOFT.html -folder: function_reference -toc: false ---- - - - quadratureNFSOFT - edit page

Compute the SO(3)-Fourier/Wigner coefficients of an given SO3Fun or given evaluations on a specific quadrature grid.

This method evaluates the given SO3Fun on an with respect to symmetries fundamental Region. Afterwards it uses a NFSOFT (which includes a fast polynom transform). We prefer the faster, simpler and more stable SO3FunHarmonic.quadrature method.

Syntax

-{% highlight matlab %} -SO3F = SO3FunHarmonic.quadratureNFSOFT(nodes,values,'weights',w) -SO3F = SO3FunHarmonic.quadrature(f,'nfsoft') -SO3F = SO3FunHarmonic.quadrature(f, 'bandwidth', bandwidth,'nfsoft') -{% endhighlight %} -

Input

- - - - - - - - - - - - - -
- values - - double (first dimension has to be the evaluations) -
- nodes - - rotation, orientation -
- f - - function handle in orientation (first dimension has to be the evaluations) -
-

Output

- - - - - -
- SO3F - - SO3FunHarmonic -
-

Options

- - - - - -
- bandwidth - - minimal harmonic degree (default: 64) -
-

See also

SO3FunHarmonic.quadrature

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.quadratureV2.html b/pages/function_reference_matlab/SO3FunHarmonic.quadratureV2.html deleted file mode 100644 index 42c1bbd94..000000000 --- a/pages/function_reference_matlab/SO3FunHarmonic.quadratureV2.html +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: quadratureV2 - -sidebar: function_reference_sidebar -permalink: SO3FunHarmonic.quadratureV2.html -folder: function_reference -toc: false ---- - - - quadratureV2 - edit page

Syntax

-{% highlight matlab %} -SO3F = SO3FunHarmonic.quadratureV2(nodes,values,'weights',w) -SO3F = SO3FunHarmonic.quadratureV2(f) -SO3F = SO3FunHarmonic.quadratureV2(f, 'bandwidth', bandwidth) -{% endhighlight %} -

Input

- - - - - - - - - - - - - -
- values - - double (first dimension has to be the evaluations) -
- nodes - - rotation, orientation -
- f - - function handle in orientation (first dimension has to be the evaluations) -
-

Output

- - - - - -
- SO3F - - SO3FunHarmonic -
-

Options

- - - - - - - - - -
- bandwidth - - minimal harmonic degree (default: 64) -
- ClenshawCurtis - - use Clenshaw Curtis quadrature nodes and weights -
-

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.rotate_outer.html b/pages/function_reference_matlab/SO3FunHarmonic.rotate_outer.html index f496e3f29..c23400145 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.rotate_outer.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.rotate_outer.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate_outer - edit page

rotate a function on SO(3)

Syntax

+ edit page

rotate function on SO(3) by multiple rotations

Syntax

{% highlight matlab %} -SO3F = SO3F.rotate_outer(rot) +SO3F = rotate(SO3F,rot) +SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

@@ -46,4 +47,4 @@

Input

-

\ No newline at end of file +

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3FunHarmonic.symmetrise.html b/pages/function_reference_matlab/SO3FunHarmonic.symmetrise.html index 52cfd8639..5555e050f 100644 --- a/pages/function_reference_matlab/SO3FunHarmonic.symmetrise.html +++ b/pages/function_reference_matlab/SO3FunHarmonic.symmetrise.html @@ -12,7 +12,11 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->symmetrise - edit page

compute harmonic coefficients of SO3Fun by using symmetry properties

Syntax

f_hat = symmetrise(SO3F)

Input

+ edit page

Symmetrise the harmonic coefficients of an SO3FunHarmonic w.r.t. its symmetries.

Therefore we compute the harmonic coefficients of the SO3FunHarmonic by using symmetry properties.

Syntax

+{% highlight matlab %} +SO3F = symmetrise(SO3F) +{% endhighlight %} +

Input

@@ -58,8 +58,8 @@

Input

epsilon

@@ -27,10 +31,10 @@
- f_hat + SO3F - harmonic/Fouier/Wigner-D coefficients + SO3FunHarmonic
diff --git a/pages/function_reference_matlab/SO3FunRBF.calcFourier.html b/pages/function_reference_matlab/SO3FunRBF.calcFourier.html index 03ee80486..8a7380193 100644 --- a/pages/function_reference_matlab/SO3FunRBF.calcFourier.html +++ b/pages/function_reference_matlab/SO3FunRBF.calcFourier.html @@ -12,7 +12,15 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->calcFourier - edit page

compute harmonic coefficients of SO3Fun

Syntax

f_hat = calcFourier(SO3F)
f_hat = calcFourier(SO3F,'bandwidth',L)

Input

+ edit page

compute harmonic coefficients of SO3Fun

Syntax

+{% highlight matlab %} +f_hat = calcFourier(SO3F) +{% endhighlight %} + +{% highlight matlab %} +f_hat = calcFourier(SO3F,'bandwidth',L) +{% endhighlight %} +

Input

diff --git a/pages/function_reference_matlab/SO3FunRBF.rotate.html b/pages/function_reference_matlab/SO3FunRBF.rotate.html index a0fd39869..c05c59ee5 100644 --- a/pages/function_reference_matlab/SO3FunRBF.rotate.html +++ b/pages/function_reference_matlab/SO3FunRBF.rotate.html @@ -14,7 +14,13 @@ -->rotate edit page

rotate function on SO(3) by a rotation

Syntax

{% highlight matlab %} +% rotate in specimen coordinates SO3F = rotate(SO3F,rot) +{% endhighlight %} + +{% highlight matlab %} +% rotate in crystal coordinates, e.g. for phase transformation +% or reference frame transformation SO3F = rotate(SO3F,rot,'right') {% endhighlight %}

Input

@@ -32,7 +38,7 @@

Input

rot

- rotation + rotation, orientation
diff --git a/pages/function_reference_matlab/SO3FunSBF.rotate.html b/pages/function_reference_matlab/SO3FunSBF.rotate.html index 01d5fbd50..d891bcf43 100644 --- a/pages/function_reference_matlab/SO3FunSBF.rotate.html +++ b/pages/function_reference_matlab/SO3FunSBF.rotate.html @@ -12,8 +12,38 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

rotate the ODF

Syntax

+ edit page

rotate function on SO(3) by a rotation

Syntax

{% highlight matlab %} -SO3F = rotate(SO3F,rot,varargin) +SO3F = rotate(SO3F,rot) {% endhighlight %} -
\ No newline at end of file +

Input

+ + + + + + + + + +
+ SO3F + + SO3FunSBF +
+ rot + + rotation +
+

Output

+ + + + + +
+ SO3F + + SO3FunSBF +
+

See also

SO3FunHandle.rotate_outer

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Kernel.K_symmetrised.html b/pages/function_reference_matlab/SO3Kernel.K_symmetrised.html index c660c5f42..620dfdc28 100644 --- a/pages/function_reference_matlab/SO3Kernel.K_symmetrised.html +++ b/pages/function_reference_matlab/SO3Kernel.K_symmetrised.html @@ -50,7 +50,7 @@

Input

exact

- + Use complete kernel functions and compute full distance matrix
- + cut kernel functions outside of [-2epsilon,2epsilon]
-

\ No newline at end of file +

See also

SO3FunRBF.eval SO3Fun.interpolate

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3Kernel.conv.html b/pages/function_reference_matlab/SO3Kernel.conv.html index 71e13635f..ce2768002 100644 --- a/pages/function_reference_matlab/SO3Kernel.conv.html +++ b/pages/function_reference_matlab/SO3Kernel.conv.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->conv - edit page

convolution of an SO3Kernel function with a function or a kernel on SO(3)

We convolute an SO3Kernel \(f\) with another SO3Kernel or an SO3Fun \(g\) by the convolution

\[ (f *L g)(R) = \frac1{8\pi^2} \int{SO(3)} f(q) \cdot g(q^{-1}\,R) \, dq \]

which in this case is similar to the so caled right sided convolution, see SO3FunHarmonic/conv.

The convolution of an SO3Kernel with an S2Kernel or an S2Fun \(h\) is defined by

\[ (f * h)(\xi) = \frac1{8\pi^2} \int_{SO(3)} f(q) \cdot h(q^{-1}\,\xi) \, dq \].

Syntax

+ edit page

convolution of an SO3Kernel function with a function or a kernel on SO(3)

We convolute an SO3Kernel \(f\) with another SO3Kernel or an SO3Fun \(g\) by the convolution

\[ (f {*}_L g)(R) = \frac1{8\pi^2} \int_{SO(3)} f(q) \cdot g(q^{-1}\,R) \, dq \]

which in this case is similar to the so caled right sided convolution, see SO3FunHarmonic/conv.

The convolution of an SO3Kernel with an S2Kernel or an S2Fun \(h\) is defined by

\[ (f * h)(\xi) = \frac1{8\pi^2} \int_{SO(3)} f(q) \cdot h(q^{-1}\,\xi) \, dq \].

Syntax

{% highlight matlab %} psi = conv(psi1,psi2) SO3F2 = conv(psi1,SO3F1) diff --git a/pages/function_reference_matlab/SO3TangentSpace.html b/pages/function_reference_matlab/SO3TangentSpace.html new file mode 100644 index 000000000..176f813fd --- /dev/null +++ b/pages/function_reference_matlab/SO3TangentSpace.html @@ -0,0 +1,19 @@ +--- +title: SO3TangentSpace + +sidebar: function_reference_sidebar +permalink: SO3TangentSpace.html +folder: function_reference +toc: false +--- + + + SO3TangentSpace + edit page

class representing the different types of SO3Tangent space

Syntax

+{% highlight matlab %} +out = isLeft(this) +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3TangentVector.SO3TangentVector.html b/pages/function_reference_matlab/SO3TangentVector.SO3TangentVector.html index 774121d0b..03e2084ab 100644 --- a/pages/function_reference_matlab/SO3TangentVector.SO3TangentVector.html +++ b/pages/function_reference_matlab/SO3TangentVector.SO3TangentVector.html @@ -15,7 +15,7 @@ edit page

The left tangent space of SO(3) in some rotation R can be described by

\[ T_R(SO(3)) = \{ s\cdot R | s = -s^T \} \]

where \(s\) are skew symmetric matrices which means they look like

\[ \left(\begin{matrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{matrix}\right).\]

Hence we describe an element of of the tangent space T_R(SO(3)) by the vector \((a,b,c)^T\) which in fact is an vector3d.

Note that \( \{ R\cdot t | t = -t^T \} \) is another possible representation of the tangent space. It is called right tangent space.

We denote whether an SO3TangentVector v is described w.r.t. the left tangent space or right tangent space by the property v.tangentSpace. Moreover we can change the representation of the tangentSpace by using the methods right(v) and left(v).

Syntax

{% highlight matlab %} SO3TV = SO3TangentVector(x,y,z) -SO3TV = SO3TangentVector(v,'right') +SO3TV = SO3TangentVector(v,SO3TangentSpace.rightVector) {% endhighlight %}

Input

@@ -51,10 +51,18 @@

Input

+ + + +
- left/right + left - describes the representation of the tangent space (default: left) + ori_ref multiplies from the right (default) +
+ right + + ori_ref multiplies from the left
diff --git a/pages/function_reference_matlab/SO3VectorField.SO3VectorField.html b/pages/function_reference_matlab/SO3VectorField.SO3VectorField.html index 3495dd378..1fc440ef0 100644 --- a/pages/function_reference_matlab/SO3VectorField.SO3VectorField.html +++ b/pages/function_reference_matlab/SO3VectorField.SO3VectorField.html @@ -14,6 +14,6 @@ -->SO3VectorField edit page

a class representing a vector field on the rotation group

Syntax

{% highlight matlab %} -CS = get.CS(SO3F) +CS = get.CS(SO3VF) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorField.antiderivative.html b/pages/function_reference_matlab/SO3VectorField.antiderivative.html new file mode 100644 index 000000000..cafb4b361 --- /dev/null +++ b/pages/function_reference_matlab/SO3VectorField.antiderivative.html @@ -0,0 +1,58 @@ +--- +title: antiderivative + +sidebar: function_reference_sidebar +permalink: SO3VectorField.antiderivative.html +folder: function_reference +toc: false +--- + + + antiderivative + edit page

antiderivative of an vector field

Syntax

+{% highlight matlab %} +F = SO3VF.antiderivative % compute the antiderivative +f = SO3VF.antiderivative(rot) % evaluate the antiderivative in rot +{% endhighlight %} +

Input

+ + + + + + + + + +
+ SO3VF + + SO3VectorField +
+ rot + + rotation / orientation +
+

Output

+ + + + + + + + + +
+ F + + SO3FunHarmonic +
+ f + + @double +
+

See also

SO3VectorFieldHarmonic.antiderivative SO3FunHarmonic.grad SO3VectorFieldHarmonic.curl SO3VectorFieldHarmonic

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorField.div.html b/pages/function_reference_matlab/SO3VectorField.div.html index 446b84f65..450c6d6a5 100644 --- a/pages/function_reference_matlab/SO3VectorField.div.html +++ b/pages/function_reference_matlab/SO3VectorField.div.html @@ -55,4 +55,4 @@

Input

-

See also

SO3VectorFieldHarmonic.div SO3Fun.grad

\ No newline at end of file +

See also

SO3VectorFieldHarmonic.div SO3Fun.grad SO3Fun.curl

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorField.plotSection.html b/pages/function_reference_matlab/SO3VectorField.plotSection.html deleted file mode 100644 index b5215d3a3..000000000 --- a/pages/function_reference_matlab/SO3VectorField.plotSection.html +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: plotSection - -sidebar: function_reference_sidebar -permalink: SO3VectorField.plotSection.html -folder: function_reference -toc: false ---- - - - plotSection - edit page

Syntax

-{% highlight matlab %} -plotSection(sVF,vector3d.Z) -plotSection(sVF,vector3d.Z,pi/3) -{% endhighlight %} -

Input

- - - - - -
- sVF - - S2Fun -
-

Output

- -

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorField.rotate.html b/pages/function_reference_matlab/SO3VectorField.rotate.html index 5929fbecd..a2264e686 100644 --- a/pages/function_reference_matlab/SO3VectorField.rotate.html +++ b/pages/function_reference_matlab/SO3VectorField.rotate.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

rotate a SO3 vector field by a rotation

Syntax

+ edit page

rotate a SO3 vector field by one rotation

Syntax

{% highlight matlab %} SO3VF = rotate(SO3VF,rot) +SO3VF = rotate(SO3VF,rot,'right') {% endhighlight %}

Input

@@ -46,4 +47,4 @@

Input

-

\ No newline at end of file +

See also

SO3VectorFieldHandle.rotate

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorFieldHandle.eval.html b/pages/function_reference_matlab/SO3VectorFieldHandle.eval.html index f3bfea18c..732e00c1c 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHandle.eval.html +++ b/pages/function_reference_matlab/SO3VectorFieldHandle.eval.html @@ -15,7 +15,6 @@ edit page

evaluate the SO3VectorFieldHandle in rotations

Syntax

{% highlight matlab %} f = eval(SO3VF,rot) % left tangent vector -f = eval(SO3VF,rot,'right') % right tangent vector {% endhighlight %}

Input

@@ -35,7 +34,7 @@

Input

f

- vector3d + SO3TangentVector
diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.SO3VectorFieldHarmonic.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.SO3VectorFieldHarmonic.html index 936c087b7..87dbc2d0c 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.SO3VectorFieldHarmonic.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.SO3VectorFieldHarmonic.html @@ -12,8 +12,8 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->SO3VectorFieldHarmonic - edit page

a class representing a function on the rotation group

Syntax

+ edit page

a class representing left sided vector fields on the rotation group

Syntax

{% highlight matlab %} -on the rotation group +SO3VF = SO3VectorFieldHarmonic(SO3F, varargin) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.approximation.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.approximation.html index 9ab50cd68..4e02a397a 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.approximation.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.approximation.html @@ -58,4 +58,4 @@

Input

-

\ No newline at end of file +

See also

SO3FunHarmonic.approximation SO3VectorFieldHarmonic

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.div.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.div.html index 078379095..b9594b275 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.div.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.div.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->div - edit page

divergence of an SO3VectorFieldHarmonic

Syntax

+ edit page

left-sided divergence of an SO3VectorFieldHarmonic

Syntax

{% highlight matlab %} D = SO3VF.div % compute the divergence d = SO3VF.div(rot) % evaluate the divergence in rot diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.eval.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.eval.html index 0ad9aa2ad..99e6a8c74 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.eval.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.eval.html @@ -15,7 +15,6 @@ edit page

evaluate the SO3VectorFieldHarmonic in rotations

Syntax

{% highlight matlab %} f = eval(SO3VF,rot) % left tangent vector -f = eval(SO3VF,rot,'right') % right tangent vector {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.inv.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.inv.html deleted file mode 100644 index 880b86d20..000000000 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.inv.html +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: inv - -sidebar: function_reference_sidebar -permalink: SO3VectorFieldHarmonic.inv.html -folder: function_reference -toc: false ---- - - - inv - edit page

Define the componentwise inverse function \(g\) of an SO3VectorField \(f\) by \(g(R^{-1}) = f®\) for all rotations \(R\in SO(3)\).

Syntax

-{% highlight matlab %} -SO3VF = inv(F) -{% endhighlight %} -

Input

-

- - - - -
- F - - SO3VectorFieldHarmonic -
-

Output

- - - - - -
- SO3F - - SO3VectorFieldHarmonic -
-

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.left.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.left.html index 5307e804f..89123294e 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.left.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.left.html @@ -14,7 +14,7 @@ -->left edit page

change the representation of the tangent vectors to left sided

Syntax

{% highlight matlab %} -SO3VF = right(SO3VF) +SO3VF = left(SO3VF) {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.norm.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.norm.html index f6ea9b2f4..231a6e9cf 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.norm.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.norm.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->norm - edit page

pointwise norm of the vector field

Syntax

+ edit page

point-wise norm of the vector field

Syntax

{% highlight matlab %} SO3F = norm(SO3VF) {% endhighlight %} diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.right.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.right.html index a4e2223e5..c92c635fe 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.right.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.right.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->right - edit page

change the representation of the tangent vectors to right sided

Syntax

+ edit page

change the inner representation of the tangent vectors to right sided

Syntax

{% highlight matlab %} SO3VF = right(SO3VF) {% endhighlight %} diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.rotate.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.rotate.html index d058332a3..e8e27b332 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.rotate.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.rotate.html @@ -12,9 +12,10 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->rotate - edit page

rotate a SO3 vector field by a rotation

Syntax

+ edit page

rotate a SO3 vector field by one rotation

Syntax

{% highlight matlab %} -SO3VF = SO3VF.rotate(rot) +SO3VF = rotate(SO3VF,rot) +SO3VF = rotate(SO3VF,rot,'right') {% endhighlight %}

Input

@@ -46,4 +47,4 @@

Input

-

\ No newline at end of file +

See also

SO3VectorFieldHandle.rotate

\ No newline at end of file diff --git a/pages/function_reference_matlab/SO3VectorFieldHarmonic.symmetrise.html b/pages/function_reference_matlab/SO3VectorFieldHarmonic.symmetrise.html index 9dd61417b..ad89881c2 100644 --- a/pages/function_reference_matlab/SO3VectorFieldHarmonic.symmetrise.html +++ b/pages/function_reference_matlab/SO3VectorFieldHarmonic.symmetrise.html @@ -12,7 +12,11 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->symmetrise - edit page

Symmetrise the harmonic coefficients of an SO3VectorFieldHarmonic w.r.t. its symmetries.

Therefore we compute the harmonic coefficients of the SO3VectorFieldHarmonic by using symmetry properties.

Syntax

SO3VF = symmetrise(SO3VF)

Input

+ edit page

Symmetrise the harmonic coefficients of an SO3VectorFieldHarmonic w.r.t. its symmetries.

Therefore we compute the harmonic coefficients of the SO3VectorFieldHarmonic by using symmetry properties.

Syntax

+{% highlight matlab %} +SO3VF = symmetrise(SO3VF) +{% endhighlight %} +

Input

+ + + + +
diff --git a/pages/function_reference_matlab/SO3vonMisesFisherKernel.html b/pages/function_reference_matlab/SO3vonMisesFisherKernel.html index 62c7daabf..64fca1c80 100644 --- a/pages/function_reference_matlab/SO3vonMisesFisherKernel.html +++ b/pages/function_reference_matlab/SO3vonMisesFisherKernel.html @@ -17,4 +17,26 @@ psi = SO3vonMisesFisherKernel(100) psi = SO3vonMisesFisherKernel('halfwidth',5*degree) {% endhighlight %} - \ No newline at end of file +

Input

+ + + + + +
+ kappa + + kernel parameter +
+

Output

+ + + + + +
+ psi + + @SO3vonMisesFisherKernel +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/calcDensity.html b/pages/function_reference_matlab/calcDensity.html index 9652df4c4..b50bdcb9d 100644 --- a/pages/function_reference_matlab/calcDensity.html +++ b/pages/function_reference_matlab/calcDensity.html @@ -43,5 +43,24 @@

Input

density as griddedinterpolant

+ f + + S1FunHarmonic +
+

Options

+ + + + +
+ periodic + + consider values as periodic +
-

See also

vector3d.calcDensity orientation.calcDensity

\ No newline at end of file +

See also

vector3d.calcDensity orientation.calcDensity

\ No newline at end of file diff --git a/pages/function_reference_matlab/calcEaring.html b/pages/function_reference_matlab/calcEaring.html new file mode 100644 index 000000000..1a563add5 --- /dev/null +++ b/pages/function_reference_matlab/calcEaring.html @@ -0,0 +1,76 @@ +--- +title: calcEaring + +sidebar: function_reference_sidebar +permalink: calcEaring.html +folder: function_reference +toc: false +--- + + + calcEaring + edit page

compute earing from odf and slip systems

Description

This function calculates the height h at each peripheral position of a cup drawn from a polycrystalline bcc metal sheet. In the analytical treatment, the polycrystalline sheet is assumed to be an aggregate of single crystals (grains) with various orientations. In the original paper, an orientation distribution function (ODF) constructed from texture data was used to calculate the weight of each single crystal. In this function, ebsd or grain data can be used:

  • For ebsd data, an ODF is first calculated. Following that, there are 2 options: (1) Calculate ODF components & volume fractions using MTEX-default functions, or (2) Calculate the volume fractions of a discretised ODF. For both options, the volume fraction is used as the weight.
  • Alternatively, for grain data, weights are computed using the grain area fraction. The ear may be calculated crystallographically by considering both, restricted glide and pencil glide; with the former returning better predictions in the original paper.

Syntax

calcEaring(grains,sS,prop)

Input

+ + + + + + + + + + + + + +
+ ori + + orientation +
+ sS + + slipSystem +
+ prop + + struct +
+

Output

+ + + + + +
+ h + + @double, height at each peripheral position of a cup drawn from a polycrystalline bcc metal sheet. +
+

Options

+ + + + + + + + + + + +
+ discrete + + use a discretised ODF +
+ Author + +
+ * Dr. Azdiar Gazder, 2023, azdiaratuowdotedudotau + +
+

References

\ No newline at end of file diff --git a/pages/function_reference_matlab/calcLankford.html b/pages/function_reference_matlab/calcLankford.html new file mode 100644 index 000000000..c314f47b4 --- /dev/null +++ b/pages/function_reference_matlab/calcLankford.html @@ -0,0 +1,108 @@ +--- +title: calcLankford + +sidebar: function_reference_sidebar +permalink: calcLankford.html +folder: function_reference +toc: false +--- + + + calcLankford + edit page

Lankford coefficient or R-value from orientations or ODF

Description

The R-value, is the ratio of the true width strain to the true thickness strain at a particular value of length strain.

The normal anisotropy ratio (Rbar, or Ravg, or rm) defines the ability of the metal to deform in the thickness direction relative to deformation in the plane of the sheet. For Rbar values >= 1, the sheet metal resists thinning, improves cup drawing, hole expansion, and other forming modes where metal thinning is detrimental. For Rbar < 1, thinning becomes the preferential metal flow direction, increasing the risk of failure in drawing operations.

A related parameter is the planar anisotropy parameter (deltaR) which is an indicator of the ability of a material to demonstrate non-earing behavior. A deltaR value = 0 is ideal for can-making or deep drawing of cylinders, as this indicates equal metal flow in all directions; thus eliminating the need to trim ears during subsequent processing.

Syntax

+{% highlight matlab %} +[R, minM, M] = calcRValue(ori,sS,theta,RD,ND) +{% endhighlight %} +

Input

+ + + + + + + + + + + + + + + + + + + + + +
+ ori + + orientation +
+ sS + + slipSystem +
+ theta + + angle of the tensial direction with respect to RD, default 0,5,10,..,90 degree +
+ RD + + vector3d - rolling direction, default - x - used as reference tension direction +
+ ND + + vector3d - normal direction, default - z +
+

Output

+ + + + + + + + + + + + + +
+ R + + plastic anisotropy ratio (R-value) with minimum Taylor factor as a function of theta +
+ M + + Taylor factor as a function of theta and R +
+ minM + + minimum Taylor factor as a function of theta +
+

Options

+ + + + + + + + + +
+ verbose + + show summary +
+ weights + + @double, containing texture information +
+

Authors

  • Dr. Azdiar Gazder, 2023
  • Dr. Manasij Kumar Yadava, 2023
\ No newline at end of file diff --git a/pages/function_reference_matlab/checkEulerAngleConvention.html b/pages/function_reference_matlab/checkEulerAngleConvention.html deleted file mode 100644 index 31d15159c..000000000 --- a/pages/function_reference_matlab/checkEulerAngleConvention.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: checkEulerAngleConvention - -sidebar: function_reference_sidebar -permalink: checkEulerAngleConvention.html -folder: function_reference -toc: false ---- - - - checkEulerAngleConvention - edit page

Syntax

-{% highlight matlab %} -r = checkEulerAngleConvention(conv1,conv2) -{% endhighlight %} -
\ No newline at end of file diff --git a/pages/function_reference_matlab/connectedComponents.html b/pages/function_reference_matlab/connectedComponents.html index 6767da9b8..9e4e4beec 100644 --- a/pages/function_reference_matlab/connectedComponents.html +++ b/pages/function_reference_matlab/connectedComponents.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->connectedComponents - edit page

label connected componentes in an graph (adjacency matrix)

Syntax

+ edit page

label connected components in an graph (adjacency matrix)

Syntax

{% highlight matlab %} parent = connectedComponents(A) {% endhighlight %} diff --git a/pages/function_reference_matlab/crystalShape.innerFace.html b/pages/function_reference_matlab/crystalShape.innerFace.html new file mode 100644 index 000000000..c44bb862e --- /dev/null +++ b/pages/function_reference_matlab/crystalShape.innerFace.html @@ -0,0 +1,50 @@ +--- +title: innerFace + +sidebar: function_reference_sidebar +permalink: crystalShape.innerFace.html +folder: function_reference +toc: false +--- + + + innerFace + edit page

return the vertices of an inner face of a crystal shape

Syntax

+{% highlight matlab %} +N = Miller(1,0,1,'hkl',cs) +v = innerFace(cS,N) +{% endhighlight %} +

Input

+ + + + + + + + + +
+ cS + + crystalShape +
+ N + + Miller lattice plane +
+

Output

+ + + + + +
+ V + + vertices of the inner plane +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/crystalShape.plot.html b/pages/function_reference_matlab/crystalShape.plot.html index aadc164cb..c0a2cf9a9 100644 --- a/pages/function_reference_matlab/crystalShape.plot.html +++ b/pages/function_reference_matlab/crystalShape.plot.html @@ -23,6 +23,16 @@ plot(cS,'faceColor','red','faceAlpha',0.5,'edgeColor','k') % colorize by property plot(cS,'faceColor',cS.faceAraea) {% endhighlight %} + +{% highlight matlab %} +% plot an inner plane +plot(cS, Miller(1,1,0,cS.CS,'hkl')) +{% endhighlight %} + +{% highlight matlab %} +% visualize a slip system +plot(cS, sS) +{% endhighlight %}

Input

@@ -38,7 +48,7 @@

Input

x,y

@@ -49,6 +59,14 @@

Input

nx2 or nx3 coordinate matrix

+ + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- coodinates + coordinates
+ sS + + slipSystem +
PatchProperty diff --git a/pages/function_reference_matlab/crystalShape.plotInnerFace.html b/pages/function_reference_matlab/crystalShape.plotInnerFace.html new file mode 100644 index 000000000..64770f2e6 --- /dev/null +++ b/pages/function_reference_matlab/crystalShape.plotInnerFace.html @@ -0,0 +1,61 @@ +--- +title: plotInnerFace + +sidebar: function_reference_sidebar +permalink: crystalShape.plotInnerFace.html +folder: function_reference +toc: false +--- + + + plotInnerFace + edit page

Syntax

+{% highlight matlab %} +N = Miller(1,0,1,'hkl',cs) +plotInnerFace(cS,N,'faceColor','blue','faceAlpha',0.5,'edgeColor','k') +{% endhighlight %} +

Input

+ + + + + + + + + +
+ cS + + crystalShape +
+ N + + Miller lattice plane +
+

Output

+ + + + + +
+ h + + handle to the graphics object +
+

Options

+ + + + + +
+ PatchProperty + + see documentation of patch objects for manipulating the apperance, e.g. 'EdgeColor' +
+

Example

cS = crystalShape.olivine; N = Miller(1,0,1,'hkl',cS.CS);

plot(cS,'faceAlpha',0.2,'colored') hold on plotInnerFace(cS,N,'faceColor','blue','DisplayName','(101)') plotInnerFace(cS,Miller(0,1,1,cS.CS),'faceColor','red','DisplayName','(011)') hold off

\ No newline at end of file diff --git a/pages/function_reference_matlab/crystalShape.plotSlipSystem.html b/pages/function_reference_matlab/crystalShape.plotSlipSystem.html new file mode 100644 index 000000000..50b12293f --- /dev/null +++ b/pages/function_reference_matlab/crystalShape.plotSlipSystem.html @@ -0,0 +1,61 @@ +--- +title: plotSlipSystem + +sidebar: function_reference_sidebar +permalink: crystalShape.plotSlipSystem.html +folder: function_reference +toc: false +--- + + + plotSlipSystem + edit page

Syntax

+{% highlight matlab %} +N = Miller(1,0,1,'hkl',cs) +plotInnerFace(cS,N,'faceColor','blue','faceAlpha',0.5,'edgeColor','k') +{% endhighlight %} +

Input

+ + + + + + + + + +
+ cS + + crystalShape +
+ N + + Miller lattice plane +
+

Output

+ + + + + +
+ h + + handle to the graphics object +
+

Options

+ + + + + +
+ PatchProperty + + see documentation of patch objects for manipulating the apperance, e.g. 'EdgeColor' +
+

Example

cS = crystalShape.olivine; N = Miller(1,0,1,'hkl',cS.CS);

plot(cS,'faceAlpha',0.2,'colored') hold on plotInnerFace(cS,N,'faceColor','blue','DisplayName','(101)') plotInnerFace(cS,Miller(0,1,1,cS.CS),'faceColor','red','DisplayName','(011)') hold off

\ No newline at end of file diff --git a/pages/function_reference_matlab/crystalSymmetry.crystalSymmetry.html b/pages/function_reference_matlab/crystalSymmetry.crystalSymmetry.html index 3ace065df..cc1cd1ad0 100644 --- a/pages/function_reference_matlab/crystalSymmetry.crystalSymmetry.html +++ b/pages/function_reference_matlab/crystalSymmetry.crystalSymmetry.html @@ -139,353 +139,5 @@

Input

vector3d

- Supported Symmetries - -
- id crystal system Schoen - - Inter- Laue Rotational -
- flies national class axes - -
- 1 triclinic C1 1 - - 1 1 -
- 2 triclinic Ci - - 1 -1 1 -
- 3 monoclinic C2 211 2/m11 211 - -
- 4 monoclinic Cs m11 2/m11 211 - -
- 5 monoclinic C2h 2/m11 2/m11 211 - -
- 6 monoclinic C2 121 12/m1 121 - -
- 7 monoclinic Cs 1m1 12/m1 121 - -
- 8 monoclinic C2h 12/m1 12/m1 121 - -
- 9 monoclinic C2 112 112/m 112 - -
- 10 monoclinic Cs 11m 112/m 112 - -
- 11 monoclinic C2h 112/m 112/m 112 - -
- 12 orthorhombic D2 222 mmm 222 - -
- 13 orthorhombic C2v 2mm mmm 222 - -
- 14 orthorhombic C2v m2m mmm 222 - -
- 15 orthorhombic C2v mm2 mmm 222 - -
- 16 orthorhombic D2h mmm mmm 222 - -
- 17 trigonal C3 3 - - 3 3 -
- 18 trigonal C3i - - 3 -3 3 -
- 19 trigonal D3 321 - - 3m1 321 -
- 20 trigonal C3v 3m1 - - 3m1 321 -
- 21 trigonal D3d - - 3m1 -3m1 321 -
- 22 trigonal D3 312 - - 31m 312 -
- 23 trigonal C3v 31m - - 31m 312 -
- 24 trigonal D3d - - 31m -31m 312 -
- 25 tetragonal C4 4 4/m 4 - -
- 26 tetragonal S4 - - 4 4/m 4 -
- 27 tetragonal C4h 4/m 4/m 4 - -
- 28 tetragonal D4 422 4/mmm 422 - -
- 29 tetragonal C4v 4mm 4/mmm 422 - -
- 30 tetragonal D2d - - 42m 4/mmm 422 -
- 31 tetragonal D2d - - 4m2 4/mmm 422 -
- 32 tetragonal D4h 4/mmm 4/mmm 422 - -
- 33 hexagonal C6 6 6/m 6 - -
- 34 hexagonal C3h - - 6 6/m 6 -
- 35 hexagonal C6h 6/m 6/m 6 - -
- 36 hexagonal D6 622 6/mmm 622 - -
- 37 hexagonal C6v 6mm 6/mmm 622 - -
- 38 hexagonal D3h - - 62m 6/mmm 622 -
- 39 hexagonal D3h - - 6m2 6/mmm 622 -
- 40 hexagonal D6h 6/mmm 6/mmm 622 - -
- 41 cubic T 23 m - - 3 23 -
- 42 cubic Th m - - 3 m-3 23 -
- 43 cubic O 432 m - - 3m 432 -
- 44 cubic Td - - 43m m-3m 432 -
- 45 cubic Oh m - - 3m m-3m 432 -
- 46 icosahedral I 532 - - 5-32/m 532 -
- 47 icosahedral Ih - - 5-32/m -5-32/m 532 -

See also

CrystalSymmetries CrystalShapes CrystalReferenceSystem CrystalOperations

\ No newline at end of file diff --git a/pages/function_reference_matlab/dislocationSystem.symmetrise.html b/pages/function_reference_matlab/dislocationSystem.symmetrise.html index 40fff298f..05e0e8608 100644 --- a/pages/function_reference_matlab/dislocationSystem.symmetrise.html +++ b/pages/function_reference_matlab/dislocationSystem.symmetrise.html @@ -14,6 +14,6 @@ -->symmetrise edit page

find all symmetrically equivalent slips systems

Syntax

{% highlight matlab %} -sS = symmetrise(sS,varargin) +dS = symmetrise(dS,varargin) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/doEulerStep.html b/pages/function_reference_matlab/doEulerStep.html new file mode 100644 index 000000000..23b9cbaea --- /dev/null +++ b/pages/function_reference_matlab/doEulerStep.html @@ -0,0 +1,77 @@ +--- +title: doEulerStep + +sidebar: function_reference_sidebar +permalink: doEulerStep.html +folder: function_reference +toc: false +--- + + + doEulerStep + edit page

numericaly solve the continuity equation with a given spin tensor

Syntax

+{% highlight matlab %} +odf_n = doEulerStep(spin,odf_0,numIter) +{% endhighlight %} + +{% highlight matlab %} +ori_n = doEulerStep(spin,ori_0,numIter) +{% endhighlight %} +

Input

+ + + + + + + + + + + + + + + + + +
+ spin + + SO3VectorField, orientation dependent spin tensor +
+ odf_0 + + SO3Fun, initial ODF +
+ ori_0 + + orientation, initial list of orientations +
+ numIter + + number of iterations +
+

Output

+ + + + + + + + + +
+ odf_n + + SO3Fun, ODF after numIter iteration steps +
+ ori_n + + orientation, orientations after numIter iteration steps +
+

See also

SingleSlipModel, Taylormodel, SO3Fun.div, strainTensor.calcTaylor

\ No newline at end of file diff --git a/pages/function_reference_matlab/doHClustering.html b/pages/function_reference_matlab/doHClustering.html index 303bb0bdd..2dc912713 100644 --- a/pages/function_reference_matlab/doHClustering.html +++ b/pages/function_reference_matlab/doHClustering.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->doHClustering - edit page

hirarchical clustering of rotations and vectors

Syntax

+ edit page

hierarchical clustering of rotations and vectors

Syntax

{% highlight matlab %} [c,center] = doHCluster(ori,'numCluster',n) [c,center] = doHCluster(ori,'maxAngle',omega) @@ -81,11 +81,11 @@

Input

Bunge Euler angles in degree phi1 Phi phi2 weight - 304.672 155.363 126.662 0.2 - 284.062 95.0427 23.3343 0.2 - 205.087 138.998 1.39789 0.2 - 171.504 48.816 331.922 0.2 - 76.7967 139.029 271.829 0.2 + 166.607 145.688 2.15807 0.2 + 29.3743 98.7971 318.122 0.2 + 244.614 81.8433 359.86 0.2 + 125.618 100.236 299.884 0.2 + 277.327 130.467 54.8851 0.2 {% endhighlight %} {% highlight matlab %} @@ -94,7 +94,7 @@

Input

{% endhighlight %} {% highlight plaintext %} -Elapsed time is 3.018346 seconds. +Elapsed time is 3.408734 seconds. {% endhighlight %} {% highlight matlab %} @@ -136,6 +136,6 @@

Input

{% highlight plaintext %} ans = - 0.1991 0.2406 0.2260 0.1129 0.2994 + 0.3163 0.2621 0.1132 0.1871 0.1677 {% endhighlight %}

\ No newline at end of file diff --git a/pages/function_reference_matlab/embedding.normalize.html b/pages/function_reference_matlab/embedding.normalize.html index 4dfd9d4f9..72e2af3dc 100644 --- a/pages/function_reference_matlab/embedding.normalize.html +++ b/pages/function_reference_matlab/embedding.normalize.html @@ -12,8 +12,30 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->normalize - edit page

Syntax

+ edit page

normalize to one

Syntax

{% highlight matlab %} -obj = normalize(obj) +e = normalize(e) {% endhighlight %} -

See also

\ No newline at end of file +

Input

+ + + + + +
+ e + + embedding +
+

Output

+ + + + + +
+ e + + embedding +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/embedding.plot.html b/pages/function_reference_matlab/embedding.plot.html index cf1f8df5f..8ebd78ad4 100644 --- a/pages/function_reference_matlab/embedding.plot.html +++ b/pages/function_reference_matlab/embedding.plot.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->plot - edit page

two dimensional plot of embeddings

Syntax

+ edit page

two dimensional plot of an embedding

Syntax

{% highlight matlab %} plot(e) {% endhighlight %} diff --git a/pages/function_reference_matlab/embedding.setDouble.html b/pages/function_reference_matlab/embedding.setDouble.html index b771afa81..f28171640 100644 --- a/pages/function_reference_matlab/embedding.setDouble.html +++ b/pages/function_reference_matlab/embedding.setDouble.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->setDouble - edit page

convert embedding to packed double iverse of double

Syntax

+ edit page

convert embedding to packed double inverse of double

Syntax

{% highlight matlab %} obj = setDouble(obj,d); {% endhighlight %} diff --git a/pages/function_reference_matlab/erode.html b/pages/function_reference_matlab/erode.html index 4cdc5571f..bb958bba0 100644 --- a/pages/function_reference_matlab/erode.html +++ b/pages/function_reference_matlab/erode.html @@ -39,18 +39,12 @@

Input

counts - number, upper threshold of same phase pixels + upper threshold of same phase pixels around each pixel to permit erosion - around each pixel to premit erosion - - - - - - phse + phase phase name, cell or string @@ -68,4 +62,4 @@

Input

-

Example

mtexdata small plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('original'); nextAxis

% erode isolated, nonIndexed points ebsd = erode(ebsd,0); plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no single nonIndexed pixels'); nextAxis

\ No newline at end of file +

Example

mtexdata small plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('original'); nextAxis

% erode isolated, nonIndexed points ebsd = erode(ebsd,0); plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no single nonIndexed pixels'); nextAxis

% erode isolated, nonIndexed points for i=1:10 ebsd = erode(ebsd,1,{'n' 'D' 'E'}); end

plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no n,D,E \(\le\) 1 neighbors, 10 iter'); nextAxis

% erode isolated, nonIndexed points

for i=1:10 ebsd = erode(ebsd,2,{'n' 'D' 'E','F'}); ebsd = ebsd.fill; end

plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no n,D,E \(\le\) 2 neighbors, filled,10 iter');

\ No newline at end of file diff --git a/pages/function_reference_matlab/erode2.html b/pages/function_reference_matlab/erode2.html new file mode 100644 index 000000000..df7c9314a --- /dev/null +++ b/pages/function_reference_matlab/erode2.html @@ -0,0 +1,65 @@ +--- +title: erode2 + +sidebar: function_reference_sidebar +permalink: erode2.html +folder: function_reference +toc: false +--- + + + erode2 + edit page

do morphological erosion of pixels based on neighbor counts

Syntax

+{% highlight matlab %} +ebsd = erode(ebsd,0) +{% endhighlight %} + +{% highlight matlab %} +ebsd = erode(ebsd,2,'titanium') +{% endhighlight %} + +{% highlight matlab %} +ebsd = erode(ebsd,1,{'a' 'b' 'notIndexed'}) +{% endhighlight %} +

Input

+ + + + + + + + + + + + + +
+ ebsd + + EBSD +
+ counts + + upper threshold of same phase pixels around each pixel to permit erosion +
+ phase + + phase name, cell or string +
+

Output

+ + + + + +
+ ebsd + + EBSD without the eroded pixels +
+

Example

mtexdata small plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('original'); nextAxis

% erode isolated, nonIndexed points ebsd = erode(ebsd,0); plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no single nonIndexed pixels'); nextAxis

% erode isolated, nonIndexed points for i=1:10 ebsd = erode(ebsd,1,{'n' 'D' 'E'}); end

plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no n,D,E \(\le\) 1 neighbors, 10 iter'); nextAxis

% erode isolated, nonIndexed points

for i=1:10 ebsd = erode(ebsd,2,{'n' 'D' 'E','F'}); ebsd = ebsd.fill; end

plot(ebsd); hold on plot(ebsd('n'),'FaceColor','k'); hold off; mtexTitle('no n,D,E \(\le\) 2 neighbors, filled,10 iter');

\ No newline at end of file diff --git a/pages/function_reference_matlab/fibonacciS2Grid.fibonacciS2Grid.html b/pages/function_reference_matlab/fibonacciS2Grid.fibonacciS2Grid.html new file mode 100644 index 000000000..0c19f8c08 --- /dev/null +++ b/pages/function_reference_matlab/fibonacciS2Grid.fibonacciS2Grid.html @@ -0,0 +1,61 @@ +--- +title: fibonacciS2Grid + +sidebar: function_reference_sidebar +permalink: fibonacciS2Grid.fibonacciS2Grid.html +folder: function_reference +toc: false +--- + + + fibonacciS2Grid + edit page

The class fibonacciS2Grid creates equispaced grids on the sphere by placing points around a spiral around the sphere. The class also provides a method to find grid points around a given center with specified radius.

Syntax

+{% highlight matlab %} +fibgrid = fibonacciS2Grid(N) +fibgrid = fibonacciS2Grid('points', N) +fibgrid = fibonacciS2Grid('resolution', res*degree) +% saves the precise rho angles in the options +fibgrid = fibonacciS2Grid('points', N, 'saverho') +{% endhighlight %} +

Input

+ + + + + + + + + +
+ N + + number of points +
+ res + + resolution of the grid +
+

Options

+ + + + + + + + + +
+ points + + number of points to be generated +
+ res + + desired resolution of the grid +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/fibre.plot.html b/pages/function_reference_matlab/fibre.plot.html index 327c52dec..b2a354f4f 100644 --- a/pages/function_reference_matlab/fibre.plot.html +++ b/pages/function_reference_matlab/fibre.plot.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->plot - edit page

plot a fibre

Syntax

+ edit page

plot a fiber

Syntax

{% highlight matlab %} varargout = plot(f,varargin) {% endhighlight %} diff --git a/pages/function_reference_matlab/find_type.html b/pages/function_reference_matlab/find_type.html index 0365c8fe6..b61b0d5c7 100644 --- a/pages/function_reference_matlab/find_type.html +++ b/pages/function_reference_matlab/find_type.html @@ -12,8 +12,8 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->find_type - edit page

Syntax

+ edit page

parse arguments list for a specific type an returns the first occurrence

Syntax

{% highlight matlab %} -pos = find_type(varargin,type,all) +pos = find_type(argList,type,all) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/grain2d.convexhullProps.html b/pages/function_reference_matlab/grain2d.convexhullProps.html index 2e37bf731..785a6a6f4 100644 --- a/pages/function_reference_matlab/grain2d.convexhullProps.html +++ b/pages/function_reference_matlab/grain2d.convexhullProps.html @@ -42,7 +42,7 @@

Input

chp - perimeter of covex hull + perimeter of convex hull diff --git a/pages/function_reference_matlab/grain2d.grain2d.html b/pages/function_reference_matlab/grain2d.grain2d.html index df3f25699..c08dad420 100644 --- a/pages/function_reference_matlab/grain2d.grain2d.html +++ b/pages/function_reference_matlab/grain2d.grain2d.html @@ -170,8 +170,8 @@

Input

triple points: 0 Id Phase Pixels phi1 Phi phi2 - 1 1 1 270 55 192 - 2 1 1 297 111 32 + 1 1 1 240 52 272 + 2 1 1 336 92 150 {% endhighlight %}

{% include inline_image.html file="grain2d.grain2d_01.png" %} diff --git a/pages/function_reference_matlab/grain2d.hist.html b/pages/function_reference_matlab/grain2d.hist.html index 812ccf57a..291e1aa3c 100644 --- a/pages/function_reference_matlab/grain2d.hist.html +++ b/pages/function_reference_matlab/grain2d.hist.html @@ -19,7 +19,7 @@ {% endhighlight %} {% highlight matlab %} -% use an arbitrary property for the histogramm +% use an arbitrary property for the histogram hist(grains,grains.equivalentRadius) {% endhighlight %} @@ -41,7 +41,7 @@

Input

n - number of bins, default ist 15 + number of bins, default is 15 diff --git a/pages/function_reference_matlab/grain2d.merge.html b/pages/function_reference_matlab/grain2d.merge.html index fb064f894..d73925dc9 100644 --- a/pages/function_reference_matlab/grain2d.merge.html +++ b/pages/function_reference_matlab/grain2d.merge.html @@ -154,7 +154,7 @@

Input

2 61 290 Enstatite mmm 3 62 282 Diopside 12/m1 X||a*, Y||b*, Z||c - boundary segments: 2775 (123934 µm) + boundary segments: 2775 (123963 µm) inner boundary segments: 0 (0 µm) triple points: 187 diff --git a/pages/function_reference_matlab/grain2d.smooth.html b/pages/function_reference_matlab/grain2d.smooth.html index 960238fc8..36eecfd74 100644 --- a/pages/function_reference_matlab/grain2d.smooth.html +++ b/pages/function_reference_matlab/grain2d.smooth.html @@ -85,7 +85,7 @@

Input

gauss - gaussian smoothing kernel + Gaussian smoothing kernel diff --git a/pages/function_reference_matlab/grain2d.subSet.html b/pages/function_reference_matlab/grain2d.subSet.html index c9d7b2891..4862aa688 100644 --- a/pages/function_reference_matlab/grain2d.subSet.html +++ b/pages/function_reference_matlab/grain2d.subSet.html @@ -14,7 +14,7 @@ -->subSet edit page

Syntax

{% highlight matlab %} -grains = subSet(grains,ind) +grains = subSet(grains,ind, varargin) {% endhighlight %}

Input

@@ -46,4 +46,15 @@

Input

+

Options

+ + + + + +
+ keepOrder + + do not change order of the faces when restricting to a single grain +

\ No newline at end of file diff --git a/pages/function_reference_matlab/grainBoundary.calcMeanDirection.html b/pages/function_reference_matlab/grainBoundary.calcMeanDirection.html index 67c8eab65..69a9ca7db 100644 --- a/pages/function_reference_matlab/grainBoundary.calcMeanDirection.html +++ b/pages/function_reference_matlab/grainBoundary.calcMeanDirection.html @@ -27,6 +27,14 @@

Input

grainBoundary + + + n + + + number of neighboring vertices considered + +

Output

diff --git a/pages/function_reference_matlab/grainBoundary.grainBoundary.html b/pages/function_reference_matlab/grainBoundary.grainBoundary.html index a55c75a63..21da13b09 100644 --- a/pages/function_reference_matlab/grainBoundary.grainBoundary.html +++ b/pages/function_reference_matlab/grainBoundary.grainBoundary.html @@ -16,7 +16,7 @@ {% highlight matlab %} grains.boundary {% endhighlight %} -

Each grain boundary segement stores many properties: its position within the map, the ids of the adjacent grains, the ids of the adjacent EBSD measurements, the grain boundary misorientation, etc. These properties are explained in more detail in the section boundary properties.

Syntax

+

Each grain boundary segment stores many properties: its position within the map, the ids of the adjacent grains, the ids of the adjacent EBSD measurements, the grain boundary misorientation, etc. These properties are explained in more detail in the section boundary properties.

Syntax

{% highlight matlab %} gB = grainBoundary(V,F,ebsdInd,grainId,phaseId,mori,CSList,phaseMap,ebsdId,varargin) {% endhighlight %} @@ -35,7 +35,7 @@

Class Properties

scanUnit

@@ -126,7 +126,7 @@

Class Properties

A_F

@@ -134,7 +134,7 @@

Class Properties

A_V

diff --git a/pages/function_reference_matlab/homochoricSO3Grid.homochoricSO3Grid.html b/pages/function_reference_matlab/homochoricSO3Grid.homochoricSO3Grid.html index fdde05f27..2496e8b36 100644 --- a/pages/function_reference_matlab/homochoricSO3Grid.homochoricSO3Grid.html +++ b/pages/function_reference_matlab/homochoricSO3Grid.homochoricSO3Grid.html @@ -70,11 +70,5 @@

Input

radius of the ball to be filled

- - -
- scaning unit (default - um) + scanning unit (default - um)
- adjecency matrix edges - edges + adjacency matrix edges - edges
- adjecency matrix vertices - vertices + adjacency matrix vertices - vertices
- no difference is made between antipodal quaternions - -

\ No newline at end of file diff --git a/pages/function_reference_matlab/isnull.html b/pages/function_reference_matlab/isnull.html index 1b9ed1e2b..0c6985943 100644 --- a/pages/function_reference_matlab/isnull.html +++ b/pages/function_reference_matlab/isnull.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->isnull - edit page

ckeck double == 0

Syntax

+ edit page

check double == 0

Syntax

{% highlight matlab %} b = isnull(x,eps) {% endhighlight %} diff --git a/pages/function_reference_matlab/loadCIF.html b/pages/function_reference_matlab/loadCIF.html index 45f623cce..e9f613918 100644 --- a/pages/function_reference_matlab/loadCIF.html +++ b/pages/function_reference_matlab/loadCIF.html @@ -14,7 +14,38 @@ -->loadCIF edit page

import crystal symmetry from cif file

if cif file not found and input name is a valid COD entry, this function tries to download the file from <http://www.crystallography.net/cif/>

Syntax

{% highlight matlab %} -loadCIF('5000035.cif') -loadCIF(5000035) % lookup online +cs = loadCIF('Hematite.cif') +cs = loadCIF('5000035.cif') +cs = loadCIF(5000035) % lookup online {% endhighlight %} -

See also

symmetry

\ No newline at end of file +

Input

+ + + + + + + + + +
+ fname + + file name +
+ cod + + +
+

Output

+ + + + + +
+ cs + + crystalSymmetry +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/stripws.html b/pages/function_reference_matlab/loadEBSD_dream3dNew.html similarity index 53% rename from pages/function_reference_matlab/stripws.html rename to pages/function_reference_matlab/loadEBSD_dream3dNew.html index e3f98e5b0..6b1abbda4 100644 --- a/pages/function_reference_matlab/stripws.html +++ b/pages/function_reference_matlab/loadEBSD_dream3dNew.html @@ -1,8 +1,8 @@ --- -title: stripws +title: loadEBSD_dream3dNew sidebar: function_reference_sidebar -permalink: stripws.html +permalink: loadEBSD_dream3dNew.html folder: function_reference toc: false --- @@ -11,9 +11,9 @@ stripws + -->loadEBSD_dream3dNew edit page

Syntax

{% highlight matlab %} -str = stripws(str) +ebsd = loadEBSD_dream3d(fname,varargin) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/loadEBSD_h5oina.html b/pages/function_reference_matlab/loadEBSD_h5oina.html index ff8215850..8ad23ec52 100644 --- a/pages/function_reference_matlab/loadEBSD_h5oina.html +++ b/pages/function_reference_matlab/loadEBSD_h5oina.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->loadEBSD_h5oina - edit page

read HKL, oxford *.h5oina hdf5 file documented here: https://github.com/oinanoanalysis/h5oina/blob/master/H5OINAFile.md note that Matlab < R2021b does not handle hdf5 v1.10 and one needs to use hdf5format_convert (https://github.com/HDFGroup/hdf5) on the input file to prevent Matlab from fatally crashing

Syntax

+ edit page

read HKL *.h5oina hdf5 file documented here: https://github.com/oinanoanalysis/h5oina/blob/master/H5OINAFile.md note that Matlab < R2021b does not handle hdf5 v1.10 and one needs to use hdf5format_convert (https://github.com/HDFGroup/hdf5) on the input file to prevent Matlab from fatally crashing

Syntax

{% highlight matlab %} % import EBSD data in acquisition surface coordinates (CS1) ebsd = loadEBSD_h5oina('ebsdData.h5oina'); @@ -29,64 +29,48 @@

Options

CS0 - use sample primary coordinates (default - use acquisition + use sample primary coordinates (default ~ use acquisition coordinates CS1) - coordinates CS1) + skipAllButEBSD - - - - - TODO - - - - - - 1) Test if EBSDheader.Specimen_Orientation_Euler does what it's supposed + + only read EBSD data, but NOT electron images, EDS - - to do + skipEDS - > see below. <-- looks like this is in some datasets stored in + do not read EDS data - the 'Data Processing' header, radians, Bunge convention + skipEimage - - - - - 2) find a solution if multiple ebsd datasets are contained, export to a + + do not read electron images - - cell? + useProcessedData - - - - - 3) decide what header data to use and how to display it? Fix display for + + use processed EBSD data instead of original, replaces Bands, Error, Euler, MAD, Phase - - the header to be shown correctly (bc. ebsd.opt.Header sort of works) + fullDataset + + + also read additional EBSD related data: Beam_Position, Pattern Center etc. -

\ No newline at end of file diff --git a/pages/function_reference_matlab/loadODF_generic.html b/pages/function_reference_matlab/loadODF_generic.html index 13c16cdd5..c9d0ff95c 100644 --- a/pages/function_reference_matlab/loadODF_generic.html +++ b/pages/function_reference_matlab/loadODF_generic.html @@ -126,11 +126,11 @@

Input

odf = SO3FunRBF (m-3m → xyz) uniform component - weight: 0.52 + weight: 0.56 multimodal components kernel: de la Vallee Poussin, halfwidth 5° - center: 4906 orientations, resolution: 5° - weight: 0.46 + center: 4867 orientations, resolution: 5° + weight: 0.44 {% endhighlight %}

See also

import_wizard loadODF ODF_demo

\ No newline at end of file diff --git a/pages/function_reference_matlab/mclComponents.html b/pages/function_reference_matlab/mclComponents.html index 1eeb4b4da..0f09d48b4 100644 --- a/pages/function_reference_matlab/mclComponents.html +++ b/pages/function_reference_matlab/mclComponents.html @@ -23,7 +23,7 @@

Input

A - adjecency matrix with weights between 0 and 1 + adjacency matrix with weights between 0 and 1 @@ -42,7 +42,7 @@

Input

A - adjecency matrix of the components + adjacency matrix of the components diff --git a/pages/function_reference_matlab/nanmax.html b/pages/function_reference_matlab/nanmax.html deleted file mode 100644 index 4b23f99ac..000000000 --- a/pages/function_reference_matlab/nanmax.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: nanmax - -sidebar: function_reference_sidebar -permalink: nanmax.html -folder: function_reference -toc: false ---- - - - nanmax - edit page

FORMAT: [Y,IDX] = NANMAX(A,DIM,[B])

  Maximum ignoring NaNs
  This function enhances the functionality of NANMAX as distributed in
-  the MATLAB Statistics Toolbox and is meant as a replacement (hence the
-  identical name).
  If fact NANMAX simply rearranges the input arguments to MAX because
-  MAX already ignores NaNs.
  NANMAX(A,DIM) calculates the maximum of A along the dimension DIM of
-  the N-D array X. If DIM is omitted NANMAX calculates the maximum along
-  the first non-singleton dimension of X.
  NANMAX(A,[],B) returns the minimum of the N-D arrays A and B.  A and
-  B must be of the same size.
  Comparing two matrices in a particular dimension is not supported,
-  e.g. NANMAX(A,2,B) is invalid.
  [Y,IDX] = NANMAX(X,DIM) returns the index to the maximum in IDX.
  Similar replacements exist for NANMIN, NANMEAN, NANSTD, NANMEDIAN and
-  NANSUM which are all part of the NaN-suite.

Syntax

-{% highlight matlab %} -[y,idx] = nanmax(a,dim,b) -{% endhighlight %} -

See also

\ No newline at end of file diff --git a/pages/function_reference_matlab/nanmin.html b/pages/function_reference_matlab/nanmin.html deleted file mode 100644 index 146b4a094..000000000 --- a/pages/function_reference_matlab/nanmin.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: nanmin - -sidebar: function_reference_sidebar -permalink: nanmin.html -folder: function_reference -toc: false ---- - - - nanmin - edit page

FORMAT: [Y,IDX] = NANMIN(A,DIM,[B])

  Minimum ignoring NaNs
  This function enhances the functionality of NANMIN as distributed in
-  the MATLAB Statistics Toolbox and is meant as a replacement (hence the
-  identical name).
  If fact NANMIN simply rearranges the input arguments to MIN because
-  MIN already ignores NaNs.
  NANMIN(A,DIM) calculates the minimum of A along the dimension DIM of
-  the N-D array X. If DIM is omitted NANMIN calculates the minimum along
-  the first non-singleton dimension of X.
  NANMIN(A,[],B) returns the minimum of the N-D arrays A and B.  A and
-  B must be of the same size.
  Comparing two matrices in a particular dimension is not supported,
-  e.g. NANMIN(A,2,B) is invalid.
  [Y,IDX] = NANMIN(X,DIM) returns the index to the minimum in IDX.
  Similar replacements exist for NANMAX, NANMEAN, NANSTD, NANMEDIAN and
-  NANSUM which are all part of the NaN-suite.

Syntax

-{% highlight matlab %} -[y,idx] = nanmin(a,dim,b) -{% endhighlight %} -

See also

\ No newline at end of file diff --git a/pages/function_reference_matlab/nansum.html b/pages/function_reference_matlab/nansum.html deleted file mode 100644 index 6af8c73f2..000000000 --- a/pages/function_reference_matlab/nansum.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: nansum - -sidebar: function_reference_sidebar -permalink: nansum.html -folder: function_reference -toc: false ---- - - - nansum - edit page

FORMAT: Y = NANSUM(X,DIM)

  Sum of values ignoring NaNs
  This function enhances the functionality of NANSUM as distributed in
-  the MATLAB Statistics Toolbox and is meant as a replacement (hence the
-  identical name).
  NANSUM(X,DIM) calculates the mean along any dimension of the N-D array
-  X ignoring NaNs.  If DIM is omitted NANSUM averages along the first
-  non-singleton dimension of X.
  Similar replacements exist for NANMEAN, NANSTD, NANMEDIAN, NANMIN, and
-  NANMAX which are all part of the NaN-suite.

Syntax

-{% highlight matlab %} -y = nansum(x,dim) -{% endhighlight %} -

See also

\ No newline at end of file diff --git a/pages/function_reference_matlab/neperInstance.getSlice.html b/pages/function_reference_matlab/neperInstance.getSlice.html deleted file mode 100644 index 8b8613add..000000000 --- a/pages/function_reference_matlab/neperInstance.getSlice.html +++ /dev/null @@ -1,85 +0,0 @@ ---- -title: getSlice - -sidebar: function_reference_sidebar -permalink: neperInstance.getSlice.html -folder: function_reference -toc: false ---- - - - getSlice - edit page

generating 2d slices of 3d neper tesselations

Syntax

-{% highlight matlab %} -neper=neperInstance; -neper.simulateGrains(unimodalODF(orientation.rand), 100) -{% endhighlight %} - -{% highlight matlab %} -N=vector3d(1,1,1); % normal vector of a plane -d=1; % d of plane equation -grains=neper.getSlice(N,d) -{% endhighlight %} - -{% highlight matlab %} -A=vector3d(1/3,1/3,1/3) %position vector of a point from the plane -grains=neper.getSlice(N,A) -{% endhighlight %} -

Input

- - - - - - - - - - - - - -
- N - - slice normal vector3d -
- d - - d of a plane equation (a,b,c,d) -
- A - - point in slice plane vector3d -
-

Output

- - - - - - - - - - - - - -
- grains - - grain2d -
- 2dslice.tess - - 2d neper tesselation file, name specified at neper.fileName2d, stored under neper.filepath -
- 2dslice.ori - - file with orientations in euler-bunge format -
-

\ No newline at end of file diff --git a/pages/function_reference_matlab/neperInstance.neperInstance.html b/pages/function_reference_matlab/neperInstance.neperInstance.html deleted file mode 100644 index ac5d16dab..000000000 --- a/pages/function_reference_matlab/neperInstance.neperInstance.html +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: neperInstance - -sidebar: function_reference_sidebar -permalink: neperInstance.neperInstance.html -folder: function_reference -toc: false ---- - - - neperInstance - edit page

class that provides an interface to the crystal simulation software neper (see https://neper.info)

Syntax

-{% highlight matlab %} -myNeper=neperInstance -{% endhighlight %} - -{% highlight matlab %} -%select working folder, default: @tempdir -myNeper.filePath='C:\\Users\user\Work\Mtex\NeperExamples'; -{% endhighlight %} - -{% highlight matlab %} -%decide if new folder should be created in working directory, default: true -myNeper.newFolder=false; -%specifing filenames -myNeper.fileName3d='my100Grains'; %default: 'allgrains' -myNeper.fileName2d='mySlice'; %default: '2dslice' -{% endhighlight %} - -{% highlight matlab %} -%specifying size of tesselation domain -myNeper.cubeSize = [4 4 1]; -%defining tesselation id -myNeper.id = 512; -{% endhighlight %} - -{% highlight matlab %} -ori=orientation.rand; -ori.CS=crystalSymmetry('mmm'); -odf=unimodalODF(orientation.rand) -numGrains=100; -myNeper.simulateGrains(odf,100) -{% endhighlight %} - -{% highlight matlab %} -N=vector3d(1,1,1); % normal vector (a,b,c) of a plane -d=1; % d of a plane equation(a,b,c,d) -grains=myNeper.getSlice(N,d) -{% endhighlight %} - -{% highlight matlab %} -N=vector3d(0,0,1); % normal vector of a plane -A=vector3d(0,0,0.5); % point from the plane -grains2=myNeper.getSlice(N,A) -{% endhighlight %} - -{% highlight matlab %} -plot(grains,grains.meanOrientation) -hold -plot(grains2,grains2.meanOrientation) -{% endhighlight %} -

Class Properties

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- id - - integer, "used [...] to compute the (initial) seed positions" -
- cubeSize - - 1x3 rowvector, size of the tesselation domain box, default: [1 1 1] -
- morpho - - cell morphology, see neper.info/doc/neper_t.html#morphology-options -default: graingrowth -
- iterMax - - max Iterations for morpho optimization process -
- fileName2d - - name for 2d outputs (fileendings .tess/.ori), default: '2dslice' -
- fileName3d - - name for 3d outputs (fileendings .tess/.ori/.stpoly), default: 'allgrains' -
- filePath - - filepath working directory, default: tempdir -
- newfolder - - boolean, if true, new folder will be created, default: true; -
-

See also

grain2d.load

\ No newline at end of file diff --git a/pages/function_reference_matlab/neperInstance.simulateGrains.html b/pages/function_reference_matlab/neperInstance.simulateGrains.html deleted file mode 100644 index c857eab9d..000000000 --- a/pages/function_reference_matlab/neperInstance.simulateGrains.html +++ /dev/null @@ -1,90 +0,0 @@ ---- -title: simulateGrains - -sidebar: function_reference_sidebar -permalink: neperInstance.simulateGrains.html -folder: function_reference -toc: false ---- - - - simulateGrains - edit page

generating 3d neper tesselations

Syntax

-{% highlight matlab %} -neper=neperInstance; -neper.filepath='C:\\Users\user\Work\Mtex\NeperExamples' %select working folder, default: @tempdir -numGrains=100; -odf=unimodalODF(orientation.rand); -neper.simulateGrains(odf, numGrains) -{% endhighlight %} - -{% highlight matlab %} -ori=discreteSample(odf,numGrains) -neper.simulateGrains(ori) -{% endhighlight %} -

Input

- - - - - - - - - - - - - - - - - -
- neper - - neperInstance -
- odf - - SO3Fun -
- numGrains - - number of grains -
- ori - - orientation -
-

Output

- - - - - - - - - - - - - -
- allgrains.tess - - tesselation file, name specified at neper.filename3d, stored under neper.filepath -
- allgrains.ori - - orientation file, euler-bunge format, -
- ori_in.txt - - input orientations, rodrigues format -
-

\ No newline at end of file diff --git a/pages/function_reference_matlab/num2rgb.html b/pages/function_reference_matlab/num2rgb.html new file mode 100644 index 000000000..1314f9908 --- /dev/null +++ b/pages/function_reference_matlab/num2rgb.html @@ -0,0 +1,74 @@ +--- +title: num2rgb + +sidebar: function_reference_sidebar +permalink: num2rgb.html +folder: function_reference +toc: false +--- + + + num2rgb + edit page

derive RGB triplets from scalar input

Syntax

+{% highlight matlab %} +rgb = num2rgb(val,cmap,varargin) +{% endhighlight %} +

Input

+ + + + + + + + + + + + +
+ val + + list of scalar values +
+ cmap + + name of the colormap, either buildin or mtexColormap +
+ or + +
+

Output

+ + + + + +
+ rgb + + n-by-3 rgb triplets +
+

Options

+ + + + + + + + + +
+ N + + number of colors (default 255) +
+ range + + [lower, upper] limit of value (default is min() max()) +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/orientation.accumarray.html b/pages/function_reference_matlab/orientation.accumarray.html index 4b37777e4..f06968543 100644 --- a/pages/function_reference_matlab/orientation.accumarray.html +++ b/pages/function_reference_matlab/orientation.accumarray.html @@ -31,7 +31,7 @@

Input

ori - @orienrtation + orientation diff --git a/pages/function_reference_matlab/orientation.calcCluster.html b/pages/function_reference_matlab/orientation.calcCluster.html index 71ed14acd..04c21d026 100644 --- a/pages/function_reference_matlab/orientation.calcCluster.html +++ b/pages/function_reference_matlab/orientation.calcCluster.html @@ -82,20 +82,20 @@

Input

Bunge Euler angles in degree phi1 Phi phi2 weight - 103.4 169.894 63.4096 0.2 - 90.4449 133.852 179.823 0.2 - 101.873 124.175 125.358 0.2 - 271.64 62.1178 172.783 0.2 - 3.75952 131.241 144.325 0.2 + 349.843 120.439 215.593 0.2 + 355.671 55.3302 53.5956 0.2 + 311.093 40.0329 323.897 0.2 + 139.998 34.165 162.142 0.2 + 163.707 83.3058 74.042 0.2 {% endhighlight %} {% highlight matlab %} % find the clusters and its centers -[cId,centerRec] = calcCluster(ori); +[cId,centerRec] = calcCluster(ori,'silent'); {% endhighlight %} {% highlight plaintext %} -.................. +............... {% endhighlight %} {% highlight matlab %} diff --git a/pages/function_reference_matlab/orientation.byRodrigues.html b/pages/function_reference_matlab/orientation.calcVoronoi.html similarity index 51% rename from pages/function_reference_matlab/orientation.byRodrigues.html rename to pages/function_reference_matlab/orientation.calcVoronoi.html index f14663820..6d67ca3bd 100644 --- a/pages/function_reference_matlab/orientation.byRodrigues.html +++ b/pages/function_reference_matlab/orientation.calcVoronoi.html @@ -1,8 +1,8 @@ --- -title: byRodrigues +title: calcVoronoi sidebar: function_reference_sidebar -permalink: orientation.byRodrigues.html +permalink: orientation.calcVoronoi.html folder: function_reference toc: false --- @@ -11,47 +11,39 @@ byRodrigues - edit page

define orientations by Euler angles

Syntax

+ -->calcVoronoi + edit page

compute the Voronoi decomposition for unit quaternions

Syntax

{% highlight matlab %} -ori = orientation.byRodrigues(v,CS,SS) % Bunge convention +[V,C] = calcVoronoi(ori,varargin) {% endhighlight %}

Input

- - - - +
- v - - vector3d -
- CS + ori - crystalSymmetry + orientation
+

Output

+ -
- SS + V - specimenSymmetry + Voronoi--Vertices
-

Output

-
- ori + C - orientation + Voronoi--Cells containing the index to the Voronoi--Vertex
-

See also

orientation.orientation orientation.byMiller orientation.byAxisAngle orientation.map

\ No newline at end of file +

See also

S2Grid\<calcVoronoi.html calcVoronoi> voronoin

\ No newline at end of file diff --git a/pages/function_reference_matlab/orientation.doHClustering.html b/pages/function_reference_matlab/orientation.doHClustering.html index 4baaa6f1a..f72cb119a 100644 --- a/pages/function_reference_matlab/orientation.doHClustering.html +++ b/pages/function_reference_matlab/orientation.doHClustering.html @@ -80,12 +80,12 @@

Input

center: 5 orientations Bunge Euler angles in degree - phi1 Phi phi2 weight - 161.58 131.642 91.5424 0.2 - 355.545 142.746 344.029 0.2 - 59.8583 129.605 21.9673 0.2 - 1.69206 64.9598 258.659 0.2 - 317.231 57.0007 40.462 0.2 + phi1 Phi phi2 weight + 159.595 107.686 188.347 0.2 + 152.461 69.8275 70.1477 0.2 + 16.3405 42.5481 345.104 0.2 + 47.8862 89.1992 259.787 0.2 + 0.600726 93.0248 199.439 0.2 {% endhighlight %} {% highlight matlab %} @@ -94,7 +94,7 @@

Input

{% endhighlight %} {% highlight plaintext %} -Elapsed time is 3.135880 seconds. +Elapsed time is 4.706812 seconds. {% endhighlight %} {% highlight matlab %} @@ -136,6 +136,6 @@

Input

{% highlight plaintext %} ans = - 0.2575 0.1830 8.6129 8.4956 0.2644 + 11.2429 0.2440 0.1694 0.2656 {% endhighlight %}

\ No newline at end of file diff --git a/pages/function_reference_matlab/orientation.load.html b/pages/function_reference_matlab/orientation.load.html index 970ccb071..86b67b9f7 100644 --- a/pages/function_reference_matlab/orientation.load.html +++ b/pages/function_reference_matlab/orientation.load.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->load - edit page

import orientation data file

Description

orientation.load is a high level method for importing orientations from column aligned text files or excel spread sheets. In those cases it is neccesary to tell MTEX the column positions of the Euler angles and possible other properties.

Syntax

+ edit page

import orientation data file

Description

orientation.load is a high level method for importing orientations from column aligned text files or excel spread sheets. In those cases it is necessary to tell MTEX the column positions of the Euler angles and possible other properties.

Syntax

{% highlight matlab %} ori = orientation.load(fname,cs,'ColumnNames',{'phi1','Phi','phi2'}) {% endhighlight %} @@ -73,7 +73,7 @@

Input

columnNames - names of the colums to be imported, mandatory are euler 1, euler 2, euler 3 + names of the columns to be imported, mandatory are euler 1, euler 2, euler 3 @@ -81,7 +81,7 @@

Input

columns - postions of the columns to be imported + positions of the columns to be imported @@ -89,7 +89,7 @@

Input

radians - treat input in radiand + treat input in Radians @@ -121,7 +121,7 @@

Input

passive - interprete the orientation as passive rotationss + interpret the orientation as passive rotations diff --git a/pages/function_reference_matlab/orientation.log.html b/pages/function_reference_matlab/orientation.log.html index 72e4f105a..70924a84b 100644 --- a/pages/function_reference_matlab/orientation.log.html +++ b/pages/function_reference_matlab/orientation.log.html @@ -24,7 +24,7 @@ {% highlight matlab %} % the misorientation vector in specimen coordinats -v = log(ori,ori_ref,'left') +v = log(ori,ori_ref, SO3TangentSpace.leftVector) v = ori_ref .* m {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/orientation.matchLattice.html b/pages/function_reference_matlab/orientation.matchLattice.html index 9827f10ba..0011f1940 100644 --- a/pages/function_reference_matlab/orientation.matchLattice.html +++ b/pages/function_reference_matlab/orientation.matchLattice.html @@ -87,23 +87,23 @@

Input

{% highlight plaintext %} mori = misorientation (Ferrite → Austenite) - (100) || (100) [010] || [011] + (011) || (001) [100] || [100] n_gamma = Miller (Ferrite) h k l - 1 0 0 + 0 1 1 n_alpha = Miller (Austenite) h k l - 1 0 0 + 0 0 1 d_gamma = Miller (Ferrite) u v w - 0 1 0 + 1 0 0 d_alpha = Miller (Austenite) u v w - 0 1 1 + 1 0 0 {% endhighlight %}

See also

round2Miller

\ No newline at end of file diff --git a/pages/function_reference_matlab/orientation.parents.html b/pages/function_reference_matlab/orientation.parents.html index e803f8074..8ccd1e253 100644 --- a/pages/function_reference_matlab/orientation.parents.html +++ b/pages/function_reference_matlab/orientation.parents.html @@ -114,18 +114,18 @@

Input

Bunge Euler angles in degree phi1 Phi phi2 - 83.0827 96.8675 359.584 + 276.917 96.8675 90.4156 + 13.6387 134.181 144.598 + 346.361 45.8193 324.598 83.0827 83.1325 270.416 + 193.639 134.181 144.598 + 276.917 83.1325 179.584 + 166.361 45.8193 324.598 + 83.0827 96.8675 359.584 + 180 125.264 225 180 54.7356 45 0 144.736 45 0 35.2644 225 - 180 125.264 225 - 166.361 45.8193 324.598 - 346.361 45.8193 324.598 - 13.6387 134.181 144.598 - 193.639 134.181 144.598 - 276.917 96.8675 90.4156 - 276.917 83.1325 179.584 {% endhighlight %} {% highlight matlab %} @@ -139,17 +139,17 @@

Input

Bunge Euler angles in degree phi1 Phi phi2 + 276.917 96.8675 90.4156 + 13.6387 134.181 144.598 166.361 45.8193 324.598 + 83.0827 96.8675 359.584 276.917 83.1325 179.584 - 0 144.736 45 - 180 54.7356 45 + 180 125.264 225 83.0827 83.1325 270.416 - 83.0827 96.8675 359.584 - 346.361 45.8193 324.598 + 180 54.7356 45 193.639 134.181 144.598 - 180 125.264 225 + 0 144.736 45 360 35.2644 225 - 276.917 96.8675 90.4156 - 13.6387 134.181 144.598 + 346.361 45.8193 324.598 {% endhighlight %}

See also

orientation.variants

\ No newline at end of file diff --git a/pages/function_reference_matlab/orientation.plot.html b/pages/function_reference_matlab/orientation.plot.html index 1862d0fd4..58353c4d6 100644 --- a/pages/function_reference_matlab/orientation.plot.html +++ b/pages/function_reference_matlab/orientation.plot.html @@ -32,6 +32,38 @@

Input

Options

+ + + + + + + + + + + + + + + + @@ -42,7 +42,7 @@

Input

Rodrigues

diff --git a/pages/function_reference_matlab/orientationRegion.angle.html b/pages/function_reference_matlab/orientationRegion.angle.html new file mode 100644 index 000000000..83f114782 --- /dev/null +++ b/pages/function_reference_matlab/orientationRegion.angle.html @@ -0,0 +1,49 @@ +--- +title: angle + +sidebar: function_reference_sidebar +permalink: orientationRegion.angle.html +folder: function_reference +toc: false +--- + + + angle + edit page

angle to the boundary of the OR

Description

Computes the misorientation angle of orientations to the boundary of an orientationRegion. A negative angle indicates that the orientation is inside the OR and a positive angle that it is outside the OR.

Syntax

+{% highlight matlab %} +omega = angle(oR,ori) +{% endhighlight %} +

Input

+

+ axisAngle + + 3d axis angle plot +
+ Rodrigues + + 3d Rodrigues vector plot +
+ Euler + + 3d Bunge Euler plot +
+ points + + number of orientations to be plotted +
MarkerFaceColor @@ -77,18 +109,18 @@

Input

- filled + axisAngle - MarkerFaceColor is MarkerEdgeColor +
- labeled + filled - + MarkerFaceColor is MarkerEdgeColor
diff --git a/pages/function_reference_matlab/orientation.scatter.html b/pages/function_reference_matlab/orientation.scatter.html index c85aeb248..1f36779e6 100644 --- a/pages/function_reference_matlab/orientation.scatter.html +++ b/pages/function_reference_matlab/orientation.scatter.html @@ -34,7 +34,7 @@

Input

axisAngle

- axis angle projection + 3d axis angle plot
- rodrigues parameterization + 3d Rodrigues vector plot
+ + + + + + + + +
+ oR + + orientationRegion +
+ ori + + orientation +
+

Output

+ + + + + +
+ omega + + misorientation angle to the boundary of oR +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/out2.html b/pages/function_reference_matlab/out2.html new file mode 100644 index 000000000..af76eea71 --- /dev/null +++ b/pages/function_reference_matlab/out2.html @@ -0,0 +1,19 @@ +--- +title: out2 + +sidebar: function_reference_sidebar +permalink: out2.html +folder: function_reference +toc: false +--- + + + out2 + edit page

return second output of a function, useful in anonymous functions

Syntax

+{% highlight matlab %} +value = out2(fun,varargin) +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/parentGrainReconstructor.parentGrainReconstructor.html b/pages/function_reference_matlab/parentGrainReconstructor.parentGrainReconstructor.html index bfcc1c950..c77e42dad 100644 --- a/pages/function_reference_matlab/parentGrainReconstructor.parentGrainReconstructor.html +++ b/pages/function_reference_matlab/parentGrainReconstructor.parentGrainReconstructor.html @@ -150,7 +150,7 @@

Input

votes - table of of votes for each grain + table of of votes with as many rows as job.grains diff --git a/pages/function_reference_matlab/plottingConvention.html b/pages/function_reference_matlab/plottingConvention.html deleted file mode 100644 index e651e3356..000000000 --- a/pages/function_reference_matlab/plottingConvention.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: plottingConvention - -sidebar: function_reference_sidebar -permalink: plottingConvention.html -folder: function_reference -toc: false ---- - - - plottingConvention - edit page

class describing the alignment of a reference frame on the screen

Syntax

-{% highlight matlab %} -pC = plottingConvention(outOfScreen,east) -{% endhighlight %} -
\ No newline at end of file diff --git a/pages/function_reference_matlab/polySgnArea.html b/pages/function_reference_matlab/polySgnArea.html index d6499c73c..0ab9c12b2 100644 --- a/pages/function_reference_matlab/polySgnArea.html +++ b/pages/function_reference_matlab/polySgnArea.html @@ -14,6 +14,6 @@ -->polySgnArea edit page

area of an orientation with sign depending of orientation

Syntax

{% highlight matlab %} -area = polySgnArea(x,y) +area = polySgnArea(x,y,grainStart) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/quadratureSO3Grid.html b/pages/function_reference_matlab/quadratureSO3Grid.html deleted file mode 100644 index ce4f17f12..000000000 --- a/pages/function_reference_matlab/quadratureSO3Grid.html +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: quadratureSO3Grid - -sidebar: function_reference_sidebar -permalink: quadratureSO3Grid.html -folder: function_reference -toc: false ---- - - - quadratureSO3Grid - edit page

Compute nodes and weights for quadrature on SO(3). Therefore the following quadrature rules are implemented yet:

-{% highlight matlab %} -'ClenshawCurtis' - combinate the Gauss quadrature in 1st and 3rd Euler angle - (alpha, gamma) with Clenshaw Curtis quadrature in 2nd - Euler angle (beta) -'GaussLegendre' - combinate the Gauss quadrature in 1st and 3rd Euler angle - (alpha, gamma) with Gauss Legendre quadrature in 2nd - Euler angle (beta) -{% endhighlight %} -

Syntax

-{% highlight matlab %} -SO3G = quadratureSO3rid(N, 'ClenshawCurtis') -[SO3G, W] = quadratureSO3rid(N,CS,SS,'ClenshawCurtis') % quadrature grid of type Clenshaw Curtis -{% endhighlight %} -

Input

- - - - - - - - - -
- N - - bandwidth -
- CS,SS - - @symmetries -
-

Output

- - - - - - - - - -
- SO3G - - orientation grid -
- W - - quadrature weights -
-

Options

- - - - - - - - - -
- ClenshawCurtis - - use Clenshaw Curtis quadrature nodes and weights -
- GaussLegendre - - use Gauss Legendre quadrature nodes and weights (not implemented yet) -
-

See also

regularSO3Grid SO3FunHarmonic.quadrature

\ No newline at end of file diff --git a/pages/function_reference_matlab/quadratureSO3Grid.quadratureSO3Grid.html b/pages/function_reference_matlab/quadratureSO3Grid.quadratureSO3Grid.html index d4d3496f6..2c6ce2fc9 100644 --- a/pages/function_reference_matlab/quadratureSO3Grid.quadratureSO3Grid.html +++ b/pages/function_reference_matlab/quadratureSO3Grid.quadratureSO3Grid.html @@ -12,21 +12,12 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->quadratureSO3Grid - edit page

Compute nodes and weights for quadrature on SO(3). Therefore the following quadrature rules are implemented yet:

-{% highlight matlab %} -'ClenshawCurtis' - combinate the Gauss quadrature in 1st and 3rd Euler angle - (alpha, gamma) with Clenshaw Curtis quadrature in 2nd - Euler angle (beta) -'GaussLegendre' - combinate the Gauss quadrature in 1st and 3rd Euler angle - (alpha, gamma) with Gauss Legendre quadrature in 2nd - Euler angle (beta) -{% endhighlight %} -

Syntax

+ edit page

Compute nodes and weights for quadrature on SO(3).

Description

The following quadrature rules are implemented:

  • 'ClenshawCurtis' combines the Gauss quadrature in 1st and 3rd Euler angle (alpha, gamma) with Clenshaw Curtis quadrature in 2nd Euler angle (beta)
  • 'GaussLegendre' combines the Gauss quadrature in 1st and 3rd Euler angle (alpha, gamma) with Gauss Legendre quadrature in 2nd Euler angle (beta)

Syntax

{% highlight matlab %} SO3G = quadratureSO3rid(N, 'ClenshawCurtis') [SO3G, W] = quadratureSO3rid(N,CS,SS,'ClenshawCurtis') % quadrature grid of type Clenshaw Curtis {% endhighlight %} -

Input

+

Input

@@ -45,7 +36,7 @@

Input

-

Output

+

Output

@@ -64,7 +55,7 @@

Input

-

Options

+

Options

@@ -83,4 +74,4 @@

Input

-

See also

regularSO3Grid SO3FunHarmonic.quadrature

\ No newline at end of file +

See also

regularSO3Grid SO3FunHarmonic.quadrature

\ No newline at end of file diff --git a/pages/function_reference_matlab/quaternion.calcVoronoiVolume.html b/pages/function_reference_matlab/quaternion.calcVoronoiVolume.html index 9f5622111..764128806 100644 --- a/pages/function_reference_matlab/quaternion.calcVoronoiVolume.html +++ b/pages/function_reference_matlab/quaternion.calcVoronoiVolume.html @@ -14,7 +14,7 @@ -->calcVoronoiVolume edit page

compute the the volume of the Voronoi cells which are constructed by the Voronoi decomposition for unit quaternions

Syntax

{% highlight matlab %} -w = calcVoronoiVolume(rot,varargin) +w = calcVoronoiVolume(rot,V,C,varargin) {% endhighlight %}

Input

diff --git a/pages/function_reference_matlab/grain2d.fft.html b/pages/function_reference_matlab/quaternion.isscalar.html similarity index 51% rename from pages/function_reference_matlab/grain2d.fft.html rename to pages/function_reference_matlab/quaternion.isscalar.html index 75a32bcd1..7009d5014 100644 --- a/pages/function_reference_matlab/grain2d.fft.html +++ b/pages/function_reference_matlab/quaternion.isscalar.html @@ -1,8 +1,8 @@ --- -title: fft +title: isscalar sidebar: function_reference_sidebar -permalink: grain2d.fft.html +permalink: quaternion.isscalar.html folder: function_reference toc: false --- @@ -11,9 +11,9 @@ fft - edit page

fft of the grain boundaries of length N

Syntax

+ -->isscalar + edit page

overloads isscalar

Syntax

{% highlight matlab %} -y = fft(grains,N) +out = isscalar(q) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/quaternion.setSubSet.html b/pages/function_reference_matlab/quaternion.setSubSet.html index 2eb5d3dd7..814081a23 100644 --- a/pages/function_reference_matlab/quaternion.setSubSet.html +++ b/pages/function_reference_matlab/quaternion.setSubSet.html @@ -14,6 +14,45 @@ -->setSubSet edit page

indexing of quaternions

Syntax

{% highlight matlab %} -setSubSet(q,ind) % +% q(ind) = nq +q = setSubSet(q,ind,nq) {% endhighlight %} -
\ No newline at end of file +

Input

+

+ + + + + + + + + + + + +
+ q + + quaternion +
+ ind + + @double +
+ nq + + quaternion +
+

Output

+ + + + + +
+ q + + quaternion +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/referenceSystem.referenceSystem.html b/pages/function_reference_matlab/referenceSystem.referenceSystem.html new file mode 100644 index 000000000..da81fd20e --- /dev/null +++ b/pages/function_reference_matlab/referenceSystem.referenceSystem.html @@ -0,0 +1,19 @@ +--- +title: referenceSystem + +sidebar: function_reference_sidebar +permalink: referenceSystem.referenceSystem.html +folder: function_reference +toc: false +--- + + + referenceSystem + edit page

Syntax

+{% highlight matlab %} +rS = referenceSystem(name) +{% endhighlight %} +

References

\ No newline at end of file diff --git a/pages/function_reference_matlab/rotation.calcDensity.html b/pages/function_reference_matlab/rotation.calcDensity.html index bb55c2186..bf3f03fc0 100644 --- a/pages/function_reference_matlab/rotation.calcDensity.html +++ b/pages/function_reference_matlab/rotation.calcDensity.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->calcDensity - edit page

computes an ODF from individuel orientations

The function calcDensity applies one of the following algorithms to compute an ODF from a list of orientations.

  1. direct kernel density estimation
  2. kernel density estimation via Fourier series
  3. Bingham estimation

Syntax

+ edit page

computes an ODF from individual orientations

The function calcDensity applies one of the following algorithms to compute an ODF from a list of orientations.

  1. direct kernel density estimation
  2. kernel density estimation via Fourier series
  3. Bingham estimation

Syntax

{% highlight matlab %} % use kernel density estimation with a 10 degree kernel odf = calcDensity(ori,'halfwidth',10*degree) @@ -70,7 +70,7 @@

Input

halfwidth - halfwidth of the kernel function + halfwidth of the kernel function (default is 10 degree) diff --git a/pages/function_reference_matlab/rotation.line.html b/pages/function_reference_matlab/rotation.line.html index 162157a08..6effc1238 100644 --- a/pages/function_reference_matlab/rotation.line.html +++ b/pages/function_reference_matlab/rotation.line.html @@ -81,7 +81,7 @@

Input

{% highlight plaintext %} o = misorientation (321 → 432) - size: 1000 x 1 + size: 2000 x 1 {% endhighlight %} {% highlight matlab %} diff --git a/pages/function_reference_matlab/slipSystem.isscalar.html b/pages/function_reference_matlab/slipSystem.isscalar.html new file mode 100644 index 000000000..9603f8094 --- /dev/null +++ b/pages/function_reference_matlab/slipSystem.isscalar.html @@ -0,0 +1,19 @@ +--- +title: isscalar + +sidebar: function_reference_sidebar +permalink: slipSystem.isscalar.html +folder: function_reference +toc: false +--- + + + isscalar + edit page

check for single slip system

Syntax

+{% highlight matlab %} +out = isscalar(sS) +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/spinTensor.spinTensor.html b/pages/function_reference_matlab/spinTensor.spinTensor.html index ab1d4d5e2..6af6da239 100644 --- a/pages/function_reference_matlab/spinTensor.spinTensor.html +++ b/pages/function_reference_matlab/spinTensor.spinTensor.html @@ -26,7 +26,7 @@

Input

S - skew symmetry matrix + skew symmetric matrix diff --git a/pages/function_reference_matlab/squareNeighbors.html b/pages/function_reference_matlab/squareNeighbors.html index b39fc3754..9a7c13275 100644 --- a/pages/function_reference_matlab/squareNeighbors.html +++ b/pages/function_reference_matlab/squareNeighbors.html @@ -14,6 +14,6 @@ -->squareNeighbors edit page

return the neighbor ids in a square grid

Syntax

{% highlight matlab %} -ind = squareNeighbors(RowsCols,Nid) +ind = squareNeighbors(RowsCols,Nid,varargin) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/stiffnessTensor.plotSeismicVelocities.html b/pages/function_reference_matlab/stiffnessTensor.plotSeismicVelocities.html index 8f88eced1..152a4c0fd 100644 --- a/pages/function_reference_matlab/stiffnessTensor.plotSeismicVelocities.html +++ b/pages/function_reference_matlab/stiffnessTensor.plotSeismicVelocities.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->plotSeismicVelocities - edit page

Description

The layout of the plot is

Plot matrix of anisotropic seismic properties 1 Vp 2 AVs 3 S1 polarizations 4 Vs1 5 Vs2 6 dVs 7 Vp/Vs1 8 Vp/Vs2

Syntax

+ edit page

Description

The layout of the plot is

Plot matrix of anisotropic seismic properties 1 Vp 2 AVs 3 S1 polarization 4 Vs1 5 Vs2 6 dVs 7 Vp/Vs1 8 Vp/Vs2

Syntax

{% highlight matlab %} % stiffness tensor with density! C = stiffnessTensor(M,cs_tensor,'density',rho) diff --git a/pages/function_reference_matlab/strainTensor.calcTaylor.html b/pages/function_reference_matlab/strainTensor.calcTaylor.html index fba81df3a..5fd2418ff 100644 --- a/pages/function_reference_matlab/strainTensor.calcTaylor.html +++ b/pages/function_reference_matlab/strainTensor.calcTaylor.html @@ -51,7 +51,7 @@

Input

spinFun - SO3VectorField + SO3VectorFieldHarmonic @@ -136,16 +136,16 @@

Input

{% highlight plaintext %} M = - 2.1327 + 2.7187 b = Columns 1 through 7 - 0.0000 0.0332 0.0000 0.0000 0.0142 0.0000 0.0198 + 0.0000 0.0000 0.0142 0.0332 0.0000 0.0000 0.0198 Columns 8 through 14 0.0000 0.0000 0.0000 0.0000 0.0204 0.0000 0.0000 Columns 15 through 21 - 0.0000 0.0345 0.0000 0.0093 0.0000 0.1110 0.0296 + 0.0000 0.0000 0.0345 0.0093 0.0000 0.0296 0.0000 Columns 22 through 24 - 0.0000 0.0000 0.0000 + 0.1110 0.0000 0.0000 W = spinTensor (m-3m) rank: 2 (3 x 3) diff --git a/pages/function_reference_matlab/vector3d.nansum.html b/pages/function_reference_matlab/strainTensor.norm.html similarity index 57% rename from pages/function_reference_matlab/vector3d.nansum.html rename to pages/function_reference_matlab/strainTensor.norm.html index 9886e84f2..1268c0a85 100644 --- a/pages/function_reference_matlab/vector3d.nansum.html +++ b/pages/function_reference_matlab/strainTensor.norm.html @@ -1,8 +1,8 @@ --- -title: nansum +title: norm sidebar: function_reference_sidebar -permalink: vector3d.nansum.html +permalink: strainTensor.norm.html folder: function_reference toc: false --- @@ -11,20 +11,19 @@ nansum - edit page

sum of vectors

Syntax

+ -->norm + edit page

Syntax

{% highlight matlab %} -sum(v) % sum along the first non singular dimension -sum(v,d) % sum along dimension d +n = norm(epsilon) {% endhighlight %}

Input

- v + T - vector3d + tensor
@@ -32,10 +31,10 @@

Input

- v + n - vector3d + double
diff --git a/pages/function_reference_matlab/symmetry.multiplicityPerpZ.html b/pages/function_reference_matlab/symmetry.multiplicityPerpZ.html deleted file mode 100644 index c7eb98858..000000000 --- a/pages/function_reference_matlab/symmetry.multiplicityPerpZ.html +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: multiplicityPerpZ - -sidebar: function_reference_sidebar -permalink: symmetry.multiplicityPerpZ.html -folder: function_reference -toc: false ---- - - - multiplicityPerpZ - edit page

maximum angle rho

Syntax

-{% highlight matlab %} -n = multiplicityPerpZ(cs) -{% endhighlight %} -
\ No newline at end of file diff --git a/pages/function_reference_matlab/tensor.isscalar.html b/pages/function_reference_matlab/tensor.isscalar.html new file mode 100644 index 000000000..33f8b53c1 --- /dev/null +++ b/pages/function_reference_matlab/tensor.isscalar.html @@ -0,0 +1,19 @@ +--- +title: isscalar + +sidebar: function_reference_sidebar +permalink: tensor.isscalar.html +folder: function_reference +toc: false +--- + + + isscalar + edit page

returns the number of tensors

Syntax

+{% highlight matlab %} +out = isscalar(T,varargin) +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/tensor.max.html b/pages/function_reference_matlab/tensor.max.html deleted file mode 100644 index fbec8416d..000000000 --- a/pages/function_reference_matlab/tensor.max.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: max - -sidebar: function_reference_sidebar -permalink: tensor.max.html -folder: function_reference -toc: false ---- - - - max - edit page

Syntax

-{% highlight matlab %} -m = max(T) -{% endhighlight %} -

Example

-{% highlight matlab %} -X = [2 8 4; 7 3 9] -max(X,[],1) -max(X,[],2) -max(X,5) -{% endhighlight %} - -{% highlight plaintext %} -X = - 2 8 4 - 7 3 9 -ans = - 7 8 9 -ans = - 8 - 9 -ans = - 5 8 5 - 7 5 9 -{% endhighlight %} -

See also

\ No newline at end of file diff --git a/pages/function_reference_matlab/tensor.min.html b/pages/function_reference_matlab/tensor.min.html deleted file mode 100644 index 8ab14a1ee..000000000 --- a/pages/function_reference_matlab/tensor.min.html +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: min - -sidebar: function_reference_sidebar -permalink: tensor.min.html -folder: function_reference -toc: false ---- - - - min - edit page

Syntax

-{% highlight matlab %} -m = min(T) -{% endhighlight %} -

Example

-{% highlight matlab %} -X = [2 8 4; 7 3 9] -min(X,[],1) -min(X,[],2) -min(X,5) -{% endhighlight %} - -{% highlight plaintext %} -X = - 2 8 4 - 7 3 9 -ans = - 2 3 4 -ans = - 2 - 3 -ans = - 2 5 4 - 5 3 5 -{% endhighlight %} -

See also

\ No newline at end of file diff --git a/pages/function_reference_matlab/S2FunHarmonic.volume.html b/pages/function_reference_matlab/tensor.subSet.html similarity index 60% rename from pages/function_reference_matlab/S2FunHarmonic.volume.html rename to pages/function_reference_matlab/tensor.subSet.html index 47848b3d1..22c4972da 100644 --- a/pages/function_reference_matlab/S2FunHarmonic.volume.html +++ b/pages/function_reference_matlab/tensor.subSet.html @@ -1,8 +1,8 @@ --- -title: volume +title: subSet sidebar: function_reference_sidebar -permalink: S2FunHarmonic.volume.html +permalink: tensor.subSet.html folder: function_reference toc: false --- @@ -11,9 +11,9 @@ volume - edit page

Syntax

+ -->subSet + edit page

subindex vector3d

Syntax

{% highlight matlab %} -sF = volume(sF1, center, radius) +t = subSet(t,ind) {% endhighlight %}
\ No newline at end of file diff --git a/pages/function_reference_matlab/tensor.tensor.html b/pages/function_reference_matlab/tensor.tensor.html index 0036ebc56..ff2e6ac8f 100644 --- a/pages/function_reference_matlab/tensor.tensor.html +++ b/pages/function_reference_matlab/tensor.tensor.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->tensor - edit page

constructor

tensor is the low level constructor for a tensor object. For importing real world data you might want to use the import_wizard.

Syntax

+ edit page

constructor

tensor is the low level constructor for a tensor object. For importing real world data you might want to use the import_wizard.

Syntax

{% highlight matlab %} T = tensor(M,CS,'name',name,'unit',unit,'propertyname',property) {% endhighlight %} diff --git a/pages/function_reference_matlab/transformODFOld.html b/pages/function_reference_matlab/transformODFOld.html deleted file mode 100644 index fb13d6880..000000000 --- a/pages/function_reference_matlab/transformODFOld.html +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: transformODFOld - -sidebar: function_reference_sidebar -permalink: transformODFOld.html -folder: function_reference -toc: false ---- - - - transformODFOld - edit page

transformatation texture

Description

...

Syntax

-{% highlight matlab %} -odfC = transformODF(odfP,p2c) -{% endhighlight %} - -{% highlight matlab %} -vSel = [0.1 0.2 0.] -odfC = transformODF(odfP,p2c,'variantSelection',vSel) -{% endhighlight %} - -{% highlight matlab %} -% only variant 3 is considered -odfC = transformODF(odfP,p2c,'variantSelection',3) -{% endhighlight %} -

Input

- - - - - - - - - -
- odfP - - parent ODF SO3Fun -
- p2c - - parent to child orientation relationship -
-

Output

- - - - - -
- odfC - - child ODF SO3Fun -
-

Options

- - - - - -
- variantSelection - - -
-

Example

\ No newline at end of file diff --git a/pages/function_reference_matlab/triplePointList.rotate.html b/pages/function_reference_matlab/triplePointList.rotate.html index 30275ebd7..351c77d23 100644 --- a/pages/function_reference_matlab/triplePointList.rotate.html +++ b/pages/function_reference_matlab/triplePointList.rotate.html @@ -25,7 +25,7 @@ {% highlight matlab %} % rotate about a specific point -tP = rotate(tP,180*degree,'center',vector3d(20,10,0)) +tP = rotate(tP,180*degree,'center',[0,0]) {% endhighlight %}

Input

@@ -72,7 +72,7 @@

Input

center

- center of rotation - vector3d + [x,y] center of rotation, default is (0,0)
diff --git a/pages/function_reference_matlab/triplePointList.triplePointList.html b/pages/function_reference_matlab/triplePointList.triplePointList.html index be2b41604..5dca61096 100644 --- a/pages/function_reference_matlab/triplePointList.triplePointList.html +++ b/pages/function_reference_matlab/triplePointList.triplePointList.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->triplePointList - edit page

triple points or triple juctions list of grain boundaries in 2-D

triplePointList is used to extract, analyze and visualize triple points between grain boundaries in 2-D.

Syntax

+ edit page

triple points or triple junctions list of grain boundaries in 2-D

triplePointList is used to extract, analyze and visualize triple points between grain boundaries in 2-D.

Syntax

{% highlight matlab %} % creates an empty list of triple points tP = triplePointList() diff --git a/pages/function_reference_matlab/vector3d.angle.html b/pages/function_reference_matlab/vector3d.angle.html index c222d8c0b..ee403045b 100644 --- a/pages/function_reference_matlab/vector3d.angle.html +++ b/pages/function_reference_matlab/vector3d.angle.html @@ -16,6 +16,7 @@ {% highlight matlab %} omega = angle(v1,v2) omega = angle(v1,v2,'antipodal') +omega = angle(v1,v2,'noSymmetry') omega = angle(v1,v2,N) {% endhighlight %}

Input

@@ -58,5 +59,13 @@

Input

include antipodal symmetry + + + noSymmetry + + + ignore symmetry + +

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.arrow3d.html b/pages/function_reference_matlab/vector3d.arrow3d.html index da05f90d1..7d00a497d 100644 --- a/pages/function_reference_matlab/vector3d.arrow3d.html +++ b/pages/function_reference_matlab/vector3d.arrow3d.html @@ -28,4 +28,52 @@

Input

-

See also

savefigure vector3d.scatter3 vector3d.plot3 vector3d.text3

\ No newline at end of file +

Options

+ + + + + + + + + + + + + + + + + + + + + +
+ label + + text to be displayed at the end of the arrow +
+ labeled + + +
+ faceColor + + +
+ arrowWidth + + width of the tail (default 0.02) +
+ antipodal + + +
+

Example

arrow3d(zvector,'FaceColor','red','label','z')
+hold on
+arrow3d(xvector,'FaceColor','blue','label','x')
+arrow3d(yvector,'FaceColor','green','label','y')
+arrow3d(0.5*vector3d(1,1,1,'antipodal'))
+hold off

See also

vector3d.scatter3 vector3d.plot3 vector3d.text3

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.fullDouble.html b/pages/function_reference_matlab/vector3d.convhull.html similarity index 66% rename from pages/function_reference_matlab/vector3d.fullDouble.html rename to pages/function_reference_matlab/vector3d.convhull.html index 22af0b39f..fb0c7f3b6 100644 --- a/pages/function_reference_matlab/vector3d.fullDouble.html +++ b/pages/function_reference_matlab/vector3d.convhull.html @@ -1,8 +1,8 @@ --- -title: fullDouble +title: convhull sidebar: function_reference_sidebar -permalink: vector3d.fullDouble.html +permalink: vector3d.convhull.html folder: function_reference toc: false --- @@ -11,10 +11,10 @@ fullDouble - edit page

converts vector3d to double

Syntax

+ -->convhull + edit page

convex hull of a list of vector3d

Syntax

{% highlight matlab %} -d = fullDouble(v) +T = convhul(v) {% endhighlight %}

Input

@@ -31,10 +31,10 @@

Input

- x, y, z + T - double + list of triangles
diff --git a/pages/function_reference_matlab/vector3d.exp.html b/pages/function_reference_matlab/vector3d.exp.html index 56ec188fe..b2be407af 100644 --- a/pages/function_reference_matlab/vector3d.exp.html +++ b/pages/function_reference_matlab/vector3d.exp.html @@ -18,7 +18,7 @@ {% endhighlight %} {% highlight matlab %} -rot = exp(v,ori_ref) % orientation update +rot = exp(v,ori_ref,SO3TangentSpace.rightVector) % orientation update {% endhighlight %}

Input

@@ -27,7 +27,7 @@

Input

v

@@ -38,6 +38,14 @@

Input

orientation rotation

+ + + +
- vector3d rotation vector in specimen coordinates + vector3d, SO3TangentVector
+ tS + + @SO3TangentSpace +

Output

@@ -57,27 +65,5 @@

Input

orientation -

- - - - - - - - - -
- Option - -
- left - - -
- right - - -

See also

Miller.exp orientation.log

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.isscalar.html b/pages/function_reference_matlab/vector3d.isscalar.html new file mode 100644 index 000000000..7181a0824 --- /dev/null +++ b/pages/function_reference_matlab/vector3d.isscalar.html @@ -0,0 +1,19 @@ +--- +title: isscalar + +sidebar: function_reference_sidebar +permalink: vector3d.isscalar.html +folder: function_reference +toc: false +--- + + + isscalar + edit page

check v is a single vector

Syntax

+{% highlight matlab %} +out = isscalar(v) +{% endhighlight %} +
\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.lineIntersect.html b/pages/function_reference_matlab/vector3d.lineIntersect.html new file mode 100644 index 000000000..353a7b05a --- /dev/null +++ b/pages/function_reference_matlab/vector3d.lineIntersect.html @@ -0,0 +1,65 @@ +--- +title: lineIntersect + +sidebar: function_reference_sidebar +permalink: vector3d.lineIntersect.html +folder: function_reference +toc: false +--- + + + lineIntersect + edit page

intersection of lines and planes

Syntax

+{% highlight matlab %} +v = lineIntersect(v1,v2,n,d) +{% endhighlight %} +

Input

+ + + + + + + + + + + + + + + + + +
+ v1 + + starting points of the lines +
+ v2 + + final point of the lines +
+ n + + normal direction of the planes +
+ d + + distances of the plane, i.e. <x,n>=d +
+

Output

+ + + + + +
+ v + + intersection points vector3d +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.planeIntersect.html b/pages/function_reference_matlab/vector3d.planeIntersect.html index 1652483cb..9c49bc37b 100644 --- a/pages/function_reference_matlab/vector3d.planeIntersect.html +++ b/pages/function_reference_matlab/vector3d.planeIntersect.html @@ -12,9 +12,9 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->planeIntersect - edit page

pointwise determinant or triple product of three vector3d

Syntax

+ edit page

intersection of three planes

Syntax

{% highlight matlab %} -p = planeIntersect(n1,n2,n3,d) +v = planeIntersect(n1,n2,n3,d) {% endhighlight %}

Input

@@ -23,7 +23,7 @@

Input

n1,n2,n3

@@ -31,7 +31,7 @@

Input

d

- normal vector3d + plane normal vector3d, <x,n_i> = d_i
- distance + [d1,d2,d3] distances of the three planes to the origin
@@ -39,11 +39,11 @@

Input

- d + v - double + vector3d
-

\ No newline at end of file +

See also

vector3d.lineIntersect

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.scatter.html b/pages/function_reference_matlab/vector3d.scatter.html index c79eed24c..6c222acd0 100644 --- a/pages/function_reference_matlab/vector3d.scatter.html +++ b/pages/function_reference_matlab/vector3d.scatter.html @@ -56,7 +56,7 @@

Input

Marker - 's','o','diamont','p' + 's','o','diamond','p' @@ -96,7 +96,7 @@

Input

MarkerAlpha - transperency setting + transparency setting @@ -104,7 +104,7 @@

Input

MarkerEdgeAlpha - transperency setting + transparency setting @@ -112,7 +112,7 @@

Input

MarkerFaceAlpha - transperency setting + transparency setting @@ -123,5 +123,21 @@

Input

scale marker size when plot is resized + + + Grid + + + whether to display a grid + + + + + grid_res + + + resolution of the grid to be displayed + +

See also

vector3d.text

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.scatter3d.html b/pages/function_reference_matlab/vector3d.scatter3d.html index a8a358525..e2aa8ed69 100644 --- a/pages/function_reference_matlab/vector3d.scatter3d.html +++ b/pages/function_reference_matlab/vector3d.scatter3d.html @@ -17,5 +17,14 @@ scatter3d(v,data) {% endhighlight %}

Input

- -

See also

savefigure

\ No newline at end of file +
+ + + + +
+ v + + vector3d +
+

\ No newline at end of file diff --git a/pages/function_reference_matlab/vector3d.vector3d.html b/pages/function_reference_matlab/vector3d.vector3d.html index 3531b1547..38a046454 100644 --- a/pages/function_reference_matlab/vector3d.vector3d.html +++ b/pages/function_reference_matlab/vector3d.vector3d.html @@ -93,7 +93,7 @@

Input

rho - azimuthal angle in radiant + azimuth angle in radiant @@ -128,7 +128,7 @@

Input

S2Grid - sphercial grid + spherical grid diff --git a/pages/function_reference_matlab/velocityGradientTensor.calcTaylor.html b/pages/function_reference_matlab/velocityGradientTensor.calcTaylor.html index e0c41423e..3aaad60c5 100644 --- a/pages/function_reference_matlab/velocityGradientTensor.calcTaylor.html +++ b/pages/function_reference_matlab/velocityGradientTensor.calcTaylor.html @@ -132,16 +132,16 @@

Input

{% highlight plaintext %} M = - 2.0490 + 2.5095 b = Columns 1 through 7 - 0.0000 0.0402 0.0000 0.0000 0.0441 0.0000 0.0441 + 0.0000 0.0000 0.0441 0.0402 0.0000 0.0000 0.0441 Columns 8 through 14 0.0000 0.0000 0.0000 0.0000 0.0402 0.0000 0.0000 Columns 15 through 21 - 0.0000 0.2008 0.0000 0.0441 0.0000 0.2008 0.0441 + 0.0000 0.0000 0.2008 0.0441 0.0000 0.0441 0.0000 Columns 22 through 24 - 0.0000 0.0000 0.0000 + 0.2008 0.0000 0.0000 spin = spinTensor (m-3m) rank: 2 (3 x 3) diff --git a/pages/function_reference_matlab/velocityGradientTensor.uniaxial.html b/pages/function_reference_matlab/velocityGradientTensor.uniaxial.html index 61afbb09d..ed1b9fa5b 100644 --- a/pages/function_reference_matlab/velocityGradientTensor.uniaxial.html +++ b/pages/function_reference_matlab/velocityGradientTensor.uniaxial.html @@ -14,13 +14,13 @@ -->uniaxial edit page

defines uniaxial tension/compression tensors

Syntax

{% highlight matlab %} -% uniaxial tension -L = velocityGradientTensor.uniaxial(d,r) +% axi symmetric uniaxial tension +L = r .* velocityGradientTensor.uniaxial(d,q) {% endhighlight %} {% highlight matlab %} % uniaxial compression -L = velocityGradientTensor.uniaxial(d,-r) +L = -velocityGradientTensor.uniaxial(d,q) {% endhighlight %}

Input

@@ -32,6 +32,14 @@

Input

tension direction vector3d +

+ + + @@ -507,38 +646,15 @@ their talks as accessible as possible. - - - - - - - - - - - - - - - - - + - + + +
+ q + + [0 .. 1] non axial symmetric portion (0.5 is symmetric and default) +
r diff --git a/pages/function_reference_matlab/velocityGradientTensor.velocityGradientTensor.html b/pages/function_reference_matlab/velocityGradientTensor.velocityGradientTensor.html index fa8b16419..537a7b378 100644 --- a/pages/function_reference_matlab/velocityGradientTensor.velocityGradientTensor.html +++ b/pages/function_reference_matlab/velocityGradientTensor.velocityGradientTensor.html @@ -12,7 +12,7 @@ This HTML was auto-generated from MATLAB code. To make changes, update the MATLAB code and republish this document. -->velocityGradientTensor - edit page

since solids are no compressible the all velovity gradient tensors have traec 0

Syntax

+ edit page

since solids are no compressible the all velocity gradient tensors have trace 0

Syntax

{% highlight matlab %} L = velocityGradientTensor(varargin) {% endhighlight %} diff --git a/pages/publications/publications.md b/pages/publications/publications.md index e53830da3..ff3008565 100644 --- a/pages/publications/publications.md +++ b/pages/publications/publications.md @@ -10,6 +10,25 @@ toc: false If you are using MTEX for your research, please cite one of the following paper that best fits your application. +#### 2023 + +
+
+ {% include reference.html link="https://www.sciencedirect.com/science/article/pii/S135964542300366X/pdfft?md5=cd5b4d579996e89cf4ba96bdee90fad4&pid=1-s2.0-S135964542300366X-main.pdf" + content="Habit plane determination from reconstructed parent phase + orientation maps" %} +
+
+ R. Hielscher, T. Nyyssönen, F. Niessen, A. A. Gazder +
+
+ {% include reference.html link="https://doi.org/10.1016/j.actamat.2023.119035" content="Acta Materialia 23" %} + {% include reference.html link="https://github.com/mtex-toolbox/mtex-paper/tree/master/habitPlane" content='mtex scripts ' no_icon=true %} +
+
+
+ + ### 2022
@@ -33,7 +52,10 @@ If you are using MTEX for your research, please cite one of the following paper
{% include reference.html link="https://doi.org/10.1107/S1600576721011560" content="J. Appl. Cryst. 55" %} - {% include reference.html link="https://github.com/mtex-toolbox/mtex-paper/tree/master/ParentGrainReconstruction" content='mtex scripts ' no_icon=true %} + {% include reference.html + link="https://github.com/mtex-toolbox/mtex-paper/tree/master/ParentGrainReconstruction" + content='mtex scripts ' no_icon=true + %}
diff --git a/pages/workshops/workshop24.md b/pages/workshops/workshop24.md index fb7de9fb6..e386cf7d3 100644 --- a/pages/workshops/workshop24.md +++ b/pages/workshops/workshop24.md @@ -7,17 +7,16 @@ folder: workshops toc: false --- -The workshop extends over two weeks and is part of the master course {% include reference.html link="" content="Introduction into crystallographic texture analysis" %} and counts for **5 ECTS** points. While the first week is mainly devoted to beginners in MTEX and/or texture analysis, the second week is a meeting of MTEX users with different experiences to share specific use cases, tips and tricks and discuss recent and upcoming developments in MTEX. A special focus will be the new features of **MTEX 5.11** which includes pseudo 3d functionality for EBSD and grains and multiple spatial reference systems. +The workshop extends over two weeks and is part of the master course {% include reference.html link="" content="Introduction into crystallographic texture analysis" %} and counts for **5 ECTS** points. While the first week is mainly devoted to beginners in MTEX and/or texture analysis, the second week is a meeting of MTEX users with different experiences to share specific use cases, tips and tricks and discuss recent and upcoming developments in MTEX. A special focus will be the new features of **MTEX 6.0** which includes pseudo 3d functionality for EBSD and grains and multiple spatial reference systems. - ## Week 1: Learning Crystallographic Texture Analysis with MTEX @@ -41,14 +40,30 @@ practical examples during the exercises within MTEX.
- - +**Lecture 0 - General Concepts:** +{% include reference.html link="https://videocampus.sachsen.de/m/24eab5953e110fa2eae768bd31eb70d0877d914d403d14f25f5aec82d082bf2186b107e2797207d5f29883543711d151840d694f65eb99b7b2ea687318f2b212" content="video" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/6Crd5PszNDw27qt" content="slides" class="course_material" %} +
+Matlab basics and general concepts of MTEX, the class vector3d, spherical coordinates +
+
**Lecture 1 - EBSD** +{% include reference.html link="https://tuc.cloud/index.php/s/iPjkbYm6NPJ3PMw" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/z0-rB87H0hU" content="video" class="course_material" %}
data import, reference frame alignment, pole figures, inverse pole figures, color keys

**Exercise 1** +{% include reference.html link="https://tuc.cloud/index.php/s/n5M9Zo4znsmkqc4" content="script" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/EaeoJmKmKpEYW2k" content="solution" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/SDmcYG9WKt2cfgk" content="data" class="course_material" %} +, +{% include reference.html link="https://youtu.be/5YicKTTnMb8" content="video" class="course_material" %}

@@ -57,6 +72,9 @@ data import, reference frame alignment, pole figures, inverse pole figures, colo

**Lecture 2 - Orientations and Symmetries** +{% include reference.html link="https://tuc.cloud/index.php/s/fD9eeGfkbexq7dF" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/IWUmCYyPwjw" content="video" class="course_material" %}
crystal lattice, direct and reciprocal coordinate system, Miller indices, zonal axes, crystal shapes, point groups, Laue groups, symmetrically equivalent orientations, @@ -64,6 +82,11 @@ pole figures, inverse pole figures, fundamental sectors

**Exercise 2** +{% include reference.html link="https://tuc.cloud/index.php/s/eReketmMitkonEk" content="script" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/gMqZ5WaP6goJbwE" content="solution" class="course_material" %} +, +{% include reference.html link="https://youtu.be/OOioaXczRB8" content="video" class="course_material" %}

@@ -84,17 +107,35 @@ pole figures, inverse pole figures, fundamental sectors
**Lecture 3 - Grains** +{% include reference.html link="https://tuc.cloud/index.php/s/aa2mYtoJJgWmp4T" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/dGDIvgtNVLs" content="video" class="course_material" %}
segmentation, shape properties, orientation properties, grain selection, grain statistics

**Exercise 3** +{% include reference.html link="https://tuc.cloud/index.php/s/kf843BAHMmesxNR" content="script" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/yBBRi424yNeJyTo" content="solution" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/sEmxMoNwgkHFm6x" content="data" class="course_material" %} +, +{% include reference.html link="https://youtu.be/IFZvJRXShfs" content="video" class="course_material" %}

*Lunch*

**Lecture 4 - Misorientations and Grain Boundaries** +{% include reference.html link="https://tuc.cloud/index.php/s/5b6BzdeKWxpxMtz" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/EzHhguqBEEY" content="video" +class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/W6NfHa47AdgrZbo" content="slides" class="course_material" %} + +
grain boundary misorientations, misorientation axis, misorientation angle, KAM, GOS, IGMA, twin boundaries, tilt vs. twist @@ -102,6 +143,19 @@ boundaries, orientation, gradients, statistics of boundary networks

**Exercise 4** +{% include reference.html link="https://tuc.cloud/index.php/s/ZP2sgbbwazfNbt2" content="script 1" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/q4aZg9DMbszfQfw" content="solution 1" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/oDzZkKX5gpnNkp2" content="data 1" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/mmjtowWaJaXm954" content="script 2" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/snsB34bzcfST4jT" content="solution 2" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/WnMrd2j8Q7eit8Y" content="data 2" class="course_material" %} +, +{% include reference.html link="https://youtu.be/kkS_lyxaHnY" content="video" class="course_material" %}

@@ -122,7 +176,18 @@ boundaries, orientation, gradients, statistics of boundary networks
+**Excursion: Freiberg Silver Mine** +
+
+*Lunch* +
+
**Lecture 5 - Density Functions** +{% include reference.html link="https://tuc.cloud/index.php/s/swK8XdBLJz6PRTj" content="slides" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/dJe8mk3s4mEA7qY" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/jcfql9v3Hg4" content="video" class="course_material" %}
kernel density estimation, orientation density function, pole density function, inverse pole density function, model ODFs, ODF characteristics, @@ -130,12 +195,11 @@ random sampling, ODF reconstuction from XRD data

**Exercise 5** -
-
-*Lunch* -
-
-**Excursion: Freiberg Silver Mine** +{% include reference.html link="https://tuc.cloud/index.php/s/ppcHoH5My2w7oaN" content="script" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/kKtbw8dYAX5o3GW" content="solution" class="course_material" %} +, +{% include reference.html link="https://youtu.be/XX9SOSSoRZE" content="video" class="course_material" %}
@@ -152,27 +216,58 @@ random sampling, ODF reconstuction from XRD data
-**Lecture 6 - Tensorial Properties** +**Lecture 6 - EBSD Denoising and Alignment of the Reference Frame** +{% include reference.html link="https://tuc.cloud/index.php/s/7EBQnHnHoFpaPsz" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/bj4usH9odro" content="video" class="course_material" %} +, +{% include reference.html link="https://youtu.be/hJX61Kso4oU" content="video" class="course_material" %} +
-tensor arithmetic, visualization, effect of symmetry, thermal expansion, stress and strain -tensors, piezoelectricity, elasticity, wave velocities +

-**Exercise 6 - From Single Grain to Bulk Tensors** +**Exercise 6 - Grain Boundaries and Misorientations** +{% include reference.html link="https://tuc.cloud/index.php/s/ZP2sgbbwazfNbt2" content="script 1" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/q4aZg9DMbszfQfw" content="solution 1" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/SCrbAcjfifPsMw8" content="data 1" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/mmjtowWaJaXm954" content="script 2" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/snsB34bzcfST4jT" content="solution 2" class="course_material" %} +, +{% include reference.html link="https://tuc.cloud/index.php/s/S8sRxTHkoPane3r" +content="data 2" class="course_material" %} +, +{% include reference.html link="https://youtu.be/pivZ99mTfdU" content="video" class="course_material" %} +
-average tensors (Voigt, Reuss, Hill) from EBSD and ODF +

*Lunch*

-**Lecture 7 - Plastic Deformation** +**Lecture 7 - Tensorial Properties** +{% include reference.html link="https://tuc.cloud/index.php/s/ZzpaxQkBRobxrEQ" content="slides" class="course_material" %} +, +{% include reference.html link="https://youtu.be/GlfF06iBkK4" content="video" class="course_material" %} +
+tensor arithmetic, visualization, effect of symmetry, thermal expansion, stress and strain +tensors, piezoelectricity, elasticity, wave velocities +
+
-deformation tensors, slip systems, dislocation systems, Schmid Factor, Taylor factor, -combining MTEX with external software like VPSC, Damask
+**Exercise 7 - From Single Grain to Bulk Tensors** +{% include reference.html link="https://tuc.cloud/index.php/s/gsz2bQ8EeGtgEsz" content="script" class="course_material" %} +, +{% include reference.html link="https://youtu.be/Hrki-s_BWkI" content="video" class="course_material" %}
-**Exercise 7** +average tensors (Voigt, Reuss, Hill) from EBSD and ODF
@@ -188,22 +283,35 @@ combining MTEX with external software like VPSC, Damask
-**Lecture 8 - Orientation Relationships** +**Lecture 8 - EBSD reference systems** +{% include reference.html link="https://tuc.cloud/index.php/s/WcTogYqnGxTZLZa" content="script" class="course_material" %} +, +{% include reference.html link="https://youtu.be/KsEWxLy_NIw" content="video" class="course_material" %}
-determination of orientation relationships, phase transition, parent grain reconstruction, transformation -textures, variant selection +how to set up your EBSD system for MTEX

-**Exercise 8** +**Lecture 9 - Plasticity** +{% include reference.html link="https://tuc.cloud/index.php/s/HaYGieXjWZJ9Q2C" content="script" class="course_material" %} +, +{% include reference.html link="https://youtu.be/W4T6c_mbM2A" content="video" class="course_material" %} +
+deformation tensors, slip systems, dislocation systems, Schmid Factor, Taylor factor, +combining MTEX with external software like VPSC

*lunch*

-**Lecture 9 - Specific Topics of Interest** +**Lecture 10 - Parent Grain Reconstuction** +{% include reference.html link="https://tuc.cloud/index.php/s/s6A3n3L5iP6gAtt" content="script" class="course_material" %} +, +{% include reference.html link="https://youtu.be/GrG9P9yUkXM" content="video" class="course_material" %}
-Participants can vote for their topic of interest, e.g.: denoising of EBSD -maps, dislocation density estimation, weighted Burgers vector, habit planes determination, +determination of orientation relationships, phase transition, parent grain reconstruction, transformation +textures, variant selection +

**Free Discussion of Personal Data Sets** @@ -231,9 +339,36 @@ their talks as accessible as possible. ### Keynote Speakers - +- **{% include reference.html + link="https://www.researchgate.net/profile/Dorian-Depriester" content="Dorian + Depriester" %}** (Ecole Nationale Supérieure d'Arts et Métiers, Aix-en-Provence): + *Mechanical behaviour of polycrystals: from EBSD to numerical simulations* + +- **{% include reference.html + link="https://ufind.univie.ac.at/de/person.html?id=46817" content="Thomas + Griffiths" %}** (Universität Wien): Unravelling the evolution of partially molten silicate systems using + EBSD and MTEX + +- **{% include reference.html + link="https://mavt.ethz.ch/de/personen/person-detail.MzMyNDQz.TGlzdC81NTksLTE3MDY5NzgwMTc=.html" + content="Claire Griesbach" %}** (ETH Zürich): Rate-dependent + ferroelectric switching mechanisms in lead zirconium titanate elucidated by + spherically indexed EBSD patterns + +- **{% include reference.html + link="https://www.materials.ox.ac.uk/peoplepages/marquardt.html" + content="Katharina Marquardt" %}** (University of Oxford): Grain boundary complexion transition in Forsterite, an EBSD study + +- **{% include reference.html + link="https://www.nist.gov/people/alec-saville" + content="Alec Saville" %}** (National Institute of Standards and Technology, + USA): Connecting Microstructure, Processing, and Phase Transformations in Metals Via MTEX. + +- **{% include reference.html + link="https://www.researchgate.net/profile/Marco-Witte" content="Marco + Witte" %}** (Salzgitter Mannesmann): Steel: Production, Processing and MTEX + ## Time Schedule -
Lunch
13:30−14:30M. PetersmannUse cases of MTEX for semiconductor metalizations - {% include reference.html link="https://tuc.cloud/index.php/s/oNseZEq9kK3fQZp" content="slides" class="course_material" %} - , - {% include reference.html link="https://youtu.be/Z6GtC2upv-U" content="video" class="course_material" %} -
Coffee
14:45−15:15M. KühlbachFairmat - {% include reference.html link="https://tuc.cloud/index.php/s/SZ4Dbcr8dQiEWYk" content="slides" class="course_material" %} - , - {% include reference.html link="https://youtu.be/U2d82amrbFk" content="video" - class="course_material" %} -
15:15−16:15 Round Table Discussion
16:00−17:00ConsultationCoffee
{% endcapture %} @@ -547,7 +663,7 @@ their talks as accessible as possible.

@@ -559,7 +675,7 @@ their talks as accessible as possible.
@@ -571,7 +687,8 @@ their talks as accessible as possible.
@@ -581,7 +698,6 @@ their talks as accessible as possible.
---> ## Venue: @@ -612,13 +728,13 @@ their talks as accessible as possible. *please use the keycode "Professor Hielscher MTEX Workshop" when booking the rooms*

-{% include reference.html link="https://www.hotel-kreller.de" content="**Hotel Kreller:**" %} 79 Euro per night with breakfast, very close +{% include reference.html link="https://www.hotel-kreller.de" content="**Hotel Kreller:**" %} 80 Euro per night with breakfast, very close

{% include reference.html link="https://www.hotel-am-obermarkt.de" content="**Hotel am Obermarkt:**" %} 79 Euro per night without breakfast, very close

-{% include reference.html link="https://www.elly-hostel.de" content="**Elly Hostel:**" %} 68 Euro per night, with kitchen +{% include reference.html link="https://www.elly-hostel.de" content="**Elly Hostel:**" %} 77 Euro per night, with kitchen
@@ -627,14 +743,8 @@ their talks as accessible as possible. ## Registration: - +- Please register at {% include reference.html link="https://acatrain.net/events/freiberg-mtex-workshop-2024/" content="https://acatrain.net/events/freiberg-mtex-workshop-2024" %} + - Deadline for registration is 28th of February 2024 ## Registration Fee: - first + second week (presence): (PhD) students - 400 Euro, other - 600 Euro