Functions | |
| void | dgemm_ (const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, const double *beta, double *c, const int *ldc) |
| void | dgemv_ (const char *trans, const int *m, const int *n, const double *alpha, const double *a, const int *lda, const double *x, const int *incx, const double *beta, double *y, const int *incy) |
| void | dpotrf_ (const char *uplo, const int *n, double *a, const int *lda, int *info) |
| void | dtrsm_ (const char *side, const char *uplo, const char *transa, const char *diag, const int *m, const int *n, const double *alpha, const double *a, const int *lda, double *b, const int *ldb) |
| double | dznrm2_ (const int *n, const std::complex< double > *x, const int *incx) |
| std::complex< double > | q3_complex_conjugate_dot_product (int n, const std::complex< double > *x, const std::complex< double > *y) |
| void | zaxpy_ (const int *n, const std::complex< double > *alpha, const std::complex< double > *x, const int *incx, std::complex< double > *y, const int *incy) |
| void | zdscal_ (const int *n, const double *alpha, std::complex< double > *x, const int *incx) |
| void | zgemm_ (const char *transa, const char *transb, const int *m, const int *n, const int *k, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, const std::complex< double > *b, const int *ldb, const std::complex< double > *beta, std::complex< double > *c, const int *ldc) |
| void | zgemv_ (const char *trans, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, const std::complex< double > *x, const int *incx, const std::complex< double > *beta, std::complex< double > *y, const int *incy) |
| void | zpotrf_ (const char *uplo, const int *n, std::complex< double > *a, const int *lda, int *info) |
| void | ztrsm_ (const char *side, const char *uplo, const char *transa, const char *diag, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb) |
BLAS declarations for complex double-precision routines.
These are the standard Fortran BLAS interfaces used by the Davidson diagonalizer for matrix-matrix and matrix-vector operations. On macOS, these are provided by the Accelerate framework (same as LAPACK).
| void q3::blas::dgemm_ | ( | const char * | transa, |
| const char * | transb, | ||
| const int * | m, | ||
| const int * | n, | ||
| const int * | k, | ||
| const double * | alpha, | ||
| const double * | a, | ||
| const int * | lda, | ||
| const double * | b, | ||
| const int * | ldb, | ||
| const double * | beta, | ||
| double * | c, | ||
| const int * | ldc | ||
| ) |
DGEMM: Real double-precision general matrix-matrix multiply. C := alpha * op(A) * op(B) + beta * C
Used in gamma-only inner products where the result is real-valued. Two DGEMM calls on the real and imaginary parts of the complex data give a 2× FLOP reduction compared to a single ZGEMM.
Referenced by q3::UltrasoftPlanewavePseudopotentialKohnShamSCFIterator::accumulate_projector_overlaps(), q3::UltrasoftPseudopotentialOverlapOperator::apply_batch(), q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), q3::SerialPlanewaveSubspaceManager::orthogonalize_batch(), q3::NormConservingPlanewaveWavefunctionInitializer::rotate_wavefunctions(), and q3::SerialPlanewaveSubspaceManager::update_subspace_matrices().
| void q3::blas::dgemv_ | ( | const char * | trans, |
| const int * | m, | ||
| const int * | n, | ||
| const double * | alpha, | ||
| const double * | a, | ||
| const int * | lda, | ||
| const double * | x, | ||
| const int * | incx, | ||
| const double * | beta, | ||
| double * | y, | ||
| const int * | incy | ||
| ) |
DGEMV: Real double-precision general matrix-vector multiply. y := alpha * op(A) * x + beta * y
Referenced by q3::UltrasoftPseudopotentialOverlapOperator::apply(), q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().
| void q3::blas::dpotrf_ | ( | const char * | uplo, |
| const int * | n, | ||
| double * | a, | ||
| const int * | lda, | ||
| int * | info | ||
| ) |
DPOTRF: Real double-precision Cholesky factorization.
Referenced by q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().
| void q3::blas::dtrsm_ | ( | const char * | side, |
| const char * | uplo, | ||
| const char * | transa, | ||
| const char * | diag, | ||
| const int * | m, | ||
| const int * | n, | ||
| const double * | alpha, | ||
| const double * | a, | ||
| const int * | lda, | ||
| double * | b, | ||
| const int * | ldb | ||
| ) |
DTRSM: Real double-precision triangular matrix solve.
Referenced by q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().
| double q3::blas::dznrm2_ | ( | const int * | n, |
| const std::complex< double > * | x, | ||
| const int * | incx | ||
| ) |
DZNRM2: Euclidean norm of a complex double-precision vector. result := sqrt( Σ |x[i]|² )
Referenced by q3::execution::SerialExecutionPolicy::norm().
|
inline |
ZDOTC wrapper: Complex double-precision dot product with conjugation. result := Σ conj(x[element_index]) * y[element_index]
Uses manual loop to avoid zdotc_ ABI incompatibility on macOS Accelerate (hidden return-value pointer). BLAS Level-1 operations on vectors of typical DFT size (~100-1000) are memory-bound, so the manual loop performs comparably to the BLAS call.
Definition at line 100 of file blas.hpp.
Referenced by q3::execution::SerialExecutionPolicy::dot_product().
| void q3::blas::zaxpy_ | ( | const int * | n, |
| const std::complex< double > * | alpha, | ||
| const std::complex< double > * | x, | ||
| const int * | incx, | ||
| std::complex< double > * | y, | ||
| const int * | incy | ||
| ) |
ZAXPY: Complex double-precision vector addition with scalar. y := alpha * x + y
Referenced by q3::execution::SerialExecutionPolicy::add_scaled_vector(), and q3::BroydenMixer::mix_in_reciprocal_space().
| void q3::blas::zdscal_ | ( | const int * | n, |
| const double * | alpha, | ||
| std::complex< double > * | x, | ||
| const int * | incx | ||
| ) |
ZDSCAL: Scale a complex double-precision vector by a real scalar. x := alpha * x
Referenced by q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().
| void q3::blas::zgemm_ | ( | const char * | transa, |
| const char * | transb, | ||
| const int * | m, | ||
| const int * | n, | ||
| const int * | k, | ||
| const std::complex< double > * | alpha, | ||
| const std::complex< double > * | a, | ||
| const int * | lda, | ||
| const std::complex< double > * | b, | ||
| const int * | ldb, | ||
| const std::complex< double > * | beta, | ||
| std::complex< double > * | c, | ||
| const int * | ldc | ||
| ) |
ZGEMM: Complex double-precision general matrix-matrix multiply. C := alpha * op(A) * op(B) + beta * C
Referenced by q3::UltrasoftPlanewavePseudopotentialKohnShamSCFIterator::accumulate_projector_overlaps(), q3::UltrasoftPseudopotentialOverlapOperator::apply_batch(), q3::SerialPlanewaveSubspaceManager::build_correction_vectors(), q3::NonlocalPseudopotentialForceCalculator::compute(), q3::UltrasoftPlanewaveEffectivePotential::compute(), q3::compute_hubbard_projector_overlaps(), q3::SerialPlanewaveSubspaceManager::extract_eigenvectors(), q3::multiply_add(), q3::SerialPlanewaveSubspaceManager::multiply_basis_by_coefficients_across_bands(), q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), q3::SerialPlanewaveSubspaceManager::orthogonalize_batch(), q3::NormConservingPlanewaveWavefunctionInitializer::rotate_wavefunctions(), and q3::SerialPlanewaveSubspaceManager::update_subspace_matrices().
| void q3::blas::zgemv_ | ( | const char * | trans, |
| const int * | m, | ||
| const int * | n, | ||
| const std::complex< double > * | alpha, | ||
| const std::complex< double > * | a, | ||
| const int * | lda, | ||
| const std::complex< double > * | x, | ||
| const int * | incx, | ||
| const std::complex< double > * | beta, | ||
| std::complex< double > * | y, | ||
| const int * | incy | ||
| ) |
ZGEMV: Complex double-precision general matrix-vector multiply. y := alpha * op(A) * x + beta * y
Referenced by q3::UltrasoftPseudopotentialOverlapOperator::apply(), q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().
| void q3::blas::zpotrf_ | ( | const char * | uplo, |
| const int * | n, | ||
| std::complex< double > * | a, | ||
| const int * | lda, | ||
| int * | info | ||
| ) |
ZPOTRF: Complex double-precision Cholesky factorization.
Referenced by q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().
| void q3::blas::ztrsm_ | ( | const char * | side, |
| const char * | uplo, | ||
| const char * | transa, | ||
| const char * | diag, | ||
| const int * | m, | ||
| const int * | n, | ||
| const std::complex< double > * | alpha, | ||
| const std::complex< double > * | a, | ||
| const int * | lda, | ||
| std::complex< double > * | b, | ||
| const int * | ldb | ||
| ) |
ZTRSM: Complex double-precision triangular matrix solve.
Referenced by q3::GPUPlanewaveSubspaceManager::orthogonalize_batch(), and q3::SerialPlanewaveSubspaceManager::orthogonalize_batch().