Public Member Functions | Private Types | Private Member Functions | Private Attributes | Static Private Attributes | List of all members
PLMD::Pbc Class Reference

#include <Pbc.h>

Public Member Functions

 Pbc ()
 Constructor. More...
 
void apply (std::vector< Vector > &dlist, unsigned max_index=0) const
 
void apply (VectorView dlist, unsigned max_index=0) const
 Apply PBC to a set of positions or distance vectors. More...
 
double distance (const bool pbc, const Vector &v1, const Vector &v2) const
 Compute modulo of (v2-v1), using or not pbc depending on bool pbc. More...
 
Vector distance (const Vector &, const Vector &, int *nshifts=nullptr) const
 Computes v2-v1, using minimal image convention if specified, also returns the number of attempted shifts. More...
 
void fullSearch (Vector &) const
 Full search (for testing). More...
 
const TensorgetBox () const
 Returns the box. More...
 
const TensorgetInvBox () const
 Returns the inverse matrix of box. More...
 
bool isOrthorombic () const
 Returns true if the box vectors are orthogonal. More...
 
bool isSet () const
 Returns true if box is set and non zero. More...
 
Vector realToScaled (const Vector &) const
 Transform a vector in real space to a vector in scaled coordinates. More...
 
Vector scaledToReal (const Vector &) const
 Transform a vector in scaled coordinates to a vector in real space. More...
 
void setBox (const Tensor &b)
 Set the lattice vectors. More...
 

Private Types

enum  { unset, orthorombic, generic }
 Type of box. More...
 

Private Member Functions

void buildShifts (gch::small_vector< Vector, maxshiftsize > shifts[2][2][2]) const
 Build list of shifts. More...
 

Private Attributes

Tensor box
 Box. More...
 
Vector diag
 Alternative representation for orthorombic cells. More...
 
Vector hdiag
 
Tensor invBox
 Inverse box. More...
 
Tensor invReduced
 Inverse of the reduced box. More...
 
Vector mdiag
 
Tensor reduced
 Reduced box. More...
 
gch::small_vector< Vector, maxshiftsizeshifts [2][2][2]
 List of shifts that should be attempted. More...
 
enum PLMD::Pbc:: { ... }  type
 Type of box. More...
 

Static Private Attributes

static constexpr unsigned maxshiftsize =6
 This is the maximum expected size for general boxes. More...
 

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
private

Type of box.

Enumerator
unset 
orthorombic 
generic 

Constructor & Destructor Documentation

◆ Pbc()

PLMD::Pbc::Pbc ( )

Constructor.

Member Function Documentation

◆ apply() [1/2]

void PLMD::Pbc::apply ( std::vector< Vector > &  dlist,
unsigned  max_index = 0 
) const

◆ apply() [2/2]

void PLMD::Pbc::apply ( VectorView  dlist,
unsigned  max_index = 0 
) const

Apply PBC to a set of positions or distance vectors.

◆ buildShifts()

void PLMD::Pbc::buildShifts ( gch::small_vector< Vector, maxshiftsize shifts[2][2][2]) const
private

Build list of shifts.

This is expensive, and must be called only when box is reset. It allows building a minimal set of shifts depending on the sign of the scaled coordinates representing a distance vector.

◆ distance() [1/2]

double PLMD::Pbc::distance ( const bool  pbc,
const Vector v1,
const Vector v2 
) const

Compute modulo of (v2-v1), using or not pbc depending on bool pbc.

◆ distance() [2/2]

Vector PLMD::Pbc::distance ( const Vector v1,
const Vector v2,
int *  nshifts = nullptr 
) const

Computes v2-v1, using minimal image convention if specified, also returns the number of attempted shifts.

◆ fullSearch()

void PLMD::Pbc::fullSearch ( Vector d) const

Full search (for testing).

Perform a full search on vector

◆ getBox()

const Tensor & PLMD::Pbc::getBox ( ) const

Returns the box.

◆ getInvBox()

const Tensor & PLMD::Pbc::getInvBox ( ) const

Returns the inverse matrix of box.

Thus: pbc.getInvBox() == inverse(pbc.getBox()).

◆ isOrthorombic()

bool PLMD::Pbc::isOrthorombic ( ) const

Returns true if the box vectors are orthogonal.

◆ isSet()

bool PLMD::Pbc::isSet ( ) const
inline

Returns true if box is set and non zero.

◆ realToScaled()

Vector PLMD::Pbc::realToScaled ( const Vector d) const

Transform a vector in real space to a vector in scaled coordinates.

Thus:pbc.realToScaled(v) == matmul(transpose(inverse(pbc.getBox(),v)));

◆ scaledToReal()

Vector PLMD::Pbc::scaledToReal ( const Vector d) const

Transform a vector in scaled coordinates to a vector in real space.

Thus:pbc.scaledToRead(v) == matmul(transpose(pbc.getBox()),v);

◆ setBox()

void PLMD::Pbc::setBox ( const Tensor b)

Set the lattice vectors.

b[i][j] is the j-th component of the i-th vector

Member Data Documentation

◆ box

Tensor PLMD::Pbc::box
private

Box.

◆ diag

Vector PLMD::Pbc::diag
private

Alternative representation for orthorombic cells.

Not really used, but could be used to optimize search in orthorombic cells.

◆ hdiag

Vector PLMD::Pbc::hdiag
private

◆ invBox

Tensor PLMD::Pbc::invBox
private

Inverse box.

◆ invReduced

Tensor PLMD::Pbc::invReduced
private

Inverse of the reduced box.

◆ maxshiftsize

constexpr unsigned PLMD::Pbc::maxshiftsize =6
staticconstexprprivate

This is the maximum expected size for general boxes.

I found this empirically by manually modifying regtest basic/rt-make-1 Since it uses randomly generated boxes it should be correct. In any case, this is just used as a hint for small_vector, which will then switch to heap allocations if more shifts are needed

◆ mdiag

Vector PLMD::Pbc::mdiag
private

◆ reduced

Tensor PLMD::Pbc::reduced
private

Reduced box.

This is a set of lattice vectors generating the same lattice but "minimally skewed". Useful to optimize image search.

◆ shifts

gch::small_vector<Vector,maxshiftsize> PLMD::Pbc::shifts[2][2][2]
private

List of shifts that should be attempted.

Depending on the sign of the scaled coordinates representing a distance vector, a different set of shifts must be tried.

◆ type

enum { ... } PLMD::Pbc::type

Type of box.


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