MTL: Possible bug in MTL?

View: New views
1 Messages — Rating Filter:   Alert me  

MTL: Possible bug in MTL?

by Antonio Frangioni :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello.

We are using MTL to develop a MultiGrid method, and we have  
encountered a problem that we cannot identify.

The problem can be shown by the following simple example:

#include <iostream>
#include <mtl/matrix.h>
#include <mtl/mtl.h>
#include <mtl/utils.h>
#include <mtl/linalg_vec.h>

using namespace mtl;
using namespace std;

typedef matrix< double, symmetric<upper>,
dense<>, row_major>::type Matrix;

typedef dense1D<double> Vec;

int main()
{
     const Matrix::size_type matrix_size=5;

     Matrix A(matrix_size,matrix_size);
     Vec y(matrix_size,0), x(matrix_size, 1), z(matrix_size);

     int r;
     for (r = 0;r < matrix_size;++r) {
         (A)(r,(r)) = 1;
         if (r + 1 < matrix_size)
             (A)(r,(r+1)) = 1;
     }
     mult(A,x,y,z);

     return 0;
}

By following with the debugger the execution of the mult() function,  
we have found that the inner iterator in the version of mult() that  
finally gets called goes out of bounds. It looks like it always  
iterates to the entire size of the matirx, but the matrix is upper  
triangular. As a result, we get writes outside the bounds of the  
allocated vectors.

We experienced the same problem compiling under linux and under  
Windows, so it does not seem to be a system-specific bug.

Could it be that we are choosing the wrong declaration for the matrix/
vector types?

                                Thank you in advance

                                  Antonio Frangioni



Antonio Frangioni    -    Associate Professor    -    Università di Pisa
Dipartimento di Informatica - Largo B. Pontecorvo, 3 - 56127 Pisa, Italy
Ph: +39 050 2212789, Fax: +39 050 2212726, Web: www.di.unipi.it/~frangio




_______________________________________________
This list is archived at http://www.osl.iu.edu/MailArchives/mtl-devel/