static void invoke( char const compz, integer_t const n, VectorD& d, VectorE& e, MatrixZ& z, integer_t& info, minimal_workspace work ) { traits::detail::array< real_type > tmp_work( min_size_work( $CALL_MIN_SIZE ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( compz, n ) ); invoke( compz, n, d, e, z, info, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( integer_t const n, MatrixAP& ap, MatrixAFP& afp, VectorIPIV& ipiv, MatrixB& b, MatrixX& x, VectorFERR& ferr, VectorBERR& berr, integer_t& info, minimal_workspace work ) { traits::detail::array< real_type > tmp_work( min_size_work( n ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( n ) ); invoke( n, ap, afp, ipiv, b, x, ferr, berr, info, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const jobz, MatrixA& a, VectorW& w, integer_t& info, minimal_workspace work ) { traits::detail::array< real_type > tmp_work( min_size_work( jobz, traits::matrix_num_columns(a) ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( jobz, traits::matrix_num_columns(a) ) ); invoke( jobz, a, w, info, workspace( tmp_work, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char jobz, const fortran_int_t n, VectorD& d, VectorE& e, MatrixZ& z, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; bindings::detail::array< real_type > tmp_work( min_size_work( jobz, n ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( jobz, n ) ); return invoke( jobz, n, d, e, z, workspace( tmp_work, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char norm, const MatrixA& a, const real_type anorm, real_type& rcond, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; bindings::detail::array< real_type > tmp_work( min_size_work( bindings::size_column(a) ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( bindings::size_column(a) ) ); return invoke( norm, a, anorm, rcond, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const fact, MatrixA& a, MatrixAF& af, char& equed, VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond, VectorFERR& ferr, VectorBERR& berr, integer_t& info, minimal_workspace work ) { traits::detail::array< real_type > tmp_work( min_size_work( traits::matrix_num_columns(a) ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( traits::matrix_num_columns(a) ) ); invoke( fact, a, af, equed, s, b, x, rcond, ferr, berr, info, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const jobz, char const range, integer_t const n, integer_t const ka, integer_t const kb, MatrixAB& ab, MatrixBB& bb, MatrixQ& q, real_type const vl, real_type const vu, integer_t const il, integer_t const iu, real_type const abstol, integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info, minimal_workspace work ) { traits::detail::array< real_type > tmp_work( min_size_work( n ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( n ) ); invoke( jobz, range, n, ka, kb, ab, bb, q, vl, vu, il, iu, abstol, m, w, z, ifail, info, workspace( tmp_work, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const MatrixAP& ap, const VectorIPIV& ipiv, const real_type anorm, real_type& rcond, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; typedef typename result_of::uplo_tag< MatrixAP >::type uplo; bindings::detail::array< real_type > tmp_work( min_size_work( bindings::size_column(ap) ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( bindings::size_column(ap) ) ); return invoke( ap, ipiv, anorm, rcond, workspace( tmp_work, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char uplo, const char compq, const fortran_int_t n, VectorD& d, VectorE& e, MatrixU& u, MatrixVT& vt, VectorQ& q, VectorIQ& iq, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; bindings::detail::array< real_type > tmp_work( min_size_work( compq, n ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( n ) ); return invoke( uplo, compq, n, d, e, u, vt, q, iq, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const range, char const order, integer_t const n, real_type const vl, real_type const vu, integer_t const il, integer_t const iu, real_type const abstol, VectorD& d, VectorE& e, integer_t& m, integer_t& nsplit, VectorW& w, VectorIBLOCK& iblock, VectorISPLIT& isplit, integer_t& info, minimal_workspace work ) { traits::detail::array< real_type > tmp_work( min_size_work( n ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( n ) ); invoke( range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, info, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( integer_t const itype, char const jobz, integer_t const n, MatrixA& a, MatrixB& b, VectorW& w, integer_t& info, minimal_workspace work ) { traits::detail::array< value_type > tmp_work( min_size_work( jobz, n ) ); traits::detail::array< real_type > tmp_rwork( min_size_rwork( jobz, n ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( jobz, n ) ); invoke( itype, jobz, n, a, b, w, info, workspace( tmp_work, tmp_rwork, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char range, const char order, const fortran_int_t n, const real_type vl, const real_type vu, const fortran_int_t il, const fortran_int_t iu, const real_type abstol, const VectorD& d, const VectorE& e, fortran_int_t& m, fortran_int_t& nsplit, VectorW& w, VectorIBLOCK& iblock, VectorISPLIT& isplit, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; bindings::detail::array< real_type > tmp_work( min_size_work( n ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( n ) ); return invoke( range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const jobz, MatrixA& a, VectorW& w, integer_t& info, optimal_workspace work ) { real_type opt_size_work; integer_t opt_size_iwork; detail::syevd( jobz, traits::matrix_uplo_tag(a), traits::matrix_num_columns(a), traits::matrix_storage(a), traits::leading_dimension(a), traits::vector_storage(w), &opt_size_work, -1, &opt_size_iwork, -1, info ); traits::detail::array< real_type > tmp_work( traits::detail::to_int( opt_size_work ) ); traits::detail::array< integer_t > tmp_iwork( opt_size_iwork ); invoke( jobz, a, w, info, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const compz, integer_t const n, VectorD& d, VectorE& e, MatrixZ& z, integer_t& info, optimal_workspace work ) { real_type opt_size_work; integer_t opt_size_iwork; detail::stedc( compz, n, traits::vector_storage(d), traits::vector_storage(e), traits::matrix_storage(z), traits::leading_dimension(z), &opt_size_work, -1, &opt_size_iwork, -1, info ); traits::detail::array< real_type > tmp_work( traits::detail::to_int( opt_size_work ) ); traits::detail::array< integer_t > tmp_iwork( opt_size_iwork ); invoke( compz, n, d, e, z, info, workspace( tmp_work, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char fact, MatrixAB& ab, MatrixAFB& afb, char& equed, VectorS& s, MatrixB& b, MatrixX& x, real_type& rcond, VectorFERR& ferr, VectorBERR& berr, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; typedef typename result_of::uplo_tag< MatrixAB >::type uplo; bindings::detail::array< real_type > tmp_work( min_size_work( bindings::size_column(ab) ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( bindings::size_column(ab) ) ); return invoke( fact, ab, afb, equed, s, b, x, rcond, ferr, berr, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( char const jobz, char const range, MatrixA& a, real_type const vl, real_type const vu, integer_t const il, integer_t const iu, real_type const abstol, integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info, minimal_workspace work ) { traits::detail::array< value_type > tmp_work( min_size_work( traits::matrix_num_columns(a) ) ); traits::detail::array< real_type > tmp_rwork( min_size_rwork( traits::matrix_num_columns(a) ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( traits::matrix_num_columns(a) ) ); invoke( jobz, range, a, vl, vu, il, iu, abstol, m, w, z, ifail, info, workspace( tmp_work, tmp_rwork, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char jobz, const char range, MatrixAP& ap, const real_type vl, const real_type vu, const fortran_int_t il, const fortran_int_t iu, const real_type abstol, fortran_int_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail, minimal_workspace ) { namespace bindings = ::boost::numeric::bindings; typedef typename result_of::uplo_tag< MatrixAP >::type uplo; bindings::detail::array< real_type > tmp_work( min_size_work( bindings::size_column(ap) ) ); bindings::detail::array< fortran_int_t > tmp_iwork( min_size_iwork( bindings::size_column(ap) ) ); return invoke( jobz, range, ap, vl, vu, il, iu, abstol, m, w, z, ifail, workspace( tmp_work, tmp_iwork ) ); }
static std::ptrdiff_t invoke( const char jobz, const fortran_int_t n, VectorD& d, VectorE& e, MatrixZ& z, optimal_workspace ) { namespace bindings = ::boost::numeric::bindings; real_type opt_size_work; fortran_int_t opt_size_iwork; detail::stevd( jobz, n, bindings::begin_value(d), bindings::begin_value(e), bindings::begin_value(z), bindings::stride_major(z), &opt_size_work, -1, &opt_size_iwork, -1 ); bindings::detail::array< real_type > tmp_work( traits::detail::to_int( opt_size_work ) ); bindings::detail::array< fortran_int_t > tmp_iwork( opt_size_iwork ); return invoke( jobz, n, d, e, z, workspace( tmp_work, tmp_iwork ) ); }
static void invoke( integer_t const itype, char const jobz, integer_t const n, MatrixA& a, MatrixB& b, VectorW& w, integer_t& info, optimal_workspace work ) { value_type opt_size_work; real_type opt_size_rwork; integer_t opt_size_iwork; detail::hegvd( itype, jobz, traits::matrix_uplo_tag(a), n, traits::matrix_storage(a), traits::leading_dimension(a), traits::matrix_storage(b), traits::leading_dimension(b), traits::vector_storage(w), &opt_size_work, -1, &opt_size_rwork, -1, &opt_size_iwork, -1, info ); traits::detail::array< value_type > tmp_work( traits::detail::to_int( opt_size_work ) ); traits::detail::array< real_type > tmp_rwork( traits::detail::to_int( opt_size_rwork ) ); traits::detail::array< integer_t > tmp_iwork( opt_size_iwork ); invoke( itype, jobz, n, a, b, w, info, workspace( tmp_work, tmp_rwork, tmp_iwork ) ); }
static void invoke( char const jobz, char const range, MatrixA& a, real_type const vl, real_type const vu, integer_t const il, integer_t const iu, real_type const abstol, integer_t& m, VectorW& w, MatrixZ& z, VectorIFAIL& ifail, integer_t& info, optimal_workspace work ) { value_type opt_size_work; traits::detail::array< real_type > tmp_rwork( min_size_rwork( traits::matrix_num_columns(a) ) ); traits::detail::array< integer_t > tmp_iwork( min_size_iwork( traits::matrix_num_columns(a) ) ); detail::heevx( jobz, range, traits::matrix_uplo_tag(a), traits::matrix_num_columns(a), traits::matrix_storage(a), traits::leading_dimension(a), vl, vu, il, iu, abstol, m, traits::vector_storage(w), traits::matrix_storage(z), traits::leading_dimension(z), &opt_size_work, -1, traits::vector_storage(tmp_rwork), traits::vector_storage(tmp_iwork), traits::vector_storage(ifail), info ); traits::detail::array< value_type > tmp_work( traits::detail::to_int( opt_size_work ) ); invoke( jobz, range, a, vl, vu, il, iu, abstol, m, w, z, ifail, info, workspace( tmp_work, tmp_rwork, tmp_iwork ) ); }