13 #ifndef QMCPLUSPLUS_ROCSOLVER_H 14 #define QMCPLUSPLUS_ROCSOLVER_H 19 #include <rocsolver/rocsolver.h> 25 #define rocsolverErrorCheck(ans, cause) \ 27 rocsolverAssert((ans), cause, __FILE__, __LINE__); \ 31 const std::string& cause,
36 if (code != rocblas_status_success)
38 std::string rocsolver_error;
41 case rocblas_status_invalid_handle:
42 rocsolver_error =
"rocblas_status_invalid_handle";
44 case rocblas_status_not_implemented:
45 rocsolver_error =
"rocblas_status_not_implemented";
47 case rocblas_status_invalid_pointer:
48 rocsolver_error =
"rocblas_status_invalid_pointer";
50 case rocblas_status_invalid_size:
51 rocsolver_error =
"rocblas_status_invalid_size";
53 case rocblas_status_memory_error:
54 rocsolver_error =
"rocblas_status_memory_error";
56 case rocblas_status_internal_error:
57 rocsolver_error =
"rocblas_status_internal_error";
59 case rocblas_status_perf_degraded:
60 rocsolver_error =
"rocblas_status_perf_degraded";
62 case rocblas_status_size_query_mismatch:
63 rocsolver_error =
"rocblas_status_size_query_mismatch";
65 case rocblas_status_size_increased:
66 rocsolver_error =
"rocblas_status_size_increased";
68 case rocblas_status_size_unchanged:
69 rocsolver_error =
"rocblas_status_size_unchanged";
71 case rocblas_status_invalid_value:
72 rocsolver_error =
"rocblas_status_invalid_value";
74 case rocblas_status_continue:
75 rocsolver_error =
"rocblas_status_continue";
77 case rocblas_status_check_numerics_fail:
78 rocsolver_error =
"rocblas_status_check_numerics_fail";
81 rocsolver_error =
"<unknown>";
84 std::ostringstream err;
85 err <<
"rocsolverAssert: " << rocsolver_error <<
", file " << file <<
" , line " << line << std::endl
86 << cause << std::endl;
87 std::cerr << err.str();
89 throw std::runtime_error(cause);
101 inline rocblas_status
getrf(rocblas_handle& handle,
int m,
int n,
double*
A,
int lda,
int* ipiv,
int* info)
103 return rocsolver_dgetrf(handle,
m,
n,
A,
lda, ipiv, info);
106 inline rocblas_status
getrf(rocblas_handle& handle,
109 std::complex<double>*
A,
114 return rocsolver_zgetrf(handle,
m,
n, (rocblas_double_complex*)
A,
lda, ipiv, info);
117 inline rocblas_status
getrs(rocblas_handle& handle,
118 const rocblas_operation& transa,
127 return rocsolver_dgetrs(handle, transa,
m,
n,
A,
lda, ipiv,
B, ldb);
130 inline rocblas_status
getrs(rocblas_handle& handle,
131 const rocblas_operation& transa,
134 std::complex<double>*
A,
137 std::complex<double>*
B,
140 return rocsolver_zgetrs(handle, transa,
m,
n, (rocblas_double_complex*)
A,
lda, ipiv, (rocblas_double_complex*)
B, ldb);
143 inline rocblas_status
getri(rocblas_handle& handle,
int n,
double*
A,
int lda,
int* ipiv,
int* info)
145 return rocsolver_dgetri(handle,
n,
A,
lda, ipiv, info);
148 inline rocblas_status
getri(rocblas_handle& handle,
int n, std::complex<double>*
A,
int lda,
int* ipiv,
int* info)
150 return rocsolver_zgetri(handle,
n, (rocblas_double_complex*)
A,
lda, ipiv, info);
155 #endif // QMCPLUSPLUS_ROCSOLVER_H rocblas_status getrs(rocblas_handle &handle, const rocblas_operation &transa, int m, int n, double *A, int lda, int *ipiv, double *B, int ldb)
rocblas_status getrf(rocblas_handle &handle, int m, int n, double *A, int lda, int *ipiv, int *info)
helper functions for EinsplineSetBuilder
rocblas_status getri(rocblas_handle &handle, int n, double *A, int lda, int *ipiv, int *info)
double B(double x, int k, int i, const std::vector< double > &t)
void rocsolverAssert(rocblas_status code, const std::string &cause, const char *file, int line, bool abort=true)
prints rocsolver error messages. Always use rocsolverErrorCheck macro.