From 6f8a743343738edd34014e01fc31bda60875c6a1 Mon Sep 17 00:00:00 2001
From: Thomas Witkowski <thomas.witkowski@gmx.de>
Date: Fri, 4 May 2012 10:07:24 +0000
Subject: [PATCH] Add test for multilevel interior boundaries and dof
 communicators.

---
 AMDiS/src/parallel/DofComm.cc                 |   5 +
 AMDiS/src/parallel/InteriorBoundary.cc        |   1 -
 AMDiS/src/parallel/MeshDistributor.cc         |   7 +-
 AMDiS/src/parallel/MeshDistributor.h          |  10 ++
 test/mpi/data/data0006/dofcomm_level_1.dat    |  17 ++++
 .../data/data0006/interior_boundary_p0.ser    | Bin 0 -> 266 bytes
 .../data/data0006/interior_boundary_p1.ser    | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p10.ser   | Bin 0 -> 266 bytes
 .../data/data0006/interior_boundary_p11.ser   | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p12.ser   | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p13.ser   | Bin 0 -> 358 bytes
 .../data/data0006/interior_boundary_p14.ser   | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p15.ser   | Bin 0 -> 358 bytes
 .../data/data0006/interior_boundary_p2.ser    | Bin 0 -> 266 bytes
 .../data/data0006/interior_boundary_p3.ser    | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p4.ser    | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p5.ser    | Bin 0 -> 358 bytes
 .../data/data0006/interior_boundary_p6.ser    | Bin 0 -> 258 bytes
 .../data/data0006/interior_boundary_p7.ser    | Bin 0 -> 358 bytes
 .../data/data0006/interior_boundary_p8.ser    | Bin 0 -> 266 bytes
 .../data/data0006/interior_boundary_p9.ser    | Bin 0 -> 258 bytes
 test/mpi/init/test0006.dat.2d                 |  25 +++++
 test/mpi/src/test0002.cc                      |   3 +-
 test/mpi/src/test0003.cc                      |   2 +-
 test/mpi/src/test0004.cc                      |   2 +-
 test/mpi/src/test0005.cc                      |   3 +-
 test/mpi/src/test0006.cc                      |  88 ++++++++++++++++++
 27 files changed, 154 insertions(+), 9 deletions(-)
 create mode 100644 test/mpi/data/data0006/dofcomm_level_1.dat
 create mode 100644 test/mpi/data/data0006/interior_boundary_p0.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p1.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p10.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p11.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p12.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p13.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p14.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p15.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p2.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p3.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p4.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p5.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p6.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p7.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p8.ser
 create mode 100644 test/mpi/data/data0006/interior_boundary_p9.ser
 create mode 100644 test/mpi/init/test0006.dat.2d
 create mode 100644 test/mpi/src/test0006.cc

diff --git a/AMDiS/src/parallel/DofComm.cc b/AMDiS/src/parallel/DofComm.cc
index 52660d1b..0ec8f963 100644
--- a/AMDiS/src/parallel/DofComm.cc
+++ b/AMDiS/src/parallel/DofComm.cc
@@ -44,7 +44,12 @@ namespace AMDiS {
 
   void DofComm::create(InteriorBoundary &boundary)
   {
+    FUNCNAME("DofComm::create()");
+
+    MSG("---> senddofs\n");
     createContainer(boundary.getOwn(), sendDofs);
+
+    MSG("---> recvdofs\n");
     createContainer(boundary.getOther(), recvDofs);
   }
 
diff --git a/AMDiS/src/parallel/InteriorBoundary.cc b/AMDiS/src/parallel/InteriorBoundary.cc
index 020a3f29..5451e74a 100644
--- a/AMDiS/src/parallel/InteriorBoundary.cc
+++ b/AMDiS/src/parallel/InteriorBoundary.cc
@@ -72,7 +72,6 @@ namespace AMDiS {
 	  continue;
 
 	int owner = elObjDb.getIterateOwner(level);
-	MSG("OWNER IN LEVEL %d IS %d\n",level, owner);
 	ElementObjectData& rankBoundEl = objData[globalMpiRank];
 	
 	AtomicBoundary bound;
diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc
index da24936a..3786a0d9 100644
--- a/AMDiS/src/parallel/MeshDistributor.cc
+++ b/AMDiS/src/parallel/MeshDistributor.cc
@@ -1535,12 +1535,11 @@ namespace AMDiS {
     dofComm.init(0, levelData, feSpaces);
     dofComm.create(intBoundary);
 
-#if 0
     if (levelData.getLevelNumber() > 1) {
-      dofCommSd.init(1, levelData, feSpaces);
-      dofCommSd.create(intBoundary);
+      MSG("START CREATE DOF-COMM-SD\n");
+      dofCommSd.init(0, levelData, feSpaces);
+      dofCommSd.create(intBoundarySd);
     }
-#endif
 
     // === If requested, create more information on communication DOFs. ===
     
diff --git a/AMDiS/src/parallel/MeshDistributor.h b/AMDiS/src/parallel/MeshDistributor.h
index 0686801a..c0a2d1ab 100644
--- a/AMDiS/src/parallel/MeshDistributor.h
+++ b/AMDiS/src/parallel/MeshDistributor.h
@@ -162,11 +162,21 @@ namespace AMDiS {
       return dofComm;
     }
 
+    DofComm& getDofCommSd()
+    {
+      return dofCommSd;
+    }
+
     InteriorBoundary& getIntBoundary()
     {
       return intBoundary;
     }
 
+    InteriorBoundary& getIntBoundarySd()
+    {
+      return intBoundarySd;
+    }
+
     inline long getLastMeshChangeIndex()
     {
       return lastMeshChangeIndex;
diff --git a/test/mpi/data/data0006/dofcomm_level_1.dat b/test/mpi/data/data0006/dofcomm_level_1.dat
new file mode 100644
index 00000000..fc634ebc
--- /dev/null
+++ b/test/mpi/data/data0006/dofcomm_level_1.dat
@@ -0,0 +1,17 @@
+# rank_id    n_own_dofs    n_other_dofs
+0 0 5
+1 2 3
+2 0 5
+3 2 3
+4 2 3
+5 5 0
+6 2 3
+7 5 0
+8 0 5
+9 2 3
+10 0 5
+11 2 3
+12 2 3
+13 5 0
+14 2 3
+15 5 0
diff --git a/test/mpi/data/data0006/interior_boundary_p0.ser b/test/mpi/data/data0006/interior_boundary_p0.ser
new file mode 100644
index 0000000000000000000000000000000000000000..c230d070cb5668e1c088410570479ed22a04ef0d
GIT binary patch
literal 266
zcmZQzU|?WoU|?WmU|?W^(jYMyAH)VL`2YX^e~=&ug9SkZj04jN=7TsO)gT%y08$CU
zEKoZ@Y!C)Xf)s(+44e!M3?N+~K@bKDA`>u`U`d#2m>^ssE7T8QRZuouk{h2L0OiIM
AJpcdz

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p1.ser b/test/mpi/data/data0006/interior_boundary_p1.ser
new file mode 100644
index 0000000000000000000000000000000000000000..63aae7d5bf240504fb63e24d9076154a5ce83a31
GIT binary patch
literal 258
zcmZQ%fB+^21_ovblK~_K!eB0p0ir>Qz=9wG#sSeFNst&=D~JITM3G>H+5wUTDFR8t
v*bLkZ3=IGO|NjpX1YwW@Fh+J2SO7#ItA-l^l7MkwG}tJZYM3BMAshn$XUYsp

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p10.ser b/test/mpi/data/data0006/interior_boundary_p10.ser
new file mode 100644
index 0000000000000000000000000000000000000000..80a60b5432510fb834e4aae5e45223454ce109da
GIT binary patch
literal 266
zcmZQzU|?WoU|`^8U|?WkU|<jh2{14)FhcoYt~dh&!~g&P|APcU7%T`PV5&hnK@uR$
zAO=+p69g#)V?L;vB48ex9kNheAR|B+s)m69rW#}%NDwRuQw<XYNq{jw)a@{rfmMTL
N7#JAjaoGV<003r{6(axu

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p11.ser b/test/mpi/data/data0006/interior_boundary_p11.ser
new file mode 100644
index 0000000000000000000000000000000000000000..5737ad1ffd644e92951e7ecf7c10537bcf479aff
GIT binary patch
literal 258
zcmZQ%U|`^4U|?WkU|<kufB=vf2!nZ|V3L6WBmhzb<uWjcL0KR{kR+H3Qw<Y@OMn>s
z3=9m+3<#YdF_1#API(3fhX4Qn{|5<zFjx>oAiE002V-Q_a3er6$gTqM!A8MUqo@SQ
Gf-nH$4h<#%

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p12.ser b/test/mpi/data/data0006/interior_boundary_p12.ser
new file mode 100644
index 0000000000000000000000000000000000000000..fbbaf66529e4c006aa747fb4f96a3537255a3493
GIT binary patch
literal 258
zcmZQ%U|`^2U|?WkU|^7BfB=vf2!nY7V3L6WBmhzb<sww02*Omu1VOsMIzS9w1_lOZ
zG<#qQ8KfB)82<nN{~x3fgu%K%1hT6@d@z<mQVll(Bm+|o5(F6o!VECgFhP()I0gXO
CE)5p|

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p13.ser b/test/mpi/data/data0006/interior_boundary_p13.ser
new file mode 100644
index 0000000000000000000000000000000000000000..49dc5f60595fb78f04c21c6d6ea90f6d47f51336
GIT binary patch
literal 358
zcmZQ(U|`^2U|?WmU|^7DfB+C1guy&PFbPorWkM)U1_lO@Zmhb5AZozIGC|p33RyK=
zLKrNC#SWNixJr;hnAtEvxKnxXxkwVE73xu#POy*^n1omkmq1nxm4{F;)gYB{i(#r^
Lf^Z3l9tH*gEKC8H

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p14.ser b/test/mpi/data/data0006/interior_boundary_p14.ser
new file mode 100644
index 0000000000000000000000000000000000000000..8880e292d4438ae17656d334c50cc770cc71b2a4
GIT binary patch
literal 258
zcmZQ%U|`^4U|?WkU|^7CfB=vf2!nYdV3L6WBmhzb<sww02*Omu1VOsMIzSA51_lOZ
zG<#qQ8RQul82<nN{~x3fgu%K%1hT6@d@z<nQVll(Bm+|o5(F6o!VECgFhP()I0gXm
Cq76d;

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p15.ser b/test/mpi/data/data0006/interior_boundary_p15.ser
new file mode 100644
index 0000000000000000000000000000000000000000..7c839a8ae54d482cb748ff0cfaade00d5f148445
GIT binary patch
literal 358
zcmZQ(U|`^4U|?WmU|^7EfB+C1guy&fFbPorWkM)!1_lO@Zmhb*AZozIGC|p33RyK=
zLL4lG#SWNixJr;hnAtEvxKsJ?xkwhI73xu#POy+1n1omkmq1nxm4{F;)gYB{i(#r^
Lf^Z3l9tH*gTaW?O

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p2.ser b/test/mpi/data/data0006/interior_boundary_p2.ser
new file mode 100644
index 0000000000000000000000000000000000000000..277ea3203ba3bcdd20b520ec87f33194c8667839
GIT binary patch
literal 266
zcmZQzU|?W|VkQO#23C*&0|Nsi0|Nty59YEnFfjc8|NlQo5QM>kAOfZuq!J_n!VGLs
z)i6PjLNEqNfCO2<JTyCap}IgufG|`I0|QJoNGC`TED2K$69h?sG03SP6)=~9*kB0|
K!H>%hkR$;Ah7@Z6

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p3.ser b/test/mpi/data/data0006/interior_boundary_p3.ser
new file mode 100644
index 0000000000000000000000000000000000000000..5a54c7ebbff83cf11d48807c413891f33ec56411
GIT binary patch
literal 258
zcmZQ%U|?W^Vs-`y0EvMxn8ykx85lqUAcasa0|OhB1rh{Fg1Io&FhRHkhygO6nE{~_
zBnDCl*2&Mn!0`Y7|NkIC5C#i^2#_uijUtGw8g2wg6|$>9e6TK<Y7~_qSr7&QfIbX%

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p4.ser b/test/mpi/data/data0006/interior_boundary_p4.ser
new file mode 100644
index 0000000000000000000000000000000000000000..13f7c3d6448fe4b4962cb64a7dc5ff84965ee762
GIT binary patch
literal 258
zcmZQ%fB+^21_n+DlK~_K!cZ=R0ttW=L3l{2Q3PSKFhP(muo#HJ%D}+DjHDAJ22;qu
w&A`C$|NsC0AVClY>jDwTt^)DFm<vfY+z5~iOf^UlWDE#1z*NHoK?>m*0C!#tX8-^I

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p5.ser b/test/mpi/data/data0006/interior_boundary_p5.ser
new file mode 100644
index 0000000000000000000000000000000000000000..892e8fcf6cf438d7af1d6da020a238ed1035f37f
GIT binary patch
literal 358
zcmZQ(fB;4Y1_o{jlL5pAVK5iQfYD$<5CIYZ>Bg#y38aF70c;eE4HiOH4VM5J1Cj+9
z38LW`rW&piBm?8XXt*vG1_lO@Q7~N~2@nQpV&DXmSX{(~O#)dpR31XXRD&$XFdHTa
Kmw@PDU;qGbEdZYY

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p6.ser b/test/mpi/data/data0006/interior_boundary_p6.ser
new file mode 100644
index 0000000000000000000000000000000000000000..609c5d881e0cc4dc11fdfbeb6a0ad6061c80d90e
GIT binary patch
literal 258
zcmZQ%U|?W^VqOLa0EvMxn8yMp85lqUAcasa0|QJoiXcoiOc10CtOLYgXJBApW<cl!
xiNO>y@G~$l{Qv*|KS&US!MZ>M%pMd$J|xv}Bal^t1VK7Lm;t65CJ0gp#{iGg43hu=

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p7.ser b/test/mpi/data/data0006/interior_boundary_p7.ser
new file mode 100644
index 0000000000000000000000000000000000000000..09ca2ba45d44dd5b987771c5c001b0c618a29946
GIT binary patch
literal 358
zcmZQ(U|?WkU|?WmU|`^9fB+C1guy&kFbPorWkM*BP7ubbiw&X%Y%IulC>PZZxCA>?
z8g40+4|fq<B}f8hHcSw%3nYQlMZ6%bP>;fNf`$0NB*cSo31rn!c?bnl4N?iW7^WH~
L2$z89VPF6No^b%(

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p8.ser b/test/mpi/data/data0006/interior_boundary_p8.ser
new file mode 100644
index 0000000000000000000000000000000000000000..728777c06dd495a8313d3e4b99649dda818cd55b
GIT binary patch
literal 266
zcmZQzU|?WoU|`^6U|?WkU|<jg2{14)FhcoYt}p`w!~g&P|APcU7%T`PV5&hnK@uR$
zAOuwn69g#)V;-oP0$?7R9g<L8AR|B+s)m69rW#}%NDwRuQw<XYNq{jg)a@{rfmMTL
N7#J9&aoGV<002zY6!icA

literal 0
HcmV?d00001

diff --git a/test/mpi/data/data0006/interior_boundary_p9.ser b/test/mpi/data/data0006/interior_boundary_p9.ser
new file mode 100644
index 0000000000000000000000000000000000000000..f771930413fd346fb43f950f97f99509a55ca91d
GIT binary patch
literal 258
zcmZQ%U|`^2U|?WkU|<ktfB=vf2!nZoV3L6WBmhzb<uWh`L0KR{kR+H3Qw<Y@OMn=>
z3=9m+3<#YdF_1#APH6@PhX4Qn{|5<zFjx>oAiE002V-Q_a3er6$gTqM!A8MUqo@SQ
Gf-nHdnhg2?

literal 0
HcmV?d00001

diff --git a/test/mpi/init/test0006.dat.2d b/test/mpi/init/test0006.dat.2d
new file mode 100644
index 00000000..f1e91779
--- /dev/null
+++ b/test/mpi/init/test0006.dat.2d
@@ -0,0 +1,25 @@
+dimension of world:             2
+
+elliptMesh->macro file name:    ./macro/macro.stand.p16.2d
+elliptMesh->global refinements: 3
+
+ellipt->mesh:                   elliptMesh
+ellipt->dim:                    2
+ellipt->components:             1
+ellipt->polynomial degree[0]:   1
+ 
+ellipt->solver:                 cg
+ellipt->solver->max iteration:  10
+ellipt->solver->tolerance:      1.e-8
+ellipt->solver->info:           10
+ellipt->solver->left precon:    diag
+ellipt->solver->right precon:   no
+
+ellipt->estimator[0]:              0
+ellipt->marker[0]->strategy:       0 
+
+parallel->log main rank:     0
+parallel->pre refine:        0
+parallel->partitioner:       checker
+parallel->multi level test:  1
+parallel->solver:            petsc-feti
diff --git a/test/mpi/src/test0002.cc b/test/mpi/src/test0002.cc
index 3ddc94d6..a2f54a1f 100644
--- a/test/mpi/src/test0002.cc
+++ b/test/mpi/src/test0002.cc
@@ -9,7 +9,8 @@ using namespace AMDiS;
 using namespace std;
 
 /*
-  - 
+  - Simple FETI-DP test on the number of local and global primal, dual and
+    interior nodes.
 */
 
 BOOST_AUTO_TEST_CASE(amdis_mpi_feti)
diff --git a/test/mpi/src/test0003.cc b/test/mpi/src/test0003.cc
index 2706d109..31109f2a 100644
--- a/test/mpi/src/test0003.cc
+++ b/test/mpi/src/test0003.cc
@@ -11,7 +11,7 @@ using namespace std;
 using boost::lexical_cast;
 
 /*
-  - 
+  - Test 2-level FETI-DP on the number of global primal and dual nodes.
 */
 
 BOOST_AUTO_TEST_CASE(amdis_mpi_feti_multilevel)
diff --git a/test/mpi/src/test0004.cc b/test/mpi/src/test0004.cc
index ac4c4845..b0d15b54 100644
--- a/test/mpi/src/test0004.cc
+++ b/test/mpi/src/test0004.cc
@@ -9,7 +9,7 @@ using namespace AMDiS;
 using namespace std;
 
 /*
-  - 
+  - Test DOF communicator on 2-level decomposition of a 4x4 rank domain.
 */
 
 BOOST_AUTO_TEST_CASE(amdis_mpi_feti_multilevel)
diff --git a/test/mpi/src/test0005.cc b/test/mpi/src/test0005.cc
index a136c26b..38a372c9 100644
--- a/test/mpi/src/test0005.cc
+++ b/test/mpi/src/test0005.cc
@@ -9,7 +9,8 @@ using namespace AMDiS;
 using namespace std;
 
 /*
-  - 
+  - Test for interior boundaries on a 2-level 4x4 rank decomposition.
+  - Compaires the interior boundary object with a serialization file.
 */
 
 
diff --git a/test/mpi/src/test0006.cc b/test/mpi/src/test0006.cc
new file mode 100644
index 00000000..3c7f9ae5
--- /dev/null
+++ b/test/mpi/src/test0006.cc
@@ -0,0 +1,88 @@
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE 0005
+#define BOOST_TEST_NO_MAIN
+
+#include <boost/test/unit_test.hpp>
+#include <AMDiS.h>
+
+using namespace AMDiS;
+using namespace std;
+
+/*
+  - Test for interior boundaries of the subdomains on a 2-level 
+     4x4 rank decomposition.
+  - Compaires the interior boundary object with a serialization file.
+  - Test for DOF communicators on the subdomains.
+*/
+
+
+void boundaryTest(RankToBoundMap &map0, RankToBoundMap &map1)
+{
+  BOOST_CHECK_MESSAGE(map0.size() == map1.size(), 
+		      "Boundaries have different size!\n");
+
+  for (RankToBoundMap::iterator it = map0.begin(); it != map0.end(); ++it) {
+    if (map1.count(it->first) == 0) {
+      MSG("Boundary with rank %d missing!\n", it->first);
+      BOOST_ERROR("");
+    }
+
+    BOOST_CHECK_MESSAGE(it->second.size() == map1[it->first].size(), 
+			"Wrong boundary size!\n");
+
+    for (unsigned int i = 0; i < it->second.size(); i++)
+      BOOST_CHECK_MESSAGE(it->second[i] == map1[it->first][i],
+			  "Boundary is not equal!\n");
+  }
+}
+
+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();
+
+  InteriorBoundary testBoundary;  
+  string filename = "data/data0006/interior_boundary_p" + 
+    lexical_cast<string>(MPI::COMM_WORLD.Get_rank()) + ".ser";
+  ifstream myfile(filename.c_str());
+  testBoundary.deserialize(myfile, ellipt.getMesh());
+  myfile.close();
+
+  boundaryTest(testBoundary.getOwn(), meshDist->getIntBoundarySd().getOwn());
+  boundaryTest(testBoundary.getOther(), meshDist->getIntBoundarySd().getOther());
+  boundaryTest(testBoundary.getPeriodic(), meshDist->getIntBoundarySd().getPeriodic());
+
+
+
+  Spreadsheet sheet;
+  sheet.read("data/data0006/dofcomm_level_1.dat");
+  vector<vector<double> > &data = sheet.getData();
+
+  DofComm &dofCommSd = meshDist->getDofCommSd();
+  DofComm::LevelDataType &sendDofsSd = dofCommSd.getSendDofs();
+  DofComm::LevelDataType &recvDofsSd = dofCommSd.getRecvDofs();
+  int nSendDofs = dofCommSd.getNumberDofs(sendDofsSd, 0, feSpace);
+  int nRecvDofs = dofCommSd.getNumberDofs(recvDofsSd, 0, feSpace);
+
+  int rank = MPI::COMM_WORLD.Get_rank();
+  BOOST_CHECK(data[rank][0] == rank);
+  BOOST_CHECK(data[rank][1] == nSendDofs);
+  BOOST_CHECK(data[rank][2] == nRecvDofs);
+}
+
+
+int main(int argc, char **argv)
+{
+  AMDiS::init(argc, argv, "./init/test0006.dat.2d");
+
+  boost::unit_test::unit_test_main(&init_unit_test, argc, argv);
+
+  AMDiS::finalize();
+}
-- 
GitLab