42 using idx_t = size_type<matrix_t>;
43 using T = type_t<matrix_t>;
44 using range = pair<idx_t, idx_t>;
45 using real_t = real_type<T>;
47 const idx_t m = nrows(A);
48 const idx_t n = ncols(A);
55 if (n <= (idx_t)opts.nx) {
56 for (idx_t i2 = n; i2 > 0; --i2) {
58 for (idx_t j2 = n; j2 > 0; --j2) {
61 for (idx_t k = 0; k <= min(i, j); ++k) {
65 sum += A(i, k) * A(k, j);
73 const idx_t n0 = n / 2;
85 auto A00 = slice(A, range(0, n0), range(0, n0));
86 auto A01 = slice(A, range(0, n0), range(n0, n));
87 auto A10 = slice(A, range(n0, n), range(0, n0));
88 auto A11 = slice(A, range(n0, n), range(n0, n));
93 gemm(NO_TRANS, NO_TRANS, T(1), A10, A01, T(1), A11);
96 trmm(LEFT_SIDE, LOWER_TRIANGLE, NO_TRANS, UNIT_DIAG, real_t(1), A00, A01);
99 trmm(RIGHT_SIDE, UPPER_TRIANGLE, NO_TRANS, NON_UNIT_DIAG, real_t(1), A00,
void lu_mult(matrix_t &A, const LuMultOpts &opts={})
in-place multiplication of lower triangular matrix L and upper triangular matrix U.
Definition lu_mult.hpp:40
void trmm(Side side, Uplo uplo, Op trans, Diag diag, const alpha_t &alpha, const matrixA_t &A, matrixB_t &B)
Triangular matrix-matrix multiply:
Definition trmm.hpp:72
void gemm(Op transA, Op transB, const alpha_t &alpha, const matrixA_t &A, const matrixB_t &B, const beta_t &beta, matrixC_t &C)
General matrix-matrix multiply:
Definition gemm.hpp:61
#define tlapack_check(cond)
Throw an error if cond is false.
Definition exceptionHandling.hpp:98
typename traits::real_type_traits< Types..., int >::type real_type
The common real type of the list of types.
Definition scalar_type_traits.hpp:113