18#ifndef linearAlgebraOperationsCPU_h
19#define linearAlgebraOperationsCPU_h
53 const unsigned int numberComponents,
54 const unsigned int numberDofs,
55 const MPI_Comm & mpiComm);
69 const unsigned int numberComponents,
70 const MPI_Comm & mpiComm,
91 const std::shared_ptr<
95 const unsigned int numberComponents,
96 const unsigned int numberDofs,
97 const MPI_Comm & mpiCommParent,
98 const MPI_Comm & interBandGroupComm,
99 const MPI_Comm & mpiCommDomain,
100 const bool useMixedPrec,
117 template <
typename T>
121 const std::shared_ptr<
126 const unsigned int numberComponents,
127 const unsigned int numberDofs,
128 const MPI_Comm & mpiCommParent,
129 const MPI_Comm & interBandGroupComm,
130 const MPI_Comm & mpiCommDomain,
131 std::vector<double> &eigenValues,
132 const bool useMixedPrec,
149 template <
typename T>
153 const std::shared_ptr<
158 const unsigned int numberComponents,
159 const unsigned int numberDofs,
160 const MPI_Comm & mpiCommParent,
161 const MPI_Comm & interBandGroupComm,
162 const MPI_Comm & mpiCommDomain,
163 std::vector<double> &eigenValues,
165 const bool doCommAfterBandParal =
true);
178 template <
typename T>
182 const std::shared_ptr<
186 const std::vector<double> &eigenValues,
187 const unsigned int numberComponents,
188 const unsigned int numberDofs,
189 const MPI_Comm & mpiCommParent,
190 const MPI_Comm & mpiCommDomain,
191 const MPI_Comm & interBandGroupComm,
192 std::vector<double> & residualNorm,
198 template <
typename T>
202 const std::shared_ptr<
206 const unsigned int N,
207 const unsigned int numberLocalDofs,
208 const MPI_Comm & mpiCommParent,
209 const MPI_Comm & mpiCommDomain,
210 const MPI_Comm & interBandGroupComm,
211 const std::vector<double> &eigenValues,
212 const double fermiEnergy,
213 std::vector<double> & densityMatDerFermiEnergy,
226 const std::shared_ptr<
230 const unsigned int numberComponents,
231 const unsigned int numberLocalDofs,
232 const MPI_Comm & mpiCommDomain,
233 const MPI_Comm & interBandGroupComm,
235 std::vector<dataTypes::number> &ProjHam);
248 const std::shared_ptr<
252 const unsigned int numberComponents,
253 const unsigned int numberLocalDofs,
254 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
255 const MPI_Comm & mpiCommDomain,
256 const MPI_Comm & interBandGroupComm,
259 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
273 const std::shared_ptr<
277 const unsigned int numberComponents,
278 const unsigned int numberLocalDofs,
279 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
280 const MPI_Comm & mpiCommDomain,
281 const MPI_Comm & interBandGroupComm,
301 const std::shared_ptr<
305 const unsigned int totalNumberComponents,
306 const unsigned int singlePrecComponents,
307 const unsigned int numberLocalDofs,
308 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
309 const MPI_Comm & mpiCommDomain,
310 const MPI_Comm & interBandGroupComm,
313 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
332 const std::shared_ptr<
336 const unsigned int totalNumberComponents,
337 const unsigned int singlePrecComponents,
338 const unsigned int numberLocalDofs,
339 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
340 const MPI_Comm & mpiCommDomain,
341 const MPI_Comm & interBandGroupComm,
362 const unsigned int numberComponents,
363 const unsigned int numberLocalDofs,
364 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
365 const MPI_Comm & mpiCommDomain,
366 const MPI_Comm & interBandGroupComm,
370 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
389 const std::shared_ptr<
393 const unsigned int totalNumberComponents,
394 const unsigned int singlePrecComponents,
395 const unsigned int numberLocalDofs,
396 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
397 const MPI_Comm & mpiCommDomain,
398 const MPI_Comm & interBandGroupComm,
402 const bool onlyHPrimePartForFirstOrderDensityMatResponse =
false);
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:35
Manager class for ELPA and ScaLAPACK.
Definition elpaScalaManager.h:38
Definition BLASWrapper.h:35
Base class for building the DFT operator and the action of operator on a vector.
Definition operator.h:43
double number
Definition dftfeDataTypes.h:44
Contains linear algebra functions used in the implementation of an eigen solver.
Definition linearAlgebraOperations.h:502
void XtHXMixedPrec(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const unsigned int totalNumberComponents, const unsigned int singlePrecComponents, const unsigned int numberLocalDofs, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams, dftfe::ScaLAPACKMatrix< dataTypes::number > &projHamPar, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
Compute projection of the operator into a subspace spanned by a given orthogonal basis HProjConj=X^{T...
void rayleighRitzGEP(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, elpaScalaManager &elpaScala, T *X, const unsigned int numberComponents, const unsigned int numberDofs, const MPI_Comm &mpiCommParent, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiCommDomain, std::vector< double > &eigenValues, const bool useMixedPrec, const dftParameters &dftParams)
Compute Rayleigh-Ritz projection (serial version using LAPACK, parallel version using ScaLAPACK)
void densityMatrixEigenBasisFirstOrderResponse(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *X, const unsigned int N, const unsigned int numberLocalDofs, const MPI_Comm &mpiCommParent, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const std::vector< double > &eigenValues, const double fermiEnergy, std::vector< double > &densityMatDerFermiEnergy, elpaScalaManager &elpaScala, const dftParameters &dftParams)
Compute first order response in density matrix with respect to perturbation in the Hamiltonian....
void gramSchmidtOrthogonalization(T *X, const unsigned int numberComponents, const unsigned int numberDofs, const MPI_Comm &mpiComm)
Orthogonalize given subspace using GramSchmidt orthogonalization.
unsigned int lowdenOrthogonalization(std::vector< dataTypes::number > &X, const unsigned int numberComponents, const MPI_Comm &mpiComm, const dftParameters &dftParams)
Orthogonalize given subspace using Lowden orthogonalization for double data-type (serial version usin...
void XtHX(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const unsigned int numberComponents, const unsigned int numberLocalDofs, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams, std::vector< dataTypes::number > &ProjHam)
Compute projection of the operator into a subspace spanned by a given orthogonal basis HProjConj=X^{T...
void XtOX(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const unsigned int numberComponents, const unsigned int numberLocalDofs, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams, dftfe::ScaLAPACKMatrix< dataTypes::number > &projOverlapPar)
Compute projection of the operator into a subspace spanned by a given orthogonal basis HProjConj=X^{T...
void computeEigenResidualNorm(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *X, const std::vector< double > &eigenValues, const unsigned int numberComponents, const unsigned int numberDofs, const MPI_Comm &mpiCommParent, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, std::vector< double > &residualNorm, const dftParameters &dftParams)
Compute residual norm associated with eigenValue problem of the given operator.
void rayleighRitz(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, elpaScalaManager &elpaScala, T *X, const unsigned int numberComponents, const unsigned int numberDofs, const MPI_Comm &mpiCommParent, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiCommDomain, std::vector< double > &eigenValues, const dftParameters &dftParams, const bool doCommAfterBandParal=true)
Compute Rayleigh-Ritz projection (serial version using LAPACK, parallel version using ScaLAPACK)
unsigned int pseudoGramSchmidtOrthogonalization(elpaScalaManager &elpaScala, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *X, const unsigned int numberComponents, const unsigned int numberDofs, const MPI_Comm &mpiCommParent, const MPI_Comm &interBandGroupComm, const MPI_Comm &mpiCommDomain, const bool useMixedPrec, const dftParameters &dftParams)
Orthogonalize given subspace using Pseudo-Gram-Schmidt orthogonalization (serial version using LAPACK...
void XtHXXtOX(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const unsigned int numberComponents, const unsigned int numberLocalDofs, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams, dftfe::ScaLAPACKMatrix< dataTypes::number > &projHamPar, dftfe::ScaLAPACKMatrix< dataTypes::number > &projOverlapPar, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
Computes the projection of Hamiltonian and Overlap with only a single extraction. Single extraction w...
void XtHXXtOXMixedPrec(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const unsigned int totalNumberComponents, const unsigned int singlePrecComponents, const unsigned int numberLocalDofs, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams, dftfe::ScaLAPACKMatrix< dataTypes::number > &projHamPar, dftfe::ScaLAPACKMatrix< dataTypes::number > &projOverlapPar, const bool onlyHPrimePartForFirstOrderDensityMatResponse=false)
Computes the projection of Hamiltonian and Overlap with only a single extraction with mixed precision...
void XtOXMixedPrec(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const unsigned int totalNumberComponents, const unsigned int singlePrecComponents, const unsigned int numberLocalDofs, const std::shared_ptr< const dftfe::ProcessGrid > &processGrid, const MPI_Comm &mpiCommDomain, const MPI_Comm &interBandGroupComm, const dftParameters &dftParams, dftfe::ScaLAPACKMatrix< dataTypes::number > &projOverlapPar)
Compute projection of the operator into a subspace spanned by a given orthogonal basis HProjConj=X^{T...
@ HOST
Definition MemorySpaceType.h:34
Definition pseudoPotentialToDftfeConverter.cc:34