24#ifndef dftfeMultiVector_h
25#define dftfeMultiVector_h
32#include <deal.II/lac/la_parallel_vector.h>
125 template <
typename ValueType, dftfe::utils::MemorySpace memorySpace>
160 const ValueType initVal = 0);
198 const ValueType initVal = 0);
247 const std::pair<global_size_type, global_size_type> locallyOwnedRange,
248 const std::vector<global_size_type> & ghostIndices,
249 const MPI_Comm & mpiComm,
251 ValueType initVal = 0);
271 const std::pair<global_size_type, global_size_type> locallyOwnedRange,
272 const MPI_Comm & mpiComm,
274 const ValueType initVal = 0);
295 const MPI_Comm & mpiComm,
297 const ValueType initVal = 0);
357 const ValueType initVal = 0);
425 template <
typename ValueBaseType>
429 template <
typename ValueBaseType>
433 template <
typename ValueBaseType>
437 template <
typename ValueBaseType1,
typename ValueBaseType2>
440 const ValueBaseType2 valAdd,
443 template <
typename ValueBaseType1,
typename ValueBaseType2>
446 const ValueBaseType2 valAdd,
476 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
479 template <
typename ValueBaseType>
509 std::unique_ptr<utils::mpi::MPICommunicatorP2P<ValueType, memorySpace>>
511 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
518 template <
typename ValueType, utils::MemorySpace memorySpace>
521 const std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition MultiVector.h:127
void setValue(const ValueType val)
Set all entries of the MultiVector to a given value.
Definition MultiVector.t.cc:520
MultiVector & operator=(const MultiVector &u)
Copy assignment operator.
Definition MultiVector.t.cc:371
void updateGhostValuesBegin(const size_type communicationChannel=0)
Definition MultiVector.t.cc:555
std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > d_mpiPatternP2P
Definition MultiVector.h:512
MultiVector(const std::pair< global_size_type, global_size_type > locallyOwnedRange, const MPI_Comm &mpiComm, const size_type numVectors, const ValueType initVal=0)
Constructor for a special case of distributed MultiVector where none none of the processors have any ...
Definition MultiVector.t.cc:189
void setCommunicationPrecision(utils::mpi::communicationPrecision commPrecision)
Definition MultiVector.t.cc:806
const_iterator begin() const
Return iterator pointing to the beginning of MultiVector data.
Definition MultiVector.t.cc:485
typename Storage::const_reference const_reference
Definition MultiVector.h:136
bool isCompatible(const MultiVector< ValueType, memorySpace > &rhs) const
Definition MultiVector.t.cc:587
size_type d_numVectors
Definition MultiVector.h:508
std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > getMPIPatternP2P() const
Definition MultiVector.t.cc:606
void reinit(const MultiVector &u)
reinit based on an input distributed MultiVector.
Definition MultiVector.t.cc:470
void scale(const ValueBaseType val)
Definition MultiVector.t.cc:757
MultiVector(const size_type size, const size_type numVectors, const ValueType initVal=0)
Constructor for serial MultiVector with vector size, number of vectors and initial value arguments.
Definition MultiVector.t.cc:33
size_type d_ghostSize
Definition MultiVector.h:507
std::unique_ptr< Storage > d_storage
Definition MultiVector.h:503
std::unique_ptr< utils::mpi::MPICommunicatorP2P< NumberType, memorySpace > > d_mpiCommunicatorP2P
Definition MultiVector.h:510
size_type d_locallyOwnedSize
Definition MultiVector.h:506
MultiVector(MultiVector &&u) noexcept
Move constructor.
Definition MultiVector.t.cc:354
MultiVector(std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, const size_type numVectors, const ValueType initVal=0)
Constructor for a distributed MultiVector based on an input MPIPatternP2P.
Definition MultiVector.t.cc:86
typename Storage::iterator iterator
Definition MultiVector.h:137
void accumulateAddLocallyOwnedEnd()
Definition MultiVector.t.cc:580
size_type d_localSize
Definition MultiVector.h:504
void reinit(std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, const size_type numVectors, const ValueType initVal=0)
reinit for a distributed MultiVector based on an input MPIPatternP2P.
Definition MultiVector.t.cc:444
void addAndScale(const ValueBaseType1 valScale, const ValueBaseType2 valAdd, const MultiVector &u)
Definition MultiVector.t.cc:717
const ValueType * data() const
Return the constant raw pointer to the MultiVector data.
Definition MultiVector.t.cc:513
MultiVector(const std::pair< global_size_type, global_size_type > locallyOwnedRange, const std::vector< global_size_type > &ghostIndices, const MPI_Comm &mpiComm, const size_type numVectors, ValueType initVal=0)
Constructor for a \distributed MultiVector based on locally owned and ghost indices.
Definition MultiVector.t.cc:141
~MultiVector()=default
Default Destructor.
global_size_type globalSize() const
iterator begin()
Return iterator pointing to the beginning of MultiVector data.
Definition MultiVector.t.cc:478
size_type localSize() const
Definition MultiVector.t.cc:620
void l2Norm(ValueBaseType *normVec) const
Definition MultiVector.t.cc:649
void scaleAndAdd(const ValueBaseType1 valScale, const ValueBaseType2 valAdd, const MultiVector &u)
Definition MultiVector.t.cc:737
MultiVector()=default
Default Constructor.
void zeroOutGhosts()
Definition MultiVector.t.cc:527
size_type ghostSize() const
Definition MultiVector.t.cc:634
void accumulateAddLocallyOwned(const size_type communicationChannel=0)
Definition MultiVector.t.cc:546
MultiVector & operator=(MultiVector &&u)
Move assignment operator.
Definition MultiVector.t.cc:394
const_iterator end() const
Return iterator pointing to the end of MultiVector data.
Definition MultiVector.t.cc:499
void updateGhostValues(const size_type communicationChannel=0)
Definition MultiVector.t.cc:538
void updateGhostValuesEnd()
Definition MultiVector.t.cc:564
void add(const ValueBaseType val, const MultiVector &u)
Definition MultiVector.t.cc:701
size_type locallyOwnedSize() const
Definition MultiVector.t.cc:627
typename Storage::const_iterator const_iterator
Definition MultiVector.h:138
ValueType * data()
Return the raw pointer to the MultiVector data.
Definition MultiVector.t.cc:506
void swap(MultiVector &u)
pointer swap
Definition MultiVector.t.cc:413
const Storage & getData() const
Definition MultiVector.t.cc:814
void add(const ValueBaseType *valVec, const MultiVector &u)
Definition MultiVector.t.cc:686
void dot(const MultiVector &u, ValueType *dotVec)
Definition MultiVector.t.cc:770
typename Storage::pointer pointer
Definition MultiVector.h:134
global_size_type d_globalSize
Definition MultiVector.h:505
void accumulateAddLocallyOwnedBegin(const size_type communicationChannel=0)
Definition MultiVector.t.cc:571
MultiVector(const global_size_type globalSize, const MPI_Comm &mpiComm, const size_type numVectors, const ValueType initVal=0)
Constructor for a distributed MultiVector based on total number of global indices....
Definition MultiVector.t.cc:242
MultiVector(std::unique_ptr< typename MultiVector< ValueType, memorySpace >::Storage > storage, size_type numVectors)
Constructor for a \serial MultiVector with a predefined MultiVector::Storage (i.e....
Definition MultiVector.t.cc:62
typename Storage::value_type value_type
Definition MultiVector.h:133
dftfe::utils::MemoryStorage< NumberType, memorySpace > Storage
Definition MultiVector.h:132
iterator end()
Return iterator pointing to the end of MultiVector data.
Definition MultiVector.t.cc:492
MultiVector(const MultiVector &u)
Copy constructor.
Definition MultiVector.t.cc:311
typename Storage::reference reference
Definition MultiVector.h:135
MultiVector(const MultiVector &u, const ValueType initVal=0)
Copy constructor with reinitialisation.
Definition MultiVector.t.cc:332
MultiVector(std::unique_ptr< typename MultiVector< ValueType, memorySpace >::Storage > &storage, std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, const size_type numVectors)
Constructor for a distributed MultiVector with a predefined MultiVector::Storage (i....
Definition MultiVector.t.cc:115
size_type numVectors() const
Definition MemoryStorage.h:33
ValueType * iterator
Definition MemoryStorage.h:54
ValueType & reference
Definition MemoryStorage.h:52
ValueType * pointer
Definition MemoryStorage.h:51
ValueType value_type
A class template to provide an interface that can act similar to STL vectors but with different Memor...
Definition MemoryStorage.h:50
const ValueType & const_reference
Definition MemoryStorage.h:53
const ValueType * const_iterator
Definition MemoryStorage.h:55
A class template to store the communication pattern (i.e., which entries/nodes to receive from which ...
Definition MPIPatternP2P.h:57
Definition BLASWrapper.h:33
void createMultiVectorFromDealiiPartitioner(const std::shared_ptr< const dealii::Utilities::MPI::Partitioner > &partitioner, const size_type numVectors, MultiVector< ValueType, memorySpace > &multiVector)
Definition MultiVector.t.cc:821
communicationPrecision
Definition MPICommunicatorP2P.h:55
Definition pseudoPotentialToDftfeConverter.cc:34
unsigned int size_type
Definition TypeConfig.h:6
unsigned long int global_size_type
Definition TypeConfig.h:7