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;
790 int minId(
const Vector& v)
804 int maxId(
const Vector& v)
817 template <
class Archive>
static MPI::Datatype type
MPI Datatype.
static bool hasType
Is the MPI type initialized?
A Vector is a Cartesian vector.
double square() const
Return square magnitude of this vector.
Vector & operator=(const Vector &v)
Copy assignment.
static const Vector Zero
Zero Vector = {0.0, 0.0, 0.0}.
static void commitMpiType()
Commit MPI datatype MpiTraits<Vector>::type.
double dot(const Vector &v) const
Return dot product of this vector and vector v.
Vector & versor(const Vector &v)
Calculate unit vector parallel to input vector v.
int maxId(const Vector &v)
Computes the index corresponding to maximum element in a vector.
Vector & add(const Vector &v1, const Vector &v2)
Add vectors v1 and v2.
Vector & multiply(const Vector &v, double s)
Multiply a vector v by a scalar s.
void operator+=(const Vector &dv)
Add vector dv to this vector.
int minId(const Vector &v)
Computes the index corresponding to minimum element in a vector.
friend bool operator==(const Vector &v1, const Vector &v2)
Equality for Vectors.
Vector & divide(const Vector &v, double s)
Divide vector v by scalar s.
Vector & subtract(const Vector &v1, const Vector &v2)
Subtract vector v2 from v1.
void operator*=(double s)
Multiply this vector by scalar s.
friend std::ostream & operator<<(std::ostream &out, const Vector &vector)
ostream inserter for a Vector.
Vector & parallel(const Vector &v, const Vector &p)
Calculate component of vector v parallel to vector p.
double projection(const Vector &p) const
Return projection of this vector along vector p.
void serialize(Archive &ar, const unsigned int version)
Serialize to/from an archive.
Vector & zero()
Set all elements of a 3D vector to zero.
friend std::istream & operator>>(std::istream &in, Vector &vector)
istream extractor for a Vector.
Vector()
Default constructor.
Vector & transverse(const Vector &v, const Vector &p)
Calculate component of vector v transverse to vector p.
const double & operator[](int i) const
Return one Cartesian element by value.
Vector & cross(const Vector &v1, const Vector &v2)
Calculate cross product of vectors v1 and v2.
static void initStatic()
Initialize Zero Vector.
void operator-=(const Vector &dv)
Subtract vector dv from this vector.
void operator/=(double s)
Divide this vector by scalar s.
double abs() const
Return absolute magnitude of this vector.
File containing preprocessor macros for error handling.
const int Dimension
Dimensionality of space.
const int DimensionSq
Square of Dimensionality of space.
Utility classes for scientific computation.
bool operator==(Polynomial< T > const &a, Polynomial< T > const &b)
Equality operator for polynomials.
std::istream & operator>>(std::istream &in, Pair< Data > &pair)
Input a Pair from an istream.
std::ostream & operator<<(std::ostream &out, const Pair< Data > &pair)
Output a Pair to an ostream, without line breaks.
bool operator!=(Polynomial< T > const &a, Polynomial< T > const &b)
Inequality operator for polynomials.