|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r64147 - in sandbox/numeric_bindings: boost/numeric/bindings/lapack boost/numeric/bindings/lapack/computational boost/numeric/bindings/lapack/detail boost/numeric/bindings/lapack/driver libs/numeric/bindings/tools
From: rutger_at_[hidden]
Date: 2010-07-19 02:45:00
Author: rutger
Date: 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
New Revision: 64147
URL: http://svn.boost.org/trac/boost/changeset/64147
Log:
Bumped the version of source lapack to 3.2.2
Added:
sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pstrf.hpp (contents, props changed)
Text files modified:
sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational.hpp | 1 +
sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h | 14 ++++++++++++++
sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h | 6 ++++++
sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_gesv.hpp | 2 ++
sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_posv.hpp | 2 ++
sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py | 2 +-
6 files changed, 26 insertions(+), 1 deletions(-)
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational.hpp 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -110,6 +110,7 @@
#include <boost/numeric/bindings/lapack/computational/pptrf.hpp>
#include <boost/numeric/bindings/lapack/computational/pptri.hpp>
#include <boost/numeric/bindings/lapack/computational/pptrs.hpp>
+#include <boost/numeric/bindings/lapack/computational/pstrf.hpp>
#include <boost/numeric/bindings/lapack/computational/ptcon.hpp>
#include <boost/numeric/bindings/lapack/computational/ptrfs.hpp>
#include <boost/numeric/bindings/lapack/computational/pttrf.hpp>
Added: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pstrf.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pstrf.hpp 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -0,0 +1,267 @@
+//
+// Copyright (c) 2002--2010
+// Toon Knapen, Karl Meerbergen, Kresimir Fresl,
+// Thomas Klimpel and Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+// THIS FILE IS AUTOMATICALLY GENERATED
+// PLEASE DO NOT EDIT!
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_LAPACK_COMPUTATIONAL_PSTRF_HPP
+#define BOOST_NUMERIC_BINDINGS_LAPACK_COMPUTATIONAL_PSTRF_HPP
+
+#include <boost/assert.hpp>
+#include <boost/numeric/bindings/begin.hpp>
+#include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/is_column_major.hpp>
+#include <boost/numeric/bindings/is_mutable.hpp>
+#include <boost/numeric/bindings/lapack/workspace.hpp>
+#include <boost/numeric/bindings/remove_imaginary.hpp>
+#include <boost/numeric/bindings/size.hpp>
+#include <boost/numeric/bindings/stride.hpp>
+#include <boost/numeric/bindings/uplo_tag.hpp>
+#include <boost/numeric/bindings/value_type.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits/is_same.hpp>
+#include <boost/type_traits/remove_const.hpp>
+
+//
+// The LAPACK-backend for pstrf is the netlib-compatible backend.
+//
+#include <boost/numeric/bindings/lapack/detail/lapack.h>
+#include <boost/numeric/bindings/lapack/detail/lapack_option.hpp>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace lapack {
+
+//
+// The detail namespace contains value-type-overloaded functions that
+// dispatch to the appropriate back-end LAPACK-routine.
+//
+namespace detail {
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible LAPACK backend (the default), and
+// * float value-type.
+//
+template< typename UpLo >
+inline std::ptrdiff_t pstrf( const UpLo uplo, const fortran_int_t n, float* a,
+ const fortran_int_t lda, fortran_int_t* piv, fortran_int_t& rank,
+ const float tol, float* work ) {
+ fortran_int_t info(0);
+ LAPACK_SPSTRF( &lapack_option< UpLo >::value, &n, a, &lda, piv, &rank,
+ &tol, work, &info );
+ return info;
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible LAPACK backend (the default), and
+// * double value-type.
+//
+template< typename UpLo >
+inline std::ptrdiff_t pstrf( const UpLo uplo, const fortran_int_t n, double* a,
+ const fortran_int_t lda, fortran_int_t* piv, fortran_int_t& rank,
+ const double tol, double* work ) {
+ fortran_int_t info(0);
+ LAPACK_DPSTRF( &lapack_option< UpLo >::value, &n, a, &lda, piv, &rank,
+ &tol, work, &info );
+ return info;
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible LAPACK backend (the default), and
+// * complex<float> value-type.
+//
+template< typename UpLo >
+inline std::ptrdiff_t pstrf( const UpLo uplo, const fortran_int_t n,
+ std::complex<float>* a, const fortran_int_t lda, fortran_int_t* piv,
+ fortran_int_t& rank, const float tol, float* work ) {
+ fortran_int_t info(0);
+ LAPACK_CPSTRF( &lapack_option< UpLo >::value, &n, a, &lda, piv, &rank,
+ &tol, work, &info );
+ return info;
+}
+
+//
+// Overloaded function for dispatching to
+// * netlib-compatible LAPACK backend (the default), and
+// * complex<double> value-type.
+//
+template< typename UpLo >
+inline std::ptrdiff_t pstrf( const UpLo uplo, const fortran_int_t n,
+ std::complex<double>* a, const fortran_int_t lda, fortran_int_t* piv,
+ fortran_int_t& rank, const double tol, double* work ) {
+ fortran_int_t info(0);
+ LAPACK_ZPSTRF( &lapack_option< UpLo >::value, &n, a, &lda, piv, &rank,
+ &tol, work, &info );
+ return info;
+}
+
+} // namespace detail
+
+//
+// Value-type based template class. Use this class if you need a type
+// for dispatching to pstrf.
+//
+template< typename Value >
+struct pstrf_impl {
+
+ typedef Value value_type;
+ typedef typename remove_imaginary< Value >::type real_type;
+
+ //
+ // Static member function for user-defined workspaces, that
+ // * Deduces the required arguments for dispatching to LAPACK, and
+ // * Asserts that most arguments make sense.
+ //
+ template< typename MatrixA, typename VectorPIV, typename WORK >
+ static std::ptrdiff_t invoke( MatrixA& a, VectorPIV& piv,
+ fortran_int_t& rank, const real_type tol, detail::workspace1<
+ WORK > work ) {
+ namespace bindings = ::boost::numeric::bindings;
+ typedef typename result_of::uplo_tag< MatrixA >::type uplo;
+ BOOST_STATIC_ASSERT( (bindings::is_column_major< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorPIV >::value) );
+ BOOST_ASSERT( bindings::size(piv) >= bindings::size_column(a) );
+ BOOST_ASSERT( bindings::size(work.select(real_type())) >=
+ min_size_work( bindings::size_column(a) ));
+ BOOST_ASSERT( bindings::size_column(a) >= 0 );
+ BOOST_ASSERT( bindings::size_minor(a) == 1 ||
+ bindings::stride_minor(a) == 1 );
+ BOOST_ASSERT( bindings::stride_major(a) >= std::max< std::ptrdiff_t >(1,
+ bindings::size_column(a)) );
+ return detail::pstrf( uplo(), bindings::size_column(a),
+ bindings::begin_value(a), bindings::stride_major(a),
+ bindings::begin_value(piv), rank, tol,
+ bindings::begin_value(work.select(real_type())) );
+ }
+
+ //
+ // Static member function that
+ // * Figures out the minimal workspace requirements, and passes
+ // the results to the user-defined workspace overload of the
+ // invoke static member function
+ // * Enables the unblocked algorithm (BLAS level 2)
+ //
+ template< typename MatrixA, typename VectorPIV >
+ static std::ptrdiff_t invoke( MatrixA& a, VectorPIV& piv,
+ fortran_int_t& rank, const real_type tol, minimal_workspace ) {
+ namespace bindings = ::boost::numeric::bindings;
+ typedef typename result_of::uplo_tag< MatrixA >::type uplo;
+ bindings::detail::array< real_type > tmp_work( min_size_work(
+ bindings::size_column(a) ) );
+ return invoke( a, piv, rank, tol, workspace( tmp_work ) );
+ }
+
+ //
+ // Static member function that
+ // * Figures out the optimal workspace requirements, and passes
+ // the results to the user-defined workspace overload of the
+ // invoke static member
+ // * Enables the blocked algorithm (BLAS level 3)
+ //
+ template< typename MatrixA, typename VectorPIV >
+ static std::ptrdiff_t invoke( MatrixA& a, VectorPIV& piv,
+ fortran_int_t& rank, const real_type tol, optimal_workspace ) {
+ namespace bindings = ::boost::numeric::bindings;
+ typedef typename result_of::uplo_tag< MatrixA >::type uplo;
+ return invoke( a, piv, rank, tol, minimal_workspace() );
+ }
+
+ //
+ // Static member function that returns the minimum size of
+ // workspace-array work.
+ //
+ static std::ptrdiff_t min_size_work( const std::ptrdiff_t n ) {
+ return 2*n;
+ }
+};
+
+
+//
+// Functions for direct use. These functions are overloaded for temporaries,
+// so that wrapped types can still be passed and used for write-access. In
+// addition, if applicable, they are overloaded for user-defined workspaces.
+// Calls to these functions are passed to the pstrf_impl classes. In the
+// documentation, most overloads are collapsed to avoid a large number of
+// prototypes which are very similar.
+//
+
+//
+// Overloaded function for pstrf. Its overload differs for
+// * MatrixA&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorPIV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+pstrf( MatrixA& a, VectorPIV& piv, fortran_int_t& rank,
+ const typename remove_imaginary< typename bindings::value_type<
+ MatrixA >::type >::type tol, Workspace work ) {
+ return pstrf_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( a, piv, rank, tol, work );
+}
+
+//
+// Overloaded function for pstrf. Its overload differs for
+// * MatrixA&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorPIV >
+inline typename boost::disable_if< detail::is_workspace< VectorPIV >,
+ std::ptrdiff_t >::type
+pstrf( MatrixA& a, VectorPIV& piv, fortran_int_t& rank,
+ const typename remove_imaginary< typename bindings::value_type<
+ MatrixA >::type >::type tol ) {
+ return pstrf_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( a, piv, rank, tol,
+ optimal_workspace() );
+}
+
+//
+// Overloaded function for pstrf. Its overload differs for
+// * const MatrixA&
+// * User-defined workspace
+//
+template< typename MatrixA, typename VectorPIV, typename Workspace >
+inline typename boost::enable_if< detail::is_workspace< Workspace >,
+ std::ptrdiff_t >::type
+pstrf( const MatrixA& a, VectorPIV& piv, fortran_int_t& rank,
+ const typename remove_imaginary< typename bindings::value_type<
+ MatrixA >::type >::type tol, Workspace work ) {
+ return pstrf_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( a, piv, rank, tol, work );
+}
+
+//
+// Overloaded function for pstrf. Its overload differs for
+// * const MatrixA&
+// * Default workspace-type (optimal)
+//
+template< typename MatrixA, typename VectorPIV >
+inline typename boost::disable_if< detail::is_workspace< VectorPIV >,
+ std::ptrdiff_t >::type
+pstrf( const MatrixA& a, VectorPIV& piv, fortran_int_t& rank,
+ const typename remove_imaginary< typename bindings::value_type<
+ MatrixA >::type >::type tol ) {
+ return pstrf_impl< typename bindings::value_type<
+ MatrixA >::type >::invoke( a, piv, rank, tol,
+ optimal_workspace() );
+}
+
+} // namespace lapack
+} // namespace bindings
+} // namespace numeric
+} // namespace boost
+
+#endif
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -1412,6 +1412,20 @@
const fortran_int_t* nrhs, const void* ap, void* b,
const fortran_int_t* ldb, fortran_int_t* info );
+// Value-type variants of pstrf
+void LAPACK_SPSTRF( const char* uplo, const fortran_int_t* n, float* a,
+ const fortran_int_t* lda, fortran_int_t* piv, fortran_int_t* rank,
+ const float* tol, float* work, fortran_int_t* info );
+void LAPACK_DPSTRF( const char* uplo, const fortran_int_t* n, double* a,
+ const fortran_int_t* lda, fortran_int_t* piv, fortran_int_t* rank,
+ const double* tol, double* work, fortran_int_t* info );
+void LAPACK_CPSTRF( const char* uplo, const fortran_int_t* n, void* a,
+ const fortran_int_t* lda, fortran_int_t* piv, fortran_int_t* rank,
+ const float* tol, float* work, fortran_int_t* info );
+void LAPACK_ZPSTRF( const char* uplo, const fortran_int_t* n, void* a,
+ const fortran_int_t* lda, fortran_int_t* piv, fortran_int_t* rank,
+ const double* tol, double* work, fortran_int_t* info );
+
// Value-type variants of ptcon
void LAPACK_SPTCON( const fortran_int_t* n, const float* d, const float* e,
const float* anorm, float* rcond, float* work, fortran_int_t* info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_names.h 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -516,6 +516,12 @@
#define LAPACK_CPPTRS FORTRAN_ID( cpptrs )
#define LAPACK_ZPPTRS FORTRAN_ID( zpptrs )
+// Value-type variants of pstrf
+#define LAPACK_SPSTRF FORTRAN_ID( spstrf )
+#define LAPACK_DPSTRF FORTRAN_ID( dpstrf )
+#define LAPACK_CPSTRF FORTRAN_ID( cpstrf )
+#define LAPACK_ZPSTRF FORTRAN_ID( zpstrf )
+
// Value-type variants of ptcon
#define LAPACK_SPTCON FORTRAN_ID( sptcon )
#define LAPACK_DPTCON FORTRAN_ID( dptcon )
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_gesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_gesv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_gesv.hpp 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -122,6 +122,7 @@
typename bindings::value_type< MatrixA >::type >::type,
typename remove_const< typename bindings::value_type<
MatrixX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorIPIV >::value) );
BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixX >::value) );
BOOST_ASSERT( bindings::size(ipiv) >= bindings::size_column(a) );
@@ -240,6 +241,7 @@
typename bindings::value_type< MatrixA >::type >::type,
typename remove_const< typename bindings::value_type<
MatrixX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorIPIV >::value) );
BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixX >::value) );
BOOST_ASSERT( bindings::size(ipiv) >= bindings::size_column(a) );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_posv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_posv.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/iter_posv.hpp 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -124,6 +124,7 @@
typename bindings::value_type< MatrixA >::type >::type,
typename remove_const< typename bindings::value_type<
MatrixX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixX >::value) );
BOOST_ASSERT( bindings::size(work.select(real_type())) >=
min_size_swork( bindings::size_column(a),
@@ -239,6 +240,7 @@
typename bindings::value_type< MatrixA >::type >::type,
typename remove_const< typename bindings::value_type<
MatrixX >::type >::type >::value) );
+ BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixA >::value) );
BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixX >::value) );
BOOST_ASSERT( bindings::size(work.select(real_type())) >=
min_size_rwork( bindings::size_column(a) ));
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py 2010-07-19 02:44:53 EDT (Mon, 19 Jul 2010)
@@ -704,7 +704,7 @@
result[ split_templates[ index*2 ] ] = split_templates[ index*2 + 1 ]
return result
-lapack_src_path = './lapack-3.2.0/SRC'
+lapack_src_path = './lapack-3.2.2/SRC'
clapack_h_path = './atlas-3.6.0/include/clapack.h'
template_src_path = './templates'
bindings_impl_target_path = '../../../../boost/numeric/bindings/lapack/'
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk