Tpetra::CrsMatrix: Implement "DualView" (better: "dual view") semantics
Created by: mhoemmen
@trilinos/tpetra Tpetra::MultiVector already implements "dual view" semantics. We need the other modifiable Tpetra classes to implement this as well.
Tpetra::CrsMatrix needs to implement the following interface:
sync<MemorySpace>(): Sync to the given memory space
modify<MemorySpace>(): Mark data in the given memory space as modified
bool need_sync<MemorySpace>() const: Do we need a sync to the given memory space?
local_matrix_type getLocalMatrix<MemorySpace>() const: Get the KokkosSparse::CrsMatrix living in the given memory space
getLocalMatrix is not templated, and returns the version of the data living in
Tpetra::CrsMatrix::device_type::memory_space. Tpetra::CrsMatrix does not yet provide any of the other methods.
It does not make sense for Tpetra::CrsGraph to implement dual view semantics until that class' interface allows thread-parallel graph construction (other than by constructing a Kokkos::StaticCrsGraph in a thread-parallel way, and handing it to Tpetra::CrsGraph's constructor). Thus, this Tpetra::CrsMatrix issue only refers to the fixed graph case -- either when the matrix was created using a const graph, or after the matrix's first