Mundy: Multibody Nonlocal Dynamics Version of the Day
Loading...
Searching...
No Matches
mundy::TriclinicMetric< PeriodicAxes, Scalar > Class Template Reference

General periodic metric for a tilted unit cell. More...

#include <periodicity.hpp>

Public Types

Type aliases
using value_type = Scalar
using OurVector3 = Vector3<Scalar>
using OurMatrix3 = Matrix3<Scalar>
using OurPoint = Point<Scalar>

Public Member Functions

Constructors
constexpr TriclinicMetric ()=default
constexpr TriclinicMetric (const OurMatrix3 &h)
void set_cell_matrix (const OurMatrix3 &h)

Metric operations

template<ValidPointType PointT>
constexpr OurPoint to_fractional (const PointT &p) const
template<ValidPointType PointT>
constexpr OurPoint from_fractional (const PointT &frac) const
template<ValidVector3Type Vector3T>
constexpr OurVector3 frac_minimum_image (const Vector3T &fv) const
 Minimum-image displacement in fractional coordinates.
template<ValidVector3Type Vector3T>
constexpr OurVector3 frac_wrap_to_unit_cell (const Vector3T &fv) const
template<ValidPointType PointT1, ValidPointType PointT2>
constexpr OurVector3 sep (const PointT1 &p1, const PointT2 &p2) const
template<ValidPointType PointT>
constexpr OurPoint wrap (const PointT &p) const
constexpr OurMatrix3 direct_lattice_vectors () const
template<ValidPointType PointT, typename Integer>
constexpr OurPoint shift_image (const PointT &p, const Vector3< Integer > &n) const

Periodicity queries

constexpr bool is_periodic (unsigned dim) const
constexpr unsigned num_periodic_dimensions () const
template<unsigned dim>
static constexpr bool is_periodic ()

Detailed Description

template<unsigned PeriodicAxes, typename Scalar>
class mundy::TriclinicMetric< PeriodicAxes, Scalar >
Template Parameters
PeriodicAxesBitmask of periodic lattice-vector directions. Combine AXIS_X (0b001), AXIS_Y (0b010), AXIS_Z (0b100) with | for multi-axis periodicity. AXIS_X/Y/Z refer to the first, second, and third lattice vector directions (fractional axes), not Cartesian x/y/z.
ScalarFloating-point scalar type.

The cell is described by a 3x3 matrix h whose columns are the lattice vectors. For axis-aligned cells prefer OrthorhombicMetric: it avoids the matrix multiplications in to_fractional and from_fractional.

Member Typedef Documentation

◆ value_type

template<unsigned PeriodicAxes, typename Scalar>
using mundy::TriclinicMetric< PeriodicAxes, Scalar >::value_type = Scalar

◆ OurVector3

template<unsigned PeriodicAxes, typename Scalar>
using mundy::TriclinicMetric< PeriodicAxes, Scalar >::OurVector3 = Vector3<Scalar>

◆ OurMatrix3

template<unsigned PeriodicAxes, typename Scalar>
using mundy::TriclinicMetric< PeriodicAxes, Scalar >::OurMatrix3 = Matrix3<Scalar>

◆ OurPoint

template<unsigned PeriodicAxes, typename Scalar>
using mundy::TriclinicMetric< PeriodicAxes, Scalar >::OurPoint = Point<Scalar>

Constructor & Destructor Documentation

◆ TriclinicMetric() [1/2]

template<unsigned PeriodicAxes, typename Scalar>
mundy::TriclinicMetric< PeriodicAxes, Scalar >::TriclinicMetric ( )
constexprdefault

◆ TriclinicMetric() [2/2]

template<unsigned PeriodicAxes, typename Scalar>
mundy::TriclinicMetric< PeriodicAxes, Scalar >::TriclinicMetric ( const OurMatrix3 & h)
inlineexplicitconstexpr

Member Function Documentation

◆ set_cell_matrix()

template<unsigned PeriodicAxes, typename Scalar>
void mundy::TriclinicMetric< PeriodicAxes, Scalar >::set_cell_matrix ( const OurMatrix3 & h)
inline

◆ is_periodic() [1/2]

template<unsigned PeriodicAxes, typename Scalar>
template<unsigned dim>
constexpr bool mundy::TriclinicMetric< PeriodicAxes, Scalar >::is_periodic ( )
inlinestaticconstexpr

◆ is_periodic() [2/2]

template<unsigned PeriodicAxes, typename Scalar>
bool mundy::TriclinicMetric< PeriodicAxes, Scalar >::is_periodic ( unsigned dim) const
inlineconstexpr

◆ num_periodic_dimensions()

template<unsigned PeriodicAxes, typename Scalar>
unsigned mundy::TriclinicMetric< PeriodicAxes, Scalar >::num_periodic_dimensions ( ) const
inlineconstexpr

◆ to_fractional()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidPointType PointT>
OurPoint mundy::TriclinicMetric< PeriodicAxes, Scalar >::to_fractional ( const PointT & p) const
inlineconstexpr

◆ from_fractional()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidPointType PointT>
OurPoint mundy::TriclinicMetric< PeriodicAxes, Scalar >::from_fractional ( const PointT & frac) const
inlineconstexpr

◆ frac_minimum_image()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidVector3Type Vector3T>
OurVector3 mundy::TriclinicMetric< PeriodicAxes, Scalar >::frac_minimum_image ( const Vector3T & fv) const
inlineconstexpr

Maps each periodic fractional component to [-0.5, 0.5) by subtracting round(). Non-periodic fractional components are passed through unchanged.

◆ frac_wrap_to_unit_cell()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidVector3Type Vector3T>
OurVector3 mundy::TriclinicMetric< PeriodicAxes, Scalar >::frac_wrap_to_unit_cell ( const Vector3T & fv) const
inlineconstexpr

◆ sep()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidPointType PointT1, ValidPointType PointT2>
OurVector3 mundy::TriclinicMetric< PeriodicAxes, Scalar >::sep ( const PointT1 & p1,
const PointT2 & p2 ) const
inlineconstexpr

◆ wrap()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidPointType PointT>
OurPoint mundy::TriclinicMetric< PeriodicAxes, Scalar >::wrap ( const PointT & p) const
inlineconstexpr

◆ direct_lattice_vectors()

template<unsigned PeriodicAxes, typename Scalar>
OurMatrix3 mundy::TriclinicMetric< PeriodicAxes, Scalar >::direct_lattice_vectors ( ) const
inlineconstexpr

◆ shift_image()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidPointType PointT, typename Integer>
OurPoint mundy::TriclinicMetric< PeriodicAxes, Scalar >::shift_image ( const PointT & p,
const Vector3< Integer > & n ) const
inlineconstexpr