diff --git a/packages/stokhos/src/sacado/kokkos/pce/amesos2/Amesos2_Solver_UQ_PCE.hpp b/packages/stokhos/src/sacado/kokkos/pce/amesos2/Amesos2_Solver_UQ_PCE.hpp index db3718af3759..1927b2aed9b8 100644 --- a/packages/stokhos/src/sacado/kokkos/pce/amesos2/Amesos2_Solver_UQ_PCE.hpp +++ b/packages/stokhos/src/sacado/kokkos/pce/amesos2/Amesos2_Solver_UQ_PCE.hpp @@ -49,12 +49,12 @@ namespace Amesos2 { - template + template typename Sacado::UQ::PCE::cijk_type get_pce_cijk( - const Teuchos::RCP, LO, GO, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > >& A = Teuchos::null, - const Teuchos::RCP, LO, GO, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > >& X = Teuchos::null, - const Teuchos::RCP, LO, GO, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > >& B = Teuchos::null) + const Teuchos::RCP, LO, GO, NO > >& A = Teuchos::null, + const Teuchos::RCP, LO, GO, NO > >& X = Teuchos::null, + const Teuchos::RCP, LO, GO, NO > >& B = Teuchos::null) { if (A != Teuchos::null) { return Kokkos::cijk(A->getLocalValuesDevice(Tpetra::Access::ReadOnly)); @@ -75,22 +75,21 @@ namespace Amesos2 { /// these matrices and vectors into ones with a standard (e.g., double) /// scalar type. template class ConcreteSolver> + class Node, template class ConcreteSolver> class PCESolverAdapter : public Solver< Tpetra::CrsMatrix, LocalOrdinal, GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >, + Node >, Tpetra::MultiVector, LocalOrdinal, GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode > + Node > > { public: typedef Sacado::UQ::PCE Scalar; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Tpetra::CrsMatrix Matrix; typedef Tpetra::MultiVector Vector; @@ -509,13 +508,12 @@ namespace Amesos2 { // Sacado::UQ::PCE where we create PCESolverAdapter wrapping // each solver template < template class ConcreteSolver, - class ST, class LO, class GO, class D > + class ST, class LO, class GO, class NO > struct create_solver_with_supported_type< ConcreteSolver, - Tpetra::CrsMatrix,LO,GO,Tpetra::KokkosCompat::KokkosDeviceWrapperNode >, - Tpetra::MultiVector,LO,GO,Tpetra::KokkosCompat::KokkosDeviceWrapperNode > > { + Tpetra::CrsMatrix,LO,GO,NO >, + Tpetra::MultiVector,LO,GO,NO > > { typedef Sacado::UQ::PCE SC; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode NO; typedef Tpetra::CrsMatrix Matrix; typedef Tpetra::MultiVector Vector; static Teuchos::RCP > @@ -532,7 +530,7 @@ namespace Amesos2 { (void)same_scalar_assertion; // This stops the compiler from warning about unused declared variables // If our assertion did not fail, then create and return a new solver - return Teuchos::rcp( new PCESolverAdapter(A, X, B) ); + return Teuchos::rcp( new PCESolverAdapter(A, X, B) ); } }; diff --git a/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_UQ_PCE.hpp b/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_UQ_PCE.hpp index 3a1bd60faa4b..c3e1a94d0235 100644 --- a/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_UQ_PCE.hpp +++ b/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_UQ_PCE.hpp @@ -127,9 +127,9 @@ struct DeviceForNode2 { #endif // defined(KOKKOS_ENABLE_SERIAL) }; -template -struct DeviceForNode2< Tpetra::KokkosCompat::KokkosDeviceWrapperNode > { - typedef Device type; +template +struct DeviceForNode2< Tpetra::KokkosCompat::KokkosDeviceWrapperNode > { + typedef typename Tpetra::KokkosCompat::KokkosDeviceWrapperNode::device_type type; }; } diff --git a/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_Utilities_UQ_PCE.hpp b/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_Utilities_UQ_PCE.hpp index e82d6ac22329..9c47cf03db7d 100644 --- a/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_Utilities_UQ_PCE.hpp +++ b/packages/stokhos/src/sacado/kokkos/pce/tpetra/Stokhos_Tpetra_Utilities_UQ_PCE.hpp @@ -53,17 +53,15 @@ namespace Stokhos { // Build a CRS graph from a sparse Cijk tensor - template - Teuchos::RCP< Tpetra::CrsGraph > > + Teuchos::RCP< Tpetra::CrsGraph > create_cijk_crs_graph(const CijkType& cijk_dev, const Teuchos::RCP >& comm, const size_t matrix_pce_size) { using Teuchos::RCP; using Teuchos::arrayView; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Tpetra::Map Map; typedef Tpetra::CrsGraph Graph; @@ -117,16 +115,15 @@ namespace Stokhos { // UQ::PCE scalar type // If flat_domain_map and/or flat_range_map are null, they will be computed, // otherwise they will be used as-is. - template - Teuchos::RCP< Tpetra::CrsGraph > > + Teuchos::RCP< Tpetra::CrsGraph > create_flat_pce_graph( - const Tpetra::CrsGraph >& graph, + const Tpetra::CrsGraph& graph, const CijkType& cijk, - Teuchos::RCP > >& flat_domain_map, - Teuchos::RCP > >& flat_range_map, - Teuchos::RCP > >& cijk_graph, + Teuchos::RCP >& flat_domain_map, + Teuchos::RCP >& flat_range_map, + Teuchos::RCP >& cijk_graph, const size_t matrix_pce_size) { using Teuchos::ArrayView; using Teuchos::ArrayRCP; @@ -134,7 +131,6 @@ namespace Stokhos { using Teuchos::RCP; using Teuchos::rcp; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Tpetra::Map Map; typedef Tpetra::CrsGraph Graph; @@ -163,7 +159,7 @@ namespace Stokhos { // Build Cijk graph if necessary if (cijk_graph == Teuchos::null) - cijk_graph = create_cijk_crs_graph( + cijk_graph = create_cijk_crs_graph( cijk, flat_domain_map->getComm(), matrix_pce_size); @@ -231,21 +227,17 @@ namespace Stokhos { // Create a flattened vector by unrolling the UQ::PCE scalar type. The // returned vector is a view of the original template + typename Node> Teuchos::RCP< const Tpetra::MultiVector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( const Tpetra::MultiVector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - const Teuchos::RCP< const Tpetra::Map > >& flat_map) { + LocalOrdinal,GlobalOrdinal,Node >& vec, + const Teuchos::RCP< const Tpetra::Map >& flat_map) { using Teuchos::RCP; using Teuchos::rcp; typedef typename Storage::value_type BaseScalar; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Tpetra::MultiVector FlatVector; typedef typename FlatVector::dual_view_type::t_dev flat_view_type; @@ -253,7 +245,7 @@ namespace Stokhos { // non-const method, yet getLocalViewDevice(ReadOnly) returns a const-view // (i.e., with a constant scalar type), and there is no way to make a // MultiVector out of it! - typedef Tpetra::MultiVector, LocalOrdinal,GlobalOrdinal, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > mv_type; + typedef Tpetra::MultiVector, LocalOrdinal,GlobalOrdinal, Node > mv_type; mv_type& vec_nc = const_cast(vec); // Create flattenend view using special reshaping view assignment operator @@ -268,21 +260,17 @@ namespace Stokhos { // Create a flattened vector by unrolling the UQ::PCE scalar type. The // returned vector is a view of the original template + typename Node> Teuchos::RCP< Tpetra::MultiVector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( Tpetra::MultiVector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - const Teuchos::RCP< const Tpetra::Map > >& flat_map) { + LocalOrdinal,GlobalOrdinal,Node >& vec, + const Teuchos::RCP< const Tpetra::Map >& flat_map) { using Teuchos::RCP; using Teuchos::rcp; typedef typename Storage::value_type BaseScalar; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Tpetra::MultiVector FlatVector; typedef typename FlatVector::dual_view_type::t_dev flat_view_type; @@ -299,17 +287,14 @@ namespace Stokhos { // returned vector is a view of the original. This version creates the // map if necessary template + typename Node> Teuchos::RCP< const Tpetra::MultiVector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( const Tpetra::MultiVector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - Teuchos::RCP< const Tpetra::Map > >& flat_map) { - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; + LocalOrdinal,GlobalOrdinal,Node >& vec, + Teuchos::RCP< const Tpetra::Map >& flat_map) { + typedef typename Node::device_type Device; if (flat_map == Teuchos::null) { const LocalOrdinal pce_size = Kokkos::dimension_scalar(vec.template getLocalView(Tpetra::Access::ReadOnly)); @@ -323,17 +308,14 @@ namespace Stokhos { // returned vector is a view of the original. This version creates the // map if necessary template + typename Node> Teuchos::RCP< Tpetra::MultiVector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( Tpetra::MultiVector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - Teuchos::RCP< const Tpetra::Map > >& flat_map) { - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; + LocalOrdinal,GlobalOrdinal,Node >& vec, + Teuchos::RCP< const Tpetra::Map >& flat_map) { + typedef typename Node::device_type Device; if (flat_map == Teuchos::null) { const LocalOrdinal pce_size = Kokkos::dimension_scalar(vec.template getLocalView(Tpetra::Access::ReadOnly)); @@ -346,17 +328,13 @@ namespace Stokhos { // Create a flattened vector by unrolling the UQ::PCE scalar type. The // returned vector is a view of the original template + typename Node> Teuchos::RCP< const Tpetra::Vector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( const Tpetra::Vector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec_const, - const Teuchos::RCP< const Tpetra::Map > >& flat_map) { - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; + LocalOrdinal,GlobalOrdinal,Node >& vec_const, + const Teuchos::RCP< const Tpetra::Map >& flat_map) { const Tpetra::MultiVector,LocalOrdinal,GlobalOrdinal,Node>& mv = vec_const; Teuchos::RCP< Tpetra::MultiVector > flat_mv = create_flat_vector_view(mv, flat_map); return flat_mv->getVector(0); @@ -366,17 +344,14 @@ namespace Stokhos { // returned vector is a view of the original. This version creates the // map if necessary template + typename Node> Teuchos::RCP< const Tpetra::Vector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( const Tpetra::Vector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - Teuchos::RCP< const Tpetra::Map > >& flat_map) { - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; + LocalOrdinal,GlobalOrdinal,Node >& vec, + Teuchos::RCP< const Tpetra::Map >& flat_map) { + typedef typename Node::device_type Device; if (flat_map == Teuchos::null) { const LocalOrdinal pce_size = Kokkos::dimension_scalar(vec.template getLocalView(Tpetra::Access::ReadOnly)); @@ -389,17 +364,13 @@ namespace Stokhos { // Create a flattened vector by unrolling the UQ::PCE scalar type. The // returned vector is a view of the original template + typename Node> Teuchos::RCP< Tpetra::Vector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( Tpetra::Vector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - const Teuchos::RCP< const Tpetra::Map > >& flat_map) { - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; + LocalOrdinal,GlobalOrdinal,Node >& vec, + const Teuchos::RCP< const Tpetra::Map >& flat_map) { Tpetra::MultiVector,LocalOrdinal,GlobalOrdinal,Node>& mv = vec; Teuchos::RCP< Tpetra::MultiVector > flat_mv = create_flat_vector_view(mv, flat_map); return flat_mv->getVectorNonConst(0); @@ -409,17 +380,14 @@ namespace Stokhos { // returned vector is a view of the original. This version creates the // map if necessary template + typename Node> Teuchos::RCP< Tpetra::Vector > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_vector_view( Tpetra::Vector, - LocalOrdinal,GlobalOrdinal, - Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& vec, - Teuchos::RCP< const Tpetra::Map > >& flat_map) { - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; + LocalOrdinal,GlobalOrdinal,Node >& vec, + Teuchos::RCP< const Tpetra::Map >& flat_map) { + typedef typename Node::device_type Device; if (flat_map == Teuchos::null) { const LocalOrdinal pce_size = Kokkos::dimension_scalar(vec.template getLocalView(Tpetra::Access::ReadOnly)); @@ -432,22 +400,20 @@ namespace Stokhos { // Create a flattened matrix by unrolling the UQ::PCE scalar type. The // returned matrix is NOT a view of the original (and can't be) template + typename Node, typename CijkType> Teuchos::RCP< Tpetra::CrsMatrix > > + LocalOrdinal,GlobalOrdinal,Node > > create_flat_matrix( const Tpetra::CrsMatrix, - LocalOrdinal,GlobalOrdinal,Tpetra::KokkosCompat::KokkosDeviceWrapperNode >& mat, - const Teuchos::RCP > >& flat_graph, - const Teuchos::RCP > >& cijk_graph, + LocalOrdinal,GlobalOrdinal,Node >& mat, + const Teuchos::RCP >& flat_graph, + const Teuchos::RCP >& cijk_graph, const CijkType& cijk_dev) { using Teuchos::ArrayView; using Teuchos::Array; using Teuchos::RCP; using Teuchos::rcp; - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Sacado::UQ::PCE Scalar; typedef typename Storage::value_type BaseScalar; typedef Tpetra::CrsMatrix Matrix; diff --git a/packages/stokhos/src/sacado/kokkos/vector/amesos2/Amesos2_Solver_MP_Vector.hpp b/packages/stokhos/src/sacado/kokkos/vector/amesos2/Amesos2_Solver_MP_Vector.hpp index db434a952bea..87813021f05b 100644 --- a/packages/stokhos/src/sacado/kokkos/vector/amesos2/Amesos2_Solver_MP_Vector.hpp +++ b/packages/stokhos/src/sacado/kokkos/vector/amesos2/Amesos2_Solver_MP_Vector.hpp @@ -49,21 +49,11 @@ namespace Amesos2 { - template + template LO get_mp_vector_size( - const Teuchos::RCP, LO, GO, N> >& A = Teuchos::null, - const Teuchos::RCP, LO, GO, N> >& X = Teuchos::null, - const Teuchos::RCP, LO, GO, N> >& B = Teuchos::null) - { - // Without KokkosRefactor, can only do static - return S::static_size; - } - - template - LO get_mp_vector_size( - const Teuchos::RCP, LO, GO, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > >& A = Teuchos::null, - const Teuchos::RCP, LO, GO, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > >& X = Teuchos::null, - const Teuchos::RCP, LO, GO, Tpetra::KokkosCompat::KokkosDeviceWrapperNode > >& B = Teuchos::null) + const Teuchos::RCP, LO, GO, NO > >& A = Teuchos::null, + const Teuchos::RCP, LO, GO, NO > >& X = Teuchos::null, + const Teuchos::RCP, LO, GO, NO > >& B = Teuchos::null) { if (A != Teuchos::null) { return Kokkos::dimension_scalar(A->getLocalValuesDevice(Tpetra::Access::ReadOnly)); diff --git a/packages/stokhos/src/sacado/kokkos/vector/linalg/Kokkos_CrsMatrix_MP_Vector_Cuda.hpp b/packages/stokhos/src/sacado/kokkos/vector/linalg/Kokkos_CrsMatrix_MP_Vector_Cuda.hpp index 4e29e05c68a3..a1df5529096c 100644 --- a/packages/stokhos/src/sacado/kokkos/vector/linalg/Kokkos_CrsMatrix_MP_Vector_Cuda.hpp +++ b/packages/stokhos/src/sacado/kokkos/vector/linalg/Kokkos_CrsMatrix_MP_Vector_Cuda.hpp @@ -78,7 +78,8 @@ FullOccupancyKernelLaunch(Kernel kernel) { // // This implementation uses the underlying 2-D view directly. // Currently only works for statically sized MP::Vector -template class MPMultiply< KokkosSparse::CrsMatrix, MatrixOrdinal, - Kokkos::Device, + Kokkos::Device, MatrixMemory, MatrixSize>, Kokkos::View< const Sacado::MP::Vector*, @@ -106,7 +107,7 @@ class MPMultiply< KokkosSparse::CrsMatrix InputVectorValue; typedef Sacado::MP::Vector OutputVectorValue; - typedef Kokkos::Device Device; + typedef Kokkos::Device Device; typedef typename Device::execution_space execution_space; typedef typename execution_space::size_type size_type; @@ -325,7 +326,8 @@ class MPMultiply< KokkosSparse::CrsMatrix class MPMultiply< KokkosSparse::CrsMatrix, MatrixOrdinal, - Kokkos::Device, + Kokkos::Device, MatrixMemory, MatrixSize>, Kokkos::View< const Sacado::MP::Vector**, @@ -353,7 +355,7 @@ class MPMultiply< KokkosSparse::CrsMatrix InputVectorValue; typedef Sacado::MP::Vector OutputVectorValue; - typedef Kokkos::Device Device; + typedef Kokkos::Device Device; typedef typename Device::execution_space execution_space; typedef typename execution_space::size_type size_type; diff --git a/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_MP_Vector.hpp b/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_MP_Vector.hpp index 7fed0dd22b63..72a8cefb0218 100644 --- a/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_MP_Vector.hpp +++ b/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_MP_Vector.hpp @@ -101,9 +101,9 @@ struct DeviceForNode { /// \brief Partial specialization of DeviceForNode, for new Kokkos /// "wrapper" Node types. /// \tparam Device (New) Kokkos execution space type. -template -struct DeviceForNode< Tpetra::KokkosCompat::KokkosDeviceWrapperNode > { - typedef Device type; +template +struct DeviceForNode< Tpetra::KokkosCompat::KokkosDeviceWrapperNode > { + typedef typename Tpetra::KokkosCompat::KokkosDeviceWrapperNode::device_type type; }; #endif diff --git a/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_Utilities_MP_Vector.hpp b/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_Utilities_MP_Vector.hpp index 3370710d3969..360304b0a9fc 100644 --- a/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_Utilities_MP_Vector.hpp +++ b/packages/stokhos/src/sacado/kokkos/vector/tpetra/Stokhos_Tpetra_Utilities_MP_Vector.hpp @@ -93,91 +93,16 @@ namespace Stokhos { // If flat_domain_map and/or flat_range_map are null, they will be computed, // otherwise they will be used as-is. template - Teuchos::RCP< Tpetra::CrsGraph > + Teuchos::RCP< Tpetra::CrsGraph > create_flat_mp_graph( - const Tpetra::CrsGraph& graph, - Teuchos::RCP >& flat_domain_map, - Teuchos::RCP >& flat_range_map, + const Tpetra::CrsGraph& graph, + Teuchos::RCP >& flat_domain_map, + Teuchos::RCP >& flat_range_map, const LocalOrdinal block_size) { using Teuchos::ArrayRCP; using Teuchos::RCP; using Teuchos::rcp; - typedef Tpetra::Map Map; - typedef Tpetra::CrsGraph Graph; - - // Build domain map if necessary - if (flat_domain_map == Teuchos::null) - flat_domain_map = create_flat_map(*(graph.getDomainMap()), block_size); - - // Build range map if necessary - if (flat_range_map == Teuchos::null) - flat_range_map = create_flat_map(*(graph.getRangeMap()), block_size); - - // Build column map - RCP flat_col_map = - create_flat_map(*(graph.getColMap()), block_size); - - // Build row map if necessary - // Check if range_map == row_map, then we can use flat_range_map - // as the flattened row map - RCP flat_row_map; - if (graph.getRangeMap() == graph.getRowMap()) - flat_row_map = flat_range_map; - else - flat_row_map = create_flat_map(*(graph.getRowMap()), block_size); - - // Build flattened row offsets and column indices - auto row_offsets = graph.getLocalRowPtrsHost(); - auto col_indices = graph.getLocalIndicesHost(); - const size_t num_row = graph.getLocalNumRows(); - const size_t num_col_indices = col_indices.size(); - ArrayRCP flat_row_offsets(num_row*block_size+1); - ArrayRCP flat_col_indices(num_col_indices * block_size); - for (size_t row=0; row flat_graph = - rcp(new Graph(flat_row_map, flat_col_map, - flat_row_offsets, flat_col_indices)); - flat_graph->fillComplete(flat_domain_map, flat_range_map); - - return flat_graph; - } - - - // Create a flattened graph for a graph from a matrix with the - // MP::Vector scalar type (each block is an identity matrix) - // If flat_domain_map and/or flat_range_map are null, they will be computed, - // otherwise they will be used as-is. - template - Teuchos::RCP< Tpetra::CrsGraph > > - create_flat_mp_graph( - const Tpetra::CrsGraph >& graph, - Teuchos::RCP > >& flat_domain_map, - Teuchos::RCP > >& flat_range_map, - const LocalOrdinal block_size) { - using Teuchos::ArrayRCP; - using Teuchos::RCP; - using Teuchos::rcp; - - typedef Tpetra::KokkosCompat::KokkosDeviceWrapperNode Node; typedef Tpetra::Map Map; typedef Tpetra::CrsGraph Graph; typedef typename Graph::local_graph_device_type::row_map_type::non_const_type RowPtrs;