1#ifndef included_AMP_MeshPoint
2#define included_AMP_MeshPoint
8#include <initializer_list>
34 throw std::logic_error(
"Invalid Dimension" );
37 for (
size_t d = 1; d <
d_ndim; d++ )
42 constexpr explicit MeshPoint(
const TYPE &
x,
const TYPE &
y ) noexcept
46 constexpr explicit MeshPoint(
const TYPE &
x,
const TYPE &
y,
const TYPE &
z ) noexcept
53 for (
size_t d = 0; d <
d_ndim; d++ )
60 throw std::logic_error(
"Invalid Dimension" );
63 for (
size_t d = 1; d < std::min<size_t>(
d_ndim,
x.size() ); d++ )
66 template<std::
size_t NDIM>
69 for (
size_t d = 0; d < NDIM; d++ )
74 for (
size_t d = 0; d <
x.size(); d++ )
79 constexpr operator std::array<TYPE, 1>()
const {
return {
d_data[0] }; }
80 constexpr operator std::array<TYPE, 2>()
const {
return {
d_data[0],
d_data[1] }; }
106 constexpr const TYPE *
data() const noexcept {
return d_data; }
107 constexpr TYPE &
x() noexcept {
return d_data[0]; }
108 constexpr TYPE &
y() noexcept {
return d_data[1]; }
109 constexpr TYPE &
z() noexcept {
return d_data[2]; }
110 constexpr const TYPE &
x()
const {
return d_data[0]; }
111 constexpr const TYPE &
y()
const {
return d_data[1]; }
112 constexpr const TYPE &
z()
const {
return d_data[2]; }
116 throw std::logic_error(
"Invalid index" );
122 throw std::logic_error(
"Invalid index" );
140 template<
class TYPE2>
144 d_data[1] += rhs.d_data[1];
145 d_data[2] += rhs.d_data[2];
155 template<
class TYPE2>
159 d_data[1] -= rhs.d_data[1];
160 d_data[2] -= rhs.d_data[2];
186 for (
int d = 0; d < 3; d++ ) {
196 for (
int d = 0; d < 3; d++ ) {
206 for (
int d = 0; d < 3; d++ ) {
216 for (
int d = 0; d < 3; d++ ) {
230 inline TYPE
abs()
const {
return std::sqrt(
norm() ); }
233 inline void print( std::ostream &os )
const
239 for (
int d = 1; d <
d_ndim; d++ )
248 std::ostringstream stream;
269 TYPE c[3] = { a.
x() + b.x(), a.
y() + b.y(), a.
z() + b.z() };
275 TYPE c[3] = { a.
x() + b, a.
y() + b, a.
z() + b };
281 TYPE c[3] = { a + b.x(), a + b.y(), a + b.z() };
288 TYPE c[3] = { a.
x() - b.x(), a.
y() - b.y(), a.
z() - b.z() };
294 TYPE c[3] = { a.
x() - b, a.
y() - b, a.
z() - b };
300 TYPE c[3] = { a - b.x(), a - b.y(), a - b.z() };
306 TYPE c[3] = { -a.
x(), -a.
y(), -a.
z() };
340 return a.
x() * b.x() + a.
y() * b.y() + a.
z() * b.z();
347 a.
z() * b.x() - a.
x() * b.z(),
348 a.
x() * b.y() - a.
y() * b.x() );
354 double t = 1.0 / x.
abs();
constexpr TYPE & z() noexcept
constexpr const TYPE & y() const
constexpr const TYPE * begin() const noexcept
constexpr bool operator<(const MeshPoint &rhs) const
constexpr TYPE & operator[](std::size_t i)
constexpr MeshPoint(const size_t ndim, const TYPE *x) noexcept
constexpr TYPE * data() noexcept
constexpr MeshPoint(const TYPE &x, const TYPE &y) noexcept
constexpr MeshPoint(const TYPE &x) noexcept
constexpr MeshPoint & operator-=(const TYPE rhs) noexcept
constexpr MeshPoint & operator*=(const TYPE &rhs) noexcept
constexpr bool operator!=(const MeshPoint &rhs) const
constexpr TYPE * begin() noexcept
constexpr TYPE norm() const
Return the squared magnitude.
constexpr MeshPoint(const std::array< TYPE, NDIM > &x)
constexpr MeshPoint(size_t ndim) noexcept
MeshPoint(const std::vector< TYPE > &x)
constexpr MeshPoint(std::initializer_list< TYPE > x)
constexpr uint8_t ndim() const
constexpr TYPE * end() noexcept
constexpr TYPE & y() noexcept
constexpr MeshPoint(MeshPoint &&) noexcept=default
constexpr bool operator>=(const MeshPoint &rhs) const
constexpr size_t size() const
constexpr MeshPoint(const TYPE &x, const TYPE &y, const TYPE &z) noexcept
constexpr const TYPE & z() const
TYPE abs() const
Return the magnitude.
constexpr MeshPoint & operator-=(const MeshPoint< TYPE2 > &rhs) noexcept
constexpr const TYPE & x() const
constexpr TYPE & x() noexcept
constexpr MeshPoint & operator+=(const MeshPoint< TYPE2 > &rhs) noexcept
constexpr bool operator==(const MeshPoint &rhs) const
constexpr MeshPoint() noexcept
Empty constructor.
constexpr void setNdim(uint8_t N)
constexpr const TYPE * end() const noexcept
std::string print() const
Print the point.
constexpr const TYPE & operator[](std::size_t i) const
void print(std::ostream &os) const
Print the point.
constexpr bool operator>(const MeshPoint &rhs) const
constexpr bool operator<=(const MeshPoint &rhs) const
constexpr MeshPoint & operator+=(const TYPE rhs) noexcept
constexpr const TYPE * data() const noexcept
constexpr MeshPoint(const size_t ndim, std::initializer_list< TYPE > x)
constexpr AMP::Mesh::MeshPoint< TYPE > operator*(const AMP::Mesh::MeshPoint< TYPE > &a, const TYPE &b)
constexpr AMP::Mesh::MeshPoint< TYPE > normalize(const AMP::Mesh::MeshPoint< TYPE > &x)
constexpr TYPE dot(const AMP::Mesh::MeshPoint< TYPE > &a, const AMP::Mesh::MeshPoint< TYPE > &b)
constexpr TYPE abs(const AMP::Mesh::MeshPoint< TYPE > &x)
std::ostream & operator<<(std::ostream &out, GeomType x)
GeomType operator-(GeomType, int) noexcept
GeomType operator+(GeomType, int) noexcept
constexpr AMP::Mesh::MeshPoint< TYPE > cross(const AMP::Mesh::MeshPoint< TYPE > &a, const AMP::Mesh::MeshPoint< TYPE > &b)