17#ifndef linearAlgebraOperationsInternal_h
18#define linearAlgebraOperationsInternal_h
27#include <unordered_map>
45 const MPI_Comm &mpi_communicator,
46 MPI_Comm &processGridCommunicatorActive,
47 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
60 const MPI_Comm &mpi_communicator,
62 std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
64 const bool useOnlyThumbRule =
false);
72 const MPI_Comm &mpi_communicator,
75 std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
85 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
87 std::unordered_map<dftfe::uInt, dftfe::uInt> &globalToLocalRowIdMap,
88 std::unordered_map<dftfe::uInt, dftfe::uInt> &globalToLocalColumnIdMap);
98 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
100 const MPI_Comm &interComm);
108 template <
typename T>
111 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
112 const std::shared_ptr<
123 template <
typename T>
126 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
128 const MPI_Comm &interComm,
140 template <
typename T>
144 const std::shared_ptr<
149 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
150 const MPI_Comm &interBandGroupComm,
151 const MPI_Comm &mpiComm,
165 template <
typename T,
typename TLowPrec>
169 const std::shared_ptr<
174 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
175 const MPI_Comm &interBandGroupComm,
176 const MPI_Comm &mpiComm,
190 template <
typename T>
193 T *subspaceVectorsArray,
194 const std::shared_ptr<
199 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
200 const MPI_Comm &interBandGroupComm,
201 const MPI_Comm &mpiComm,
204 const bool rotationMatTranspose =
false,
205 const bool isRotationMatLowerTria =
false,
206 const bool doCommAfterBandParal =
true);
217 template <
typename T,
typename TLowPrec>
220 T *subspaceVectorsArray,
221 const std::shared_ptr<
226 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
227 const MPI_Comm &interBandGroupComm,
228 const MPI_Comm &mpiComm,
231 const bool rotationMatTranspose =
false,
232 const bool doCommAfterBandParal =
true);
249 template <
typename T>
253 const std::shared_ptr<
259 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
261 const MPI_Comm &interBandGroupComm,
262 const MPI_Comm &mpiComm,
265 const bool QMatTranspose =
false);
281 template <
typename T,
typename TLowPrec>
285 const std::shared_ptr<
291 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
293 const MPI_Comm &interBandGroupComm,
294 const MPI_Comm &mpiComm,
297 const bool QMatTranspose =
false);
309 template <
typename T,
typename TLowPrec>
312 T *subspaceVectorsArray,
313 const std::shared_ptr<
318 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
319 const MPI_Comm &interBandGroupComm,
320 const MPI_Comm &mpiComm,
323 const bool rotationMatTranspose =
false,
324 const bool doCommAfterBandParal =
true);
Scalapack wrapper adapted from dealii library and extended implementation to complex datatype.
Definition scalapackWrapper.h:37
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:36
Definition BLASWrapper.h:35
Contains internal functions used in linearAlgebraOperations.
Definition linearAlgebraOperationsInternal.h:39
void broadcastAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, dftfe::ScaLAPACKMatrix< T > &mat, const MPI_Comm &interComm, const dftfe::uInt broadcastRoot)
MPI_Bcast of ScaLAPACKMat across a given inter communicator from a given broadcast root....
void createProcessGridRectangularMatrix(const MPI_Comm &mpi_communicator, const dftfe::uInt sizeRows, const dftfe::uInt sizeColumns, std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const dftParameters &dftParams)
Wrapper function to create a two dimensional processor grid for a rectangular matrix in dftfe::ScaLAP...
void createProcessGridSquareMatrix(const MPI_Comm &mpi_communicator, const dftfe::uInt size, std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const dftParameters &dftParams, const bool useOnlyThumbRule=false)
Wrapper function to create a two dimensional processor grid for a square matrix in dftfe::ScaLAPACKMa...
void scaleScaLAPACKMat(const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, dftfe::ScaLAPACKMatrix< T > &mat, const T scalar)
scale a ScaLAPACKMat with a scalar
void setupELPAHandleParameters(const MPI_Comm &mpi_communicator, MPI_Comm &processGridCommunicatorActive, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const dftfe::uInt na, const dftfe::uInt nev, const dftfe::uInt blockSize, elpa_t &elpaHandle, const dftParameters &dftParams)
setup ELPA parameters.
void subspaceRotationMixedPrec(T *subspaceVectorsArray, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dftfe::uInt subspaceVectorsArrayLocalSize, const dftfe::uInt N, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, const dftfe::ScaLAPACKMatrix< T > &rotationMatPar, const dftParameters &dftParams, const bool rotationMatTranspose=false, const bool doCommAfterBandParal=true)
Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray stored in the column major format (...
void subspaceRotationSpectrumSplit(const T *X, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *Y, const dftfe::uInt subspaceVectorsArrayLocalSize, const dftfe::uInt N, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const dftfe::uInt numberTopVectors, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, const dftfe::ScaLAPACKMatrix< T > &QMat, const dftParameters &dftParams, const bool QMatTranspose=false)
Computes Y^{T}=Q*X^{T}.
void fillParallelOverlapMatrixMixedPrec(const T *X, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dftfe::uInt XLocalSize, const dftfe::uInt numberVectors, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, dftfe::ScaLAPACKMatrix< T > &overlapMatPar, const dftParameters &dftParams)
Computes Sc=X^{T}*Xc and stores in a parallel ScaLAPACK matrix. X^{T} is the subspaceVectorsArray sto...
void subspaceRotation(T *subspaceVectorsArray, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dftfe::uInt subspaceVectorsArrayLocalSize, const dftfe::uInt N, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, const dftfe::ScaLAPACKMatrix< T > &rotationMatPar, const dftParameters &dftParams, const bool rotationMatTranspose=false, const bool isRotationMatLowerTria=false, const bool doCommAfterBandParal=true)
Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray stored in the column major format (...
void createGlobalToLocalIdMapsScaLAPACKMat(const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const dftfe::ScaLAPACKMatrix< T > &mat, std::unordered_map< dftfe::uInt, dftfe::uInt > &globalToLocalRowIdMap, std::unordered_map< dftfe::uInt, dftfe::uInt > &globalToLocalColumnIdMap)
Creates global row/column id to local row/column ids for dftfe::ScaLAPACKMatrix.
void subspaceRotationCGSMixedPrec(T *subspaceVectorsArray, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dftfe::uInt subspaceVectorsArrayLocalSize, const dftfe::uInt N, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, const dftfe::ScaLAPACKMatrix< T > &rotationMatPar, const dftParameters &dftParams, const bool rotationMatTranspose=false, const bool doCommAfterBandParal=true)
Computes X^{T}=Q*X^{T} inplace. X^{T} is the subspaceVectorsArray stored in the column major format (...
void subspaceRotationSpectrumSplitMixedPrec(const T *X, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *Y, const dftfe::uInt subspaceVectorsArrayLocalSize, const dftfe::uInt N, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const dftfe::uInt numberTopVectors, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, const dftfe::ScaLAPACKMatrix< T > &QMat, const dftParameters &dftParams, const bool QMatTranspose=false)
Computes Y^{T}=Q*X^{T}.
void sumAcrossInterCommScaLAPACKMat(const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, dftfe::ScaLAPACKMatrix< T > &mat, const MPI_Comm &interComm)
Mpi all reduce of ScaLAPACKMat across a given inter communicator. Used for band parallelization.
void fillParallelOverlapMatrix(const T *X, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dftfe::uInt XLocalSize, const dftfe::uInt numberVectors, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiComm, dftfe::ScaLAPACKMatrix< T > &overlapMatPar, const dftParameters &dftParams)
Computes Sc=X^{T}*Xc and stores in a parallel ScaLAPACK matrix. X^{T} is the subspaceVectorsArray sto...
Contains linear algebra functions used in the implementation of an eigen solver.
Definition linearAlgebraOperations.h:502
Definition pseudoPotentialToDftfeConverter.cc:34
std::uint32_t uInt
Definition TypeConfig.h:10