Symmetry Variants
SymmetryVariants stores the crystallographic symmetry operators that relate different orientation variants of the same phase. For a symmetry-breaking transformation (e.g. martensitic), each parent grain can produce several product-phase variants; SymmetryVariants reads the
The number of variants per phase comes from $Variants_<phase> in the @Settings block.
Key Classes and Concepts
SymmetryVariants : public OPObject: indexed storageTransformationMatrices[phase][variant]with onedMatrix3x3per (phase, variant) pair.
Usage
Input
Defined in the @SymmetryVariants block. One 3×3 matrix is required per (phase, variant) pair. If a matrix is omitted, the default is the unit tensor (i.e. "no rotation — identical to the parent").
@SymmetryVariants
# Phase 0, 3 variants — rotations in degrees around Z {#phase-0-3-variants-rotations-in-degrees-around-z}
$V_0_0 Variant 0 of phase 0 : ((1 0 0)(0 1 0)(0 0 1))
$V_0_1 Variant 1 of phase 0 : ((-0.5 0.866 0)(-0.866 -0.5 0)(0 0 1))
$V_0_2 Variant 2 of phase 0 : ((-0.5 -0.866 0)( 0.866 -0.5 0)(0 0 1))| Token | Variable | Type | Default |
|---|---|---|---|
$V_<phase>_<variant> | TransformationMatrices[phase][variant] | dMatrix3x3 | unit tensor |
The number of variants per phase is declared in @Settings via $Variants_<phase> (zero-based index).
Output
No dedicated output file.
Example
#include "SymmetryVariants.h"
SymmetryVariants SV(OPSettings, InputFile);
// Used by nucleation (see Nucleation.md) when a new grain is planted:
// the variant selector uses SV.TransformationMatrices[phase][variant].Dependencies
- Settings — declares
$Variants_<phase>. - Crystallography — symmetry family context.
- Nucleation — consumes the variant list when planting new grains.
- Orientations — applies variant rotations.