27namespace nda::lapack {
48 template <MemoryMatrix A, MemoryVector W>
50 int heev(A &&a, W &&w,
char jobz =
'V') {
51 static_assert(
has_F_layout<A>,
"Error in nda::lapack::heev: A must have Fortran layout");
54 auto const [m, n] = a.shape();
59 EXPECTS(a.indexmap().min_stride() == 1);
60 EXPECTS(w.indexmap().min_stride() == 1);
63 EXPECTS(jobz ==
'V' or jobz ==
'N');
67 std::complex<double> tmp_lwork{};
69 lapack::f77::heev(jobz,
'U', n, a.data(),
get_ld(a), w.data(), &tmp_lwork, -1, rwork.
data(), info);
70 int lwork =
static_cast<int>(std::ceil(std::real(tmp_lwork)));
74 lapack::f77::heev(jobz,
'U', n, a.data(),
get_ld(a), w.data(), work.
data(), lwork, rwork.
data(), info);
Provides definitions and type traits involving the different memory address spaces supported by nda.
Provides the generic class for arrays.
Provides basic functions to create and manipulate arrays and views.
ValueType const * data() const noexcept
Get a pointer to the actual data (in general this is not the beginning of the memory block for a view...
Provides concepts for the nda library.
Provides various convenient aliases and helper functions for nda::basic_array and nda::basic_array_vi...
void resize_or_check_if_view(A &a, std::array< long, A::rank > const &sha)
Resize a given regular array to the given shape or check if a given view as the correct shape.
basic_array< ValueType, Rank, Layout, 'A', ContainerPolicy > array
Alias template of an nda::basic_array with an 'A' algebra.
std::decay_t< decltype(get_first_element(std::declval< A const >()))> get_value_t
Get the value type of an array/view or a scalar type.
int heev(A &&a, W &&w, char jobz='V')
Interface to the LAPACK heev routine.
static constexpr bool have_host_compatible_addr_space
Constexpr variable that is true if all given types have an address space compatible with Host.
Provides a C++ interface for various LAPACK routines.
int get_ld(A const &a)
Get the leading dimension of an nda::MemoryArray with rank 1 or 2 for BLAS/LAPACK calls.
static constexpr bool has_F_layout
Constexpr variable that is true if the given nda::Array type has nda::F_layout.
Macros used in the nda library.
Provides type traits for the nda library.