diff --git a/packages/amesos2/src/Amesos2_TpetraMultiVecAdapter_def.hpp b/packages/amesos2/src/Amesos2_TpetraMultiVecAdapter_def.hpp index e76ba7f3bbc3..d495962241fa 100644 --- a/packages/amesos2/src/Amesos2_TpetraMultiVecAdapter_def.hpp +++ b/packages/amesos2/src/Amesos2_TpetraMultiVecAdapter_def.hpp @@ -53,6 +53,7 @@ #ifndef AMESOS2_TPETRA_MULTIVEC_ADAPTER_DEF_HPP #define AMESOS2_TPETRA_MULTIVEC_ADAPTER_DEF_HPP +#include #include "Amesos2_TpetraMultiVecAdapter_decl.hpp" @@ -211,23 +212,14 @@ namespace Amesos2 { const size_t lclNumRows = redist_mv.getLocalLength(); for (size_t j = 0; j < redist_mv.getNumVectors(); ++j) { auto av_j = av(lda*j, lclNumRows); - auto X_j = redist_mv.getVector(j); auto X_lcl_j_2d = redist_mv.template getLocalView (); auto X_lcl_j_1d = Kokkos::subview (X_lcl_j_2d, Kokkos::ALL (), j); - for ( size_t i = 0; i < lclNumRows; ++i ) { - av_j[i] = X_lcl_j_1d(i); - } + + using val_type = typename decltype( X_lcl_j_1d )::value_type; + Kokkos::View umavj ( const_cast< val_type* > ( reinterpret_cast ( av_j.getRawPtr () ) ), av_j.size () ); + Kokkos::deep_copy (umavj, X_lcl_j_1d); } } - - auto global_contiguous_size = distMap->getGlobalNumElements(); //maybe use getGlobalLength() from the mv - auto local_contiguous_size = (distMap->getComm()->getRank() == 0) ? global_contiguous_size : 0; - RCP contigMap = rcp( new map_type(global_contiguous_size, local_contiguous_size, 0, distMap->getComm() )); - - typedef Tpetra::Export contiguous_export_t; - RCP contig_exporter = rcp( new contiguous_export_t(redist_mv.getMap(), contigMap) ); - multivec_t contig_mv( contigMap, num_vecs); - contig_mv.doExport(redist_mv, *contig_exporter, Tpetra::INSERT); } } } @@ -335,7 +327,7 @@ namespace Amesos2 { // num_vecs = 1; stride does not matter auto mv_view_to_modify_2d = mv_->template getLocalView(); for ( size_t i = 0; i < lda; ++i ) { - mv_view_to_modify_2d(i,0) = new_data[i]; + mv_view_to_modify_2d(i,0) = new_data[i]; // Only one vector } } else { @@ -362,8 +354,6 @@ namespace Amesos2 { srcMap = importer_->getSourceMap (); } - multivec_t redist_mv (srcMap, num_vecs); - if ( distribution != CONTIGUOUS_AND_ROOTED ) { // Do this if GIDs contiguous - existing functionality // Redistribute the output (multi)vector. @@ -371,6 +361,7 @@ namespace Amesos2 { mv_->doImport (source_mv, *importer_, Tpetra::REPLACE); } else { + multivec_t redist_mv (srcMap, num_vecs); // unused for ROOTED case typedef typename multivec_t::dual_view_type dual_view_type; typedef typename dual_view_type::host_mirror_space host_execution_space; redist_mv.template modify< host_execution_space > (); @@ -392,12 +383,12 @@ namespace Amesos2 { const size_t lclNumRows = redist_mv.getLocalLength(); for (size_t j = 0; j < redist_mv.getNumVectors(); ++j) { auto av_j = new_data(lda*j, lclNumRows); - auto X_j = redist_mv.getVector(j); auto X_lcl_j_2d = redist_mv.template getLocalView (); auto X_lcl_j_1d = Kokkos::subview (X_lcl_j_2d, Kokkos::ALL (), j); - for ( size_t i = 0; i < lclNumRows; ++i ) { - X_lcl_j_1d(i) = av_j[i]; - } + + using val_type = typename decltype( X_lcl_j_1d )::value_type; + Kokkos::View umavj ( const_cast< val_type* > ( reinterpret_cast ( av_j.getRawPtr () ) ), av_j.size () ); + Kokkos::deep_copy (umavj, X_lcl_j_1d); } } diff --git a/packages/amesos2/test/solvers/CMakeLists.txt b/packages/amesos2/test/solvers/CMakeLists.txt index aa217e07fce1..65622eee1425 100644 --- a/packages/amesos2/test/solvers/CMakeLists.txt +++ b/packages/amesos2/test/solvers/CMakeLists.txt @@ -8,7 +8,8 @@ TRIBITS_ADD_EXECUTABLE( ##### KLU2 Tests ##### -IF (${PACKAGE_NAME}_ENABLE_KLU2 AND NOT ${PROJECT_NAME}_ENABLE_DEBUG AND NOT KOKKOS_ENABLE_DEBUG) +##IF (${PACKAGE_NAME}_ENABLE_KLU2 AND NOT ${PROJECT_NAME}_ENABLE_DEBUG AND NOT KOKKOS_ENABLE_DEBUG) +IF (${PACKAGE_NAME}_ENABLE_KLU2) TRIBITS_ADD_EXECUTABLE_AND_TEST( KLU2_UnitTests # EXCLUDE_IF_NOT_TRUE ${PROJECT_NAME}_ENABLE_DEBUG @@ -188,8 +189,8 @@ ENDIF() #### BASKER Tests #### -IF (${PACKAGE_NAME}_ENABLE_Basker AND NOT ${PROJECT_NAME}_ENABLE_DEBUG) - +## IF (${PACKAGE_NAME}_ENABLE_Basker AND NOT ${PROJECT_NAME}_ENABLE_DEBUG) +IF (${PACKAGE_NAME}_ENABLE_Basker) TRIBITS_ADD_EXECUTABLE_AND_TEST( Basker_UnitTests SOURCES @@ -204,7 +205,6 @@ ENDIF() #### SHYLUBASKER Tests #### IF (${PACKAGE_NAME}_ENABLE_ShyLU_NodeBasker) - TRIBITS_ADD_EXECUTABLE_AND_TEST( ShyLUBasker_UnitTests SOURCES