Tatooine
getrf.h
Go to the documentation of this file.
1#ifndef TATOOINE_LAPACK_GETRF_H
2#define TATOOINE_LAPACK_GETRF_H
3//==============================================================================
4extern "C" {
5//==============================================================================
6auto dgetrf_(int* M, int* N, double* A, int* LDA, int* IPIV, int* INFO) -> void;
7auto sgetrf_(int* M, int* N, double* A, int* LDA, int* IPIV, int* INFO) -> void;
8//==============================================================================
9}
10//==============================================================================
12//==============================================================================
13namespace tatooine::lapack {
14//==============================================================================
23//==============================================================================
35//==============================================================================
36template <std::floating_point Float>
37auto getrf(int M, int N, double* A, int LDA, int* IPIV) -> int {
38 auto INFO = int{};
39 if constexpr (std::same_as<Float, double>) {
40 dgetrf_(&M, &N, A, &LDA, IPIV, &INFO);
41 } else if constexpr (std::same_as<Float, float>) {
42 sgetrf_(&M, &N, A, &LDA, IPIV, &INFO);
43 }
44 return INFO;
45}
46//------------------------------------------------------------------------------
47template <typename T, size_t M, size_t N>
48auto getrf(tensor<T, M, N>& A, tensor<int, tatooine::min(M, N)>& p) {
49 return getrf(M, N, A.data(), M, p.data());
50}
51//==============================================================================
53//==============================================================================
54} // namespace tatooine::lapack
55//==============================================================================
56#endif
constexpr auto data() -> ValueType *
Definition: static_multidim_array.h:260
auto dgetrf_(int *M, int *N, double *A, int *LDA, int *IPIV, int *INFO) -> void
auto sgetrf_(int *M, int *N, double *A, int *LDA, int *IPIV, int *INFO) -> void
auto getrf(int M, int N, double *A, int LDA, int *IPIV) -> int
Definition: getrf.h:37
Definition: base.h:6
constexpr auto min(A &&a, B &&b)
Definition: math.h:15
Definition: tensor.h:17