Support dense linear algebra
Overall Goal
We need to support something like this:
Matrix<FieldT> mat;
// matrix assembly:
for( size_t irow=0; irow<nrow; ++irow ){
for( size_t icol=0; icol<ncol; ++icol ){
mat[irow][icol] <<= ...
}
}
// solve pointwise Ax=b problem
// and store the result in a field:
solution <<= mat.solve( rhs );
// alternatively: mat.solve( rhs, solution );
// eigenvalue decomposition
vector<FieldT*> eigVals;
mat.eigenvalues( eigVals );
This should dispatch to GPU or CPU as appropriate (similar to what nebo currently does for field operations).
Milestones/SubTasks
-
regression testing -
verify consistency of row and column indexes in all class members -
add support for eigenvalues -
use an actively developed library; uBlas was easy to add, but is 7 years old -
improve performance by removing unnecessary data transfers and function calls -
support parallel CPU execution -
support GPU execution