@@ -845,7 +845,7 @@ KRATOS_TEST_CASE_IN_SUITE(TrilinosBuildSystemStructure, KratosTrilinosApplicatio
845845 pMap = Kratos::make_shared<Epetra_Map>(-1 , local_size, local_ids.data (), 0 , epetra_comm);
846846
847847 TrilinosSparseSpaceType::BuildSystemStructure (
848- epetra_comm, local_size, first_my_id, 5 , all_equation_ids,
848+ epetra_comm, local_size, first_my_id, 5 , all_equation_ids, all_equation_ids,
849849 pA, pb, pDx, pReactions, system_size, pMap
850850 );
851851
@@ -856,6 +856,43 @@ KRATOS_TEST_CASE_IN_SUITE(TrilinosBuildSystemStructure, KratosTrilinosApplicatio
856856 KRATOS_EXPECT_EQ (static_cast <std::size_t >(system_size), TrilinosSparseSpaceType::Size1 (*pA));
857857}
858858
859+ KRATOS_TEST_CASE_IN_SUITE (TrilinosBuildSystemStructureRowColumnBlocks, KratosTrilinosApplicationMPITestSuite)
860+ {
861+ const auto & r_comm = Testing::GetDefaultDataCommunicator ();
862+ auto raw_mpi_comm = MPIDataCommunicator::GetMPICommunicator (r_comm);
863+ Epetra_MpiComm epetra_comm (raw_mpi_comm);
864+
865+ const int local_size = 2 ;
866+ const int first_my_id = r_comm.Rank () * local_size;
867+ const int system_size = 2 * r_comm.Size ();
868+
869+ // Rectangular row/column blocks: one diagonal and one cross entry per rank
870+ std::vector<std::vector<int >> all_row_equation_ids = {{first_my_id}, {first_my_id}};
871+ std::vector<std::vector<int >> all_col_equation_ids = {{first_my_id}, {first_my_id + 1 }};
872+
873+ TrilinosSparseSpaceType::MatrixPointerType pA;
874+ TrilinosSparseSpaceType::VectorPointerType pb;
875+ TrilinosSparseSpaceType::VectorPointerType pDx;
876+ TrilinosSparseSpaceType::VectorPointerType pReactions;
877+
878+ TrilinosSparseSpaceType::MapPointerType pMap;
879+ std::vector<int > local_ids (local_size);
880+ for (int i = 0 ; i < local_size; i++) local_ids[i] = first_my_id + i;
881+ pMap = Kratos::make_shared<Epetra_Map>(-1 , local_size, local_ids.data (), 0 , epetra_comm);
882+
883+ TrilinosSparseSpaceType::BuildSystemStructure (
884+ epetra_comm, local_size, first_my_id, 5 , all_row_equation_ids, all_col_equation_ids,
885+ pA, pb, pDx, pReactions, system_size, pMap
886+ );
887+
888+ KRATOS_EXPECT_FALSE (TrilinosSparseSpaceType::IsNull (pA));
889+ KRATOS_EXPECT_FALSE (TrilinosSparseSpaceType::IsNull (pb));
890+ KRATOS_EXPECT_FALSE (TrilinosSparseSpaceType::IsNull (pDx));
891+ KRATOS_EXPECT_FALSE (TrilinosSparseSpaceType::IsNull (pReactions));
892+ KRATOS_EXPECT_EQ (static_cast <std::size_t >(system_size), TrilinosSparseSpaceType::Size1 (*pA));
893+ KRATOS_EXPECT_EQ (2 * r_comm.Size (), pA->NumGlobalNonzeros ());
894+ }
895+
859896KRATOS_TEST_CASE_IN_SUITE (TrilinosBuildConstraintsStructure, KratosTrilinosApplicationMPITestSuite)
860897{
861898 const auto & r_comm = Testing::GetDefaultDataCommunicator ();
0 commit comments