Tpetra::BlockCrsMatrix: Deprecate "experimental" headers & namespace
Created by: mhoemmen
@trilinos/tpetra @kddevin (as discussed in the weekly Tpetra meeting today)
Tpetra::BlockCrsMatrix
is implemented in the Tpetra_Experimental_BlockCrsMatrix*.hpp
headers and the Tpetra::Experimental
namespace. However, at least one production code uses BlockCrsMatrix. This means that we should not call it "experimental" any more. We should deprecate the "experimental" headers and namespace, and put this class into the Tpetra
namespace. (In fact, it's already there; see below.)
"De-experimental-ing" BlockCrsMatrix could happen in N steps:
- The
Tpetra_BlockCrsMatrix*.hpp
headers already exist, and they import BlockCrsMatrix into theTpetra
namespace. Production codes should just include those header files for now. - Tpetra could then put the implementation of BlockCrsMatrix in the existing
Tpetra_BlockCrsMatrix*.hpp
headers, make sure that Tpetra's CMake logic auto-generatesTpetra_BlockCrsMatrix.cpp
(instead ofTpetra_Experimental_BlockCrsMatrix.cpp
). EachTpetra_Experimental_BlockCrsMatrix*.hpp
header would then just include the correspondingTpetra_BlockCrsMatrix*.hpp
header, and import the class into theTpetra::Experimental
namespace. - It's possible to deprecate header files, so we can then mark the
Tpetra_Experimental_BlockCrsMatrix*.hpp
headers as deprecated.
@kyungjoo-kim brings up a good concern, that perhaps we should evaluate BlockCrsMatrix's performance and fix any major issues we find, before "releasing" it into the Tpetra namespace. While the Tpetra_BlockCrsMatrix*.hpp
headers do already import it into the Tpetra namespace, the above actions would constitute a more formal release. The application that uses BlockCrsMatrix depends mainly on a specialized solver for performance, not on sparse matrix-vector multiply (BlockCrsMatrix::apply
).