Loading...
Searching...
No Matches
q3::blas Namespace Reference

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)
 

Detailed Description

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).

Function Documentation

◆ dgemm_()

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().

◆ dgemv_()

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().

◆ dpotrf_()

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().

◆ dtrsm_()

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().

◆ dznrm2_()

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().

◆ q3_complex_conjugate_dot_product()

std::complex< double > q3::blas::q3_complex_conjugate_dot_product ( int  n,
const std::complex< double > *  x,
const std::complex< double > *  y 
)
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().

◆ zaxpy_()

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().

◆ zdscal_()

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().

◆ zgemm_()

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 
)

◆ zgemv_()

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().

◆ zpotrf_()

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().

◆ ztrsm_()

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().