CASM  1.1.0
A Clusters Approach to Statistical Mechanics
CASM::SymCompare< Base > Class Template Reference

#include <SymCompare.hh>

+ Inheritance diagram for CASM::SymCompare< Base >:

Detailed Description

template<typename Base>
class CASM::SymCompare< Base >

CRTP base class for implementing element and orbit comparison.

Derived needs to implement the following private methods:

  • Element Derived::spatial_prepare_impl(const Element &A) const
    • position/orient Element in a canonical way for comparison (i.e., translate cluster so first site is at [0,0,0] cell)
  • SymOp const &Derived::spatial_transform_impl() const;
    • Access spatial transform that was used during most recent spatial preparation of an element
  • Element Derived::representation_prepare_impl(const Element &A) const
    • construct one canonical representation of Element amongst all equivalent representations (i.e. sort sites of a cluster), used for comparison
  • std::unique_ptr<SymOpRepresentation> Derived::canonical_transform_impl(Element const &obj) const
    • access transform that took cluster from unprepared to prepared state
  • bool Derived::compare_impl(const Element &A, const Element &B) const
    • used to identify unique equivalents
  • InvariantsType Derived::make_invariants_impl(const Element &obj) const
    • construct invariants object for this type of symmetry
  • bool Derived::invariants_compare_impl(const Element &A, const Element &B) const
    • first order comparison of orbits
    • speeds up identifying orbits that might contain an element
  • void Derived::copy_apply_impl(SymOp const &op, Element obj) const
    • defines application of SymOp to object of type Element
    • allows flexibility for working outside the typical MasterSymGroup/SymGroupRep framework or when symmetry application is ambiguous (like applying symmetry to a Eigen::VectorXd)

Derived may optionally implement:

  • bool Derived::inter_orbit_compare_impl const
    • default uses this->invariants_compare and this->compare

Definition at line 52 of file SymCompare.hh.

Public Types

using MostDerived = typename Base::MostDerived
 
using Element = typename traits< MostDerived >::Element
 
using InvariantsType = typename traits< MostDerived >::InvariantsType
 type InvariantsType is used to screen elements for equivalence and sort orbits More...
 

Public Member Functions

Element copy_apply (SymOp const &op, Element obj) const
 Applies SymOp to Element. More...
 
Element spatial_prepare (Element obj) const
 Prepare an element for comparison via an isometric affine transformation. More...
 
Element representation_prepare (Element obj) const
 Prepare an element for comparison via transformation of its internal representation. More...
 
Element prepare (Element obj) const
 Prepare an element for comparison via representation_prepare(), followed by spatial_prepare() More...
 
bool compare (const Element &A, const Element &B) const
 Orders 'prepared' elements. More...
 
bool equal (const Element &A, const Element &B) const
 Check equivalence of 'prepared' elements. More...
 
InvariantsType make_invariants (const Element &element) const
 Make orbit invariants from one element in the orbit. More...
 
bool invariants_compare (const InvariantsType &A, const InvariantsType &B) const
 Defines an order for orbits that have different invariants. More...
 
bool invariants_equal (const InvariantsType &A, const InvariantsType &B) const
 Check equivalence of invariants. More...
 
bool inter_orbit_compare (const Element &A, const InvariantsType &A_invariants, const Element &B, const InvariantsType &B_invariants) const
 Orders orbit prototypes, breaking invariants_compare ties. More...
 
bool inter_orbit_equal (const Element &A, const InvariantsType &A_invariants, const Element &B, const InvariantsType &B_invariants) const
 Check equivalence of prototypes in different orbit. More...
 
std::unique_ptr< SymOpRepresentationcanonical_transform (Element const &obj) const
 Access transform that took cluster from unprepared to prepared state. More...
 
SymOp const & spatial_transform () const
 Access spatial transform that was used during most recent spatial preparation of an element. More...
 

Protected Member Functions

bool inter_orbit_compare_impl (const Element &A, const InvariantsType &A_invariants, const Element &B, const InvariantsType &B_invariants) const
 Orders orbit prototypes, breaking invariants_compare ties. More...
 

Member Typedef Documentation

◆ Element

template<typename Base >
using CASM::SymCompare< Base >::Element = typename traits<MostDerived>::Element

Definition at line 57 of file SymCompare.hh.

◆ InvariantsType

template<typename Base >
using CASM::SymCompare< Base >::InvariantsType = typename traits<MostDerived>::InvariantsType

type InvariantsType is used to screen elements for equivalence and sort orbits

Definition at line 82 of file SymCompare.hh.

◆ MostDerived

template<typename Base >
using CASM::SymCompare< Base >::MostDerived = typename Base::MostDerived

Definition at line 54 of file SymCompare.hh.

Member Function Documentation

◆ canonical_transform()

template<typename Base >
std::unique_ptr< SymOpRepresentation > CASM::SymCompare< Base >::canonical_transform ( Element const &  obj) const

Access transform that took cluster from unprepared to prepared state.

Definition at line 244 of file SymCompare.hh.

◆ compare()

template<typename Base >
bool CASM::SymCompare< Base >::compare ( const Element A,
const Element B 
) const

Orders 'prepared' elements.

  • Returns 'true' to indicate A < B
  • Assumes elements are 'prepared' before being compared

Definition at line 173 of file SymCompare.hh.

◆ copy_apply()

template<typename Base >
SymCompare< Base >::Element CASM::SymCompare< Base >::copy_apply ( SymOp const &  op,
Element  obj 
) const

Applies SymOp to Element.

Applies SymOp to Element. Default performs standalone copy_apply.

Definition at line 123 of file SymCompare.hh.

◆ equal()

template<typename Base >
bool CASM::SymCompare< Base >::equal ( const Element A,
const Element B 
) const

Check equivalence of 'prepared' elements.

Returns
!compare(A,B) && !compare(B,A)
bool compare(const Element &A, const Element &B) const
Orders 'prepared' elements.
Definition: SymCompare.hh:173
  • Assumes elements are 'prepared' before being compared

Definition at line 183 of file SymCompare.hh.

◆ inter_orbit_compare()

template<typename Base >
bool CASM::SymCompare< Base >::inter_orbit_compare ( const Element A,
const InvariantsType A_invariants,
const Element B,
const InvariantsType B_invariants 
) const

Orders orbit prototypes, breaking invariants_compare ties.

Definition at line 222 of file SymCompare.hh.

◆ inter_orbit_compare_impl()

template<typename Base >
bool CASM::SymCompare< Base >::inter_orbit_compare_impl ( const Element A,
const InvariantsType A_invariants,
const Element B,
const InvariantsType B_invariants 
) const
protected

Orders orbit prototypes, breaking invariants_compare ties.

  • Returns 'true' to indicate A < B
  • Equivalence is indicated by
    !compare(A,B) && !compare(B,A)

Implementation:

  • First, check invariants_compare
  • Break ties with, compare(A, B)

Definition at line 265 of file SymCompare.hh.

◆ inter_orbit_equal()

template<typename Base >
bool CASM::SymCompare< Base >::inter_orbit_equal ( const Element A,
const InvariantsType A_invariants,
const Element B,
const InvariantsType B_invariants 
) const

Check equivalence of prototypes in different orbit.

Returns
  • Assumes elements are in canonical form

Definition at line 235 of file SymCompare.hh.

◆ invariants_compare()

template<typename Base >
bool CASM::SymCompare< Base >::invariants_compare ( const InvariantsType A,
const InvariantsType B 
) const

Defines an order for orbits that have different invariants.

Defines an order for elements that have different invariants.

Definition at line 201 of file SymCompare.hh.

◆ invariants_equal()

template<typename Base >
bool CASM::SymCompare< Base >::invariants_equal ( const InvariantsType A,
const InvariantsType B 
) const

Check equivalence of invariants.

Returns

Definition at line 210 of file SymCompare.hh.

◆ make_invariants()

template<typename Base >
SymCompare< Base >::InvariantsType CASM::SymCompare< Base >::make_invariants ( const Element element) const

Make orbit invariants from one element in the orbit.

Get orbit invariants from one element in the orbit.

Definition at line 189 of file SymCompare.hh.

◆ prepare()

template<typename Base >
SymCompare< Base >::Element CASM::SymCompare< Base >::prepare ( Element  obj) const

Prepare an element for comparison via representation_prepare(), followed by spatial_prepare()

Definition at line 163 of file SymCompare.hh.

◆ representation_prepare()

template<typename Base >
SymCompare< Base >::Element CASM::SymCompare< Base >::representation_prepare ( Element  obj) const

Prepare an element for comparison via transformation of its internal representation.

  • For instance, sort sites of a cluster so comparison may be performed more efficiently

Definition at line 154 of file SymCompare.hh.

◆ spatial_prepare()

template<typename Base >
SymCompare< Base >::Element CASM::SymCompare< Base >::spatial_prepare ( Element  obj) const

Prepare an element for comparison via an isometric affine transformation.

  • For instance, translate a cluster so comparison may be performed more efficiently.
  • The transformation that is applied is stored and available as spatial_transform
  • The spatial_transform is also included in the symmetry operations stored in the Orbit equivalence_map (i.e. equivalence_map_element = spatial_transform * generating_group_op)
  • Returns pair such that pair.first = apply_sym(pair.second, obj)

Definition at line 142 of file SymCompare.hh.

◆ spatial_transform()

template<typename Base >
SymOp const & CASM::SymCompare< Base >::spatial_transform

Access spatial transform that was used during most recent spatial preparation of an element.

Definition at line 252 of file SymCompare.hh.


The documentation for this class was generated from the following files: