1 #ifndef SIMP_ORTHORHOMBIC_BOUNDARY_H 2 #define SIMP_ORTHORHOMBIC_BOUNDARY_H 11 #include "OrthoRegion.h" 12 #include <util/crystal/LatticeSystem.h> 13 #include <util/containers/FSArray.h> 14 #include <util/space/Vector.h> 15 #include <util/space/IntVector.h> 16 #include <util/space/Dimension.h> 22 class OrthorhombicBoundaryTest;
80 template <
class Archive>
81 void serialize(Archive& ar,
const unsigned int version);
280 double length(
int i)
const;
353 friend class ::OrthorhombicBoundaryTest;
356 friend std::istream&
operator >> (std::istream& in,
360 friend std::ostream&
operator << (std::ostream& out,
409 {
return minLength_; }
421 {
return bravaisBasisVectors_[i]; }
427 {
return reciprocalBasisVectors_[i]; }
568 dr[i] = r1[i] - r2[i];
578 return ( dr[0]*dr[0] + dr[1]*dr[1] + dr[2]*dr[2] );
595 Rg[i] = Rc[i] * invLengths_[i];
618 if (fabs(dr[i]) > 0.5) {
644 template <
class Archive>
void 648 ar & bravaisBasisVectors_;
649 ar & reciprocalBasisVectors_;
653 if (Archive::is_loading()) {
662 #include <util/mpi/MpiTraits.h> 667 using namespace Simp;
673 void send<Simp::OrthorhombicBoundary>(MPI::Comm& comm,
680 void recv<Simp::OrthorhombicBoundary>(MPI::Comm& comm,
687 void bcast<Simp::OrthorhombicBoundary>(MPI::Intracomm& comm,
702 #endif // ifdef UTIL_MPI 704 #endif // ifndef UTIL_ORTHORHOMBIC_BOUNDARY_H const int Dimension
Dimensionality of space.
void shiftGen(Vector &r) const
Shift generalized Vector r to its primary image.
A Vector is a Cartesian vector.
void setTetragonal(double a, double bc)
Set unit cell dimensions for tetragonal boundary.
bool isMinImageGen(const Vector &dr)
Is a generalized separation vector a minimimum image of itself?
double distanceSq(const Vector &r1, const Vector &r2) const
Return square distance between positions r1 and r2.
void serialize(Archive &ar, const unsigned int version)
Serialize to/from an archive.
double volume() const
Return unit cell volume.
void randomPosition(Random &random, Vector &r) const
Generate random position within the primary unit cell.
void setOrthorhombic(const Vector &lengths)
Set unit cell dimensions for orthorhombic boundary.
const Vector & lengths() const
Get Vector of unit cell lengths by const reference.
An orthorhombic periodic unit cell.
bool isValid()
Return true if valid, or throw Exception.
const Vector & bravaisBasisVector(int i) const
Return Bravais lattice vector i.
void setCubic(double a)
Set unit cell dimensions for a cubic boundary.
friend std::istream & operator>>(std::istream &in, Simp::OrthorhombicBoundary &boundary)
istream extractor
File containing preprocessor macros for error handling.
Classes used by all simpatico molecular simulations.
LatticeSystem latticeSystem()
Return actual lattice system.
Vector minima_
Minimum coordinates: Require r[i] >= minima_[i].
Vector lengths_
OrthoRegion lengths: lengths_[i] = maxima_[i] - minima_[i].
A fixed capacity (static) contiguous array with a variable logical size.
const Vector & reciprocalBasisVector(int i) const
Return reciprocal lattice basis vector i.
Utility classes for scientific computation.
void serializeEnum(Archive &ar, T &data, const unsigned int version=0)
Serialize an enumeration value.
void shift(Vector &r) const
Shift Cartesian Vector r to its primary image.
double length(int i) const
Get length in Cartesian direction i.
void transformGenToCart(const Vector &Rg, Vector &Rc) const
Transform Vector of generalized coordinates to Cartesian Vector.
Vector maxima_
Maximum coordinates: Require r[i] < maxima_[i].
LatticeSystem
Enumeration of the 7 possible Bravais lattice systems.
void applyShift(Vector &r, int i, int t) const
Shift Cartesian Vector r by multiple t of a Bravais lattice vector.
friend std::ostream & operator<<(std::ostream &out, const Simp::OrthorhombicBoundary &boundary)
ostream inserter
void serialize(Archive &ar, const unsigned int version)
Serialize to/from an archive.
This file contains templates for global functions send<T>, recv<T> and bcast<T>.
An IntVector is an integer Cartesian vector.
double volume_
Volume: V = lengths_[0]*lengths_[1]*lengths_[2].
OrthorhombicBoundary()
Constructor.
static MPI::Datatype type
MPI Datatype.
static bool hasType
Is the MPI type initialized?
A region with orthogonal edges parallel to the x, y, and z axes.
Vector halfLengths_
Half region lengths: halfLengths_[i] = 0.5*lengths_[i].
bool isMinImageCart(const Vector &dr)
Is a Cartesian separation vector a minimimum image of itself?
double minLength() const
Get minimum length across primitive unit cell.
void transformCartToGen(const Vector &Rc, Vector &Rg) const
Transform Cartesian Vector to scaled / generalized coordinates.