27namespace nda::lapack {
74 template <BlasArrayReal<2> A, BlasArrayFor<A, 1> WR, BlasArrayFor<A, 1> WI, BlasArrayFor<A, 2> VL, BlasArrayFor<A, 2> VR,
75 BlasArrayFor<A, 1> W1 = vector_value_t<A>>
77 int geev(A &&a, WR &&wr, WI &&wi, VL &&vl, VR &&vr,
char jobvl =
'N',
char jobvr =
'V', W1 &&work =
vector_value_t<A>{}) {
79 auto const [m, n] = a.shape();
85 EXPECTS(jobvl ==
'V' or jobvl ==
'N');
86 EXPECTS(jobvr ==
'V' or jobvr ==
'N');
101 EXPECTS(a.indexmap().min_stride() == 1);
102 EXPECTS(wr.indexmap().min_stride() == 1);
103 EXPECTS(wi.indexmap().min_stride() == 1);
104 EXPECTS(jobvl ==
'N' or vl.indexmap().min_stride() == 1);
105 EXPECTS(jobvr ==
'N' or vr.indexmap().min_stride() == 1);
110 lapack::f77::geev(jobvl, jobvr, n, a.data(),
get_ld(a), wr.data(), wi.data(), vl.data(), ldvl, vr.data(), ldvr, &tmp_lwork, -1, info);
111 int lwork =
static_cast<int>(std::ceil(tmp_lwork));
117 lapack::f77::geev(jobvl, jobvr, n, a.data(),
get_ld(a), wr.data(), wi.data(), vl.data(), ldvl, vr.data(), ldvr, work.data(), lwork, info);
162 template <BlasArrayCplx<2> A, BlasArrayFor<A, 1> W, BlasArrayFor<A, 2> VL, BlasArrayFor<A, 2> VR, BlasArrayFor<A, 1> W1 = vector_value_t<A>,
163 BlasArrayRealFor<A, 1> W2 = vector_fp_t<A>>
168 auto const [m, n] = a.shape();
174 EXPECTS(jobvl ==
'V' or jobvl ==
'N');
175 EXPECTS(jobvr ==
'V' or jobvr ==
'N');
190 EXPECTS(a.indexmap().min_stride() == 1);
191 EXPECTS(w.indexmap().min_stride() == 1);
192 EXPECTS(jobvl ==
'N' or vl.indexmap().min_stride() == 1);
193 EXPECTS(jobvr ==
'N' or vr.indexmap().min_stride() == 1);
198 lapack::f77::geev(jobvl, jobvr, n, a.data(),
get_ld(a), w.data(), vl.data(), ldvl, vr.data(), ldvr, &tmp_lwork, -1, rwork.data(), info);
199 int lwork =
static_cast<int>(std::ceil(std::real(tmp_lwork)));
205 lapack::f77::geev(jobvl, jobvr, n, a.data(),
get_ld(a), w.data(), vl.data(), ldvl, vr.data(), ldvr, 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.
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.
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 get_ld(A const &a)
Get the leading dimension of an nda::MemoryArray with rank 1 or 2 for BLAS/LAPACK calls.
void resize_or_check_work_buffer(A &a, long min_size)
Resize or check the size of a 1D array/view.
vector< get_value_t< A >, heap< mem::get_addr_space< A > > > vector_value_t
Alias for an nda::vector with the same value type and address space as the given type.
vector< get_fp_t< A >, heap< mem::get_addr_space< A > > > vector_fp_t
Alias for an nda::vector with the same address space as the given type and its value type determined ...
static constexpr bool has_F_layout
Constexpr variable that is true if all given nda::Array types have nda::F_layout.
int geev(A &&a, WR &&wr, WI &&wi, VL &&vl, VR &&vr, char jobvl='N', char jobvr='V', W1 &&work=vector_value_t< A >{})
Interface to the LAPACK geev routine for real matrices.
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.
Macros used in the nda library.
Provides type traits for the nda library.