PolyDiM
C++ library for POLYtopal DIscretization Methods
Loading...
Searching...
No Matches
Eigen_Array.hpp
Go to the documentation of this file.
1// _LICENSE_HEADER_
2//
3// Copyright (C) 2019 - 2025.
4// Terms register on the GPL-3.0 license.
5//
6// This file can be redistributed and/or modified under the license terms.
7//
8// See top level LICENSE file for more details.
9//
10// This file can be used citing references in CITATION.cff file.
11
12#ifndef __Eigen_Array_HPP
13#define __Eigen_Array_HPP
14
15#include "Eigen/Eigen"
16#include "IArray.hpp"
17
18namespace Gedim
19{
21template <typename Eigen_ArrayType = Eigen::VectorXd, typename Eigen_SparseArrayType = Eigen::SparseMatrix<double>>
22class Eigen_Array final : public IArray
23{
24 private:
25 Eigen_ArrayType _vector;
26
27 public:
29 {
30 }
31 Eigen_Array(const Eigen_ArrayType &vector)
32 {
33 _vector = vector;
34 }
35 Eigen_Array(Eigen_ArrayType &&vector)
36 {
37 _vector = std::move(vector);
38 }
40 {
41 }
42
43 operator Eigen_ArrayType &()
44 {
45 return _vector;
46 }
47 operator const Eigen_ArrayType &() const
48 {
49 return _vector;
50 }
51 inline Eigen_ArrayType &Cast(IArray &v)
52 {
53 return (Eigen_ArrayType &)static_cast<Eigen_Array<Eigen_ArrayType, Eigen_SparseArrayType> &>(v);
54 }
55 inline const Eigen_ArrayType &Cast(const IArray &v) const
56 {
57 return (const Eigen_ArrayType &)static_cast<const Eigen_Array<Eigen_ArrayType, Eigen_SparseArrayType> &>(v);
58 }
59
60 inline void Create()
61 {
62 }
63 inline void Destroy()
64 {
65 }
66 inline void SetSize(const unsigned int &numCols)
67 {
68 _vector.setZero(numCols);
69 }
70 inline void SetSizes(const unsigned int &numCols, const unsigned int & = 0)
71 {
72 return SetSize(numCols);
73 }
74
75 inline unsigned int Size() const
76 {
77 return _vector.size();
78 }
79 inline const double *Data() const
80 {
81 return _vector.data();
82 }
83 inline double *Data()
84 {
85 return _vector.data();
86 }
87
88 inline void SetValue(const int &i, const double &val)
89 {
90 _vector[i] = val;
91 }
92 void SetValues(const std::vector<int> &indices, const std::vector<double> &values);
93 inline void AddValue(const int &i, const double &val)
94 {
95 _vector[i] += val;
96 }
97 void AddValues(const std::vector<int> &indices, const std::vector<double> &values);
98 std::vector<double> GetValues(const std::vector<int> &indices = {}) const;
99
100 inline double GetValue(const int &i) const
101 {
102 return _vector[i];
103 }
104
105 inline void Zeros()
106 {
107 _vector.setZero();
108 }
109 inline void Ones()
110 {
111 _vector.setOnes();
112 }
113 inline void Constant(const double &c)
114 {
115 _vector.setConstant(c);
116 }
117
118 void SumMultiplication(const ISparseArray &A, const IArray &w);
119 void SubtractionMultiplication(const ISparseArray &A, const IArray &w);
120
121 double &operator[](const int &i)
122 {
123 return _vector[i];
124 }
125 const double &operator[](const int &i) const
126 {
127 return _vector[i];
128 }
129
130 inline void Concatenate(const IArray &v, const IArray &w)
131 {
132 _vector << Cast(v), Cast(w);
133 }
134
135 inline std::ostream &Print(std::ostream &output) const
136 {
137 return output << _vector.transpose();
138 }
139
140 inline IArray &operator+=(const IArray &v)
141 {
142 _vector += Cast(v);
143 return *this;
144 }
145 inline IArray &operator-=(const IArray &v)
146 {
147 _vector -= Cast(v);
148 return *this;
149 }
150 inline IArray &operator*=(const double &c)
151 {
152 _vector *= c;
153 return *this;
154 }
155 inline IArray &operator/=(const double &c)
156 {
157 _vector /= c;
158 return *this;
159 }
160
162 {
164 sumResult._vector = _vector + other._vector;
165 return sumResult;
166 }
167
169 {
171 sumResult._vector = _vector - other._vector;
172 return sumResult;
173 }
174
176 {
178 sumResult._vector = other * _vector;
179 return sumResult;
180 }
181
183 {
184 _vector = std::move(vector);
185 return *this;
186 }
187
188 void ToBinaryFile(const std::string &filePath,
189 const unsigned int &dataSizeToWrite = 0,
190 const unsigned int &dataStartingPositionToWrite = 0,
191 const bool &append = false) const;
192
193 inline double Norm() const
194 {
195 return _vector.norm();
196 }
197
198 inline double Dot(const IArray &v) const
199 {
200 return _vector.dot(Cast(v));
201 }
202
203 inline void Copy(const IArray &v)
204 {
205 _vector = Cast(v);
206 }
207
208 inline Eigen_Array<Eigen_ArrayType, Eigen_SparseArrayType> Segment(const unsigned int starter, const unsigned int numElements) const
209 {
211 }
212};
213} // namespace Gedim
214
215#endif // __Eigen_Array_HPP
Eigen column vector.
Definition Eigen_Array.hpp:23
Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > operator*(const double &other) const
Definition Eigen_Array.hpp:175
void SetSizes(const unsigned int &numCols, const unsigned int &=0)
Set the size the Array. Resize a Array for Eigen application.
Definition Eigen_Array.hpp:70
void Zeros()
Put zero-values in the Array.
Definition Eigen_Array.hpp:105
std::ostream & Print(std::ostream &output) const
Print the array.
Definition Eigen_Array.hpp:135
const double * Data() const
Definition Eigen_Array.hpp:79
const Eigen_ArrayType & Cast(const IArray &v) const
Definition Eigen_Array.hpp:55
void SubtractionMultiplication(const ISparseArray &A, const IArray &w)
Multiplication of matrix and vector and sum to local vector, equivalent to v -= A * w.
Definition Eigen_Array.cpp:88
double Norm() const
Definition Eigen_Array.hpp:193
double Dot(const IArray &v) const
Definition Eigen_Array.hpp:198
Eigen_ArrayType & Cast(IArray &v)
Definition Eigen_Array.hpp:51
Eigen_Array(Eigen_ArrayType &&vector)
Definition Eigen_Array.hpp:35
void AddValue(const int &i, const double &val)
Add value to the Array.
Definition Eigen_Array.hpp:93
double * Data()
Definition Eigen_Array.hpp:83
double GetValue(const int &i) const
Definition Eigen_Array.hpp:100
void SetSize(const unsigned int &numCols)
Set the size the Array. Resize a Array for Eigen application.
Definition Eigen_Array.hpp:66
void SetValue(const int &i, const double &val)
Set the Array Value.
Definition Eigen_Array.hpp:88
IArray & operator+=(const IArray &v)
Definition Eigen_Array.hpp:140
std::vector< double > GetValues(const std::vector< int > &indices={}) const
Definition Eigen_Array.cpp:44
unsigned int Size() const
Definition Eigen_Array.hpp:75
IArray & operator-=(const IArray &v)
Definition Eigen_Array.hpp:145
void Destroy()
Definition Eigen_Array.hpp:63
void ToBinaryFile(const std::string &filePath, const unsigned int &dataSizeToWrite=0, const unsigned int &dataStartingPositionToWrite=0, const bool &append=false) const
Write array to binary file.
Definition Eigen_Array.cpp:111
void Create()
Matrix create call. Last call to complete the matrix structure.
Definition Eigen_Array.hpp:60
void Constant(const double &c)
Definition Eigen_Array.hpp:113
IArray & operator*=(const double &c)
Definition Eigen_Array.hpp:150
void AddValues(const std::vector< int > &indices, const std::vector< double > &values)
Add values in the indices to the Array.
Definition Eigen_Array.cpp:35
void SetValues(const std::vector< int > &indices, const std::vector< double > &values)
Set the Array Values.
Definition Eigen_Array.cpp:26
Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > Segment(const unsigned int starter, const unsigned int numElements) const
Definition Eigen_Array.hpp:208
~Eigen_Array()
Definition Eigen_Array.hpp:39
Eigen_Array()
Definition Eigen_Array.hpp:28
void Concatenate(const IArray &v, const IArray &w)
Concatenate vectors, equivalent u<< v, w.
Definition Eigen_Array.hpp:130
void SumMultiplication(const ISparseArray &A, const IArray &w)
Multiplication of matrix and vector, equivalent to v += A * w.
Definition Eigen_Array.cpp:66
const double & operator[](const int &i) const
const operator []
Definition Eigen_Array.hpp:125
double & operator[](const int &i)
operator []
Definition Eigen_Array.hpp:121
Eigen_Array(const Eigen_ArrayType &vector)
Definition Eigen_Array.hpp:31
IArray & operator/=(const double &c)
Definition Eigen_Array.hpp:155
void Copy(const IArray &v)
Copy the content of vector v inside this.
Definition Eigen_Array.hpp:203
Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > operator+(const Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > &other) const
Definition Eigen_Array.hpp:161
void Ones()
Put one-values in the Array.
Definition Eigen_Array.hpp:109
Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > & operator=(Eigen_ArrayType &&vector)
Definition Eigen_Array.hpp:182
Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > operator-(const Eigen_Array< Eigen_ArrayType, Eigen_SparseArrayType > &other) const
Definition Eigen_Array.hpp:168
Interface used for column double Array.
Definition IArray.hpp:23
Interface used for sparse Array of double.
Definition ISparseArray.hpp:25
Definition Eigen_Array.cpp:22