18#ifndef linearAlgebraOperationsCPU_h
19#define linearAlgebraOperationsCPU_h
53 const unsigned int numberComponents,
54 const unsigned int numberDofs,
55 const MPI_Comm &mpiComm);
70 const MPI_Comm &mpiComm,
91 const std::shared_ptr<
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<
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<
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,
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<
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<
232 const MPI_Comm &mpiCommDomain,
233 const MPI_Comm &interBandGroupComm,
235 std::vector<dataTypes::number> &ProjHam);
248 const std::shared_ptr<
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<
279 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
280 const MPI_Comm &mpiCommDomain,
281 const MPI_Comm &interBandGroupComm,
301 const std::shared_ptr<
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<
339 const std::shared_ptr<const dftfe::ProcessGrid> &processGrid,
340 const MPI_Comm &mpiCommDomain,
341 const MPI_Comm &interBandGroupComm,
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<
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:36
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:42
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 dftfe::uInt totalNumberComponents, const dftfe::uInt singlePrecComponents, const dftfe::uInt 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 dftfe::uInt numberComponents, const dftfe::uInt 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 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 dftfe::uInt numberComponents, const dftfe::uInt 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 gramSchmidtOrthogonalization(T *X, const unsigned int numberComponents, const unsigned int numberDofs, const MPI_Comm &mpiComm)
Orthogonalize given subspace using GramSchmidt orthogonalization.
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 dftfe::uInt numberComponents, const dftfe::uInt 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 XtOXMixedPrec(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const dftfe::uInt totalNumberComponents, const dftfe::uInt singlePrecComponents, const dftfe::uInt 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 rayleighRitz(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, elpaScalaManager &elpaScala, T *X, const dftfe::uInt numberComponents, const dftfe::uInt 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)
dftfe::uInt lowdenOrthogonalization(std::vector< dataTypes::number > &X, const dftfe::uInt numberComponents, const MPI_Comm &mpiComm, const dftParameters &dftParams)
Orthogonalize given subspace using Lowden orthogonalization for double data-type (serial version usin...
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 dftfe::uInt totalNumberComponents, const dftfe::uInt singlePrecComponents, const dftfe::uInt 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...
dftfe::uInt pseudoGramSchmidtOrthogonalization(elpaScalaManager &elpaScala, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *X, const dftfe::uInt numberComponents, const dftfe::uInt 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 XtHX(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const dftfe::uInt numberComponents, const dftfe::uInt 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 densityMatrixEigenBasisFirstOrderResponse(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, T *X, const dftfe::uInt N, const dftfe::uInt 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 XtOX(operatorDFTClass< dftfe::utils::MemorySpace::HOST > &operatorMatrix, const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< dftfe::utils::MemorySpace::HOST > > &BLASWrapperPtr, const dataTypes::number *X, const dftfe::uInt numberComponents, const dftfe::uInt 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
std::uint32_t uInt
Definition TypeConfig.h:10