guanaqo develop
Utilities for scientific software
Loading...
Searching...
No Matches
lapack.hpp
Go to the documentation of this file.
1/**
2 * @file
3 * LAPACK error handling.
4 * @ingroup linalg_blas_ll
5 */
6
7#pragma once
8
9#include <guanaqo/blas/config.hpp>
10
11#if GUANAQO_WITH_MKL
12#include <mkl.h>
13#else
14#include <lapack.h>
15#endif
16
17#include <stdexcept>
18#include <string>
19#include <type_traits>
20
21namespace guanaqo::blas {
22
23/// @addtogroup linalg_blas_ll
24/// @{
25
26struct lapack_error : std::runtime_error {
27 lapack_error(const std::string &name, index_t info)
28 : std::runtime_error("LAPACK error: " + name +
29 " (info=" + std::to_string(info) + ")"),
30 info{info} {}
31 index_t info;
32};
33
34template <class Name>
35void lapack_throw_on_err(Name &&name, index_t info) {
36 if (info)
37 throw lapack_error(std::forward<Name>(name), info);
38}
39
40/// @}
41
42static_assert(std::is_same_v<index_t, lapack_int>, "Unsupported index type");
43static_assert(std::is_signed_v<index_t>);
44
45} // namespace guanaqo::blas
46
47#if !GUANAQO_WITH_MKL
48#define dpotrf(...) LAPACK_dpotrf(__VA_ARGS__)
49#define spotrf(...) LAPACK_spotrf(__VA_ARGS__)
50#define dtrtri(...) LAPACK_dtrtri(__VA_ARGS__)
51#define strtri(...) LAPACK_strtri(__VA_ARGS__)
52#define dlauum(...) LAPACK_dlauum(__VA_ARGS__)
53#define slauum(...) LAPACK_slauum(__VA_ARGS__)
54#define dtrtrs(...) LAPACK_dtrtrs(__VA_ARGS__)
55#define strtrs(...) LAPACK_strtrs(__VA_ARGS__)
56#define dsytrf_rk(...) LAPACK_dsytrf_rk(__VA_ARGS__)
57#define ssytrf_rk(...) LAPACK_ssytrf_rk(__VA_ARGS__)
58#endif
void lapack_throw_on_err(Name &&name, index_t info)
Definition lapack.hpp:35
lapack_error(const std::string &name, index_t info)
Definition lapack.hpp:27