|
Ublas : |
From: Paul C. Leopardi (paul.leopardi_at_[hidden])
Date: 2007-08-15 21:48:28
Hi all,
I'm playing around with GluCat, and have just changed the matrices from row
major to column major:
typedef ublas::column_major orientation_t;
typedef ublas::compressed_matrix< Scalar_T, orientation_t >
basis_matrix_t;
typedef basis_matrix_t matrix_t;
This results in the following error message:
leopardi_at_linfinit:~/src/Working/Working-0.2.3/glucat/squaring> make
if
g++ -DHAVE_CONFIG_H -I. -I. -I.. -Wstrict-aliasing=2 -Wall -ansi -DNDEBUG -g -O3 -finline-limit=2400 -D_GLUCAT_USE_GNU_CXX_HASH_MAP -fno-check-new -fabi-version=0 -fexceptions -MT
squaring.o -MD -MP -MF ".deps/squaring.Tpo" -c -o squaring.o squaring.cpp; \
then mv -f ".deps/squaring.Tpo" ".deps/squaring.Po"; else
rm -f ".deps/squaring.Tpo"; exit 1; fi
../boost/numeric/ublas/operation.hpp: In function âM&
boost::numeric::ublas::axpy_prod(const
boost::numeric::ublas::matrix_expression<RHS_T>&, const
boost::numeric::ublas::matrix_expression<E2>&, M&, TRI,
boost::numeric::ublas::sparse_proxy_tag,
boost::numeric::ublas::column_major_tag) [with M =
boost::numeric::ublas::compressed_matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long int>, 0ul,
boost::numeric::ublas::unbounded_array<long unsigned int, std::allocator<long
unsigned int> >, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, E1 =
boost::numeric::ublas::compressed_matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long int>, 0ul,
boost::numeric::ublas::unbounded_array<long unsigned int, std::allocator<long
unsigned int> >, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, E2 =
boost::numeric::ublas::compressed_matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long int>, 0ul,
boost::numeric::ublas::unbounded_array<long unsigned int, std::allocator<long
unsigned int> >, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, TRI = boost::numeric::ublas::basic_full<long
unsigned int>]â:
../boost/numeric/ublas/operation.hpp:724: instantiated from âM&
boost::numeric::ublas::axpy_prod(const
boost::numeric::ublas::matrix_expression<RHS_T>&, const
boost::numeric::ublas::matrix_expression<E2>&, M&, bool) [with M =
boost::numeric::ublas::compressed_matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long int>, 0ul,
boost::numeric::ublas::unbounded_array<long unsigned int, std::allocator<long
unsigned int> >, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, E1 =
boost::numeric::ublas::compressed_matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long int>, 0ul,
boost::numeric::ublas::unbounded_array<long unsigned int, std::allocator<long
unsigned int> >, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >, E2 =
boost::numeric::ublas::compressed_matrix<double,
boost::numeric::ublas::basic_column_major<long unsigned int, long int>, 0ul,
boost::numeric::ublas::unbounded_array<long unsigned int, std::allocator<long
unsigned int> >, boost::numeric::ublas::unbounded_array<double,
std::allocator<double> > >]â
../glucat/matrix_multi_imp.h:508: instantiated
from âglucat::matrix_multi<Scalar_T, LO, HI>& glucat::matrix_multi<Scalar_T,
LO, HI>::operator/=(const glucat::matrix_multi<Scalar_T, LO, HI>&) [with
Scalar_T = double, int LO = -0x00000000000000020, int HI = 32]â
squaring.cpp:62: instantiated from here
../boost/numeric/ublas/operation.hpp:645: error: âfunctor_typeâ is not a
member of âboost::numeric::ublas::basic_full<long unsigned int>â
make: *** [squaring.o] Error 1
I'm using Boost 1.34.1.
I checked boost/numeric/ublas/operation.hpp and in
axpy_prod (const matrix_expression<E1> &e1,
const matrix_expression<E2> &e2,
M &m, TRI,
sparse_proxy_tag, row_major_tag)
it has on lines 566-567:
if (triangular_restriction::other (it1.index1 (), itr.index ()))
m (it1.index1 (), itr.index ()) += *it2 * *itr;
but in
axpy_prod (const matrix_expression<E1> &e1,
const matrix_expression<E2> &e2,
M &m, TRI,
sparse_proxy_tag, column_major_tag)
it has on lines 645-646:
if (triangular_restriction::functor_type ().other (itc.index (), it2.index2
()))
m (itc.index (), it2.index2 ()) += *it1 * *itc;
Why do these two functions differ in this way? Is this a bug?
Best regards, Paul