Lattice

Overview

The Lattice class provides slip system information, given the lattice vectors and symmetry group describing the crystal system. The class is intelligent enough to automatically generate the complete set of slip group direction and normal vectors given the direction and planes in Miller indices.

NEML divides slip systems into crystallographically identical groups, i.e. all systems generated by the combination of a particular slip direction and normal. The documentation uses the index g to indicate the slip group and the index i to indicate the particular slip system.

Subclasses

Lattice subclasses specialize the general form to particular types of crystal systems, eliminating the need for the user to explicitly provide the lattice vectors and symmetry group.

Parameters

Parameter

Object type

Description

Default

a1

neml::Vector

First lattice vector

No

a2

neml::Vector

Second lattice vector

No

a3

neml::Vector

Third lattice vector

No

symmetry

neml::SymmetryGroup

Crystal symmetry group

No

isystems

list_systems

Initial list of slip systems

{}

Class description

class Lattice

Subclassed by neml::CubicLattice, neml::GeneralLattice, neml::HCPLattice

Public Types

enum SlipType

Type: slip or twin.

Values:

enumerator Slip
enumerator Twin

Public Functions

Lattice(Vector a1, Vector a2, Vector a3, std::shared_ptr<SymmetryGroup> symmetry, list_systems isystems = {}, twin_systems tsystems = {})

Initialize with the three lattice vectors, the symmetry group and (optionally) a initial list of slip systems

inline const Vector &a1()

First lattice vector.

inline const Vector &a2()

Second lattice vector.

inline const Vector &a3()

Third lattice vector.

inline const Vector &b1()

First reciprocal vector.

inline const Vector &b2()

Second reciprocal vector.

inline const Vector &b3()

Third reciprocal vector.

inline const std::vector<std::vector<Vector>> &burgers_vectors()

Return the list of burgers vectors.

inline const std::vector<std::vector<Vector>> &slip_directions()

Return the list of normalized slip directions.

inline const std::vector<std::vector<Vector>> &slip_planes()

Return the list of normalized slip normals.

inline const std::vector<double> characteristic_shears()

Return the list of characteristic shears.

inline const std::vector<SlipType> &slip_types()

Return the list of slip system types.

virtual Vector miller2cart_direction(std::vector<int> m)

Convert Miller directions to cartesian vectors.

virtual Vector miller2cart_plane(std::vector<int> m)

Convert Miller planes to cartesian normal vectors.

std::vector<Vector> equivalent_vectors(Vector v)

Find all sets of equivalent vectors (+/- different)

std::vector<Vector> equivalent_vectors_bidirectional(Vector v)

Find all all sets of equivalent vectors (+/- the same)

virtual void add_slip_system(std::vector<int> d, std::vector<int> p)

Add a slip system given the Miller direction and plane.

virtual void add_twin_system(std::vector<int> eta1, std::vector<int> K1, std::vector<int> eta2, std::vector<int> K2)

Add a twin system given the twin direction and plane.

size_t ntotal() const

Number of total slip systems.

size_t ngroup() const

Number of groups of slip systems.

size_t nslip(size_t g) const

Number of slip systems in group g.

size_t flat(size_t g, size_t i) const

Flat index of slip group g, system i.

SlipType slip_type(size_t g, size_t i) const

Type of system: slip or twin.

double characteristic_shear(size_t g, size_t i) const

Characteristic shear (0 for slip systems)

Orientation reorientation(size_t g, size_t i) const

Twin reorientation operator (identity for slip systems)

double burgers(size_t g, size_t i) const

Norm of the Burgers vector for a particular system.

const Symmetric &M(size_t g, size_t i, const Orientation &Q)

Return the sym(d x n) tensor for group g, system i, rotated with Q.

const Skew &N(size_t g, size_t i, const Orientation &Q)

Return the skew(d x n) tensor for group g, system i, rotated with Q.

double shear(size_t g, size_t i, const Orientation &Q, const Symmetric &stress)

Calculate the resolved shear stress on group g, system i, rotated with Q given the stress

Symmetric d_shear(size_t g, size_t i, const Orientation &Q, const Symmetric &stress)

Calculate the derivative of the resolved shear stress on group g, system i, rotated with Q, given the stress

const std::shared_ptr<SymmetryGroup> symmetry()

Access the symmetry operations.

const std::vector<Vector> unique_planes() const

Return a list of Cartesian vectors giving the unique slip planes.

size_t nplanes() const

The number of unique slip planes.

size_t plane_index(size_t g, size_t i) const

Given a slip system return the index into the unique slip planes.

std::vector<std::pair<size_t, size_t>> plane_systems(size_t i) const

Given the unique slip plane index return the vector of (g,i) tuples.