From bf567029d057187646f96bfa20a49425be4d187e Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Mon, 30 Apr 2012 15:31:07 +0000
Subject: [PATCH] One more MPI test.

---
 test/mpi/src/test0004.cc | 79 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100644 test/mpi/src/test0004.cc

diff --git a/test/mpi/src/test0004.cc b/test/mpi/src/test0004.cc
new file mode 100644
index 00000000..ac4c4845
--- /dev/null
+++ b/test/mpi/src/test0004.cc
@@ -0,0 +1,79 @@
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE 0004
+#define BOOST_TEST_NO_MAIN
+
+#include <boost/test/unit_test.hpp>
+#include <AMDiS.h>
+
+using namespace AMDiS;
+using namespace std;
+
+/*
+  - 
+*/
+
+BOOST_AUTO_TEST_CASE(amdis_mpi_feti_multilevel)
+{
+  BOOST_REQUIRE(MPI::COMM_WORLD.Get_size() == 16);
+
+  ProblemStat ellipt("ellipt");
+  ellipt.initialize(INIT_ALL);
+
+  MeshDistributor *meshDist = MeshDistributor::globalMeshDistributor;
+  meshDist->initParallelization();
+
+  const FiniteElemSpace *feSpace = ellipt.getFeSpace();
+  vector<const FiniteElemSpace*> feSpaces;
+  feSpaces.push_back(feSpace);
+
+  Mesh* mesh = ellipt.getMesh();
+  mesh->dofCompress();
+
+  BOOST_REQUIRE(mesh->getNumberOfLeaves() == 4);
+  BOOST_REQUIRE(meshDist->getMeshLevelData().getLevelNumber() == 2);
+  BOOST_REQUIRE(feSpace->getAdmin()->getUsedSize() == 5);
+
+  MeshLevelData &levelData = meshDist->getMeshLevelData();
+  DofComm::LevelDataType &sendDofs = meshDist->getDofComm().getSendDofs();
+  DofComm::LevelDataType &recvDofs = meshDist->getDofComm().getRecvDofs();
+
+  ParallelDofMapping dofMap;
+  dofMap.init(levelData, feSpaces, feSpaces, true, true);
+  dofMap.setDofComm(meshDist->getDofComm());
+  dofMap.clear();
+
+  Spreadsheet sheet;
+  sheet.read("data/data0004a");
+  vector<vector<double> > &data = sheet.getData();
+  for (unsigned int i = 0; i < data.size(); i++) {
+    if (data[i][0] != MPI::COMM_WORLD.Get_rank()) 
+      continue;
+
+    int level = data[i][1];
+    int nSendDofs = data[i][2];
+    int nRecvDofs = data[i][3];
+
+    int compareSendDofs = 
+      meshDist->getDofComm().getNumberDofs(sendDofs, level, feSpace);
+    int compareRecvDofs =
+      meshDist->getDofComm().getNumberDofs(recvDofs, level, feSpace);
+
+    TEST_EXIT(nSendDofs == compareSendDofs)
+      ("Wrong number of SEND DOFs in level %d: %d %d\n", 
+       level, nSendDofs, compareSendDofs);
+
+    TEST_EXIT(nRecvDofs == compareRecvDofs)
+      ("Wrong number of RECV DOFs in level %d: %d %d\n", 
+       level, nRecvDofs, compareRecvDofs);
+  }
+}
+
+
+int main(int argc, char **argv)
+{
+  AMDiS::init(argc, argv, "./init/test0004.dat.2d");
+
+  boost::unit_test::unit_test_main(&init_unit_test, argc, argv);
+
+  AMDiS::finalize();
+}
-- 
GitLab