563,653d562 < < < < < < < < < namespace detail < { < < < < < //! potrs specialisation for one RHS as a boost::numeric::ublas::vector < /*! < \author Paul Thompson < \date 06-10-06 < < \todo Perhaps the input argument should be templated to accept other vector types than boost::numeric::ublas::vector ? < */ < template < inline < int potrs (CBLAS_UPLO const uplo, SymmA const& a, boost::numeric::ublas::vector & v) < { < < CBLAS_ORDER const stor_ord < = enum_cast < (storage_order< < #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS < typename traits::matrix_traits::ordering_type < #else < typename SymmA::orientation_category < #endif < >::value); < < int const n = traits::matrix_size1 (a); < int const nrhs = 1; //! We know there's only one RHS for a vector < assert (n == traits::matrix_size2 (a)); < assert (n == traits::vector_size(v)); < < int ldb = traits::vector_size(v); < < #ifndef BOOST_NUMERIC_BINDINGS_ATLAS_POTRF_BUG < return potrs (stor_ord, uplo, n, nrhs, < #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING < traits::matrix_storage (a), < #else < traits::matrix_storage_const (a), < #endif < traits::leading_dimension (a), < traits::vector_storage (v), < ldb); < #else // BOOST_NUMERIC_BINDINGS_ATLAS_POTRF_BUG < int ierr; < if (stor_ord == CblasColMajor) < ierr = potrs (stor_ord, uplo, n, nrhs, < #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING < traits::matrix_storage (a), < #else < traits::matrix_storage_const (a), < #endif < traits::leading_dimension (a), < traits::vector_storage (v), < ldb); < else // ATLAS bug with CblasRowMajor < ierr = potrs_bug (stor_ord, uplo, n, nrhs, < #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING < traits::matrix_storage (a), < #else < traits::matrix_storage_const (a), < #endif < traits::leading_dimension (a), < traits::vector_storage (v), < ldb); < return ierr; < #endif // BOOST_NUMERIC_BINDINGS_ATLAS_POTRF_BUG < } < //potrs detailed < < < < < < < < < < < < 656c565 < --- > namespace detail { 742,788d650 < < < < < < < < < //! potrs specialisation for one RHS as a boost::numeric::ublas::vector < /*! < \author Paul Thompson < \date 06-10-06 < < \todo Perhaps the input argument should be templated to accept other vector types than boost::numeric::ublas::vector ? < */ < template < inline < int potrs (SymmA const& a, boost::numeric::ublas::vector & v) < { < #ifndef BOOST_NUMERIC_BINDINGS_NO_STRUCTURE_CHECK < typedef typename traits::matrix_traits::value_type val_t; < BOOST_STATIC_ASSERT((boost::is_same< < typename traits::matrix_traits::matrix_structure, < typename traits::detail::symm_herm_t::type < >::value)); < #endif < < CBLAS_UPLO const uplo < = enum_cast < (uplo_triang< < #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS < typename traits::matrix_traits::uplo_type < #else < typename SymmA::packed_category < #endif < >::value); < < return detail::potrs (uplo, a, v); < } < < < < < < < <