22namespace uni20::lapack::mplapack::detail
25#if UNI20_HAS_MPLAPACK_FLOAT128
27inline std::size_t lapack_int_work_size(blas_int count)
29 return static_cast<std::size_t
>(std::max<blas_int>(1, count));
32inline std::vector<mplapackint> make_mplapack_int_work(blas_int count)
34 return std::vector<mplapackint>(lapack_int_work_size(count));
37inline std::vector<mplapackint> to_mplapack_ints(blas_int
const* values, blas_int count)
39 std::vector<mplapackint> result = make_mplapack_int_work(count);
40 for (blas_int i = 0; i < count; ++i)
42 result[
static_cast<std::size_t
>(i)] =
static_cast<mplapackint
>(values[i]);
47inline void copy_from_mplapack_ints(std::vector<mplapackint>
const& source, blas_int* target, blas_int count)
49 for (blas_int i = 0; i < count; ++i)
51 target[i] =
static_cast<blas_int
>(source[
static_cast<std::size_t
>(i)]);
55inline void copy_from_mplapack_query_int_work(std::vector<mplapackint>
const& source, blas_int* target, blas_int lwork)
57 if (target ==
nullptr || (lwork != -1 && lwork <= 0))
61 copy_from_mplapack_ints(source, target, 1);
66inline blas_int gelsd_iwork_size(blas_int m, blas_int n)
68 blas_int
const minmn = std::min(m, n);
76 std::size_t levels = 0;
77 for (std::size_t size =
static_cast<std::size_t
>(minmn) / 2; size > 0; size /= 2)
81 std::size_t
const minmn_size =
static_cast<std::size_t
>(minmn);
82 std::size_t
const required = 3 * minmn_size * levels + 11 * minmn_size;
83 return checked_blas_int(std::max<std::size_t>(1, required));
blas_int checked_blas_int(std::size_t value)
Convert a dense dimension to blas_int or throw on overflow.
Definition blas_int.hpp:40