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

Axis-aligned periodic metric parameterised by a compile-time axis bitmask. 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 OrthorhombicMetric ()=default
constexpr OrthorhombicMetric (const OurVector3 &cell_widths)
 Construct from cell widths.
void set_cell_widths (const OurVector3 &cell_widths)

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
 Minimum-image displacement vector from p1 to p2.
template<ValidPointType PointT>
constexpr OurPoint wrap (const PointT &p) const
constexpr OurMatrix3 direct_lattice_vectors () const
 Lattice vectors as columns of a diagonal matrix. Non-periodic entries appear as 1 by convention.
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::OrthorhombicMetric< PeriodicAxes, Scalar >
Template Parameters
PeriodicAxesBitmask of periodic axes. Combine AXIS_X (0b001), AXIS_Y (0b010), AXIS_Z (0b100) with | for multi-axis periodicity.
ScalarFloating-point scalar type.

Cell widths for non-periodic axes are set to 1 internally and never participate in wrapping or distance calculations. All branching on PeriodicAxes is resolved at compile time via if constexpr, so unused axes impose zero runtime cost.

Member Typedef Documentation

◆ value_type

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

◆ OurVector3

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

◆ OurMatrix3

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

◆ OurPoint

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

Constructor & Destructor Documentation

◆ OrthorhombicMetric() [1/2]

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

◆ OrthorhombicMetric() [2/2]

template<unsigned PeriodicAxes, typename Scalar>
mundy::OrthorhombicMetric< PeriodicAxes, Scalar >::OrthorhombicMetric ( const OurVector3 & cell_widths)
inlineexplicitconstexpr

cell_widths entries for non-periodic axes are ignored (those axes are treated as having width 1). Only the widths of periodic axes must be positive.

Member Function Documentation

◆ set_cell_widths()

template<unsigned PeriodicAxes, typename Scalar>
void mundy::OrthorhombicMetric< PeriodicAxes, Scalar >::set_cell_widths ( const OurVector3 & cell_widths)
inline

◆ is_periodic() [1/2]

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

◆ is_periodic() [2/2]

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

◆ num_periodic_dimensions()

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

◆ to_fractional()

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

◆ from_fractional()

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

◆ frac_minimum_image()

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

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

◆ frac_wrap_to_unit_cell()

template<unsigned PeriodicAxes, typename Scalar>
template<ValidVector3Type Vector3T>
OurVector3 mundy::OrthorhombicMetric< 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::OrthorhombicMetric< PeriodicAxes, Scalar >::sep ( const PointT1 & p1,
const PointT2 & p2 ) const
inlineconstexpr

◆ wrap()

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

◆ direct_lattice_vectors()

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

◆ shift_image()

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