libMesh
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
libMesh::TypeVector< T > Class Template Reference

This class defines a vector in LIBMESH_DIM dimensional space of type T. More...

#include <tensor_tools.h>

Inheritance diagram for libMesh::TypeVector< T >:
[legend]

Public Types

typedef T value_type
 Helper typedef for C++98 generic programming. More...
 
typedef unsigned int index_type
 Helper typedef for generic index programming. More...
 

Public Member Functions

 TypeVector ()
 Empty constructor. More...
 
template<typename T2 >
 TypeVector (const TypeVector< T2 > &p)
 Copy-constructor. More...
 
 TypeVector (const TypeVector &p)=default
 Copy-constructor for the trivial case. More...
 
 ~TypeVector ()=default
 Destructor. More...
 
template<typename T2 >
void assign (const TypeVector< T2 > &)
 Assign to this vector without creating a temporary. More...
 
template<typename Scalar >
std::enable_if< ScalarTraits< Scalar >::value, TypeVector & >::type operator= (const Scalar &libmesh_dbg_var(p))
 Assignment-from-scalar operator. More...
 
const T & operator() (const unsigned int i) const
 
const T & slice (const unsigned int i) const
 
T & operator() (const unsigned int i)
 
T & slice (const unsigned int i)
 
template<typename T2 >
TypeVector< typename CompareTypes< T, T2 >::supertype > operator+ (const TypeVector< T2 > &) const
 Add two vectors. More...
 
template<typename T2 >
const TypeVector< T > & operator+= (const TypeVector< T2 > &)
 Add to this vector. More...
 
template<typename T2 >
void add (const TypeVector< T2 > &)
 Add to this vector without creating a temporary. More...
 
template<typename T2 >
void add_scaled (const TypeVector< T2 > &, const T &)
 Add a scaled value to this vector without creating a temporary. More...
 
template<typename T2 >
TypeVector< typename CompareTypes< T, T2 >::supertype > operator- (const TypeVector< T2 > &) const
 Subtract from this vector. More...
 
template<typename T2 >
const TypeVector< T > & operator-= (const TypeVector< T2 > &)
 Subtract from this vector. More...
 
template<typename T2 >
void subtract (const TypeVector< T2 > &)
 Subtract from this vector without creating a temporary. More...
 
template<typename T2 >
void subtract_scaled (const TypeVector< T2 > &, const T &)
 Subtract a scaled value from this vector without creating a temporary. More...
 
TypeVector< T > operator- () const
 
template<typename Scalar >
std::enable_if< ScalarTraits< Scalar >::value, TypeVector< typename CompareTypes< T, Scalar >::supertype > >::type operator* (const Scalar &) const
 Multiply this vector by a scalar value. More...
 
const TypeVector< T > & operator*= (const T &)
 Multiply this vector by a scalar value. More...
 
template<typename Scalar >
std::enable_if< ScalarTraits< Scalar >::value, TypeVector< typename CompareTypes< T, Scalar >::supertype > >::type operator/ (const Scalar &) const
 Divide each entry of this vector by scalar value. More...
 
const TypeVector< T > & operator/= (const T &)
 Divide each entry of this vector by scalar value. More...
 
template<typename T2 >
CompareTypes< T, T2 >::supertype operator* (const TypeVector< T2 > &) const
 
template<typename T2 >
CompareTypes< T, T2 >::supertype contract (const TypeVector< T2 > &) const
 
template<typename T2 >
TypeVector< typename CompareTypes< T, T2 >::supertype > cross (const TypeVector< T2 > &v) const
 
TypeVector< T > unit () const
 
auto norm () const
 
auto norm_sq () const
 
auto l1_norm () const
 
bool is_zero () const
 
void zero ()
 Set all entries of the vector to 0. More...
 
bool relative_fuzzy_equals (const TypeVector< T > &rhs, Real tol=TOLERANCE) const
 
bool absolute_fuzzy_equals (const TypeVector< T > &rhs, Real tol=TOLERANCE) const
 
bool operator== (const TypeVector< T > &rhs) const
 
bool operator!= (const TypeVector< T > &rhs) const
 
bool operator< (const TypeVector< T > &rhs) const
 
bool operator<= (const TypeVector< T > &rhs) const
 
bool operator> (const TypeVector< T > &rhs) const
 
bool operator>= (const TypeVector< T > &rhs) const
 
void print (std::ostream &os=libMesh::out) const
 Formatted print, by default to libMesh::out. More...
 
void write_unformatted (std::ostream &out_stream, const bool newline=true) const
 Unformatted print to the stream out. More...
 
template<>
auto l1_norm () const
 
template<>
bool operator< (const TypeVector< Complex > &rhs) const
 
template<>
bool operator<= (const TypeVector< Complex > &rhs) const
 
template<>
bool operator> (const TypeVector< Complex > &rhs) const
 
template<>
bool operator>= (const TypeVector< Complex > &rhs) const
 
template<>
auto l1_norm () const
 

Protected Member Functions

 TypeVector (const T &x, const T &y=0, const T &z=0)
 Constructor-from-T. More...
 
template<typename Scalar1 , typename Scalar2 , typename Scalar3 >
 TypeVector (typename std::enable_if< ScalarTraits< Scalar1 >::value, const Scalar1 >::type &x, typename std::enable_if< ScalarTraits< Scalar2 >::value, const Scalar2 >::type &y=0, typename std::enable_if< ScalarTraits< Scalar3 >::value, const Scalar3 >::type &z=0)
 Constructor-from-scalars. More...
 
template<typename Scalar >
 TypeVector (const Scalar &x, typename std::enable_if< ScalarTraits< Scalar >::value, const Scalar >::type *sfinae=nullptr)
 Constructor-from-scalar. More...
 

Protected Attributes

_coords [LIBMESH_DIM]
 The coordinates of the TypeVector. More...
 

Friends

template<typename T2 >
class TypeVector
 
class TypeTensor< T >
 
std::ostream & operator<< (std::ostream &os, const TypeVector< T > &t)
 Formatted print as above but supports the syntax: More...
 

Detailed Description

template<typename T>
class libMesh::TypeVector< T >

This class defines a vector in LIBMESH_DIM dimensional space of type T.

T may either be Real or Complex. Instead use one of the derived types such as Point or Node.

Author
Benjamin S. Kirk
Date
2003

Definition at line 34 of file tensor_tools.h.

Member Typedef Documentation

◆ index_type

template<typename T>
typedef unsigned int libMesh::TypeVector< T >::index_type

Helper typedef for generic index programming.

Definition at line 122 of file type_vector.h.

◆ value_type

template<typename T>
typedef T libMesh::TypeVector< T >::value_type

Helper typedef for C++98 generic programming.

Definition at line 117 of file type_vector.h.

Constructor & Destructor Documentation

◆ TypeVector() [1/6]

template<typename T >
libMesh::TypeVector< T >::TypeVector ( )
inline

Empty constructor.

Gives the vector 0 in LIBMESH_DIM dimensions.

Definition at line 429 of file type_vector.h.

430 {
431  _coords[0] = {};
432 
433 #if LIBMESH_DIM > 1
434  _coords[1] = {};
435 #endif
436 
437 #if LIBMESH_DIM > 2
438  _coords[2] = {};
439 #endif
440 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ TypeVector() [2/6]

template<typename T>
libMesh::TypeVector< T >::TypeVector ( const T &  x,
const T &  y = 0,
const T &  z = 0 
)
inlineprotected

Constructor-from-T.

By default sets higher dimensional entries to 0.

Definition at line 446 of file type_vector.h.

449 {
450  _coords[0] = x;
451 
452 #if LIBMESH_DIM > 1
453  _coords[1] = y;
454 #else
455  libmesh_ignore(y);
456  libmesh_assert_equal_to (y, 0);
457 #endif
458 
459 #if LIBMESH_DIM > 2
460  _coords[2] = z;
461 #else
462  libmesh_ignore(z);
463  libmesh_assert_equal_to (z, 0);
464 #endif
465 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
void libmesh_ignore(const Args &...)

◆ TypeVector() [3/6]

template<typename T >
template<typename Scalar1 , typename Scalar2 , typename Scalar3 >
libMesh::TypeVector< T >::TypeVector ( typename std::enable_if< ScalarTraits< Scalar1 >::value, const Scalar1 >::type &  x,
typename std::enable_if< ScalarTraits< Scalar2 >::value, const Scalar2 >::type &  y = 0,
typename std::enable_if< ScalarTraits< Scalar3 >::value, const Scalar3 >::type &  z = 0 
)
inlineprotected

Constructor-from-scalars.

By default sets higher dimensional entries to 0.

Definition at line 471 of file type_vector.h.

480 {
481  _coords[0] = x;
482 
483 #if LIBMESH_DIM > 1
484  _coords[1] = y;
485 #else
486  libmesh_assert_equal_to (y, 0);
487 #endif
488 
489 #if LIBMESH_DIM > 2
490  _coords[2] = z;
491 #else
492  libmesh_assert_equal_to (z, 0);
493 #endif
494 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ TypeVector() [4/6]

template<typename T >
template<typename Scalar >
libMesh::TypeVector< T >::TypeVector ( const Scalar &  x,
typename std::enable_if< ScalarTraits< Scalar >::value, const Scalar >::type *  sfinae = nullptr 
)
inlineprotected

Constructor-from-scalar.

Sets higher dimensional entries to 0. Necessary because for some reason the constructor-from-scalars alone is insufficient to let the compiler figure out TypeVector<Complex> v = 0;

Definition at line 501 of file type_vector.h.

505 {
506  _coords[0] = x;
507 
508 #if LIBMESH_DIM > 1
509  _coords[1] = 0;
510 #endif
511 
512 #if LIBMESH_DIM > 2
513  _coords[2] = 0;
514 #endif
515 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ TypeVector() [5/6]

template<typename T >
template<typename T2 >
libMesh::TypeVector< T >::TypeVector ( const TypeVector< T2 > &  p)
inline

Copy-constructor.

Definition at line 522 of file type_vector.h.

523 {
524  // copy the nodes from vector p to me
525  for (unsigned int i=0; i<LIBMESH_DIM; i++)
526  _coords[i] = p._coords[i];
527 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ TypeVector() [6/6]

template<typename T>
libMesh::TypeVector< T >::TypeVector ( const TypeVector< T > &  p)
default

Copy-constructor for the trivial case.

◆ ~TypeVector()

template<typename T>
libMesh::TypeVector< T >::~TypeVector ( )
default

Destructor.

Member Function Documentation

◆ absolute_fuzzy_equals()

template<typename T>
bool libMesh::TypeVector< T >::absolute_fuzzy_equals ( const TypeVector< T > &  rhs,
Real  tol = TOLERANCE 
) const
inline

◆ add()

template<typename T >
template<typename T2 >
void libMesh::TypeVector< T >::add ( const TypeVector< T2 > &  p)
inline

Add to this vector without creating a temporary.

Definition at line 605 of file type_vector.h.

Referenced by libMesh::FEMap::inverse_map(), libMesh::Polyhedron::Polyhedron(), libMesh::LaplaceMeshSmoother::smooth(), libMesh::MeshTools::Modification::smooth(), and libMesh::Elem::vertex_average().

606 {
607 #if LIBMESH_DIM == 1
608  _coords[0] += p._coords[0];
609 #endif
610 
611 #if LIBMESH_DIM == 2
612  _coords[0] += p._coords[0];
613  _coords[1] += p._coords[1];
614 #endif
615 
616 #if LIBMESH_DIM == 3
617  _coords[0] += p._coords[0];
618  _coords[1] += p._coords[1];
619  _coords[2] += p._coords[2];
620 #endif
621 
622 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ add_scaled()

template<typename T>
template<typename T2 >
void libMesh::TypeVector< T >::add_scaled ( const TypeVector< T2 > &  p,
const T &  factor 
)
inline

◆ assign()

template<typename T >
template<typename T2 >
void libMesh::TypeVector< T >::assign ( const TypeVector< T2 > &  p)
inline

Assign to this vector without creating a temporary.

Definition at line 534 of file type_vector.h.

535 {
536  for (unsigned int i=0; i<LIBMESH_DIM; i++)
537  _coords[i] = p._coords[i];
538 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ contract()

template<typename T >
template<typename T2 >
CompareTypes< T, T2 >::supertype libMesh::TypeVector< T >::contract ( const TypeVector< T2 > &  p) const
inline
Returns
The result of TypeVector::operator*().

Definition at line 875 of file type_vector.h.

876 {
877  return (*this)*(p);
878 }

◆ cross()

template<typename T >
template<typename T2 >
TypeVector< typename CompareTypes< T, T2 >::supertype > libMesh::TypeVector< T >::cross ( const TypeVector< T2 > &  v) const
Returns
The cross product of this vector with v.

Definition at line 885 of file type_vector.h.

Referenced by libMesh::TriangulatorInterface::Hole::areavec(), assemble_shell(), libMesh::InfFE< Dim, T_radial, T_map >::compute_face_functions(), libMesh::FEMap::compute_face_map(), libMesh::InfFE< Dim, T_radial, T_map >::compute_shape_functions(), libMesh::LineConstraint::contains_point(), ContainsPointTest::containsPointTri3Helper(), libMesh::Plane::create_from_three_points(), libMesh::VariationalSmootherConstraint::determine_constraint(), libMesh::Quad4::has_invertible_map(), libMesh::MeshTetInterface::improve_hull_integrity(), libMesh::LineConstraint::intersect(), libMesh::PlaneConstraint::intersect(), libMesh::TriangulatorInterface::MeshedHole::MeshedHole(), libMesh::Quad::quality(), libMesh::Face::quasicircumcenter(), libMesh::C0Polygon::retriangulate(), libMesh::Quad4::side_vertex_average_normal(), libMesh::C0Polyhedron::side_vertex_average_normal(), libMesh::C0Polygon::side_vertex_average_normal(), libMesh::Pyramid5::side_vertex_average_normal(), libMesh::Tri3::side_vertex_average_normal(), libMesh::Prism6::side_vertex_average_normal(), libMesh::Hex8::side_vertex_average_normal(), libMesh::Tet4::side_vertex_average_normal(), and libMesh::Quad4::volume().

886 {
887  typedef typename CompareTypes<T, T2>::supertype TS;
888  libmesh_assert_equal_to (LIBMESH_DIM, 3);
889 
890  // | i j k |
891  // |(*this)(0) (*this)(1) (*this)(2)|
892  // | p(0) p(1) p(2) |
893 
894 #if LIBMESH_DIM == 3
895  return TypeVector<TS>( _coords[1]*p._coords[2] - _coords[2]*p._coords[1],
896  -_coords[0]*p._coords[2] + _coords[2]*p._coords[0],
897  _coords[0]*p._coords[1] - _coords[1]*p._coords[0]);
898 #else
899  libmesh_ignore(p);
900  return TypeVector<TS>(0);
901 #endif
902 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
void libmesh_ignore(const Args &...)

◆ is_zero()

template<typename T >
bool libMesh::TypeVector< T >::is_zero ( ) const
inline
Returns
True if all values in the vector are zero

Definition at line 949 of file type_vector.h.

950 {
951  for (const auto & val : _coords)
952  if (val != T(0))
953  return false;
954  return true;
955 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ l1_norm() [1/3]

template<>
auto libMesh::TypeVector< bool >::l1_norm ( ) const

Definition at line 203 of file type_vector.C.

204 {
205  bool ret{};
206  for (const auto i : make_range(libmesh_dim))
207  ret += _coords[i];
208 
209  return ret;
210 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
static constexpr std::size_t libmesh_dim
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:176

◆ l1_norm() [2/3]

template<typename T >
auto libMesh::TypeVector< T >::l1_norm ( ) const
Returns
The L1 norm of the vector

Definition at line 963 of file type_vector.h.

964 {
965  using std::abs;
966  decltype(abs(T())) ret{};
967  for (const auto i : make_range(libmesh_dim))
968  ret += abs(_coords[i]);
969 
970  return ret;
971 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
static constexpr std::size_t libmesh_dim
IntRange< T > make_range(T beg, T end)
The 2-parameter make_range() helper function returns an IntRange<T> when both input parameters are of...
Definition: int_range.h:176

◆ l1_norm() [3/3]

template<>
auto libMesh::TypeVector< bool >::l1_norm ( ) const

◆ norm()

template<typename T >
auto libMesh::TypeVector< T >::norm ( ) const
inline
Returns
The magnitude of the vector, i.e. the square-root of the sum of the elements squared.

Definition at line 908 of file type_vector.h.

Referenced by libMesh::Sphere::above_surface(), libMesh::TriangulatorInterface::Hole::area(), assemble_shell(), InfFERadialTest::base_point(), libMesh::InfElemBuilder::build_inf_elem(), libMesh::InfFE< Dim, T_radial, T_map >::compute_shape_functions(), libMesh::VariationalSmootherConstraint::constrain_node_to_plane(), libMesh::InfPrism::contains_point(), libMesh::InfHex::contains_point(), libMesh::Polyhedron::convex(), libMesh::VariationalSmootherConstraint::determine_constraint(), libMesh::Quad4::has_invertible_map(), libMesh::Edge4::has_invertible_map(), libMesh::PlaneConstraint::intersect(), libMesh::InfFEMap::inverse_map(), libMesh::FEMap::inverse_map(), libMesh::LineConstraint::LineConstraint(), MeshPerElemTest< elem_type >::meshes_equal_enough(), libMesh::Tri3::min_and_max_angle(), libMesh::Tet4::min_and_max_angle(), libMesh::Polyhedron::on_reference_element(), libMesh::Sphere::on_surface(), libMesh::PlaneConstraint::PlaneConstraint(), libMesh::Polyhedron::Polyhedron(), libMesh::Tri::quality(), libMesh::Quad::quality(), libMesh::MeshTools::Modification::smooth(), libMesh::Sphere::surface_coords(), AllRBBTest::test_circle(), AllRBBTest::test_cylinder(), AllRBBTest::test_disk(), InfFERadialTest::testInfQuants(), InfFERadialTest::testInfQuants_numericDeriv(), TypeVectorTestBase< VectorValue< Number > >::testNormBase(), and MeshTriangulationTest::testTriangulatorRoundHole().

909 {
910  using std::sqrt;
911  return sqrt(this->norm_sq());
912 }
auto norm_sq() const
Definition: type_vector.h:928

◆ norm_sq()

template<typename T >
auto libMesh::TypeVector< T >::norm_sq ( ) const
inline
Returns
The magnitude of the vector squared, i.e. the sum of the element magnitudes squared.

Definition at line 928 of file type_vector.h.

Referenced by libMesh::ExactSolution::_compute_error(), libMesh::UniformRefinementEstimator::_estimate_error(), libMesh::InfQuad4::contains_point(), libMesh::InfPrism::contains_point(), libMesh::InfHex::contains_point(), libMesh::ExactErrorEstimator::find_squared_element_error(), libMesh::LineConstraint::intersect(), libMesh::PointLocatorNanoflann::kdtree_distance(), main(), libMesh::TensorTools::norm_sq(), libMesh::Face::quasicircumcenter(), libMesh::HPCoarsenTest::select_refinement(), libMesh::C0Polyhedron::side_vertex_average_normal(), libMesh::C0Polygon::side_vertex_average_normal(), libMesh::Sphere::Sphere(), InfFERadialTest::testInfQuants(), InfFERadialTest::testInfQuants_numericDeriv(), TypeVectorTestBase< VectorValue< Number > >::testNormSqBase(), MeshTriangulationTest::testTriangulatorRoundHole(), and libMesh::Edge3::volume().

929 {
930 #if LIBMESH_DIM == 1
931  return (TensorTools::norm_sq(_coords[0]));
932 #endif
933 
934 #if LIBMESH_DIM == 2
935  return (TensorTools::norm_sq(_coords[0]) +
937 #endif
938 
939 #if LIBMESH_DIM == 3
940  return (TensorTools::norm_sq(_coords[0]) +
943 #endif
944 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
auto norm_sq(const T &a)
Definition: tensor_tools.h:104

◆ operator!=()

template<typename T>
bool libMesh::TypeVector< T >::operator!= ( const TypeVector< T > &  rhs) const
inline
Returns
!(*this == rhs)

Definition at line 1015 of file type_vector.h.

1016 {
1017  return (!(*this == rhs));
1018 }

◆ operator()() [1/2]

template<typename T >
const T & libMesh::TypeVector< T >::operator() ( const unsigned int  i) const
inline
Returns
A const reference to the \( i^{th} \) entry of the vector.

Definition at line 544 of file type_vector.h.

545 {
546  libmesh_assert_less (i, LIBMESH_DIM);
547 
548  return _coords[i];
549 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator()() [2/2]

template<typename T >
T & libMesh::TypeVector< T >::operator() ( const unsigned int  i)
inline
Returns
A writable reference to the \( i^{th} \) entry of the vector.

Definition at line 555 of file type_vector.h.

556 {
557  libmesh_assert_less (i, LIBMESH_DIM);
558 
559  return _coords[i];
560 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator*() [1/2]

template<typename T >
template<typename Scalar >
std::enable_if< ScalarTraits< Scalar >::value, TypeVector< typename CompareTypes< T, Scalar >::supertype > >::type libMesh::TypeVector< T >::operator* ( const Scalar &  factor) const
inline

Multiply this vector by a scalar value.

Returns
A copy of the result, this vector is unchanged.

Definition at line 741 of file type_vector.h.

742 {
743  typedef typename CompareTypes<T, Scalar>::supertype SuperType;
744 
745 #if LIBMESH_DIM == 1
746  return TypeVector<SuperType>(_coords[0]*factor);
747 #endif
748 
749 #if LIBMESH_DIM == 2
750  return TypeVector<SuperType>(_coords[0]*factor,
751  _coords[1]*factor);
752 #endif
753 
754 #if LIBMESH_DIM == 3
755  return TypeVector<SuperType>(_coords[0]*factor,
756  _coords[1]*factor,
757  _coords[2]*factor);
758 #endif
759 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator*() [2/2]

template<typename T >
template<typename T2 >
CompareTypes< T, T2 >::supertype libMesh::TypeVector< T >::operator* ( const TypeVector< T2 > &  p) const
inline
Returns
The dot-product of this vector with another vector.
Note
The complex conjugate is not taken in the complex-valued case.
The vectors may contain different numeric types.

Definition at line 853 of file type_vector.h.

854 {
855 #if LIBMESH_DIM == 1
856  return _coords[0]*p._coords[0];
857 #endif
858 
859 #if LIBMESH_DIM == 2
860  return (_coords[0]*p._coords[0] +
861  _coords[1]*p._coords[1]);
862 #endif
863 
864 #if LIBMESH_DIM == 3
865  return (_coords[0]*p(0) +
866  _coords[1]*p(1) +
867  _coords[2]*p(2));
868 #endif
869 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator*=()

template<typename T>
const TypeVector< T > & libMesh::TypeVector< T >::operator*= ( const T &  factor)
inline

Multiply this vector by a scalar value.

Returns
A reference to *this.

Definition at line 778 of file type_vector.h.

779 {
780 #if LIBMESH_DIM == 1
781  _coords[0] *= factor;
782 #endif
783 
784 #if LIBMESH_DIM == 2
785  _coords[0] *= factor;
786  _coords[1] *= factor;
787 #endif
788 
789 #if LIBMESH_DIM == 3
790  _coords[0] *= factor;
791  _coords[1] *= factor;
792  _coords[2] *= factor;
793 #endif
794 
795  return *this;
796 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator+()

template<typename T >
template<typename T2 >
TypeVector< typename CompareTypes< T, T2 >::supertype > libMesh::TypeVector< T >::operator+ ( const TypeVector< T2 > &  p) const
inline

Add two vectors.

Returns
A copy of the result, this vector is unchanged.

Definition at line 568 of file type_vector.h.

569 {
570  typedef typename CompareTypes<T, T2>::supertype TS;
571 #if LIBMESH_DIM == 1
572  return TypeVector<TS> (_coords[0] + p._coords[0]);
573 #endif
574 
575 #if LIBMESH_DIM == 2
576  return TypeVector<TS> (_coords[0] + p._coords[0],
577  _coords[1] + p._coords[1]);
578 #endif
579 
580 #if LIBMESH_DIM == 3
581  return TypeVector<TS> (_coords[0] + p._coords[0],
582  _coords[1] + p._coords[1],
583  _coords[2] + p._coords[2]);
584 #endif
585 
586 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator+=()

template<typename T >
template<typename T2 >
const TypeVector< T > & libMesh::TypeVector< T >::operator+= ( const TypeVector< T2 > &  p)
inline

Add to this vector.

Returns
A reference to *this.

Definition at line 593 of file type_vector.h.

594 {
595  this->add (p);
596 
597  return *this;
598 }
void add(const TypeVector< T2 > &)
Add to this vector without creating a temporary.
Definition: type_vector.h:605

◆ operator-() [1/2]

template<typename T >
template<typename T2 >
TypeVector< typename CompareTypes< T, T2 >::supertype > libMesh::TypeVector< T >::operator- ( const TypeVector< T2 > &  p) const
inline

Subtract from this vector.

Returns
A copy of the result, this vector is unchanged.

Definition at line 654 of file type_vector.h.

655 {
656  typedef typename CompareTypes<T, T2>::supertype TS;
657 
658 #if LIBMESH_DIM == 1
659  return TypeVector<TS>(_coords[0] - p._coords[0]);
660 #endif
661 
662 #if LIBMESH_DIM == 2
663  return TypeVector<TS>(_coords[0] - p._coords[0],
664  _coords[1] - p._coords[1]);
665 #endif
666 
667 #if LIBMESH_DIM == 3
668  return TypeVector<TS>(_coords[0] - p._coords[0],
669  _coords[1] - p._coords[1],
670  _coords[2] - p._coords[2]);
671 #endif
672 
673 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator-() [2/2]

template<typename T >
TypeVector< T > libMesh::TypeVector< T >::operator- ( ) const
inline
Returns
The negative of this vector in a separate copy.

Definition at line 713 of file type_vector.h.

714 {
715 
716 #if LIBMESH_DIM == 1
717  return TypeVector(-_coords[0]);
718 #endif
719 
720 #if LIBMESH_DIM == 2
721  return TypeVector(-_coords[0],
722  -_coords[1]);
723 #endif
724 
725 #if LIBMESH_DIM == 3
726  return TypeVector(-_coords[0],
727  -_coords[1],
728  -_coords[2]);
729 #endif
730 
731 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
TypeVector()
Empty constructor.
Definition: type_vector.h:429

◆ operator-=()

template<typename T >
template<typename T2 >
const TypeVector< T > & libMesh::TypeVector< T >::operator-= ( const TypeVector< T2 > &  p)
inline

Subtract from this vector.

Returns
A reference to *this.

Definition at line 680 of file type_vector.h.

681 {
682  this->subtract (p);
683 
684  return *this;
685 }
void subtract(const TypeVector< T2 > &)
Subtract from this vector without creating a temporary.
Definition: type_vector.h:692

◆ operator/()

template<typename T >
template<typename Scalar >
std::enable_if< ScalarTraits< Scalar >::value, TypeVector< typename CompareTypes< T, Scalar >::supertype > >::type libMesh::TypeVector< T >::operator/ ( const Scalar &  factor) const
inline

Divide each entry of this vector by scalar value.

Returns
A copy of the result, this vector is unchanged.

Definition at line 806 of file type_vector.h.

807 {
808  typedef typename CompareTypes<T, Scalar>::supertype TS;
809 
810  libmesh_assert_not_equal_to (static_cast<TS>(factor),
811  static_cast<TS>(0.));
812 
813 #if LIBMESH_DIM == 1
814  return TypeVector<TS>(_coords[0]/factor);
815 #endif
816 
817 #if LIBMESH_DIM == 2
818  return TypeVector<TS>(_coords[0]/factor,
819  _coords[1]/factor);
820 #endif
821 
822 #if LIBMESH_DIM == 3
823  return TypeVector<TS>(_coords[0]/factor,
824  _coords[1]/factor,
825  _coords[2]/factor);
826 #endif
827 
828 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator/=()

template<typename T>
const TypeVector< T > & libMesh::TypeVector< T >::operator/= ( const T &  factor)
inline

Divide each entry of this vector by scalar value.

Returns
A reference to *this.

Definition at line 836 of file type_vector.h.

837 {
838  libmesh_assert_not_equal_to (factor, static_cast<T>(0.));
839 
840  for (unsigned int i=0; i<LIBMESH_DIM; i++)
841  _coords[i] /= factor;
842 
843  return *this;
844 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator<() [1/2]

template<>
bool libMesh::TypeVector< Complex >::operator< ( const TypeVector< Complex > &  rhs) const

Definition at line 124 of file type_vector.C.

125 {
126  for (unsigned int i=0; i<LIBMESH_DIM; i++)
127  {
128  if ((*this)(i).real() < rhs(i).real())
129  return true;
130  if ((*this)(i).real() > rhs(i).real())
131  return false;
132  if ((*this)(i).imag() < rhs(i).imag())
133  return true;
134  if ((*this)(i).imag() > rhs(i).imag())
135  return false;
136  }
137  return false;
138 }
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
boost::multiprecision::float128 imag(const boost::multiprecision::float128)

◆ operator<() [2/2]

template<typename T>
bool libMesh::TypeVector< T >::operator< ( const TypeVector< T > &  rhs) const
Returns
true if this vector is "less" than rhs.

Useful for sorting. Also used for choosing some arbitrary basis function orientations.

Definition at line 66 of file type_vector.C.

67 {
68  for (unsigned int i=0; i<LIBMESH_DIM; i++)
69  {
70  if ((*this)(i) < rhs(i))
71  return true;
72  if ((*this)(i) > rhs(i))
73  return false;
74  }
75  return false;
76 }

◆ operator<=() [1/2]

template<>
bool libMesh::TypeVector< Complex >::operator<= ( const TypeVector< Complex > &  rhs) const

Definition at line 143 of file type_vector.C.

144 {
145  for (unsigned int i=0; i<LIBMESH_DIM; i++)
146  {
147  if ((*this)(i).real() < rhs(i).real())
148  return true;
149  if ((*this)(i).real() > rhs(i).real())
150  return false;
151  if ((*this)(i).imag() < rhs(i).imag())
152  return true;
153  if ((*this)(i).imag() > rhs(i).imag())
154  return false;
155  }
156  return true;
157 }
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
boost::multiprecision::float128 imag(const boost::multiprecision::float128)

◆ operator<=() [2/2]

template<typename T>
bool libMesh::TypeVector< T >::operator<= ( const TypeVector< T > &  rhs) const
Returns
true if this vector is <= to rhs.

Useful for sorting. Also used for choosing some arbitrary constraint equation directions.

Definition at line 80 of file type_vector.C.

81 {
82  for (unsigned int i=0; i<LIBMESH_DIM; i++)
83  {
84  if ((*this)(i) < rhs(i))
85  return true;
86  if ((*this)(i) > rhs(i))
87  return false;
88  }
89  return true;
90 }

◆ operator=()

template<typename T>
template<typename Scalar >
std::enable_if< ScalarTraits<Scalar>::value, TypeVector &>::type libMesh::TypeVector< T >::operator= ( const Scalar &  libmesh_dbg_varp)
inline

Assignment-from-scalar operator.

Used only to zero out vectors.

Definition at line 153 of file type_vector.h.

154  { libmesh_assert_equal_to (p, Scalar(0)); this->zero(); return *this; }
void zero()
Set all entries of the vector to 0.
Definition: type_vector.h:918

◆ operator==()

template<typename T>
bool libMesh::TypeVector< T >::operator== ( const TypeVector< T > &  rhs) const
inline
Returns
true if this(i)==rhs(i) for each component of the vector.
Note
For floating point types T, the function absolute_fuzzy_equals() may be a more appropriate choice.

Definition at line 993 of file type_vector.h.

994 {
995 #if LIBMESH_DIM == 1
996  return (_coords[0] == rhs._coords[0]);
997 #endif
998 
999 #if LIBMESH_DIM == 2
1000  return (_coords[0] == rhs._coords[0] &&
1001  _coords[1] == rhs._coords[1]);
1002 #endif
1003 
1004 #if LIBMESH_DIM == 3
1005  return (_coords[0] == rhs._coords[0] &&
1006  _coords[1] == rhs._coords[1] &&
1007  _coords[2] == rhs._coords[2]);
1008 #endif
1009 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ operator>() [1/2]

template<>
bool libMesh::TypeVector< Complex >::operator> ( const TypeVector< Complex > &  rhs) const

Definition at line 162 of file type_vector.C.

163 {
164  for (unsigned int i=0; i<LIBMESH_DIM; i++)
165  {
166  if ((*this)(i).real() > rhs(i).real())
167  return true;
168  if ((*this)(i).real() < rhs(i).real())
169  return false;
170  if ((*this)(i).imag() > rhs(i).imag())
171  return true;
172  if ((*this)(i).imag() < rhs(i).imag())
173  return false;
174  }
175  return false;
176 }
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
boost::multiprecision::float128 imag(const boost::multiprecision::float128)

◆ operator>() [2/2]

template<typename T>
bool libMesh::TypeVector< T >::operator> ( const TypeVector< T > &  rhs) const
Returns
true if this vector is "greater" than rhs.

Useful for sorting. Also used for choosing some arbitrary basis function orientations.

Definition at line 95 of file type_vector.C.

96 {
97  for (unsigned int i=0; i<LIBMESH_DIM; i++)
98  {
99  if ((*this)(i) > rhs(i))
100  return true;
101  if ((*this)(i) < rhs(i))
102  return false;
103  }
104  return false;
105 }

◆ operator>=() [1/2]

template<>
bool libMesh::TypeVector< Complex >::operator>= ( const TypeVector< Complex > &  rhs) const

Definition at line 181 of file type_vector.C.

182 {
183  for (unsigned int i=0; i<LIBMESH_DIM; i++)
184  {
185  if ((*this)(i).real() > rhs(i).real())
186  return true;
187  if ((*this)(i).real() < rhs(i).real())
188  return false;
189  if ((*this)(i).imag() > rhs(i).imag())
190  return true;
191  if ((*this)(i).imag() < rhs(i).imag())
192  return false;
193  }
194  return true;
195 }
boost::multiprecision::float128 real(const boost::multiprecision::float128 in)
boost::multiprecision::float128 imag(const boost::multiprecision::float128)

◆ operator>=() [2/2]

template<typename T>
bool libMesh::TypeVector< T >::operator>= ( const TypeVector< T > &  rhs) const
Returns
true if this vector is >= rhs.

Useful for sorting. Also used for choosing some arbitrary constraint equation directions.

Definition at line 109 of file type_vector.C.

110 {
111  for (unsigned int i=0; i<LIBMESH_DIM; i++)
112  {
113  if ((*this)(i) > rhs(i))
114  return true;
115  if ((*this)(i) < rhs(i))
116  return false;
117  }
118  return true;
119 }

◆ print()

template<typename T >
void libMesh::TypeVector< T >::print ( std::ostream &  os = libMesh::out) const

Formatted print, by default to libMesh::out.

Definition at line 1166 of file type_vector.h.

1167 {
1168 #if LIBMESH_DIM == 1
1169 
1170  os << "x=" << (*this)(0);
1171 
1172 #endif
1173 #if LIBMESH_DIM == 2
1174 
1175  os << "(x,y)=("
1176  << std::setw(8) << (*this)(0) << ", "
1177  << std::setw(8) << (*this)(1) << ")";
1178 
1179 #endif
1180 #if LIBMESH_DIM == 3
1181 
1182  os << "(x,y,z)=("
1183  << std::setw(8) << (*this)(0) << ", "
1184  << std::setw(8) << (*this)(1) << ", "
1185  << std::setw(8) << (*this)(2) << ")";
1186 #endif
1187 }

◆ relative_fuzzy_equals()

template<typename T>
bool libMesh::TypeVector< T >::relative_fuzzy_equals ( const TypeVector< T > &  rhs,
Real  tol = TOLERANCE 
) const
inline

◆ slice() [1/2]

template<typename T>
const T& libMesh::TypeVector< T >::slice ( const unsigned int  i) const
inline

Definition at line 160 of file type_vector.h.

160 { return (*this)(i); }

◆ slice() [2/2]

template<typename T>
T& libMesh::TypeVector< T >::slice ( const unsigned int  i)
inline

Definition at line 166 of file type_vector.h.

166 { return (*this)(i); }

◆ subtract()

template<typename T >
template<typename T2 >
void libMesh::TypeVector< T >::subtract ( const TypeVector< T2 > &  p)
inline

Subtract from this vector without creating a temporary.

Definition at line 692 of file type_vector.h.

693 {
694  for (unsigned int i=0; i<LIBMESH_DIM; i++)
695  _coords[i] -= p._coords[i];
696 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ subtract_scaled()

template<typename T>
template<typename T2 >
void libMesh::TypeVector< T >::subtract_scaled ( const TypeVector< T2 > &  p,
const T &  factor 
)
inline

Subtract a scaled value from this vector without creating a temporary.

Definition at line 703 of file type_vector.h.

Referenced by libMesh::HPCoarsenTest::select_refinement().

704 {
705  for (unsigned int i=0; i<LIBMESH_DIM; i++)
706  _coords[i] -= factor*p(i);
707 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

◆ unit()

template<typename T >
TypeVector< T > libMesh::TypeVector< T >::unit ( ) const
inline
Returns
A unit vector in the direction of *this.

Definition at line 1141 of file type_vector.h.

Referenced by libMesh::InfFE< Dim, T_radial, T_map >::compute_face_functions(), libMesh::FEMap::compute_face_map(), ContainsPointTest::containsPointTri3Helper(), libMesh::Polyhedron::convex(), libMesh::Plane::create_from_point_normal(), libMesh::Plane::create_from_three_points(), libMesh::VariationalSmootherConstraint::determine_constraint(), libMesh::MeshTools::Modification::distort(), libMesh::Polyhedron::on_reference_element(), libMesh::Polyhedron::Polyhedron(), libMesh::Elem::quality(), libMesh::C0Polygon::retriangulate(), AzimuthalPeriodicBoundary::set_up_rotation_matrix(), libMesh::Quad4::side_vertex_average_normal(), libMesh::C0Polyhedron::side_vertex_average_normal(), libMesh::C0Polygon::side_vertex_average_normal(), libMesh::Pyramid5::side_vertex_average_normal(), libMesh::Tri3::side_vertex_average_normal(), libMesh::Prism6::side_vertex_average_normal(), libMesh::Hex8::side_vertex_average_normal(), libMesh::Tet4::side_vertex_average_normal(), and libMesh::Sphere::unit_normal().

1142 {
1143 
1144  auto && length = norm();
1145 
1146  libmesh_assert_not_equal_to (length, static_cast<Real>(0.));
1147 
1148 #if LIBMESH_DIM == 1
1149  return TypeVector<T>(_coords[0]/length);
1150 #endif
1151 
1152 #if LIBMESH_DIM == 2
1153  return TypeVector<T>(_coords[0]/length,
1154  _coords[1]/length);
1155 #endif
1156 
1157 #if LIBMESH_DIM == 3
1158  return TypeVector<T>(_coords[0]/length,
1159  _coords[1]/length,
1160  _coords[2]/length);
1161 #endif
1162 
1163 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417
auto norm() const
Definition: type_vector.h:908

◆ write_unformatted()

template<typename T >
void libMesh::TypeVector< T >::write_unformatted ( std::ostream &  out_stream,
const bool  newline = true 
) const

Unformatted print to the stream out.

Simply prints the elements of the vector separated by spaces. Also prints a newline by default, however, this behavior can be controlled with the newline parameter.

Definition at line 51 of file type_vector.C.

Referenced by libMesh::InfElemBuilder::build_inf_elem(), and libMesh::TecplotIO::write_ascii().

53 {
54  os << std::setiosflags(std::ios::showpoint)
55  << (*this)(0) << " "
56  << (*this)(1) << " "
57  << (*this)(2) << " ";
58 
59  if (newline)
60  os << '\n';
61 }

◆ zero()

template<typename T >
void libMesh::TypeVector< T >::zero ( )
inline

Set all entries of the vector to 0.

Definition at line 918 of file type_vector.h.

Referenced by libMesh::VectorValue< Real >::operator=(), libMesh::TypeVector< Real >::operator=(), and TypeVectorTestBase< VectorValue< Number > >::testZeroBase().

919 {
920  for (unsigned int i=0; i<LIBMESH_DIM; i++)
921  _coords[i] = 0.;
922 }
T _coords[LIBMESH_DIM]
The coordinates of the TypeVector.
Definition: type_vector.h:417

Friends And Related Function Documentation

◆ operator<<

template<typename T>
std::ostream& operator<< ( std::ostream &  os,
const TypeVector< T > &  t 
)
friend

Formatted print as above but supports the syntax:

Point p(1,2,3);
std::cout << p << std::endl;

Definition at line 397 of file type_vector.h.

398  {
399  t.print(os);
400  return os;
401  }

◆ TypeTensor< T >

template<typename T>
friend class TypeTensor< T >
friend

Definition at line 67 of file type_vector.h.

◆ TypeVector

template<typename T>
template<typename T2 >
friend class TypeVector
friend

Definition at line 65 of file type_vector.h.

Member Data Documentation

◆ _coords

template<typename T>
T libMesh::TypeVector< T >::_coords[LIBMESH_DIM]
protected

The coordinates of the TypeVector.

Definition at line 417 of file type_vector.h.

Referenced by libMesh::TypeTensor< T >::column(), and libMesh::TypeTensor< T >::row().


The documentation for this class was generated from the following files: