@@ -760,7 +760,6 @@ KRATOS_TEST_CASE_IN_SUITE(TrilinosMatrixMarketVector, KratosTrilinosApplicationM
760760 }
761761}
762762
763-
764763KRATOS_TEST_CASE_IN_SUITE (TrilinosIsDistributedSpace, KratosTrilinosApplicationMPITestSuite)
765764{
766765 KRATOS_EXPECT_TRUE (TrilinosSparseSpaceType::IsDistributedSpace ());
@@ -950,6 +949,49 @@ KRATOS_TEST_CASE_IN_SUITE(TrilinosCreateVectorCopy, KratosTrilinosApplicationMPI
950949 TrilinosCPPTestUtilities::CheckSparseVectorFromLocalVector (*p_copy, local_vector);
951950}
952951
952+ KRATOS_TEST_CASE_IN_SUITE (TrilinosCreateVector, KratosTrilinosApplicationMPITestSuite)
953+ {
954+ const auto & r_comm = Testing::GetDefaultDataCommunicator ();
955+ const int size = 2 * r_comm.Size ();
956+ auto raw_mpi_comm = MPIDataCommunicator::GetMPICommunicator (r_comm);
957+ TrilinosSparseSpaceType::CommunicatorType epetra_comm (raw_mpi_comm);
958+ auto p_map = Kratos::make_shared<TrilinosSparseSpaceType::MapType>(size, 0 , epetra_comm);
959+ auto p_vec = TrilinosSparseSpaceType::CreateVector (p_map);
960+ KRATOS_EXPECT_FALSE (TrilinosSparseSpaceType::IsNull (p_vec));
961+ KRATOS_EXPECT_EQ (static_cast <std::size_t >(size), TrilinosSparseSpaceType::Size (*p_vec));
962+ }
963+
964+ KRATOS_TEST_CASE_IN_SUITE (TrilinosCreateMatrix, KratosTrilinosApplicationMPITestSuite)
965+ {
966+ const auto & r_comm = Testing::GetDefaultDataCommunicator ();
967+ const int size = 2 * r_comm.Size ();
968+ auto matrix = TrilinosCPPTestUtilities::GenerateDummySparseMatrix (r_comm, size);
969+ // Build a graph from the existing matrix and use CreateMatrix
970+ auto p_graph = Kratos::make_shared<TrilinosSparseSpaceType::GraphType>(matrix.Graph ());
971+ auto p_new_matrix = TrilinosSparseSpaceType::CreateMatrix (p_graph);
972+ KRATOS_EXPECT_FALSE (TrilinosSparseSpaceType::IsNull (p_new_matrix));
973+ KRATOS_EXPECT_EQ (TrilinosSparseSpaceType::Size1 (matrix), TrilinosSparseSpaceType::Size1 (*p_new_matrix));
974+ KRATOS_EXPECT_EQ (TrilinosSparseSpaceType::Size2 (matrix), TrilinosSparseSpaceType::Size2 (*p_new_matrix));
975+ }
976+
977+ KRATOS_TEST_CASE_IN_SUITE (TrilinosCreateMatrixCopy, KratosTrilinosApplicationMPITestSuite)
978+ {
979+ const auto & r_comm = Testing::GetDefaultDataCommunicator ();
980+ const int size = 2 * r_comm.Size ();
981+ auto matrix = TrilinosCPPTestUtilities::GenerateDummySparseMatrix (r_comm, size);
982+ auto p_copy = TrilinosSparseSpaceType::CreateMatrixCopy (matrix);
983+ // Sizes must match
984+ KRATOS_EXPECT_EQ (TrilinosSparseSpaceType::Size1 (matrix), TrilinosSparseSpaceType::Size1 (*p_copy));
985+ KRATOS_EXPECT_EQ (TrilinosSparseSpaceType::Size2 (matrix), TrilinosSparseSpaceType::Size2 (*p_copy));
986+ // Frobenius norms must match
987+ KRATOS_EXPECT_NEAR (TrilinosSparseSpaceType::TwoNorm (matrix),
988+ TrilinosSparseSpaceType::TwoNorm (*p_copy), 1.0e-12 );
989+ // Copy must be independent: zeroing the original does not affect the copy
990+ const double original_norm = TrilinosSparseSpaceType::TwoNorm (*p_copy);
991+ TrilinosSparseSpaceType::SetToZero (matrix);
992+ KRATOS_EXPECT_NEAR (TrilinosSparseSpaceType::TwoNorm (*p_copy), original_norm, 1.0e-12 );
993+ }
994+
953995KRATOS_TEST_CASE_IN_SUITE (TrilinosCreateEmptyPointerWithComm, KratosTrilinosApplicationMPITestSuite)
954996{
955997 const auto & r_comm = Testing::GetDefaultDataCommunicator ();
0 commit comments