1 #ifndef UTIL_INT_VECTOR_H 2 #define UTIL_INT_VECTOR_H 12 #include <util/space/Dimension.h> 14 #include <util/mpi/MpiTraits.h> 92 elem_[0] = v.elem_[0];
93 elem_[1] = v.elem_[1];
94 elem_[2] = v.elem_[2];
156 template <
class Archive>
157 void serialize(Archive& ar,
const unsigned int version);
169 elem_[0] = v.elem_[0];
170 elem_[1] = v.elem_[1];
171 elem_[2] = v.elem_[2];
201 elem_[0] += dv.elem_[0];
202 elem_[1] += dv.elem_[1];
203 elem_[2] += dv.elem_[2];
215 elem_[0] -= dv.elem_[0];
216 elem_[1] -= dv.elem_[1];
217 elem_[2] -= dv.elem_[2];
274 {
return elem_[0]*elem_[0] + elem_[1]*elem_[1] + elem_[2]*elem_[2]; }
284 return elem_[0]*v.elem_[0] + elem_[1]*v.elem_[1] + elem_[2]*v.elem_[2];
301 elem_[0] = v1.elem_[0] + v2.elem_[0];
302 elem_[1] = v1.elem_[1] + v2.elem_[1];
303 elem_[2] = v1.elem_[2] + v2.elem_[2];
318 elem_[0] = v1.elem_[0] - v2.elem_[0];
319 elem_[1] = v1.elem_[1] - v2.elem_[1];
320 elem_[2] = v1.elem_[2] - v2.elem_[2];
335 elem_[0] = v.elem_[0]*s;
336 elem_[1] = v.elem_[1]*s;
337 elem_[2] = v.elem_[2]*s;
352 elem_[0] = v1.elem_[1]*v2.elem_[2] - v1.elem_[2]*v2.elem_[1];
353 elem_[1] = v1.elem_[2]*v2.elem_[0] - v1.elem_[0]*v2.elem_[2];
354 elem_[2] = v1.elem_[0]*v2.elem_[1] - v1.elem_[1]*v2.elem_[0];
383 static const int Width = 15;
454 template <
class Archive>
const int Dimension
Dimensionality of space.
int & operator[](int i)
Return a reference to one element of the vector.
static void commitMpiType()
Commit MPI datatype MpiTraits<IntVector>::type.
IntVector & zero()
Set all elements of a 3D vector to zero.
friend std::istream & operator>>(std::istream &in, IntVector &vector)
istream extractor for a IntVector.
static bool hasType
Is the MPI type initialized?
IntVector & operator=(const IntVector &v)
Copy assignment.
IntVector & subtract(const IntVector &v1, const IntVector &v2)
Subtract vector v2 from v1.
friend std::ostream & operator<<(std::ostream &out, const IntVector &vector)
ostream inserter for a IntVector.
void operator+=(const IntVector &dv)
Add vector dv to this vector.
IntVector(const int *v)
Construct IntVector from C int[3] array.
IntVector(int x, int y, int z=0)
Construct IntVector from its coordinates.
File containing preprocessor macros for error handling.
static MPI::Datatype type
MPI Datatype.
void operator-=(const IntVector &dv)
Subtract vector dv from this vector.
int square() const
Return square magnitude of this vector.
int dot(const IntVector &v) const
Return dot product of this vector and vector v.
Utility classes for scientific computation.
IntVector(const IntVector &v)
Copy constructor.
IntVector & operator=(const int *v)
Assignment from C int[] array.
void serialize(Archive &ar, const unsigned int version)
Serialize to/from an archive.
static void initStatic()
Initialize static IntVector::Zero.
static const IntVector Zero
Zero IntVector.
IntVector & multiply(const IntVector &v, int s)
Multiply a vector v by a scalar s.
An IntVector is an integer Cartesian vector.
IntVector & add(const IntVector &v1, const IntVector &v2)
Add vectors v1 and v2.
IntVector(int scalar)
Constructor, initialize all elements to the same scalar.
IntVector & cross(const IntVector &v1, const IntVector &v2)
Calculate cross product of vectors v1 and v2.
friend bool operator==(const IntVector &v1, const IntVector &v2)
Equality for IntVectors.
void operator*=(int s)
Multiply this vector by scalar s.
const int & operator[](int i) const
Return one Cartesian element by value.
IntVector()
Default constructor.
bool operator!=(const PointSymmetry &A, const PointSymmetry &B)
Are two PointSymmetry objects not equivalent?