download as script · edit page

A symmetric spherical function has the same scalar value at directions related by a point group. Inverse pole figures and directional properties of a single crystal are common examples. MTEX represents a harmonic function with this constraint as an S2FunHarmonic whose reference frame carries the point group.

Symmetry is the point group under which the data is invariant. It is attached to a reference frame rather than being a reference frame itself. Use a specimenFrame for directions in the specimen frame and a crystalFrame for directions in a crystal frame.

import numpy as np

from mtex import *

plottingConvention.default('y↑→x')

Attach and enforce a symmetry

Start with an ordinary harmonic spherical function. The asymmetric smiley makes the effect of symmetrisation easy to see.

sF = S2Fun.smiley()

Choose orthorhombic specimen symmetry. Passing sF.how2plot preserves the plotting convention of the function when the symmetry creates its reference frame.

ss = specimenFrame('222', sF.how2plot)

symmetrise attaches the symmetry and its frame, averages symmetry-related directions and so enforces the constraint.

sFs1 = symmetrise(sF, ss)

Plot the fundamental sector

A symmetric function is plotted only in a representative sector by default, as is usual for an inverse pole figure.

plot(sFs1)

This sector contains one representative from each set of directions related by 222 symmetry. Its boundaries therefore remove repeated information; they do not crop the definition of the function.

Inspect the full symmetrised function

Use complete when the repetitions themselves matter. The upper option restricts the view to the upper hemisphere.

plot(sFs1, complete=True, upper=True)

The smiley motif now occurs in positions related by the half-turns of 222 symmetry. All copies have identical values, although their positions and orientations on the projection differ.

Construct from a function

A Python function is convenient when values can be computed for every direction. It must accept a vector3d array and return one real scalar per direction. Here the directions belong to the crystal frame, so the requested point group is crystal symmetry 6/m.

valueFunction = lambda v: 0.1 * (v.theta + np.sin(8 * v.x) * np.sin(8 * v.y))
cs = crystalFrame('6/m')

quadrature computes the harmonic coefficients and enforces the supplied symmetry. The bandwidth option keeps spherical harmonic degrees through 16.

sFs2 = S2FunHarmonic.quadrature(valueFunction, cs, bandwidth=16)

contour(sFs2, lineWidth=2)
mtexColorMap('parula')

Only the fundamental sector of 6/m is drawn. The curved contour lines are the part of the scalar function that is not generated by symmetry; applying the point group reproduces them over the complete sphere.

The maths behind symmetrisation

For a point group \(G\), symmetrisation replaces a function \(f\) by the group average

\[f_G(\vec v)=\frac{1}{|G|}\sum_{g\in G}f(g\vec v).\]

Applying any group element merely permutes the terms in this sum. The result therefore satisfies \(f_G(g\vec v)=f_G(\vec v)\) for every \(g\) in \(G\). The harmonic implementation performs this averaging while keeping a compact coefficient representation.

References

  • H.-J. Bunge, Texture Analysis in Materials Science: Mathematical Methods, Butterworths, 1982, develops the crystal and specimen symmetry operations that reduce directional texture information to a representative region.

Next

Continue with Convolution to see how a function on the rotation group acts on a spherical function.

Technical Details

The port has no S2FunHarmonicSym: a frame carries its point group, so an S2FunHarmonic in a frame with symmetry is the symmetric function. MATLAB’s two steps, S2FunHarmonicSym(sF, ss) attaching the frame and symmetrise averaging, are the one call symmetrise(sF, ss), since a function whose frame claims a symmetry it does not have is not a state the port admits. MATLAB’s clf before a plot has no counterpart; every plot opens its own figure.

The sector of 222 holds a quarter of the sphere, the half \(y \ge 0\) of a hemisphere. In MATLAB symmetrise returns a plain S2FunHarmonic again, and its plot shows the octant \(x, y, z \ge 0\), half of that sector; the symmetrised smiley is not antipodal, so the octant does not show every value.

Citing this page. This page is part of the documentation of MTEX, a free and open source MATLAB toolbox for analyzing and modeling crystallographic textures. It was written by The MTEX Developers and is published at https://mtex-toolbox.github.io/S2FunSym_py.html. If you use MTEX, or reuse text or figures from this page, in your research, please cite

F. Bachmann, R. Hielscher, H. Schaeben: Texture Analysis with MTEX - Free and Open Source Software Toolbox, Solid State Phenomena 160 (2010), 63-68. 10.4028/www.scientific.net/SSP.160.63

BibTeX
@article{bachmann2010mtex,
  author  = {F. Bachmann and R. Hielscher and H. Schaeben},
  title   = {Texture Analysis with MTEX - Free and Open Source Software Toolbox},
  journal = {Solid State Phenomena},
  volume  = {160},
  pages   = {63-68},
  year    = {2010},
  doi     = {10.4028/www.scientific.net/SSP.160.63},
  url     = {https://doi.org/10.4028/www.scientific.net/SSP.160.63}
}

Other papers describing specific MTEX methods are listed under Publications — please cite the one that best fits your application. The MTEX source code is licensed under the GNU General Public License v2.0; the text and figures of this documentation are licensed under CC BY 4.0, which permits reuse — including by automated systems — provided The MTEX Developers and this page are credited.