#define BOOST_TEST_DYN_LINK #define BOOST_TEST_MODULE 0002 #define BOOST_TEST_NO_MAIN #include #include using namespace AMDiS; using namespace std; /* - */ BOOST_AUTO_TEST_CASE(amdis_mpi_feti) { BOOST_REQUIRE(MPI::COMM_WORLD.Get_size() == 16); ProblemStat ellipt("ellipt"); ellipt.initialize(INIT_ALL); MeshDistributor *meshDist = MeshDistributor::globalMeshDistributor; meshDist->initParallelization(); ParallelDofMapping &dofMap = meshDist->getDofMap(); Mesh* mesh = ellipt.getMesh(); BOOST_REQUIRE(mesh->getNumberOfLeaves() == 8); BOOST_REQUIRE(meshDist->getMeshLevelData().getLevelNumber() == 1); vector feSpaces; feSpaces.push_back(ellipt.getFeSpace(0)); PetscSolverFeti &feti = *(dynamic_cast(ellipt.getPetscSolver())); feti.setMeshDistributor(meshDist); feti.initialize(feSpaces); feti.createFetiData(); BOOST_REQUIRE(feti.getNumberOfPrimals() == 21); BOOST_REQUIRE(feti.getNumberOfDuals() == 48); Spreadsheet sheet; sheet.read("data/data0002a"); vector data = sheet.getData()[MPI::COMM_WORLD.Get_rank()]; const FiniteElemSpace *feSpace = ellipt.getFeSpace(0); vector testData; testData.push_back(feti.getNumberOfRankPrimals()); testData.push_back(feti.getNumberOfRankDuals()); testData.push_back(dofMap[feSpace].nRankDofs[0]); testData.push_back(dofMap[feSpace].rStartDofs[0]); testData.push_back(dofMap[feSpace].nOverallDofs[0]); BOOST_REQUIRE(data.size() - 1 == testData.size()); BOOST_REQUIRE(equal(data.begin() + 1, data.end(), testData.begin())); ellipt.getRefinementManager()->globalRefine(mesh, 6); meshDist->checkMeshChange(); feti.createFetiData(); sheet.read("data/data0002b"); data = sheet.getData()[MPI::COMM_WORLD.Get_rank()]; testData.clear(); testData.push_back(feti.getNumberOfRankPrimals()); testData.push_back(feti.getNumberOfRankDuals()); testData.push_back(dofMap[feSpace].nRankDofs[0]); testData.push_back(dofMap[feSpace].rStartDofs[0]); testData.push_back(dofMap[feSpace].nOverallDofs[0]); BOOST_REQUIRE(data.size() - 1 == testData.size()); BOOST_REQUIRE(equal(data.begin() + 1, data.end(), testData.begin())); } int main(int argc, char **argv) { AMDiS::init(argc, argv, "./init/test0002.dat.2d"); boost::unit_test::unit_test_main(&init_unit_test, argc, argv); AMDiS::finalize(); }