12 #include <util/space/Dimension.h> 15 #include <util/mpi/MpiTraits.h> 100 explicit Vector(
double scalar);
107 explicit Vector(
const double* v);
116 Vector(
double x,
double y,
double z=0.0);
131 template <
class Archive>
132 void serialize(Archive& ar,
const unsigned int version);
383 static const int Width = 24;
386 static const int Precision = 16;
472 elem_[0] = v.elem_[0];
473 elem_[1] = v.elem_[1];
474 elem_[2] = v.elem_[2];
528 elem_[0] = v.elem_[0];
529 elem_[1] = v.elem_[1];
530 elem_[2] = v.elem_[2];
552 elem_[0] += dv.elem_[0];
553 elem_[1] += dv.elem_[1];
554 elem_[2] += dv.elem_[2];
563 elem_[0] -= dv.elem_[0];
564 elem_[1] -= dv.elem_[1];
565 elem_[2] -= dv.elem_[2];
618 return (elem_[0]*elem_[0] + elem_[1]*elem_[1] + elem_[2]*elem_[2]);
626 {
return sqrt(
square()); }
634 return elem_[0]*v.elem_[0] + elem_[1]*v.elem_[1] + elem_[2]*v.elem_[2];
643 double abs_p = p.
abs();
644 if (abs_p > 1.0E-8) {
659 elem_[0] = v1.elem_[0] + v2.elem_[0];
660 elem_[1] = v1.elem_[1] + v2.elem_[1];
661 elem_[2] = v1.elem_[2] + v2.elem_[2];
674 elem_[0] = v1.elem_[0] - v2.elem_[0];
675 elem_[1] = v1.elem_[1] - v2.elem_[1];
676 elem_[2] = v1.elem_[2] - v2.elem_[2];
688 elem_[0] = v.elem_[0]*s;
689 elem_[1] = v.elem_[1]*s;
690 elem_[2] = v.elem_[2]*s;
702 elem_[0] = v.elem_[0]/s;
703 elem_[1] = v.elem_[1]/s;
704 elem_[2] = v.elem_[2]/s;
716 elem_[0] = v1.elem_[1]*v2.elem_[2] - v1.elem_[2]*v2.elem_[1];
717 elem_[1] = v1.elem_[2]*v2.elem_[0] - v1.elem_[0]*v2.elem_[2];
718 elem_[2] = v1.elem_[0]*v2.elem_[1] - v1.elem_[1]*v2.elem_[0];
728 double vabs = v.
abs();
731 elem_[0] = v.elem_[0]*vabs;
732 elem_[1] = v.elem_[1]*vabs;
733 elem_[2] = v.elem_[2]*vabs;
758 elem_[0] = p.elem_[0]*fac;
759 elem_[1] = p.elem_[1]*fac;
760 elem_[2] = p.elem_[2]*fac;
780 elem_[0] = v.elem_[0] - p.elem_[0]*fac;
781 elem_[1] = v.elem_[1] - p.elem_[1]*fac;
782 elem_[2] = v.elem_[2] - p.elem_[2]*fac;
817 template <
class Archive>
int maxId(const Vector &v)
Computes the index corresponding to maximum element in a vector.
Vector & zero()
Set all elements of a 3D vector to zero.
const int Dimension
Dimensionality of space.
static void commitMpiType()
Commit MPI datatype MpiTraits<Vector>::type.
A Vector is a Cartesian vector.
Vector & divide(const Vector &v, double s)
Divide vector v by scalar s.
void operator*=(double s)
Multiply this vector by scalar s.
Vector & add(const Vector &v1, const Vector &v2)
Add vectors v1 and v2.
const double & operator[](int i) const
Return one Cartesian element by value.
double dot(const Vector &v) const
Return dot product of this vector and vector v.
void operator/=(double s)
Divide this vector by scalar s.
Vector & multiply(const Vector &v, double s)
Multiply a vector v by a scalar s.
static const Vector Zero
Zero Vector = {0.0, 0.0, 0.0}.
File containing preprocessor macros for error handling.
static void initStatic()
Initialize Zero Vector.
int minId(const Vector &v)
Computes the index corresponding to minimum element in a vector.
friend std::ostream & operator<<(std::ostream &out, const Vector &vector)
ostream inserter for a Vector.
friend bool operator==(const Vector &v1, const Vector &v2)
Equality for Vectors.
void operator-=(const Vector &dv)
Subtract vector dv from this vector.
Vector & operator=(const Vector &v)
Copy assignment.
void serialize(Archive &ar, const unsigned int version)
Serialize to/from an archive.
Vector & parallel(const Vector &v, const Vector &p)
Calculate component of vector v parallel to vector p.
Vector & cross(const Vector &v1, const Vector &v2)
Calculate cross product of vectors v1 and v2.
Utility classes for scientific computation.
static bool hasType
Is the MPI type initialized?
friend std::istream & operator>>(std::istream &in, Vector &vector)
istream extractor for a Vector.
Vector & transverse(const Vector &v, const Vector &p)
Calculate component of vector v transverse to vector p.
void operator+=(const Vector &dv)
Add vector dv to this vector.
const int DimensionSq
Square of Dimensionality of space.
double abs() const
Return absolute magnitude of this vector.
Vector & subtract(const Vector &v1, const Vector &v2)
Subtract vector v2 from v1.
Vector()
Default constructor.
double projection(const Vector &p) const
Return projection of this vector along vector p.
static MPI::Datatype type
MPI Datatype.
Vector & versor(const Vector &v)
Calculate unit vector parallel to input vector v.
double square() const
Return square magnitude of this vector.
bool operator!=(const PointSymmetry &A, const PointSymmetry &B)
Are two PointSymmetry objects not equivalent?