18#ifndef linearAlgebraOperations_h
19#define linearAlgebraOperations_h
33#ifndef DOXYGEN_SHOULD_SKIP_THIS
37 dgemv_(
const char * TRANS,
38 const unsigned int *M,
39 const unsigned int *N,
42 const unsigned int *
LDA,
44 const unsigned int *INCX,
47 const unsigned int *INCY);
50 sgemv_(
const char * TRANS,
51 const unsigned int *M,
52 const unsigned int *N,
55 const unsigned int *
LDA,
57 const unsigned int *INCX,
60 const unsigned int *INCY);
63 zgemv_(
const char * TRANS,
64 const unsigned int * M,
65 const unsigned int * N,
66 const std::complex<double> *alpha,
67 const std::complex<double> *A,
68 const unsigned int *
LDA,
69 const std::complex<double> *X,
70 const unsigned int * INCX,
71 const std::complex<double> *beta,
72 std::complex<double> * C,
73 const unsigned int * INCY);
76 cgemv_(
const char * TRANS,
77 const unsigned int * M,
78 const unsigned int * N,
79 const std::complex<float> *alpha,
80 const std::complex<float> *A,
81 const unsigned int *
LDA,
82 const std::complex<float> *X,
83 const unsigned int * INCX,
84 const std::complex<float> *beta,
85 std::complex<float> * C,
86 const unsigned int * INCY);
88 dsymv_(
const char * UPLO,
89 const unsigned int *N,
92 const unsigned int *
LDA,
94 const unsigned int *INCX,
97 const unsigned int *INCY);
108 dsysv_(
const char *UPLO,
120 dscal_(
const unsigned int *n,
121 const double * alpha,
123 const unsigned int *inc);
125 sscal_(
const unsigned int *n,
128 const unsigned int *inc);
130 zscal_(
const unsigned int * n,
131 const std::complex<double> *alpha,
132 std::complex<double> * x,
133 const unsigned int * inc);
135 zdscal_(
const unsigned int * n,
136 const double * alpha,
137 std::complex<double> *x,
138 const unsigned int * inc);
140 daxpy_(
const unsigned int *n,
141 const double * alpha,
143 const unsigned int *incx,
145 const unsigned int *incy);
147 saxpy_(
const unsigned int *n,
150 const unsigned int *incx,
152 const unsigned int *incy);
154 dgemm_(
const char * transA,
156 const unsigned int *m,
157 const unsigned int *n,
158 const unsigned int *k,
159 const double * alpha,
161 const unsigned int *lda,
163 const unsigned int *ldb,
166 const unsigned int *ldc);
168 sgemm_(
const char * transA,
170 const unsigned int *m,
171 const unsigned int *n,
172 const unsigned int *k,
175 const unsigned int *lda,
177 const unsigned int *ldb,
180 const unsigned int *ldc);
182 dsyevd_(
const char * jobz,
184 const unsigned int *n,
186 const unsigned int *lda,
189 const unsigned int *lwork,
191 const unsigned int *liwork,
194 dsygvx_(
const int * itype,
207 const double *abstol,
218 dsyevx_(
const char * jobz,
228 const double *abstol,
239 dlamch_(
const char *cmach);
241 dsyevr_(
const char * jobz,
244 const unsigned int *n,
246 const unsigned int *lda,
249 const unsigned int *il,
250 const unsigned int *iu,
251 const double * abstol,
252 const unsigned int *m,
255 const unsigned int *ldz,
256 unsigned int * isuppz,
263 dsyrk_(
const char * uplo,
265 const unsigned int *n,
266 const unsigned int *k,
267 const double * alpha,
269 const unsigned int *lda,
272 const unsigned int *ldc);
274 dsyr_(
const char * uplo,
275 const unsigned int *n,
276 const double * alpha,
278 const unsigned int *incx,
280 const unsigned int *lda);
282 dsyr2_(
const char * uplo,
283 const unsigned int *n,
284 const double * alpha,
286 const unsigned int *incx,
288 const unsigned int *incy,
290 const unsigned int *lda);
292 dcopy_(
const unsigned int *n,
294 const unsigned int *incx,
296 const unsigned int *incy);
298 scopy_(
const unsigned int *n,
300 const unsigned int *incx,
302 const unsigned int *incy);
304 zgemm_(
const char * transA,
306 const unsigned int * m,
307 const unsigned int * n,
308 const unsigned int * k,
309 const std::complex<double> *alpha,
310 const std::complex<double> *A,
311 const unsigned int * lda,
312 const std::complex<double> *B,
313 const unsigned int * ldb,
314 const std::complex<double> *beta,
315 std::complex<double> * C,
316 const unsigned int * ldc);
318 cgemm_(
const char * transA,
320 const unsigned int * m,
321 const unsigned int * n,
322 const unsigned int * k,
323 const std::complex<float> *alpha,
324 const std::complex<float> *A,
325 const unsigned int * lda,
326 const std::complex<float> *B,
327 const unsigned int * ldb,
328 const std::complex<float> *beta,
329 std::complex<float> * C,
330 const unsigned int * ldc);
332 zheevd_(
const char * jobz,
334 const unsigned int * n,
335 std::complex<double> *A,
336 const unsigned int * lda,
338 std::complex<double> *work,
339 const unsigned int * lwork,
341 const unsigned int * lrwork,
343 const unsigned int * liwork,
346 zheevr_(
const char * jobz,
349 const unsigned int * n,
350 std::complex<double> *A,
351 const unsigned int * lda,
354 const unsigned int * il,
355 const unsigned int * iu,
356 const double * abstol,
357 const unsigned int * m,
359 std::complex<double> *Z,
360 const unsigned int * ldz,
361 unsigned int * isuppz,
362 std::complex<double> *work,
370 zherk_(
const char * uplo,
372 const unsigned int * n,
373 const unsigned int * k,
374 const double * alpha,
375 const std::complex<double> *A,
376 const unsigned int * lda,
378 std::complex<double> * C,
379 const unsigned int * ldc);
381 zcopy_(
const unsigned int * n,
382 const std::complex<double> *x,
383 const unsigned int * incx,
384 std::complex<double> * y,
385 const unsigned int * incy);
388 ccopy_(
const unsigned int * n,
389 const std::complex<float> *x,
390 const unsigned int * incx,
391 std::complex<float> * y,
392 const unsigned int * incy);
395 zdotc_(
const unsigned int * N,
396 const std::complex<double> *X,
397 const unsigned int * INCX,
398 const std::complex<double> *Y,
399 const unsigned int * INCY);
401 ddot_(
const unsigned int *N,
403 const unsigned int *INCX,
405 const unsigned int *INCY);
408 dnrm2_(
const unsigned int *n,
const double *x,
const unsigned int *incx);
411 dznrm2_(
const unsigned int * n,
412 const std::complex<double> *x,
413 const unsigned int * incx);
415 zaxpy_(
const unsigned int * n,
416 const std::complex<double> *alpha,
417 const std::complex<double> *x,
418 const unsigned int * incx,
419 std::complex<double> * y,
420 const unsigned int * incy);
422 caxpy_(
const unsigned int * n,
423 const std::complex<float> *alpha,
424 const std::complex<float> *x,
425 const unsigned int * incx,
426 std::complex<float> * y,
427 const unsigned int * incy);
429 dpotrf_(
const char * uplo,
430 const unsigned int *n,
432 const unsigned int *lda,
435 dpotri_(
const char * uplo,
436 const unsigned int *n,
438 const unsigned int *lda,
442 zpotrf_(
const char * uplo,
443 const unsigned int * n,
444 std::complex<double> *a,
445 const unsigned int * lda,
448 dtrtri_(
const char * uplo,
450 const unsigned int *n,
452 const unsigned int *lda,
455 ztrtri_(
const char * uplo,
457 const unsigned int * n,
458 std::complex<double> *a,
459 const unsigned int * lda,
464 dgetrf_(
int *M,
int *N,
double *A,
int *lda,
int *IPIV,
int *INFO);
479 std::complex<double> *A,
487 std::complex<double> *A,
490 std::complex<double> *WORK,
521 template <
typename T, dftfe::utils::MemorySpace memorySpace>
522 std::pair<double, double>
546 template <
typename T, dftfe::utils::MemorySpace memorySpace>
551 const unsigned int m,
571 template <
typename T1,
typename T2, dftfe::utils::MemorySpace memorySpace>
581 std::vector<double> eigenvalues,
582 const unsigned int m,
586 const bool approxOverlapMatrix);
Namespace which declares the input parameters and the functions to parse them from the input paramete...
Definition dftParameters.h:35
Definition BLASWrapper.h:35
An class template to encapsulate a MultiVector. A MultiVector is a collection of vectors belonging t...
Definition MultiVector.h:127
Base class for building the DFT operator and the action of operator on a vector.
Definition operator.h:43
void dgesv_(int *N, int *NRHS, double *A, int *LDA, int *IPIV, double *B, int *LDB, int *INFO)
Contains linear algebra functions used in the implementation of an eigen solver.
Definition linearAlgebraOperations.h:502
void reformulatedChebyshevFilter(const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > &BLASWrapperPtr, operatorDFTClass< memorySpace > &operatorMatrix, dftfe::linearAlgebra::MultiVector< T1, memorySpace > &X, dftfe::linearAlgebra::MultiVector< T1, memorySpace > &Y, dftfe::linearAlgebra::MultiVector< T2, memorySpace > &Residual, dftfe::linearAlgebra::MultiVector< T2, memorySpace > &ResidualNew, std::vector< double > eigenvalues, const unsigned int m, const double a, const double b, const double a0, const bool approxOverlapMatrix)
Apply Residual based Chebyshev filter to a given subspace.
void chebyshevFilter(operatorDFTClass< memorySpace > &operatorMatrix, dftfe::linearAlgebra::MultiVector< T, memorySpace > &X, dftfe::linearAlgebra::MultiVector< T, memorySpace > &Y, const unsigned int m, const double a, const double b, const double a0)
Apply Chebyshev filter to a given subspace.
void inverse(double *A, int N)
Compute inverse of serial matrix using LAPACK LU factorization.
std::pair< double, double > generalisedLanczosLowerUpperBoundEigenSpectrum(const std::shared_ptr< dftfe::linearAlgebra::BLASWrapper< memorySpace > > &BLASWrapperPtr, operatorDFTClass< memorySpace > &operatorMatrix, dftfe::linearAlgebra::MultiVector< T, memorySpace > &X, dftfe::linearAlgebra::MultiVector< T, memorySpace > &Y, dftfe::linearAlgebra::MultiVector< T, memorySpace > &Z, dftfe::linearAlgebra::MultiVector< T, memorySpace > &tempVec, const dftParameters &dftParams)
Calculates an estimate of lower and upper bounds of a matrix using k-step Generalised Lanczos method....
Definition pseudoPotentialToDftfeConverter.cc:34
@ Residual
Definition hubbardClass.h:59
@ LDA
Definition ExcSSDFunctionalBaseClass.h:29