32#ifndef MADNESS_WORLD_VECTOR_H__INCLUDED
33#define MADNESS_WORLD_VECTOR_H__INCLUDED
63 template <
typename T, std::
size_t N>
68 template <
typename Q,std::
size_t M>
105 template <
typename Q>
107#if __cplusplus >= 202002L
108 std::copy(t, t+
N,
data_.begin());
110 for(std::size_t i=0; i!=
N; ++i)
data_[i] = t[i];
119 template <
typename Q,
typename A>
120 constexpr explicit Vector(
const std::vector<Q, A>& t) {
128 template <
typename Q>
129 constexpr explicit Vector(
const std::array<Q, N>& t) {
148 template <
typename Q>
163 constexpr Vector(std::initializer_list<T> list) :
167#if __cplusplus >= 202002L
168 std::copy(list.begin(), list.end(),
data_.begin());
170 for(std::size_t i=0; i!=
N; ++i)
data_[i] = *(list.begin()+i);
188 template <
typename Q>
201 template <
typename Q,
typename A>
204#if __cplusplus >= 202002L
205 std::copy(other.begin(), other.begin() +
N,
data_.begin());
207 for(std::size_t i=0; i!=
N; ++i)
data_[i] = other[i];
224#if __cplusplus >= 202002L
225 std::copy(list.begin(), list.end(),
data_.begin());
227 for(std::size_t i=0; i!=
N; ++i)
data_[i] = *(list.begin() + i);
244 constexpr operator std::array<T,N> () {
return data_; }
372#if __cplusplus >= 202002L
375 for (std::size_t i = 0; i <
N; i++)
386 template <
typename Q>
398 template <
typename Q>
410 template <
typename Q>
423 for(std::size_t i=0; i<
N; ++i)
432 template <
typename Archive>
505 using madness::operators::operator<<;
517 template <
typename T, std::
size_t N>
535 template <
typename T, std::
size_t N,
typename U>
538 for (std::size_t i = 0; i <
N; ++i)
554 template <
typename T,
typename U, std::
size_t N>
557 for (std::size_t i = 0; i <
N; ++i)
572 template <
typename T, std::
size_t N,
typename U>
575 for (std::size_t i = 0; i <
N; ++i)
590 template <
typename T, std::
size_t N,
typename U>
592 for (std::size_t i = 0; i <
N; ++i)
606 template <
typename T, std::
size_t N,
typename U>
609 for (std::size_t i = 0; i <
N; ++i)
624 template <
typename T, std::
size_t N,
typename U>
627 for (std::size_t i = 0; i <
N; ++i)
641 template <
typename T, std::
size_t N,
typename U>
644 for (std::size_t i = 0; i <
N; ++i)
659 template <
typename T, std::
size_t N,
typename U>
662 for (std::size_t i = 0; i <
N; ++i)
677 template <
typename T, std::
size_t N>
679 static_assert(std::is_arithmetic_v<T>);
681 for (std::size_t i = 0; i <
N; ++i)
694 template <
typename T, std::
size_t N>
695 constexpr typename std::enable_if<N==3, Vector<T,N> >
::type
698 result[0]=l[1]*r[2] - r[1]*l[2];
699 result[1]=l[2]*r[0] - r[2]*l[0];
700 result[2]=l[0]*r[1] - r[0]*l[1];
749 template<
typename T,
typename... Ts>
751 return Vector<
T,
sizeof...(Ts) + 1> {
752 std::array<
T,
sizeof...(Ts) + 1>
753 {{ t,
static_cast<T>(
ts)... }}
767 template<
typename T, std::
size_t N>
772 return r * (1.0/
norm);
double q(double t)
Definition DKops.h:18
Interface templates for the archives (serialization).
Supplements to the std::array class, such as I/O operations, for convenience.
A simple, fixed dimension vector.
Definition vector.h:64
constexpr const_iterator end() const
Const iterator to the end (past the last element).
Definition vector.h:265
constexpr Vector(const Vector< T, N > &other)
Copy constructor is deep (because Vector is POD).
Definition vector.h:136
friend constexpr bool operator>(const Vector< T, N > &l, const Vector< T, N > &r)
Compare l and r lexicographically.
Definition vector.h:477
typename arrayT::reverse_iterator reverse_iterator
Reverse iterator type.
Definition vector.h:79
typename arrayT::iterator iterator
Iterator type.
Definition vector.h:77
typename arrayT::const_reference const_reference
Const reference type.
Definition vector.h:82
constexpr const_reference back() const
Access the last element.
Definition vector.h:350
friend constexpr bool operator!=(const Vector< T, N > &l, const Vector< T, N > &r)
Check if any element is not equal to its partner in the other Vector.
Definition vector.h:459
constexpr Vector()=default
Default constructor; does not initialize vector contents.
friend constexpr bool operator<(const Vector< T, N > &l, const Vector< T, N > &r)
Compare l and r lexicographically.
Definition vector.h:468
typename arrayT::value_type value_type
The data value type.
Definition vector.h:76
constexpr const_reverse_iterator rend() const
Const reverse iterator to the beginning (before the first element).
Definition vector.h:286
constexpr Vector(std::initializer_list< T > list)
List initialization constructor (deep copy because Vector is POD).
Definition vector.h:163
constexpr size_type max_size() const
Get the maximum size of the Vector.
Definition vector.h:303
constexpr iterator begin()
Iterator starting at the first element.
Definition vector.h:250
constexpr Vector< T, N > & operator=(const Vector< T, N > &other)
Assignment is deep (because a Vector is POD).
Definition vector.h:178
constexpr Vector(const std::vector< Q, A > &t)
Construct from an STL vector of equal or greater length.
Definition vector.h:120
friend constexpr bool operator>=(const Vector< T, N > &l, const Vector< T, N > &r)
Compare l and r lexicographically.
Definition vector.h:495
constexpr reverse_iterator rbegin()
Reverse iterator starting at the last element.
Definition vector.h:271
constexpr const_reference front() const
Access the first element.
Definition vector.h:340
constexpr Vector< T, N > & operator-=(const Vector< Q, N > &q)
In-place, element-wise subtraction of another Vector.
Definition vector.h:411
constexpr T normf() const
Calculate the 2-norm of the vector elements.
Definition vector.h:421
constexpr Vector(const Q(&t)[N])
Construct from a C-style array of the same dimension.
Definition vector.h:106
constexpr reference front()
Access the first element.
Definition vector.h:335
constexpr Vector< T, N > & operator=(std::initializer_list< T > list)
List initialization assignment (deep copy because Vector is POD).
Definition vector.h:222
constexpr const_reference operator[](size_type i) const
Access element i of the Vector.
Definition vector.h:318
constexpr size_type size() const
Accessor for the number of elements in the Vector.
Definition vector.h:292
constexpr iterator end()
Iterator to the end (past the last element).
Definition vector.h:260
typename arrayT::const_reverse_iterator const_reverse_iterator
Const reverse iterator type.
Definition vector.h:80
constexpr T * data()
Direct access to the underlying array.
Definition vector.h:355
constexpr Vector(const Vector< Q, N > &other)
Copy constructor is deep (because Vector is POD).
Definition vector.h:149
constexpr Vector(const std::array< Q, N > &t)
Construct from a std::array of equal length.
Definition vector.h:129
constexpr void swap(Vector< T, N > &other)
Swap the contents with another Vector.
Definition vector.h:366
constexpr reference operator[](size_type i)
Access element i of the Vector.
Definition vector.h:311
constexpr bool empty() const
Check if the Vector is empty.
Definition vector.h:298
static constexpr size_type static_size
The size of the Vector.
Definition vector.h:87
constexpr const_iterator begin() const
Const iterator starting at the first element.
Definition vector.h:255
typename arrayT::const_iterator const_iterator
Const iterator type.
Definition vector.h:78
constexpr reverse_iterator rend()
Reverse iterator to the beginning (before the first element).
Definition vector.h:281
constexpr Vector< T, N > & operator+=(const Vector< Q, N > &q)
In-place, element-wise addition of another Vector.
Definition vector.h:399
constexpr reference back()
Access the last element.
Definition vector.h:345
constexpr Vector(Q t)
Initialize all elements to value t.
Definition vector.h:97
constexpr Vector< T, N > & operator=(const T &t)
Fill from a scalar value.
Definition vector.h:236
typename arrayT::difference_type difference_type
Difference type.
Definition vector.h:84
friend constexpr bool operator<=(const Vector< T, N > &l, const Vector< T, N > &r)
Compare l and r lexicographically.
Definition vector.h:486
typename arrayT::reference reference
Reference type.
Definition vector.h:81
constexpr const T * data() const
Direct access to the underlying array.
Definition vector.h:360
constexpr reference at(size_type i)
Access element i of the Vector with bounds checking.
Definition vector.h:324
friend std::ostream & operator<<(std::ostream &s, const Vector< T, N > &v)
Output a Vector to stream.
Definition vector.h:504
constexpr const_reference at(size_type i) const
Access element i of the Vector with bounds checking.
Definition vector.h:330
constexpr void fill(const T &t)
Fill the Vector with the specified value.
Definition vector.h:371
constexpr Vector< T, N > & operator=(const Vector< Q, N > &other)
Assignment is deep (because Vector is POD).
Definition vector.h:189
arrayT data_
The underlying array.
Definition vector.h:72
constexpr hashT hash() const
Support for MADNESS hashing.
Definition vector.h:440
constexpr Vector< T, N > & operator=(const std::vector< Q, A > &other)
Assignment is deep (because Vector is POD).
Definition vector.h:202
constexpr const_reverse_iterator rbegin() const
Const reverse iterator starting at the last element.
Definition vector.h:276
std::array< T, N > arrayT
The underlying array type.
Definition vector.h:66
constexpr void serialize(Archive &ar)
Support for MADNESS serialization.
Definition vector.h:433
friend constexpr bool operator==(const Vector< T, N > &l, const Vector< T, N > &r)
Check if each element is equal to its partner in the other Vector.
Definition vector.h:450
constexpr Vector< T, N > & operator*=(Q q)
In-place, element-wise multiplcation by a scalar.
Definition vector.h:387
typename arrayT::size_type size_type
Size type.
Definition vector.h:83
auto T(World &world, response_space &f) -> response_space
Definition global_functions.cc:34
static const double v
Definition hatom_sf_dirac.cc:20
Macros and tools pertaining to the configuration of MADNESS.
#define MADNESS_PRAGMA_GCC(x)
Definition madness_config.h:205
Defines madness::MadnessException for exception handling.
#define MADNESS_ASSERT(condition)
Assert a condition that should be free of side-effects since in release builds this might be a no-op.
Definition madness_exception.h:134
Namespace for all elements and tools of MADNESS.
Definition DFParameters.h:10
constexpr void swap(Vector< T, N > &l, Vector< T, N > &r)
Swap the contents of two Vectors.
Definition vector.h:518
std::vector< Function< TENSOR_RESULT_TYPE(T, R), NDIM > > cross(const std::vector< Function< T, NDIM > > &f, const std::vector< Function< R, NDIM > > &g, bool do_refine=false, bool fence=true)
shorthand cross operator
Definition vmra.h:2098
std::vector< CCPairFunction< T, NDIM > > operator*(const double fac, const std::vector< CCPairFunction< T, NDIM > > &arg)
Definition ccpairfunction.h:1089
constexpr Vector< T, N > unitvec(const Vector< T, N > &r, const double eps=1.e-6)
Construct a unit-Vector that has the same direction as r.
Definition vector.h:768
std::vector< CCPairFunction< T, NDIM > > operator-(const std::vector< CCPairFunction< T, NDIM > > c1, const std::vector< CCPairFunction< T, NDIM > > &c2)
Definition ccpairfunction.h:1060
constexpr Vector< T, N > operator/(Vector< T, N > l, const Vector< U, N > &r)
Divide (element-wise) two Vectors.
Definition vector.h:591
static double pop(std::vector< double > &v)
Definition SCF.cc:113
std::size_t hashT
The hash value type.
Definition worldhash.h:145
double inner(response_space &a, response_space &b)
Definition response_functions.h:442
std::string type(const PairType &n)
Definition PNOParameters.h:18
std::vector< CCPairFunction< T, NDIM > > operator+(const std::vector< CCPairFunction< T, NDIM > > c1, const std::vector< CCPairFunction< T, NDIM > > &c2)
Definition ccpairfunction.h:1052
constexpr Vector< T, sizeof...(Ts)+1 > vec(T t, Ts... ts)
Factory function for creating a madness::Vector.
Definition vector.h:750
static XNonlinearSolver< std::vector< Function< T, NDIM > >, T, vector_function_allocator< T, NDIM > > nonlinear_vector_solver(World &world, const long nvec)
Definition nonlinsol.h:284
madness::hashT hash_value(const std::array< T, N > &a)
Hash std::array with madness hash.
Definition array_addons.h:78
static const double d
Definition nonlinschro.cc:121
double Q(double a)
Definition relops.cc:20
double norm(const T i1)
Definition test_cloud.cc:72
#define N
Definition testconv.cc:37
Defines hash functions for use in distributed containers.