26#ifndef dftefeBlasWrappers_h
27#define dftefeBlasWrappers_h
37 namespace linearAlgebra
41 template <
typename ValueType,
47 LinAlgOpContext<memorySpace> &context);
49 template <
typename ValueType,
55 LinAlgOpContext<memorySpace> &context);
66 template <
typename ValueType,
71 ValueType
const * multiVecData,
72 LinAlgOpContext<memorySpace> &context);
75 template <
typename ValueType1,
80 scalar_type<ValueType1, ValueType2> alpha,
85 LinAlgOpContext<memorySpace> & context);
99 template <
typename ValueType1,
104 const ValueType1 alpha,
105 ValueType2
const * x,
106 scalar_type<ValueType1, ValueType2> *y,
107 LinAlgOpContext<memorySpace> & context);
117 template <
typename ValueType1,
123 const ValueType2 * x,
124 scalar_type<ValueType1, ValueType2> *z,
125 LinAlgOpContext<memorySpace> & context);
135 template <
typename ValueType1,
140 const ValueType1 * x,
141 const ValueType2 * y,
142 scalar_type<ValueType1, ValueType2> *z,
143 LinAlgOpContext<memorySpace> & context);
180 template <
typename ValueType1,
185 const ValueType1 * x,
186 const ValueType2 * y,
189 scalar_type<ValueType1, ValueType2> *z,
190 LinAlgOpContext<memorySpace> & context);
217 template <
typename ValueType1,
231 const ValueType1 * dA,
232 const ValueType2 * dB,
233 scalar_type<ValueType1, ValueType2> *dC,
234 LinAlgOpContext<memorySpace> & context);
258 template <
typename ValueType1,
266 const ValueType1 * A,
267 const ValueType2 * B,
268 scalar_type<ValueType1, ValueType2> *Z,
269 LinAlgOpContext<memorySpace> & context);
280 template <
typename ValueType1,
285 scalar_type<ValueType1, ValueType2> alpha,
286 ValueType1
const * x,
287 scalar_type<ValueType1, ValueType2> beta,
288 const ValueType2 * y,
289 scalar_type<ValueType1, ValueType2> *z,
290 LinAlgOpContext<memorySpace> & context);
301 template <
typename ValueType1,
307 const scalar_type<ValueType1, ValueType2> alpha1,
308 const scalar_type<ValueType1, ValueType2> *alpha,
309 const ValueType1 * x,
310 const scalar_type<ValueType1, ValueType2> beta1,
311 const scalar_type<ValueType1, ValueType2> *beta,
312 const ValueType2 * y,
313 scalar_type<ValueType1, ValueType2> * z,
314 LinAlgOpContext<memorySpace> & context);
317 template <
typename ValueType1,
320 scalar_type<ValueType1, ValueType2>
322 ValueType1
const * x,
324 ValueType2
const * y,
326 LinAlgOpContext<memorySpace> &context);
340 template <
typename ValueType1,
350 const ValueType1 * copyFromVec,
351 ValueType2 * copyToVec,
352 LinAlgOpContext<memorySpace> &context);
354 template <
typename ValueType1,
359 const ValueType1 *valueType1Arr,
360 ValueType2 * valueType2Arr,
361 LinAlgOpContext<memorySpace> &context);
389 template <
typename ValueType1,
402 const ValueType1 *copyFromVec,
403 ValueType2 * copyToVec,
404 LinAlgOpContext<memorySpace> &context);
423 template <
typename ValueType1,
429 const ValueType1 * multiVecDataX,
430 const ValueType2 * multiVecDataY,
433 scalar_type<ValueType1, ValueType2> *multiVecDotProduct,
434 LinAlgOpContext<memorySpace> & context);
437 template <
typename ValueType,
443 LinAlgOpContext<memorySpace> &context);
454 template <
typename ValueType,
459 ValueType
const * multiVecData,
460 LinAlgOpContext<memorySpace> &context);
462 template <
typename ValueType1,
466 gemm(
const char & transA,
471 const scalar_type<ValueType1, ValueType2> alpha,
472 ValueType1
const * dA,
474 ValueType2
const * dB,
476 const scalar_type<ValueType1, ValueType2> beta,
477 scalar_type<ValueType1, ValueType2> * dC,
479 LinAlgOpContext<memorySpace> & context);
487 template <
typename ValueType1,
500 scalar_type<ValueType1, ValueType2> alpha,
501 const ValueType1 * dA,
503 const ValueType2 * dB,
505 scalar_type<ValueType1, ValueType2> beta,
506 scalar_type<ValueType1, ValueType2> *dC,
508 LinAlgOpContext<memorySpace> & context);
514 template <
typename ValueType,
522 template <
typename ValueType,
525 trtri(
const char uplo,
530 LinAlgOpContext<memorySpace> &context);
535 template <
typename ValueType,
538 potrf(
const char uplo,
542 LinAlgOpContext<memorySpace> &context);
547 template <
typename ValueType,
550 steqr(
const char jobz,
552 real_type<ValueType> * D,
553 real_type<ValueType> * E,
556 LinAlgOpContext<memorySpace> &context);
561 template <
typename ValueType,
564 heevd(
const char jobz,
569 real_type<ValueType> * W,
570 LinAlgOpContext<memorySpace> &context);
575 template <
typename ValueType,
586 real_type<ValueType> * W,
587 LinAlgOpContext<memorySpace> &context);
593 template <
typename ValueType,
602 LinAlgOpContext<memorySpace> &context);
real_type< ValueType > amax(size_type n, ValueType const *x, size_type incx, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:28
void varBatchedStridedBlockCopy(const size_type numBatch, const size_type *strideSrc, const size_type *strideDst, const size_type *vecSizeArr, const size_type *numVecArr, const size_type *srcLeadingDimArr, const size_type *srcBlockStartIdArr, const size_type *dstLeadingDimArr, const size_type *dstBlockStartIdArr, const ValueType1 *copyFromVec, ValueType2 *copyToVec, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:343
LapackError gesv(size_type n, size_type nrhs, ValueType *A, size_type lda, ValueType *B, size_type ldb, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:638
void dotMultiVector(const size_type vecSize, const size_type numVec, const ValueType1 *multiVecDataX, const ValueType2 *multiVecDataY, const ScalarOp &opX, const ScalarOp &opY, scalar_type< ValueType1, ValueType2 > *multiVecDotProduct, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:261
void hadamardProduct(size_type n, const ValueType1 *x, const ValueType2 *y, scalar_type< ValueType1, ValueType2 > *z, LinAlgOpContext< memorySpace > &context)
Template for performing alpha z_i = x_i * y_i$.
Definition: BlasLapack.t.cpp:106
void axpy(size_type n, scalar_type< ValueType1, ValueType2 > alpha, ValueType1 const *x, size_type incx, ValueType2 *y, size_type incy, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:59
void reciprocalX(size_type n, const ValueType1 alpha, ValueType2 const *x, scalar_type< ValueType1, ValueType2 > *y, LinAlgOpContext< memorySpace > &context)
Template for computing the multiplicative inverse of all the elements of x, does not check if any ele...
Definition: BlasLapack.t.cpp:78
void stridedBlockCopy(const size_type vecSize, const size_type numVec, const size_type srcLeadingDim, const size_type srcBlockStartId, const size_type dstLeadingDim, const size_type dstBlockStartId, const ValueType1 *copyFromVec, ValueType2 *copyToVec, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:311
void khatriRaoProduct(const Layout layout, const size_type sizeI, const size_type sizeJ, const size_type sizeK, const ValueType1 *A, const ValueType2 *B, scalar_type< ValueType1, ValueType2 > *Z, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:172
Layout
Definition: BlasLapackTypedef.h:161
void gemmStridedVarBatched(const size_type numMats, const char *transA, const char *transB, const size_type *stridea, const size_type *strideb, const size_type *stridec, const size_type *m, const size_type *n, const size_type *k, const scalar_type< ValueType1, ValueType2 > alpha, const ValueType1 *dA, const size_type *ldda, const ValueType2 *dB, const size_type *lddb, const scalar_type< ValueType1, ValueType2 > beta, scalar_type< ValueType1, ValueType2 > *dC, const size_type *lddc, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:427
real_type< ValueType > nrm2(const size_type n, ValueType const *x, const size_type incx, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:284
LapackError potrf(const char uplo, size_type n, ValueType *A, size_type lda, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:524
std::vector< double > nrms2MultiVector(const size_type vecSize, const size_type numVec, const ValueType *multiVecData, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:298
real_type< ValueType > asum(size_type n, ValueType const *x, size_type incx, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:16
LapackError hegv(size_type itype, const char jobz, const char uplo, size_type n, ValueType *A, size_type lda, ValueType *B, size_type ldb, real_type< ValueType > *W, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:606
LapackError trtri(const char uplo, const char diag, size_type n, ValueType *A, size_type lda, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:497
void copyValueType1ArrToValueType2Arr(const size_type size, const ValueType1 *valueType1Arr, ValueType2 *valueType2Arr, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:375
void axpby(const size_type n, const scalar_type< ValueType1, ValueType2 > alpha, const ValueType1 *x, const scalar_type< ValueType1, ValueType2 > beta, const ValueType2 *y, scalar_type< ValueType1, ValueType2 > *z, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:208
scalar_type< ValueType1, ValueType2 > dot(const size_type n, ValueType1 const *x, const size_type incx, ValueType2 const *y, const size_type incy, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:244
void scaleStridedVarBatched(const size_type numMats, const Layout layout, const ScalarOp &scalarOpA, const ScalarOp &scalarOpB, const size_type *stridea, const size_type *strideb, const size_type *stridec, const size_type *m, const size_type *n, const size_type *k, const ValueType1 *dA, const ValueType2 *dB, scalar_type< ValueType1, ValueType2 > *dC, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:136
ScalarOp
Definition: BlasLapackTypedef.h:169
LapackError steqr(const char jobz, size_type n, real_type< ValueType > *D, real_type< ValueType > *E, ValueType *Z, size_type ldz, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:550
void gemm(const char &transA, const char &transB, const size_type m, const size_type n, const size_type k, const scalar_type< ValueType1, ValueType2 > alpha, ValueType1 const *dA, const size_type ldda, ValueType2 const *dB, const size_type lddb, const scalar_type< ValueType1, ValueType2 > beta, scalar_type< ValueType1, ValueType2 > *dC, const size_type lddc, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:391
void axpbyBlocked(const size_type n, const size_type blockSize, const scalar_type< ValueType1, ValueType2 > alpha1, const scalar_type< ValueType1, ValueType2 > *alpha, const ValueType1 *x, const scalar_type< ValueType1, ValueType2 > beta1, const scalar_type< ValueType1, ValueType2 > *beta, const ValueType2 *y, scalar_type< ValueType1, ValueType2 > *z, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:224
LapackError inverse(size_type n, ValueType *A, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:471
std::vector< double > amaxsMultiVector(const size_type vecSize, const size_type numVec, ValueType const *multiVecData, LinAlgOpContext< memorySpace > &context)
Template for computing norms of all the numVec vectors in a multi Vector.
Definition: BlasLapack.t.cpp:41
LapackError heevd(const char jobz, const char uplo, size_type n, ValueType *A, size_type lda, real_type< ValueType > *W, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:578
void ascale(const size_type n, const ValueType1 alpha, const ValueType2 *x, scalar_type< ValueType1, ValueType2 > *z, LinAlgOpContext< memorySpace > &context)
Definition: BlasLapack.t.cpp:92
MemorySpace
Definition: MemorySpaceType.h:37
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9