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);
246 MultiVector(
const std::pair<dftfe::uInt, dftfe::uInt> locallyOwnedRange,
247 const std::vector<dftfe::uInt> &ghostIndices,
248 const MPI_Comm &mpiComm,
250 ValueType initVal = 0);
269 MultiVector(
const std::pair<dftfe::uInt, dftfe::uInt> locallyOwnedRange,
270 const MPI_Comm &mpiComm,
272 const ValueType initVal = 0);
293 const MPI_Comm &mpiComm,
295 const ValueType initVal = 0);
355 const ValueType initVal = 0);
423 template <
typename ValueBaseType>
427 template <
typename ValueBaseType>
431 template <
typename ValueBaseType>
435 template <
typename ValueBaseType1,
typename ValueBaseType2>
438 const ValueBaseType2 valAdd,
441 template <
typename ValueBaseType1,
typename ValueBaseType2>
444 const ValueBaseType2 valAdd,
475 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
478 template <
typename ValueBaseType>
508 std::unique_ptr<utils::mpi::MPICommunicatorP2P<ValueType, memorySpace>>
510 std::shared_ptr<const utils::mpi::MPIPatternP2P<memorySpace>>
517 template <
typename ValueType, utils::MemorySpace memorySpace>
520 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(const dftfe::uInt size, const dftfe::uInt numVectors, const ValueType initVal=0)
Constructor for serial MultiVector with vector size, number of vectors and initial value arguments.
Definition MultiVector.t.cc:33
dftfe::uInt globalSize() const
MultiVector & operator=(const MultiVector &u)
Copy assignment operator.
Definition MultiVector.t.cc:371
dftfe::uInt localSize() const
Definition MultiVector.t.cc:620
std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > d_mpiPatternP2P
Definition MultiVector.h:511
void updateGhostValues(const dftfe::uInt communicationChannel=0)
Definition MultiVector.t.cc:538
void setCommunicationPrecision(utils::mpi::communicationPrecision commPrecision)
Definition MultiVector.t.cc:806
dftfe::uInt d_locallyOwnedSize
Definition MultiVector.h:505
MultiVector(std::unique_ptr< typename MultiVector< ValueType, memorySpace >::Storage > storage, dftfe::uInt numVectors)
Constructor for a \serial MultiVector with a predefined MultiVector::Storage (i.e....
Definition MultiVector.t.cc:62
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
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 updateGhostValuesBegin(const dftfe::uInt communicationChannel=0)
Definition MultiVector.t.cc:555
void scale(const ValueBaseType val)
Definition MultiVector.t.cc:757
dftfe::uInt locallyOwnedSize() const
Definition MultiVector.t.cc:627
std::unique_ptr< Storage > d_storage
Definition MultiVector.h:502
std::unique_ptr< utils::mpi::MPICommunicatorP2P< NumberType, memorySpace > > d_mpiCommunicatorP2P
Definition MultiVector.h:509
MultiVector(MultiVector &&u) noexcept
Move constructor.
Definition MultiVector.t.cc:354
dftfe::uInt d_globalSize
Definition MultiVector.h:504
typename Storage::iterator iterator
Definition MultiVector.h:137
void accumulateAddLocallyOwnedEnd()
Definition MultiVector.t.cc:580
dftfe::uInt d_ghostSize
Definition MultiVector.h:506
void reinit(std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, const dftfe::uInt 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
dftfe::uInt d_localSize
Definition MultiVector.h:503
MultiVector(const dftfe::uInt globalSize, const MPI_Comm &mpiComm, const dftfe::uInt numVectors, const ValueType initVal=0)
Constructor for a distributed MultiVector based on total number of global indices....
Definition MultiVector.t.cc:242
~MultiVector()=default
Default Destructor.
MultiVector(std::unique_ptr< typename MultiVector< ValueType, memorySpace >::Storage > &storage, std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, const dftfe::uInt numVectors)
Constructor for a distributed MultiVector with a predefined MultiVector::Storage (i....
Definition MultiVector.t.cc:115
iterator begin()
Return iterator pointing to the beginning of MultiVector data.
Definition MultiVector.t.cc:478
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.
dftfe::uInt ghostSize() const
Definition MultiVector.t.cc:634
void zeroOutGhosts()
Definition MultiVector.t.cc:527
void accumulateAddLocallyOwnedBegin(const dftfe::uInt communicationChannel=0)
Definition MultiVector.t.cc:571
void accumulateAddLocallyOwned(const dftfe::uInt communicationChannel=0)
Definition MultiVector.t.cc:546
MultiVector(std::shared_ptr< const utils::mpi::MPIPatternP2P< memorySpace > > mpiPatternP2P, const dftfe::uInt numVectors, const ValueType initVal=0)
Constructor for a distributed MultiVector based on an input MPIPatternP2P.
Definition MultiVector.t.cc:86
MultiVector(const std::pair< dftfe::uInt, dftfe::uInt > locallyOwnedRange, const MPI_Comm &mpiComm, const dftfe::uInt 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
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 updateGhostValuesEnd()
Definition MultiVector.t.cc:564
dftfe::uInt numVectors() const
void add(const ValueBaseType val, const MultiVector &u)
Definition MultiVector.t.cc:701
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
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
dftfe::uInt d_numVectors
Definition MultiVector.h:507
MultiVector(const std::pair< dftfe::uInt, dftfe::uInt > locallyOwnedRange, const std::vector< dftfe::uInt > &ghostIndices, const MPI_Comm &mpiComm, const dftfe::uInt numVectors, ValueType initVal=0)
Constructor for a \distributed MultiVector based on locally owned and ghost indices.
Definition MultiVector.t.cc:141
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 dftfe::uInt numVectors, MultiVector< ValueType, memorySpace > &multiVector)
Definition MultiVector.t.cc:821
communicationPrecision
Definition MPICommunicatorP2P.h:55
Definition pseudoPotentialToDftfeConverter.cc:34
std::uint32_t uInt
Definition TypeConfig.h:10