diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/CMakeLists.txt b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/CMakeLists.txt
index f811b9813..2178140e2 100644
--- a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/CMakeLists.txt
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/CMakeLists.txt
@@ -1,53 +1,69 @@
 #===============================================================================
 # @file   CMakeLists.txt
 # @author David Kammer <david.kammer@epfl.ch>
 # @date   Fri Dec 03 12:02:24 2010
 #
 # @section LICENSE
 #
 # Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne)
 # Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
 #
 # Akantu is free  software: you can redistribute it and/or  modify it under the
 # terms  of the  GNU Lesser  General Public  License as  published by  the Free
 # Software Foundation, either version 3 of the License, or (at your option) any
 # later version.
 #
 # Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A  PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
 # details.
 #
 # You should  have received  a copy  of the GNU  Lesser General  Public License
 # along with Akantu. If not, see <http://www.gnu.org/licenses/>.
 #
 # @section DESCRIPTION
 #
 #===============================================================================
 
+set(LIST_TYPES
+  triangle_3
+  quadrangle_4
+  tetrahedron_4
+  #hexahedron_8
+  )
+
 #===============================================================================
-add_mesh(test_mesh_squares squares.geo 2 1)
+foreach(_type ${LIST_TYPES})
+  if(AKANTU_IOHELPER_ON)
+    register_test(test_contact_search_explicit_${_type} test_contact_search_explicit.cc io_helper_tools.cc)
+  else()
+    register_test(test_contact_search_explicit_${_type} test_contact_search_explicit.cc)
+  endif()
+  set_target_properties(test_contact_search_explicit_${_type}
+    PROPERTIES COMPILE_DEFINITIONS TYPE=_${_type})
+  file(COPY ./data/${_type}.msh DESTINATION .)
+#  file(COPY ./ref_files/test_contact_rigid_no_friction_${_type}.ref DESTINATION .)
+endforeach()
 
-register_test(test_contact_search_explicit_triangle_3 test_contact_search_explicit_triangle_3.cc)
-add_dependencies(test_contact_search_explicit_triangle_3 test_mesh_squares)
 
 #===============================================================================
-add_mesh(test_mesh_cubes cubes.geo 3 1)
+#add_mesh(test_mesh_squares squares.geo 2 1)
 
-register_test(test_contact_search_explicit_tetrahedron_4 test_contact_search_explicit_tetrahedron_4.cc)
-add_dependencies(test_contact_search_explicit_tetrahedron_4 test_mesh_cubes)
+#register_test(test_contact_search_explicit_triangle_3 test_contact_search_explicit_triangle_3.cc)
+#add_dependencies(test_contact_search_explicit_triangle_3 test_mesh_squares)
+
+#===============================================================================
+#add_mesh(test_mesh_cubes cubes.geo 3 1)
+
+#register_test(test_contact_search_explicit_tetrahedron_4 test_contact_search_explicit_tetrahedron_4.cc)
+#add_dependencies(test_contact_search_explicit_tetrahedron_4 test_mesh_cubes)
 
 #===============================================================================
 #add_mesh(test_regular_grid_3d_mesh cubes.geo 3 1)
 
 #register_test(test_regular_grid_tetrahedron_4_nodes test_regular_grid_tetrahedron_4_nodes.cc)
 #add_dependencies(test_regular_grid_tetrahedron_4_nodes test_regular_grid_3d_mesh)
 
 #===============================================================================
-configure_file(
-  ${CMAKE_CURRENT_SOURCE_DIR}/material.dat
-  ${CMAKE_CURRENT_BINARY_DIR}/material.dat
-  COPYONLY
-  )
-
+file(COPY material.dat DESTINATION .)
 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/paraview)
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/cubes.geo b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/cubes.geo
index 2939e7cc2..55230a8a6 100644
--- a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/cubes.geo
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/cubes.geo
@@ -1,81 +1,102 @@
-h  = 0.05;
-h1 = 0.4;
-
-Point(1) = {0, 0, 0.7, h};
-Point(2) = {1, 0, 0.7, h};
-Point(3) = {1, 1, 0.7, h};
-Point(4) = {0, 1, 0.7, h};
-Point(5) = {0, 0, 1, h};
-Point(6) = {1, 0, 1, h};
-Point(7) = {1, 1, 1, h};
-Point(8) = {0, 1, 1, h};
-
-Point(9)  = {0.45, 0.45, 1.001, h1};
-Point(10) = {0.55, 0.45, 1.001, h1};
-Point(11) = {0.55, 0.55, 1.001, h1};
-Point(12) = {0.45, 0.55, 1.001, h1};
-Point(13) = {0.45, 0.45, 1.101, h1};
-Point(14) = {0.55, 0.45, 1.101, h1};
-Point(15) = {0.55, 0.55, 1.101, h1};
-Point(16) = {0.45, 0.55, 1.101, h1};
-
-Line(1) = {5, 6};
-Line(2) = {6, 7};
-Line(3) = {7, 8};
-Line(4) = {8, 5};
-Line(5) = {1, 2};
-Line(6) = {2, 3};
-Line(7) = {3, 4};
-Line(8) = {4, 1};
-Line(9) = {5, 1};
-Line(10) = {6, 2};
-Line(11) = {7, 3};
-Line(12) = {8, 4};
-
-Line(13) = {13, 14};
-Line(14) = {14, 15};
-Line(15) = {15, 16};
-Line(16) = {16, 13};
-Line(17) = {9, 10};
-Line(18) = {10, 11};
-Line(19) = {11, 12};
-Line(20) = {12, 9};
-Line(21) = {13, 9};
-Line(22) = {14, 10};
-Line(23) = {15, 11};
-Line(24) = {16, 12};
-
-Line Loop(25) = {4, 1, 2, 3};
-Plane Surface(26) = {25};
-Line Loop(27) = {7, 8, 5, 6};
-Plane Surface(28) = {27};
-Line Loop(29) = {12, -7, -11, 3};
-Plane Surface(30) = {29};
-Line Loop(31) = {12, 8, -9, -4};
-Plane Surface(32) = {31};
-Line Loop(33) = {1, 10, -5, -9};
-Plane Surface(34) = {33};
-Line Loop(35) = {2, 11, -6, -10};
-Plane Surface(36) = {35};
-
-Line Loop(37) = {16, 13, 14, 15};
-Plane Surface(38) = {37};
-Line Loop(39) = {20, 17, 18, 19};
-Plane Surface(40) = {39};
-Line Loop(41) = {24, 20, -21, -16};
-Plane Surface(42) = {41};
-Line Loop(43) = {13, 22, -17, -21};
-Plane Surface(44) = {43};
-Line Loop(45) = {14, 23, -18, -22};
-Plane Surface(46) = {45};
-Line Loop(47) = {15, 24, -19, -23};
-Plane Surface(48) = {47};
-
-Surface Loop(49) = {32, 30, 28, 34, 26, 36};
-Volume(50) = {49};
-
-Surface Loop(51) = {42, 48, 38, 44, 46, 40};
-Volume(52) = {51};
-
-Physical Volume(0) = {50};
-Physical Volume(1) = {52};
+// Element size
+h = 0.2;
+h1 = 0.06;
+
+// Dimension of square
+L = 1;
+L1 = L/4.;
+
+// ------------------------------------------
+// Geometry
+// ------------------------------------------
+
+// Points
+Point(1) = {0, 0, L/2, h};
+Point(2) = {L/2, 0, L/2, h};
+Point(3) = {L/2, L, L/2, h};
+Point(4) = {0, L, L/2, h};
+
+Point(5) = {0, 0, -L/2, h};
+Point(6) = {L/2, 0, -L/2, h};
+Point(7) = {L/2, L, -L/2, h};
+Point(8) = {0, L, -L/2, h};
+
+Point(9) = {1.01*L/2,    L/2-L1/2, L1/2, h1};
+Point(10) = {1.01*L/2+L1, L/2-L1/2, L1/2, h1};
+Point(11) = {1.01*L/2+L1, L/2+L1/2, L1/2, h1};
+Point(12) = {1.01*L/2,    L/2+L1/2, L1/2, h1};
+
+Point(13) = {1.01*L/2,    L/2-L1/2, -L1/2, h1};
+Point(14) = {1.01*L/2+L1, L/2-L1/2, -L1/2, h1};
+Point(15) = {1.01*L/2+L1, L/2+L1/2, -L1/2, h1};
+Point(16) = {1.01*L/2,    L/2+L1/2, -L1/2, h1};
+
+// Lines
+Line(1) = {4, 1};
+Line(2) = {1, 2};
+Line(3) = {2, 3};
+Line(4) = {3, 4};
+
+Line(5) = {8, 7};
+Line(6) = {7, 6};
+Line(7) = {6, 5};
+Line(8) = {5, 8};
+
+Line(9) = {1, 5};
+Line(10) = {2, 6};
+Line(11) = {3, 7};
+Line(12) = {4, 8};
+
+Line(13) = {12, 9};
+Line(14) = {9, 10};
+Line(15) = {10, 11};
+Line(16) = {11, 12};
+
+Line(17) = {16, 15};
+Line(18) = {15, 14};
+Line(19) = {14, 13};
+Line(20) = {13, 16};
+
+Line(21) = {9, 13};
+Line(22) = {10, 14};
+Line(23) = {11, 15};
+Line(24) = {12, 16};
+
+// Geometric and Physical Surface
+Line Loop(25) = {1, 2, 3, 4};
+Plane Surface(25) = {25};
+Line Loop(26) = {5, 6, 7, 8};
+Plane Surface(26) = {26};
+Line Loop(27) = {-5, -12, -4, 11};
+Plane Surface(27) = {27};
+Line Loop(28) = {-6, -11, -3, 10};
+Plane Surface(28) = {28};
+Line Loop(29) = {9, -7, -10, -2};
+Plane Surface(29) = {29};
+Line Loop(30) = {12, -8, -9, -1};
+Plane Surface(30) = {30};
+
+Line Loop(31) = {13, 14, 15, 16};
+Plane Surface(31) = {31};
+Line Loop(32) = {17, 18, 19, 20};
+Plane Surface(32) = {32};
+Line Loop(33) = {-17, -24, -16, 23};
+Plane Surface(33) = {33};
+Line Loop(34) = {-18, -23, -15, 22};
+Plane Surface(34) = {34};
+Line Loop(35) = {21, -19, -22, -14};
+Plane Surface(35) = {35};
+Line Loop(36) = {24, -20, -21, -13};
+Plane Surface(36) = {36};
+
+Surface Loop(37) = {25, 26, 27, 28, 29, 30};
+Volume(37) = {37};
+
+Surface Loop(38) = {31, 32, 33, 34, 35, 36};
+Volume(38) = {38};
+
+Transfinite Surface "*";
+Recombine Surface "*";
+
+Transfinite Volume "*";
+Recombine Volume "*";
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/hexahedron_8.msh b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/hexahedron_8.msh
new file mode 100644
index 000000000..51e6fe0c2
--- /dev/null
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/hexahedron_8.msh
@@ -0,0 +1,569 @@
+$MeshFormat
+2.1 0 8
+$EndMeshFormat
+$Nodes
+200
+1 0 0 0.5
+2 0.5 0 0.5
+3 0.5 1 0.5
+4 0 1 0.5
+5 0 0 -0.5
+6 0.5 0 -0.5
+7 0.5 1 -0.5
+8 0 1 -0.5
+9 0.505 0.375 0.125
+10 0.755 0.375 0.125
+11 0.755 0.625 0.125
+12 0.505 0.625 0.125
+13 0.505 0.375 -0.125
+14 0.755 0.375 -0.125
+15 0.755 0.625 -0.125
+16 0.505 0.625 -0.125
+17 0 0.7500000000003469 0.5
+18 0 0.5000000000013878 0.5
+19 0 0.2500000000010407 0.5
+20 0.2499999999995108 0 0.5
+21 0.5 0.2499999999993998 0.5
+22 0.5 0.4999999999990217 0.5
+23 0.5 0.7499999999993374 0.5
+24 0.2500000000006939 1 0.5
+25 0.2499999999995108 1 -0.5
+26 0.5 0.7500000000003469 -0.5
+27 0.5 0.5000000000013878 -0.5
+28 0.5 0.2500000000010407 -0.5
+29 0.2500000000006939 0 -0.5
+30 0 0.2499999999993998 -0.5
+31 0 0.4999999999990217 -0.5
+32 0 0.7499999999993374 -0.5
+33 0 0 0.2500000000006939
+34 0 0 1.040834085586084e-12
+35 0 0 -0.2499999999993061
+36 0.5 0 0.2500000000006939
+37 0.5 0 1.040834085586084e-12
+38 0.5 0 -0.2499999999993061
+39 0.5 1 0.2500000000006939
+40 0.5 1 1.040834085586084e-12
+41 0.5 1 -0.2499999999993061
+42 0 1 0.2500000000006939
+43 0 1 1.040834085586084e-12
+44 0 1 -0.2499999999993061
+45 0.505 0.5625 0.125
+46 0.505 0.5 0.125
+47 0.505 0.4375 0.125
+48 0.5675 0.375 0.125
+49 0.63 0.375 0.125
+50 0.6925 0.375 0.125
+51 0.755 0.4375 0.125
+52 0.755 0.5 0.125
+53 0.755 0.5625 0.125
+54 0.6925 0.625 0.125
+55 0.63 0.625 0.125
+56 0.5675 0.625 0.125
+57 0.5675 0.625 -0.125
+58 0.63 0.625 -0.125
+59 0.6925 0.625 -0.125
+60 0.755 0.5625 -0.125
+61 0.755 0.5 -0.125
+62 0.755 0.4375 -0.125
+63 0.6925 0.375 -0.125
+64 0.63 0.375 -0.125
+65 0.5675 0.375 -0.125
+66 0.505 0.4375 -0.125
+67 0.505 0.5 -0.125
+68 0.505 0.5625 -0.125
+69 0.505 0.375 0.06250000000017347
+70 0.505 0.375 2.602085213965211e-13
+71 0.505 0.375 -0.06249999999982653
+72 0.755 0.375 0.06250000000017347
+73 0.755 0.375 2.602085213965211e-13
+74 0.755 0.375 -0.06249999999982653
+75 0.755 0.625 0.06250000000017347
+76 0.755 0.625 2.602085213965211e-13
+77 0.755 0.625 -0.06249999999982653
+78 0.505 0.625 0.06250000000017347
+79 0.505 0.625 2.602085213965211e-13
+80 0.505 0.625 -0.06249999999982653
+81 0.2500000000003981 0.7499999999998422 0.5
+82 0.2500000000001024 0.5000000000002047 0.5
+83 0.2499999999998066 0.2500000000002203 0.5
+84 0.2499999999998066 0.7499999999998422 -0.5
+85 0.2500000000001024 0.5000000000002047 -0.5
+86 0.2500000000003981 0.2500000000002203 -0.5
+87 0.2499999999998066 1 -0.2499999999993061
+88 0.2500000000001024 1 1.040834085586084e-12
+89 0.2500000000003981 1 0.2500000000006939
+90 0.5 0.7500000000000945 -0.2499999999993061
+91 0.5 0.7499999999998422 1.040834085586084e-12
+92 0.5 0.7499999999995898 0.2500000000006939
+93 0.5 0.5000000000007963 -0.2499999999993061
+94 0.5 0.5000000000002047 1.040834085586084e-12
+95 0.5 0.4999999999996132 0.2500000000006939
+96 0.5 0.2500000000006305 -0.2499999999993061
+97 0.5 0.2500000000002203 1.040847963373892e-12
+98 0.5 0.24999999999981 0.2500000000006939
+99 0.2499999999998066 0 0.2500000000006939
+100 0.2500000000001024 0 1.040834085586084e-12
+101 0.2500000000003981 0 -0.2499999999993061
+102 0 0.7500000000000946 0.2500000000006939
+103 0 0.5000000000007963 0.2500000000006939
+104 0 0.2500000000006305 0.2500000000006939
+105 0 0.7499999999998423 1.0408618411617e-12
+106 0 0.5000000000002047 1.040834085586084e-12
+107 0 0.2500000000002203 1.040806330010469e-12
+108 0 0.7499999999995899 -0.2499999999993061
+109 0 0.4999999999996132 -0.2499999999993061
+110 0 0.24999999999981 -0.2499999999993061
+111 0.5675 0.5625 0.125
+112 0.63 0.5625 0.125
+113 0.6925 0.5625 0.125
+114 0.5675 0.5 0.125
+115 0.63 0.5 0.125
+116 0.6924999999999999 0.5 0.125
+117 0.5674999999999999 0.4375 0.125
+118 0.63 0.4375 0.125
+119 0.6925 0.4375 0.125
+120 0.5675 0.5625 -0.125
+121 0.5675 0.5 -0.125
+122 0.5675 0.4375 -0.125
+123 0.63 0.5625 -0.125
+124 0.63 0.5 -0.125
+125 0.6299999999999999 0.4375 -0.125
+126 0.6924999999999999 0.5625 -0.125
+127 0.6925 0.5 -0.125
+128 0.6925 0.4375 -0.125
+129 0.5675 0.625 -0.06249999999982652
+130 0.5675 0.625 2.602085213965211e-13
+131 0.5674999999999999 0.625 0.06250000000017347
+132 0.63 0.625 -0.06249999999982653
+133 0.6300000000000001 0.625 2.602085213965211e-13
+134 0.6299999999999999 0.625 0.06250000000017347
+135 0.6925 0.625 -0.06249999999982653
+136 0.6925 0.625 2.60211990843473e-13
+137 0.6925 0.625 0.06250000000017347
+138 0.755 0.5625 -0.06249999999982652
+139 0.755 0.5625 2.602085213965211e-13
+140 0.755 0.5625 0.06250000000017347
+141 0.755 0.5 -0.06249999999982653
+142 0.755 0.5 2.602085213965211e-13
+143 0.755 0.5 0.06250000000017347
+144 0.755 0.4375000000000001 -0.06249999999982653
+145 0.755 0.4375 2.60211990843473e-13
+146 0.755 0.4374999999999999 0.06250000000017347
+147 0.5674999999999999 0.375 0.06250000000017347
+148 0.63 0.375 0.06250000000017347
+149 0.6924999999999999 0.375 0.06250000000017347
+150 0.5675 0.375 2.60215460290425e-13
+151 0.63 0.375 2.602085213965211e-13
+152 0.6925 0.375 2.60215460290425e-13
+153 0.5675000000000001 0.375 -0.06249999999982653
+154 0.6300000000000001 0.375 -0.06249999999982653
+155 0.6925000000000002 0.375 -0.06249999999982653
+156 0.505 0.5625 0.06250000000017347
+157 0.505 0.5 0.06250000000017347
+158 0.505 0.4375 0.06250000000017347
+159 0.505 0.5625 2.60215460290425e-13
+160 0.505 0.5 2.602085213965211e-13
+161 0.505 0.4375 2.60215460290425e-13
+162 0.505 0.5625 -0.06249999999982653
+163 0.505 0.5 -0.06249999999982653
+164 0.505 0.4375 -0.06249999999982653
+165 0.2500000000002502 0.7499999999998426 0.2500000000006939
+166 0.2500000000001024 0.7499999999998425 1.040820207798276e-12
+167 0.2499999999999545 0.7499999999998426 -0.2499999999993061
+168 0.2500000000001024 0.5000000000002047 0.2500000000006939
+169 0.2500000000001024 0.5000000000002047 1.0408618411617e-12
+170 0.2500000000001024 0.5000000000002047 -0.2499999999993061
+171 0.2499999999999545 0.2500000000002203 0.2500000000006939
+172 0.2500000000001024 0.2500000000002203 1.040854902267796e-12
+173 0.2500000000002502 0.2500000000002203 -0.2499999999993061
+174 0.5674999999999999 0.5625000000000001 0.06250000000017349
+175 0.5675 0.5625 2.602362769721367e-13
+176 0.5675000000000002 0.5625 -0.06249999999982654
+177 0.6299999999999996 0.5625 0.06250000000017347
+178 0.6299999999999997 0.5625 2.602085213965211e-13
+179 0.6300000000000003 0.5625 -0.06249999999982653
+180 0.6924999999999996 0.5625 0.06250000000017347
+181 0.6924999999999996 0.5625 2.602293380782328e-13
+182 0.6925000000000001 0.5625 -0.06249999999982654
+183 0.5675000000000001 0.4999999999999999 0.06250000000017347
+184 0.5675000000000002 0.5 2.602050519495691e-13
+185 0.5675000000000002 0.5 -0.06249999999982653
+186 0.6299999999999997 0.5 0.06250000000017344
+187 0.6299999999999998 0.4999999999999999 2.60215460290425e-13
+188 0.6300000000000003 0.5 -0.06249999999982653
+189 0.6924999999999997 0.4999999999999999 0.06250000000017347
+190 0.6925000000000003 0.5 2.602223991843289e-13
+191 0.6925000000000002 0.5 -0.06249999999982653
+192 0.5675000000000001 0.4374999999999999 0.06250000000017349
+193 0.5674999999999998 0.4375 2.602388790573507e-13
+194 0.5675000000000002 0.4375000000000001 -0.06249999999982654
+195 0.6299999999999996 0.4374999999999999 0.06250000000017347
+196 0.6299999999999999 0.4375000000000001 2.602067866730451e-13
+197 0.6299999999999998 0.4375 -0.06249999999982653
+198 0.6924999999999996 0.4375 0.06250000000017347
+199 0.6925000000000002 0.4375 2.602397464190886e-13
+200 0.6925000000000004 0.4374999999999999 -0.06249999999982657
+$EndNodes
+$Elements
+360
+1 15 3 0 1 0 1
+2 15 3 0 2 0 2
+3 15 3 0 3 0 3
+4 15 3 0 4 0 4
+5 15 3 0 5 0 5
+6 15 3 0 6 0 6
+7 15 3 0 7 0 7
+8 15 3 0 8 0 8
+9 15 3 0 9 0 9
+10 15 3 0 10 0 10
+11 15 3 0 11 0 11
+12 15 3 0 12 0 12
+13 15 3 0 13 0 13
+14 15 3 0 14 0 14
+15 15 3 0 15 0 15
+16 15 3 0 16 0 16
+17 1 3 0 1 0 4 17
+18 1 3 0 1 0 17 18
+19 1 3 0 1 0 18 19
+20 1 3 0 1 0 19 1
+21 1 3 0 2 0 1 20
+22 1 3 0 2 0 20 2
+23 1 3 0 3 0 2 21
+24 1 3 0 3 0 21 22
+25 1 3 0 3 0 22 23
+26 1 3 0 3 0 23 3
+27 1 3 0 4 0 3 24
+28 1 3 0 4 0 24 4
+29 1 3 0 5 0 8 25
+30 1 3 0 5 0 25 7
+31 1 3 0 6 0 7 26
+32 1 3 0 6 0 26 27
+33 1 3 0 6 0 27 28
+34 1 3 0 6 0 28 6
+35 1 3 0 7 0 6 29
+36 1 3 0 7 0 29 5
+37 1 3 0 8 0 5 30
+38 1 3 0 8 0 30 31
+39 1 3 0 8 0 31 32
+40 1 3 0 8 0 32 8
+41 1 3 0 9 0 1 33
+42 1 3 0 9 0 33 34
+43 1 3 0 9 0 34 35
+44 1 3 0 9 0 35 5
+45 1 3 0 10 0 2 36
+46 1 3 0 10 0 36 37
+47 1 3 0 10 0 37 38
+48 1 3 0 10 0 38 6
+49 1 3 0 11 0 3 39
+50 1 3 0 11 0 39 40
+51 1 3 0 11 0 40 41
+52 1 3 0 11 0 41 7
+53 1 3 0 12 0 4 42
+54 1 3 0 12 0 42 43
+55 1 3 0 12 0 43 44
+56 1 3 0 12 0 44 8
+57 1 3 0 13 0 12 45
+58 1 3 0 13 0 45 46
+59 1 3 0 13 0 46 47
+60 1 3 0 13 0 47 9
+61 1 3 0 14 0 9 48
+62 1 3 0 14 0 48 49
+63 1 3 0 14 0 49 50
+64 1 3 0 14 0 50 10
+65 1 3 0 15 0 10 51
+66 1 3 0 15 0 51 52
+67 1 3 0 15 0 52 53
+68 1 3 0 15 0 53 11
+69 1 3 0 16 0 11 54
+70 1 3 0 16 0 54 55
+71 1 3 0 16 0 55 56
+72 1 3 0 16 0 56 12
+73 1 3 0 17 0 16 57
+74 1 3 0 17 0 57 58
+75 1 3 0 17 0 58 59
+76 1 3 0 17 0 59 15
+77 1 3 0 18 0 15 60
+78 1 3 0 18 0 60 61
+79 1 3 0 18 0 61 62
+80 1 3 0 18 0 62 14
+81 1 3 0 19 0 14 63
+82 1 3 0 19 0 63 64
+83 1 3 0 19 0 64 65
+84 1 3 0 19 0 65 13
+85 1 3 0 20 0 13 66
+86 1 3 0 20 0 66 67
+87 1 3 0 20 0 67 68
+88 1 3 0 20 0 68 16
+89 1 3 0 21 0 9 69
+90 1 3 0 21 0 69 70
+91 1 3 0 21 0 70 71
+92 1 3 0 21 0 71 13
+93 1 3 0 22 0 10 72
+94 1 3 0 22 0 72 73
+95 1 3 0 22 0 73 74
+96 1 3 0 22 0 74 14
+97 1 3 0 23 0 11 75
+98 1 3 0 23 0 75 76
+99 1 3 0 23 0 76 77
+100 1 3 0 23 0 77 15
+101 1 3 0 24 0 12 78
+102 1 3 0 24 0 78 79
+103 1 3 0 24 0 79 80
+104 1 3 0 24 0 80 16
+105 3 3 0 25 0 4 17 81 24
+106 3 3 0 25 0 24 81 23 3
+107 3 3 0 25 0 17 18 82 81
+108 3 3 0 25 0 81 82 22 23
+109 3 3 0 25 0 18 19 83 82
+110 3 3 0 25 0 82 83 21 22
+111 3 3 0 25 0 19 1 20 83
+112 3 3 0 25 0 83 20 2 21
+113 3 3 0 26 0 8 25 84 32
+114 3 3 0 26 0 32 84 85 31
+115 3 3 0 26 0 31 85 86 30
+116 3 3 0 26 0 30 86 29 5
+117 3 3 0 26 0 25 7 26 84
+118 3 3 0 26 0 84 26 27 85
+119 3 3 0 26 0 85 27 28 86
+120 3 3 0 26 0 86 28 6 29
+121 3 3 0 27 0 8 44 87 25
+122 3 3 0 27 0 44 43 88 87
+123 3 3 0 27 0 43 42 89 88
+124 3 3 0 27 0 42 4 24 89
+125 3 3 0 27 0 25 87 41 7
+126 3 3 0 27 0 87 88 40 41
+127 3 3 0 27 0 88 89 39 40
+128 3 3 0 27 0 89 24 3 39
+129 3 3 0 28 0 7 41 90 26
+130 3 3 0 28 0 41 40 91 90
+131 3 3 0 28 0 40 39 92 91
+132 3 3 0 28 0 39 3 23 92
+133 3 3 0 28 0 26 90 93 27
+134 3 3 0 28 0 90 91 94 93
+135 3 3 0 28 0 91 92 95 94
+136 3 3 0 28 0 92 23 22 95
+137 3 3 0 28 0 27 93 96 28
+138 3 3 0 28 0 93 94 97 96
+139 3 3 0 28 0 94 95 98 97
+140 3 3 0 28 0 95 22 21 98
+141 3 3 0 28 0 28 96 38 6
+142 3 3 0 28 0 96 97 37 38
+143 3 3 0 28 0 97 98 36 37
+144 3 3 0 28 0 98 21 2 36
+145 3 3 0 29 0 1 33 99 20
+146 3 3 0 29 0 20 99 36 2
+147 3 3 0 29 0 33 34 100 99
+148 3 3 0 29 0 99 100 37 36
+149 3 3 0 29 0 34 35 101 100
+150 3 3 0 29 0 100 101 38 37
+151 3 3 0 29 0 35 5 29 101
+152 3 3 0 29 0 101 29 6 38
+153 3 3 0 30 0 4 42 102 17
+154 3 3 0 30 0 17 102 103 18
+155 3 3 0 30 0 18 103 104 19
+156 3 3 0 30 0 19 104 33 1
+157 3 3 0 30 0 42 43 105 102
+158 3 3 0 30 0 102 105 106 103
+159 3 3 0 30 0 103 106 107 104
+160 3 3 0 30 0 104 107 34 33
+161 3 3 0 30 0 43 44 108 105
+162 3 3 0 30 0 105 108 109 106
+163 3 3 0 30 0 106 109 110 107
+164 3 3 0 30 0 107 110 35 34
+165 3 3 0 30 0 44 8 32 108
+166 3 3 0 30 0 108 32 31 109
+167 3 3 0 30 0 109 31 30 110
+168 3 3 0 30 0 110 30 5 35
+169 3 3 0 31 0 12 45 111 56
+170 3 3 0 31 0 56 111 112 55
+171 3 3 0 31 0 55 112 113 54
+172 3 3 0 31 0 54 113 53 11
+173 3 3 0 31 0 45 46 114 111
+174 3 3 0 31 0 111 114 115 112
+175 3 3 0 31 0 112 115 116 113
+176 3 3 0 31 0 113 116 52 53
+177 3 3 0 31 0 46 47 117 114
+178 3 3 0 31 0 114 117 118 115
+179 3 3 0 31 0 115 118 119 116
+180 3 3 0 31 0 116 119 51 52
+181 3 3 0 31 0 47 9 48 117
+182 3 3 0 31 0 117 48 49 118
+183 3 3 0 31 0 118 49 50 119
+184 3 3 0 31 0 119 50 10 51
+185 3 3 0 32 0 16 57 120 68
+186 3 3 0 32 0 68 120 121 67
+187 3 3 0 32 0 67 121 122 66
+188 3 3 0 32 0 66 122 65 13
+189 3 3 0 32 0 57 58 123 120
+190 3 3 0 32 0 120 123 124 121
+191 3 3 0 32 0 121 124 125 122
+192 3 3 0 32 0 122 125 64 65
+193 3 3 0 32 0 58 59 126 123
+194 3 3 0 32 0 123 126 127 124
+195 3 3 0 32 0 124 127 128 125
+196 3 3 0 32 0 125 128 63 64
+197 3 3 0 32 0 59 15 60 126
+198 3 3 0 32 0 126 60 61 127
+199 3 3 0 32 0 127 61 62 128
+200 3 3 0 32 0 128 62 14 63
+201 3 3 0 33 0 16 80 129 57
+202 3 3 0 33 0 80 79 130 129
+203 3 3 0 33 0 79 78 131 130
+204 3 3 0 33 0 78 12 56 131
+205 3 3 0 33 0 57 129 132 58
+206 3 3 0 33 0 129 130 133 132
+207 3 3 0 33 0 130 131 134 133
+208 3 3 0 33 0 131 56 55 134
+209 3 3 0 33 0 58 132 135 59
+210 3 3 0 33 0 132 133 136 135
+211 3 3 0 33 0 133 134 137 136
+212 3 3 0 33 0 134 55 54 137
+213 3 3 0 33 0 59 135 77 15
+214 3 3 0 33 0 135 136 76 77
+215 3 3 0 33 0 136 137 75 76
+216 3 3 0 33 0 137 54 11 75
+217 3 3 0 34 0 15 77 138 60
+218 3 3 0 34 0 77 76 139 138
+219 3 3 0 34 0 76 75 140 139
+220 3 3 0 34 0 75 11 53 140
+221 3 3 0 34 0 60 138 141 61
+222 3 3 0 34 0 138 139 142 141
+223 3 3 0 34 0 139 140 143 142
+224 3 3 0 34 0 140 53 52 143
+225 3 3 0 34 0 61 141 144 62
+226 3 3 0 34 0 141 142 145 144
+227 3 3 0 34 0 142 143 146 145
+228 3 3 0 34 0 143 52 51 146
+229 3 3 0 34 0 62 144 74 14
+230 3 3 0 34 0 144 145 73 74
+231 3 3 0 34 0 145 146 72 73
+232 3 3 0 34 0 146 51 10 72
+233 3 3 0 35 0 9 69 147 48
+234 3 3 0 35 0 48 147 148 49
+235 3 3 0 35 0 49 148 149 50
+236 3 3 0 35 0 50 149 72 10
+237 3 3 0 35 0 69 70 150 147
+238 3 3 0 35 0 147 150 151 148
+239 3 3 0 35 0 148 151 152 149
+240 3 3 0 35 0 149 152 73 72
+241 3 3 0 35 0 70 71 153 150
+242 3 3 0 35 0 150 153 154 151
+243 3 3 0 35 0 151 154 155 152
+244 3 3 0 35 0 152 155 74 73
+245 3 3 0 35 0 71 13 65 153
+246 3 3 0 35 0 153 65 64 154
+247 3 3 0 35 0 154 64 63 155
+248 3 3 0 35 0 155 63 14 74
+249 3 3 0 36 0 12 78 156 45
+250 3 3 0 36 0 45 156 157 46
+251 3 3 0 36 0 46 157 158 47
+252 3 3 0 36 0 47 158 69 9
+253 3 3 0 36 0 78 79 159 156
+254 3 3 0 36 0 156 159 160 157
+255 3 3 0 36 0 157 160 161 158
+256 3 3 0 36 0 158 161 70 69
+257 3 3 0 36 0 79 80 162 159
+258 3 3 0 36 0 159 162 163 160
+259 3 3 0 36 0 160 163 164 161
+260 3 3 0 36 0 161 164 71 70
+261 3 3 0 36 0 80 16 68 162
+262 3 3 0 36 0 162 68 67 163
+263 3 3 0 36 0 163 67 66 164
+264 3 3 0 36 0 164 66 13 71
+265 5 3 0 37 0 81 17 4 24 165 102 42 89
+266 5 3 0 37 0 165 102 42 89 166 105 43 88
+267 5 3 0 37 0 166 105 43 88 167 108 44 87
+268 5 3 0 37 0 167 108 44 87 84 32 8 25
+269 5 3 0 37 0 23 81 24 3 92 165 89 39
+270 5 3 0 37 0 92 165 89 39 91 166 88 40
+271 5 3 0 37 0 91 166 88 40 90 167 87 41
+272 5 3 0 37 0 90 167 87 41 26 84 25 7
+273 5 3 0 37 0 82 18 17 81 168 103 102 165
+274 5 3 0 37 0 168 103 102 165 169 106 105 166
+275 5 3 0 37 0 169 106 105 166 170 109 108 167
+276 5 3 0 37 0 170 109 108 167 85 31 32 84
+277 5 3 0 37 0 22 82 81 23 95 168 165 92
+278 5 3 0 37 0 95 168 165 92 94 169 166 91
+279 5 3 0 37 0 94 169 166 91 93 170 167 90
+280 5 3 0 37 0 93 170 167 90 27 85 84 26
+281 5 3 0 37 0 83 19 18 82 171 104 103 168
+282 5 3 0 37 0 171 104 103 168 172 107 106 169
+283 5 3 0 37 0 172 107 106 169 173 110 109 170
+284 5 3 0 37 0 173 110 109 170 86 30 31 85
+285 5 3 0 37 0 21 83 82 22 98 171 168 95
+286 5 3 0 37 0 98 171 168 95 97 172 169 94
+287 5 3 0 37 0 97 172 169 94 96 173 170 93
+288 5 3 0 37 0 96 173 170 93 28 86 85 27
+289 5 3 0 37 0 20 1 19 83 99 33 104 171
+290 5 3 0 37 0 99 33 104 171 100 34 107 172
+291 5 3 0 37 0 100 34 107 172 101 35 110 173
+292 5 3 0 37 0 101 35 110 173 29 5 30 86
+293 5 3 0 37 0 2 20 83 21 36 99 171 98
+294 5 3 0 37 0 36 99 171 98 37 100 172 97
+295 5 3 0 37 0 37 100 172 97 38 101 173 96
+296 5 3 0 37 0 38 101 173 96 6 29 86 28
+297 5 3 0 38 0 111 45 12 56 174 156 78 131
+298 5 3 0 38 0 174 156 78 131 175 159 79 130
+299 5 3 0 38 0 175 159 79 130 176 162 80 129
+300 5 3 0 38 0 176 162 80 129 120 68 16 57
+301 5 3 0 38 0 112 111 56 55 177 174 131 134
+302 5 3 0 38 0 177 174 131 134 178 175 130 133
+303 5 3 0 38 0 178 175 130 133 179 176 129 132
+304 5 3 0 38 0 179 176 129 132 123 120 57 58
+305 5 3 0 38 0 113 112 55 54 180 177 134 137
+306 5 3 0 38 0 180 177 134 137 181 178 133 136
+307 5 3 0 38 0 181 178 133 136 182 179 132 135
+308 5 3 0 38 0 182 179 132 135 126 123 58 59
+309 5 3 0 38 0 53 113 54 11 140 180 137 75
+310 5 3 0 38 0 140 180 137 75 139 181 136 76
+311 5 3 0 38 0 139 181 136 76 138 182 135 77
+312 5 3 0 38 0 138 182 135 77 60 126 59 15
+313 5 3 0 38 0 114 46 45 111 183 157 156 174
+314 5 3 0 38 0 183 157 156 174 184 160 159 175
+315 5 3 0 38 0 184 160 159 175 185 163 162 176
+316 5 3 0 38 0 185 163 162 176 121 67 68 120
+317 5 3 0 38 0 115 114 111 112 186 183 174 177
+318 5 3 0 38 0 186 183 174 177 187 184 175 178
+319 5 3 0 38 0 187 184 175 178 188 185 176 179
+320 5 3 0 38 0 188 185 176 179 124 121 120 123
+321 5 3 0 38 0 116 115 112 113 189 186 177 180
+322 5 3 0 38 0 189 186 177 180 190 187 178 181
+323 5 3 0 38 0 190 187 178 181 191 188 179 182
+324 5 3 0 38 0 191 188 179 182 127 124 123 126
+325 5 3 0 38 0 52 116 113 53 143 189 180 140
+326 5 3 0 38 0 143 189 180 140 142 190 181 139
+327 5 3 0 38 0 142 190 181 139 141 191 182 138
+328 5 3 0 38 0 141 191 182 138 61 127 126 60
+329 5 3 0 38 0 117 47 46 114 192 158 157 183
+330 5 3 0 38 0 192 158 157 183 193 161 160 184
+331 5 3 0 38 0 193 161 160 184 194 164 163 185
+332 5 3 0 38 0 194 164 163 185 122 66 67 121
+333 5 3 0 38 0 118 117 114 115 195 192 183 186
+334 5 3 0 38 0 195 192 183 186 196 193 184 187
+335 5 3 0 38 0 196 193 184 187 197 194 185 188
+336 5 3 0 38 0 197 194 185 188 125 122 121 124
+337 5 3 0 38 0 119 118 115 116 198 195 186 189
+338 5 3 0 38 0 198 195 186 189 199 196 187 190
+339 5 3 0 38 0 199 196 187 190 200 197 188 191
+340 5 3 0 38 0 200 197 188 191 128 125 124 127
+341 5 3 0 38 0 51 119 116 52 146 198 189 143
+342 5 3 0 38 0 146 198 189 143 145 199 190 142
+343 5 3 0 38 0 145 199 190 142 144 200 191 141
+344 5 3 0 38 0 144 200 191 141 62 128 127 61
+345 5 3 0 38 0 48 9 47 117 147 69 158 192
+346 5 3 0 38 0 147 69 158 192 150 70 161 193
+347 5 3 0 38 0 150 70 161 193 153 71 164 194
+348 5 3 0 38 0 153 71 164 194 65 13 66 122
+349 5 3 0 38 0 49 48 117 118 148 147 192 195
+350 5 3 0 38 0 148 147 192 195 151 150 193 196
+351 5 3 0 38 0 151 150 193 196 154 153 194 197
+352 5 3 0 38 0 154 153 194 197 64 65 122 125
+353 5 3 0 38 0 50 49 118 119 149 148 195 198
+354 5 3 0 38 0 149 148 195 198 152 151 196 199
+355 5 3 0 38 0 152 151 196 199 155 154 197 200
+356 5 3 0 38 0 155 154 197 200 63 64 125 128
+357 5 3 0 38 0 10 50 119 51 72 149 198 146
+358 5 3 0 38 0 72 149 198 146 73 152 199 145
+359 5 3 0 38 0 73 152 199 145 74 155 200 144
+360 5 3 0 38 0 74 155 200 144 14 63 128 62
+$EndElements
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/quadrangle_4.msh b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/quadrangle_4.msh
new file mode 100644
index 000000000..f068d1f38
--- /dev/null
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/quadrangle_4.msh
@@ -0,0 +1,73 @@
+$MeshFormat
+2.1 0 8
+$EndMeshFormat
+$Nodes
+24
+1 0 0 0
+2 0.5 0 0
+3 0.5 1 0
+4 0 1 0
+5 0.505 0.375 0
+6 0.755 0.375 0
+7 0.755 0.625 0
+8 0.505 0.625 0
+9 0 0.7500000000003469 0
+10 0 0.5000000000013878 0
+11 0 0.2500000000010407 0
+12 0.2499999999995108 0 0
+13 0.5 0.2499999999993998 0
+14 0.5 0.4999999999990217 0
+15 0.5 0.7499999999993374 0
+16 0.2500000000006939 1 0
+17 0.505 0.5 0
+18 0.63 0.375 0
+19 0.755 0.5 0
+20 0.63 0.625 0
+21 0.2500000000003981 0.7499999999998422 0
+22 0.2500000000001024 0.5000000000002047 0
+23 0.2499999999998066 0.2500000000002203 0
+24 0.63 0.5 0
+$EndNodes
+$Elements
+40
+1 15 3 0 1 0 1
+2 15 3 0 2 0 2
+3 15 3 0 3 0 3
+4 15 3 0 4 0 4
+5 15 3 0 5 0 5
+6 15 3 0 6 0 6
+7 15 3 0 7 0 7
+8 15 3 0 8 0 8
+9 1 3 0 1 0 4 9
+10 1 3 0 1 0 9 10
+11 1 3 0 1 0 10 11
+12 1 3 0 1 0 11 1
+13 1 3 0 2 0 1 12
+14 1 3 0 2 0 12 2
+15 1 3 0 3 0 2 13
+16 1 3 0 3 0 13 14
+17 1 3 0 3 0 14 15
+18 1 3 0 3 0 15 3
+19 1 3 0 4 0 3 16
+20 1 3 0 4 0 16 4
+21 1 3 0 5 0 8 17
+22 1 3 0 5 0 17 5
+23 1 3 0 6 0 5 18
+24 1 3 0 6 0 18 6
+25 1 3 0 7 0 6 19
+26 1 3 0 7 0 19 7
+27 1 3 0 8 0 7 20
+28 1 3 0 8 0 20 8
+29 3 3 0 9 0 4 9 21 16
+30 3 3 0 9 0 16 21 15 3
+31 3 3 0 9 0 9 10 22 21
+32 3 3 0 9 0 21 22 14 15
+33 3 3 0 9 0 10 11 23 22
+34 3 3 0 9 0 22 23 13 14
+35 3 3 0 9 0 11 1 12 23
+36 3 3 0 9 0 23 12 2 13
+37 3 3 0 10 0 8 17 24 20
+38 3 3 0 10 0 20 24 19 7
+39 3 3 0 10 0 17 5 18 24
+40 3 3 0 10 0 24 18 6 19
+$EndElements
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/tetrahedron_4.msh b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/tetrahedron_4.msh
new file mode 100644
index 000000000..a5bf09cc5
--- /dev/null
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/tetrahedron_4.msh
@@ -0,0 +1,846 @@
+$MeshFormat
+2.1 0 8
+$EndMeshFormat
+$Nodes
+140
+1 0 0 0.5
+2 0.5 0 0.5
+3 0.5 1 0.5
+4 0 1 0.5
+5 0 0 -0.5
+6 0.5 0 -0.5
+7 0.5 1 -0.5
+8 0 1 -0.5
+9 0.505 0.375 0.125
+10 0.755 0.375 0.125
+11 0.755 0.625 0.125
+12 0.505 0.625 0.125
+13 0.505 0.375 -0.125
+14 0.755 0.375 -0.125
+15 0.755 0.625 -0.125
+16 0.505 0.625 -0.125
+17 0 0.7500000000003469 0.5
+18 0 0.5000000000013878 0.5
+19 0 0.2500000000010407 0.5
+20 0.2499999999995108 0 0.5
+21 0.5 0.2499999999993998 0.5
+22 0.5 0.4999999999990217 0.5
+23 0.5 0.7499999999993374 0.5
+24 0.2500000000006939 1 0.5
+25 0.2499999999995108 1 -0.5
+26 0.5 0.7500000000003469 -0.5
+27 0.5 0.5000000000013878 -0.5
+28 0.5 0.2500000000010407 -0.5
+29 0.2500000000006939 0 -0.5
+30 0 0.2499999999993998 -0.5
+31 0 0.4999999999990217 -0.5
+32 0 0.7499999999993374 -0.5
+33 0 0 0.2500000000006939
+34 0 0 1.040834085586084e-12
+35 0 0 -0.2499999999993061
+36 0.5 0 0.2500000000006939
+37 0.5 0 1.040834085586084e-12
+38 0.5 0 -0.2499999999993061
+39 0.5 1 0.2500000000006939
+40 0.5 1 1.040834085586084e-12
+41 0.5 1 -0.2499999999993061
+42 0 1 0.2500000000006939
+43 0 1 1.040834085586084e-12
+44 0 1 -0.2499999999993061
+45 0.505 0.5 0.125
+46 0.63 0.375 0.125
+47 0.755 0.5 0.125
+48 0.63 0.625 0.125
+49 0.63 0.625 -0.125
+50 0.755 0.5 -0.125
+51 0.63 0.375 -0.125
+52 0.505 0.5 -0.125
+53 0.505 0.375 2.602085213965211e-13
+54 0.755 0.375 2.602085213965211e-13
+55 0.755 0.625 2.602085213965211e-13
+56 0.505 0.625 2.602085213965211e-13
+57 0.2290540664779867 0.6221042419860815 0.5
+58 0.2256756777462904 0.3745173736645753 0.5
+59 0.2256756777465046 0.8328507069975725 0.5
+60 0.3437499999998166 0.09374999999998004 0.5
+61 0.2199042796242696 0.1613778956108326 0.5
+62 0.3689189194367996 0.8957126767492275 0.5
+63 0.2709459335220372 0.6221042419860815 -0.5
+64 0.2743243222537307 0.3745173736645753 -0.5
+65 0.2743243222535506 0.8328507069975725 -0.5
+66 0.1562500000002602 0.09374999999998004 -0.5
+67 0.1310810805632653 0.8957126767492275 -0.5
+68 0.2800957203757808 0.1613778956108326 -0.5
+69 0.2290540540541014 1 0.1221042471049991
+70 0.2256756756756428 1 -0.1254826254818641
+71 0.3437499999998166 1 -0.4062499999997398
+72 0.225675675675857 1 0.3328507078511223
+73 0.2199042792791617 1 -0.3386221042467026
+74 0.3689189189191378 1 0.395712676962954
+75 0.5 0.5680077867077689 0.02684931336891884
+76 0.5 0.6718401887167504 -0.2425321144598192
+77 0.5 0.7025337430644857 0.277855574435052
+78 0.5 0.2758352721628999 0.005813446670761106
+79 0.5 0.3893038845162555 -0.2848570400103949
+80 0.5 0.3983671928427713 0.2777082402405037
+81 0.5 0.8263612219028325 0.01543146743490065
+82 0.5 0.8652806273019423 -0.3764172903047955
+83 0.5 0.4876298753532146 -0.133153707895955
+84 0.5 0.1525231927800327 -0.2548405988896498
+85 0.5 0.1002088180406499 0.1577033616682107
+86 0.5 0.1707352138409535 0.2818708414300282
+87 0.5 0.8631334357659558 0.3819638936089365
+88 0.2709459459459225 0 0.1221042471049991
+89 0.2743243243243783 0 -0.1254826254818641
+90 0.1562500000002602 0 -0.4062499999997398
+91 0.2743243243241981 0 0.3328507078511223
+92 0.1310810810809273 0 0.395712676962954
+93 0.2800957207208887 0 -0.3386221042467026
+94 0 0.5432681405897425 0.04927721088486333
+95 0 0.713254152980096 -0.2545739724432742
+96 0 0.3573412818931089 0.2487364165718728
+97 0 0.8322286392814481 0.01479384986620962
+98 0 0.5571375931330279 0.297462342079965
+99 0 0.1709459744783776 0.1104757271710135
+100 0 0.4922822909914533 -0.2210888678550334
+101 0 0.1723023965466519 -0.1544361143358392
+102 0 0.3546926733644343 -0.05554298874285086
+103 0 0.7721231227281032 0.2712888783162328
+104 0 0.3157128934834435 -0.3010113284888962
+105 0 0.147603058005899 -0.3410894885648083
+106 0 0.1556574512745054 0.321842428748716
+107 0 0.8658135382448584 -0.3761434931106451
+108 0.63 0.5 0.125
+109 0.6925 0.5625 0.125
+110 0.5675 0.4375 0.125
+111 0.6925 0.4375 0.125
+112 0.5675 0.5625 0.125
+113 0.63 0.5 -0.125
+114 0.5675 0.4375 -0.125
+115 0.6925 0.5625 -0.125
+116 0.5675 0.5625 -0.125
+117 0.6925 0.4375 -0.125
+118 0.63 0.625 0.03571428571439724
+119 0.6675 0.625 -0.05535714285704248
+120 0.5875 0.625 -0.053928571428477
+121 0.755 0.4642857142857143 7.434925690980825e-14
+122 0.755 0.5553571428571429 -0.03749999999990707
+123 0.755 0.5539285714285714 0.0425000000000855
+124 0.63 0.375 0.03571428571439724
+125 0.6675 0.375 -0.05535714285704248
+126 0.5875 0.375 -0.053928571428477
+127 0.505 0.5318504050925926 -0.03185040509249074
+128 0.505 0.4636417341820988 0.03635826581800495
+129 0.505 0.4490984278549383 -0.04909842785484512
+130 0.505 0.5490984278549382 0.05090157214515489
+131 0.2587187588214874 0.7617437243461609 0.3443062901496887
+132 0.2587187588214874 0.2503562569618225 0.3443062901496887
+133 0.2587187588214874 0.4208187460899353 0.3443062901496887
+134 0.2587187588214874 0.7617437243461609 -0.3375437259674072
+135 0.2587187588214874 0.2503562569618225 -0.3375437259674072
+136 0.2587187588214874 0.2503562569618225 0.1738437712192535
+137 0.6108719110488892 0.5441281199455261 -0.06307812035083771
+138 0.6108719110488892 0.4588969051837921 -0.06307812035083771
+139 0.6108719110488892 0.4588969051837921 0.02215312793850899
+140 0.6108719110488892 0.5441281199455261 0.02215312793850899
+$EndNodes
+$Elements
+697
+1 15 3 0 1 0 1
+2 15 3 0 2 0 2
+3 15 3 0 3 0 3
+4 15 3 0 4 0 4
+5 15 3 0 5 0 5
+6 15 3 0 6 0 6
+7 15 3 0 7 0 7
+8 15 3 0 8 0 8
+9 15 3 0 9 0 9
+10 15 3 0 10 0 10
+11 15 3 0 11 0 11
+12 15 3 0 12 0 12
+13 15 3 0 13 0 13
+14 15 3 0 14 0 14
+15 15 3 0 15 0 15
+16 15 3 0 16 0 16
+17 1 3 0 1 0 4 17
+18 1 3 0 1 0 17 18
+19 1 3 0 1 0 18 19
+20 1 3 0 1 0 19 1
+21 1 3 0 2 0 1 20
+22 1 3 0 2 0 20 2
+23 1 3 0 3 0 2 21
+24 1 3 0 3 0 21 22
+25 1 3 0 3 0 22 23
+26 1 3 0 3 0 23 3
+27 1 3 0 4 0 3 24
+28 1 3 0 4 0 24 4
+29 1 3 0 5 0 8 25
+30 1 3 0 5 0 25 7
+31 1 3 0 6 0 7 26
+32 1 3 0 6 0 26 27
+33 1 3 0 6 0 27 28
+34 1 3 0 6 0 28 6
+35 1 3 0 7 0 6 29
+36 1 3 0 7 0 29 5
+37 1 3 0 8 0 5 30
+38 1 3 0 8 0 30 31
+39 1 3 0 8 0 31 32
+40 1 3 0 8 0 32 8
+41 1 3 0 9 0 1 33
+42 1 3 0 9 0 33 34
+43 1 3 0 9 0 34 35
+44 1 3 0 9 0 35 5
+45 1 3 0 10 0 2 36
+46 1 3 0 10 0 36 37
+47 1 3 0 10 0 37 38
+48 1 3 0 10 0 38 6
+49 1 3 0 11 0 3 39
+50 1 3 0 11 0 39 40
+51 1 3 0 11 0 40 41
+52 1 3 0 11 0 41 7
+53 1 3 0 12 0 4 42
+54 1 3 0 12 0 42 43
+55 1 3 0 12 0 43 44
+56 1 3 0 12 0 44 8
+57 1 3 0 13 0 12 45
+58 1 3 0 13 0 45 9
+59 1 3 0 14 0 9 46
+60 1 3 0 14 0 46 10
+61 1 3 0 15 0 10 47
+62 1 3 0 15 0 47 11
+63 1 3 0 16 0 11 48
+64 1 3 0 16 0 48 12
+65 1 3 0 17 0 16 49
+66 1 3 0 17 0 49 15
+67 1 3 0 18 0 15 50
+68 1 3 0 18 0 50 14
+69 1 3 0 19 0 14 51
+70 1 3 0 19 0 51 13
+71 1 3 0 20 0 13 52
+72 1 3 0 20 0 52 16
+73 1 3 0 21 0 9 53
+74 1 3 0 21 0 53 13
+75 1 3 0 22 0 10 54
+76 1 3 0 22 0 54 14
+77 1 3 0 23 0 11 55
+78 1 3 0 23 0 55 15
+79 1 3 0 24 0 12 56
+80 1 3 0 24 0 56 16
+81 2 3 0 25 0 57 22 23
+82 2 3 0 25 0 58 18 19
+83 2 3 0 25 0 21 22 58
+84 2 3 0 25 0 58 22 57
+85 2 3 0 25 0 17 18 57
+86 2 3 0 25 0 57 18 58
+87 2 3 0 25 0 59 4 17
+88 2 3 0 25 0 24 4 59
+89 2 3 0 25 0 20 2 60
+90 2 3 0 25 0 60 2 21
+91 2 3 0 25 0 19 1 61
+92 2 3 0 25 0 61 1 20
+93 2 3 0 25 0 62 3 24
+94 2 3 0 25 0 23 3 62
+95 2 3 0 25 0 24 59 62
+96 2 3 0 25 0 59 17 57
+97 2 3 0 25 0 57 23 59
+98 2 3 0 25 0 62 59 23
+99 2 3 0 25 0 60 61 20
+100 2 3 0 25 0 61 21 58
+101 2 3 0 25 0 58 19 61
+102 2 3 0 25 0 21 61 60
+103 2 3 0 26 0 32 63 31
+104 2 3 0 26 0 28 64 27
+105 2 3 0 26 0 64 30 31
+106 2 3 0 26 0 63 64 31
+107 2 3 0 26 0 63 26 27
+108 2 3 0 26 0 64 63 27
+109 2 3 0 26 0 65 25 7
+110 2 3 0 26 0 26 65 7
+111 2 3 0 26 0 66 29 5
+112 2 3 0 26 0 30 66 5
+113 2 3 0 26 0 25 67 8
+114 2 3 0 26 0 67 32 8
+115 2 3 0 26 0 29 68 6
+116 2 3 0 26 0 68 28 6
+117 2 3 0 26 0 67 25 65
+118 2 3 0 26 0 63 65 26
+119 2 3 0 26 0 65 63 32
+120 2 3 0 26 0 32 67 65
+121 2 3 0 26 0 29 66 68
+122 2 3 0 26 0 64 68 30
+123 2 3 0 26 0 68 64 28
+124 2 3 0 26 0 66 30 68
+125 2 3 0 27 0 40 69 39
+126 2 3 0 27 0 42 69 43
+127 2 3 0 27 0 43 70 44
+128 2 3 0 27 0 43 69 70
+129 2 3 0 27 0 41 70 40
+130 2 3 0 27 0 69 40 70
+131 2 3 0 27 0 25 71 7
+132 2 3 0 27 0 71 41 7
+133 2 3 0 27 0 24 72 4
+134 2 3 0 27 0 72 42 4
+135 2 3 0 27 0 73 25 8
+136 2 3 0 27 0 44 73 8
+137 2 3 0 27 0 74 24 3
+138 2 3 0 27 0 39 74 3
+139 2 3 0 27 0 24 74 72
+140 2 3 0 27 0 72 69 42
+141 2 3 0 27 0 69 72 39
+142 2 3 0 27 0 74 39 72
+143 2 3 0 27 0 71 25 73
+144 2 3 0 27 0 73 70 41
+145 2 3 0 27 0 70 73 44
+146 2 3 0 27 0 41 71 73
+147 2 3 0 28 0 21 80 22
+148 2 3 0 28 0 75 80 78
+149 2 3 0 28 0 22 77 23
+150 2 3 0 28 0 80 77 22
+151 2 3 0 28 0 80 75 77
+152 2 3 0 28 0 27 76 79
+153 2 3 0 28 0 76 27 26
+154 2 3 0 28 0 81 40 39
+155 2 3 0 28 0 75 81 77
+156 2 3 0 28 0 81 75 76
+157 2 3 0 28 0 79 28 27
+158 2 3 0 28 0 41 40 81
+159 2 3 0 28 0 76 41 81
+160 2 3 0 28 0 39 77 81
+161 2 3 0 28 0 82 26 7
+162 2 3 0 28 0 82 41 76
+163 2 3 0 28 0 41 82 7
+164 2 3 0 28 0 26 82 76
+165 2 3 0 28 0 75 83 76
+166 2 3 0 28 0 79 83 78
+167 2 3 0 28 0 83 79 76
+168 2 3 0 28 0 83 75 78
+169 2 3 0 28 0 28 84 6
+170 2 3 0 28 0 84 38 6
+171 2 3 0 28 0 79 84 28
+172 2 3 0 28 0 85 36 37
+173 2 3 0 28 0 78 85 37
+174 2 3 0 28 0 86 21 2
+175 2 3 0 28 0 36 86 2
+176 2 3 0 28 0 36 85 86
+177 2 3 0 28 0 80 86 78
+178 2 3 0 28 0 86 80 21
+179 2 3 0 28 0 85 78 86
+180 2 3 0 28 0 38 84 37
+181 2 3 0 28 0 84 78 37
+182 2 3 0 28 0 78 84 79
+183 2 3 0 28 0 23 87 3
+184 2 3 0 28 0 39 87 77
+185 2 3 0 28 0 87 39 3
+186 2 3 0 28 0 87 23 77
+187 2 3 0 29 0 88 33 34
+188 2 3 0 29 0 88 37 36
+189 2 3 0 29 0 34 35 89
+190 2 3 0 29 0 34 89 88
+191 2 3 0 29 0 38 37 89
+192 2 3 0 29 0 88 89 37
+193 2 3 0 29 0 90 5 29
+194 2 3 0 29 0 35 5 90
+195 2 3 0 29 0 91 2 20
+196 2 3 0 29 0 36 2 91
+197 2 3 0 29 0 20 1 92
+198 2 3 0 29 0 92 1 33
+199 2 3 0 29 0 29 6 93
+200 2 3 0 29 0 93 6 38
+201 2 3 0 29 0 92 91 20
+202 2 3 0 29 0 88 36 91
+203 2 3 0 29 0 91 33 88
+204 2 3 0 29 0 33 91 92
+205 2 3 0 29 0 29 93 90
+206 2 3 0 29 0 89 35 93
+207 2 3 0 29 0 93 38 89
+208 2 3 0 29 0 90 93 35
+209 2 3 0 30 0 96 19 18
+210 2 3 0 30 0 97 95 94
+211 2 3 0 30 0 98 96 18
+212 2 3 0 30 0 94 96 98
+213 2 3 0 30 0 95 31 100
+214 2 3 0 30 0 100 94 95
+215 2 3 0 30 0 101 35 34
+216 2 3 0 30 0 94 100 102
+217 2 3 0 30 0 103 97 94
+218 2 3 0 30 0 94 98 103
+219 2 3 0 30 0 104 100 31
+220 2 3 0 30 0 99 34 33
+221 2 3 0 30 0 104 31 30
+222 2 3 0 30 0 101 34 99
+223 2 3 0 30 0 31 95 32
+224 2 3 0 30 0 17 98 18
+225 2 3 0 30 0 17 103 98
+226 2 3 0 30 0 43 97 42
+227 2 3 0 30 0 97 103 42
+228 2 3 0 30 0 96 94 102
+229 2 3 0 30 0 96 102 99
+230 2 3 0 30 0 102 101 99
+231 2 3 0 30 0 30 5 105
+232 2 3 0 30 0 35 101 105
+233 2 3 0 30 0 105 5 35
+234 2 3 0 30 0 106 1 19
+235 2 3 0 30 0 33 1 106
+236 2 3 0 30 0 19 96 106
+237 2 3 0 30 0 104 30 105
+238 2 3 0 30 0 99 33 106
+239 2 3 0 30 0 99 106 96
+240 2 3 0 30 0 102 100 104
+241 2 3 0 30 0 101 102 104
+242 2 3 0 30 0 104 105 101
+243 2 3 0 30 0 17 4 103
+244 2 3 0 30 0 103 4 42
+245 2 3 0 30 0 44 97 43
+246 2 3 0 30 0 95 97 44
+247 2 3 0 30 0 107 8 32
+248 2 3 0 30 0 107 95 44
+249 2 3 0 30 0 44 8 107
+250 2 3 0 30 0 32 95 107
+251 2 3 0 31 0 47 11 109
+252 2 3 0 31 0 48 108 109
+253 2 3 0 31 0 109 11 48
+254 2 3 0 31 0 109 108 47
+255 2 3 0 31 0 45 9 110
+256 2 3 0 31 0 46 108 110
+257 2 3 0 31 0 110 9 46
+258 2 3 0 31 0 110 108 45
+259 2 3 0 31 0 46 10 111
+260 2 3 0 31 0 47 108 111
+261 2 3 0 31 0 111 10 47
+262 2 3 0 31 0 111 108 46
+263 2 3 0 31 0 112 12 45
+264 2 3 0 31 0 112 108 48
+265 2 3 0 31 0 48 12 112
+266 2 3 0 31 0 45 108 112
+267 2 3 0 32 0 114 51 13
+268 2 3 0 32 0 114 52 113
+269 2 3 0 32 0 52 114 13
+270 2 3 0 32 0 51 114 113
+271 2 3 0 32 0 115 49 15
+272 2 3 0 32 0 115 50 113
+273 2 3 0 32 0 50 115 15
+274 2 3 0 32 0 49 115 113
+275 2 3 0 32 0 49 116 16
+276 2 3 0 32 0 52 116 113
+277 2 3 0 32 0 116 52 16
+278 2 3 0 32 0 116 49 113
+279 2 3 0 32 0 117 50 14
+280 2 3 0 32 0 117 51 113
+281 2 3 0 32 0 51 117 14
+282 2 3 0 32 0 50 117 113
+283 2 3 0 33 0 118 48 11
+284 2 3 0 33 0 55 118 11
+285 2 3 0 33 0 118 56 12
+286 2 3 0 33 0 48 118 12
+287 2 3 0 33 0 49 119 15
+288 2 3 0 33 0 55 119 118
+289 2 3 0 33 0 119 55 15
+290 2 3 0 33 0 56 120 16
+291 2 3 0 33 0 120 49 16
+292 2 3 0 33 0 120 56 118
+293 2 3 0 33 0 120 119 49
+294 2 3 0 33 0 118 119 120
+295 2 3 0 34 0 121 47 10
+296 2 3 0 34 0 54 121 10
+297 2 3 0 34 0 50 121 14
+298 2 3 0 34 0 121 54 14
+299 2 3 0 34 0 122 50 15
+300 2 3 0 34 0 55 122 15
+301 2 3 0 34 0 50 122 121
+302 2 3 0 34 0 47 123 11
+303 2 3 0 34 0 123 55 11
+304 2 3 0 34 0 123 47 121
+305 2 3 0 34 0 123 122 55
+306 2 3 0 34 0 121 122 123
+307 2 3 0 35 0 46 9 124
+308 2 3 0 35 0 124 9 53
+309 2 3 0 35 0 124 10 46
+310 2 3 0 35 0 54 10 124
+311 2 3 0 35 0 125 14 54
+312 2 3 0 35 0 54 124 125
+313 2 3 0 35 0 51 14 125
+314 2 3 0 35 0 126 13 51
+315 2 3 0 35 0 126 124 53
+316 2 3 0 35 0 53 13 126
+317 2 3 0 35 0 126 51 125
+318 2 3 0 35 0 124 126 125
+319 2 3 0 36 0 56 16 127
+320 2 3 0 36 0 127 16 52
+321 2 3 0 36 0 128 9 45
+322 2 3 0 36 0 53 9 128
+323 2 3 0 36 0 52 13 129
+324 2 3 0 36 0 129 13 53
+325 2 3 0 36 0 129 127 52
+326 2 3 0 36 0 130 12 56
+327 2 3 0 36 0 45 12 130
+328 2 3 0 36 0 56 127 130
+329 2 3 0 36 0 128 45 130
+330 2 3 0 36 0 128 130 127
+331 2 3 0 36 0 129 53 128
+332 2 3 0 36 0 127 129 128
+333 4 3 0 37 0 4 59 103 72
+334 4 3 0 37 0 88 33 136 99
+335 4 3 0 37 0 70 41 40 81
+336 4 3 0 37 0 96 133 94 98
+337 4 3 0 37 0 133 132 58 96
+338 4 3 0 37 0 91 61 132 92
+339 4 3 0 37 0 89 34 99 101
+340 4 3 0 37 0 133 132 96 136
+341 4 3 0 37 0 97 134 81 75
+342 4 3 0 37 0 91 132 106 92
+343 4 3 0 37 0 94 102 75 136
+344 4 3 0 37 0 102 136 78 83
+345 4 3 0 37 0 61 132 106 19
+346 4 3 0 37 0 80 133 75 136
+347 4 3 0 37 0 91 33 92 106
+348 4 3 0 37 0 132 96 106 19
+349 4 3 0 37 0 61 19 92 1
+350 4 3 0 37 0 2 21 86 60
+351 4 3 0 37 0 97 69 103 131
+352 4 3 0 37 0 132 80 86 136
+353 4 3 0 37 0 61 91 132 60
+354 4 3 0 37 0 100 135 104 64
+355 4 3 0 37 0 32 31 63 95
+356 4 3 0 37 0 26 7 65 82
+357 4 3 0 37 0 88 89 78 37
+358 4 3 0 37 0 100 134 63 95
+359 4 3 0 37 0 134 97 94 75
+360 4 3 0 37 0 61 20 92 91
+361 4 3 0 37 0 85 86 78 136
+362 4 3 0 37 0 20 61 92 1
+363 4 3 0 37 0 105 135 30 104
+364 4 3 0 37 0 18 133 58 96
+365 4 3 0 37 0 105 101 135 104
+366 4 3 0 37 0 58 132 19 96
+367 4 3 0 37 0 34 33 88 99
+368 4 3 0 37 0 44 70 134 73
+369 4 3 0 37 0 33 106 136 99
+370 4 3 0 37 0 132 91 106 136
+371 4 3 0 37 0 77 87 131 23
+372 4 3 0 37 0 88 85 78 136
+373 4 3 0 37 0 132 61 106 92
+374 4 3 0 37 0 21 80 133 22
+375 4 3 0 37 0 94 102 83 75
+376 4 3 0 37 0 8 67 107 32
+377 4 3 0 37 0 107 67 73 134
+378 4 3 0 37 0 80 77 133 22
+379 4 3 0 37 0 70 69 81 40
+380 4 3 0 37 0 29 93 6 68
+381 4 3 0 37 0 84 89 93 38
+382 4 3 0 37 0 85 88 37 36
+383 4 3 0 37 0 89 88 78 136
+384 4 3 0 37 0 81 97 75 131
+385 4 3 0 37 0 35 34 89 101
+386 4 3 0 37 0 77 81 75 131
+387 4 3 0 37 0 133 94 75 136
+388 4 3 0 37 0 135 63 79 64
+389 4 3 0 37 0 106 96 136 99
+390 4 3 0 37 0 89 35 101 93
+391 4 3 0 37 0 134 67 73 65
+392 4 3 0 37 0 87 74 3 39
+393 4 3 0 37 0 135 28 64 79
+394 4 3 0 37 0 59 62 23 131
+395 4 3 0 37 0 132 91 136 86
+396 4 3 0 37 0 132 80 133 21
+397 4 3 0 37 0 132 80 21 86
+398 4 3 0 37 0 88 91 85 136
+399 4 3 0 37 0 136 102 75 83
+400 4 3 0 37 0 91 33 106 136
+401 4 3 0 37 0 136 80 78 75
+402 4 3 0 37 0 89 101 136 135
+403 4 3 0 37 0 134 107 32 95
+404 4 3 0 37 0 135 64 68 30
+405 4 3 0 37 0 134 26 65 82
+406 4 3 0 37 0 87 3 62 23
+407 4 3 0 37 0 21 132 86 60
+408 4 3 0 37 0 88 89 99 136
+409 4 3 0 37 0 74 87 3 62
+410 4 3 0 37 0 98 103 17 131
+411 4 3 0 37 0 71 134 73 65
+412 4 3 0 37 0 89 84 135 78
+413 4 3 0 37 0 34 89 99 88
+414 4 3 0 37 0 86 2 60 36
+415 4 3 0 37 0 57 18 17 98
+416 4 3 0 37 0 133 18 58 57
+417 4 3 0 37 0 106 33 92 1
+418 4 3 0 37 0 133 18 57 98
+419 4 3 0 37 0 24 59 4 72
+420 4 3 0 37 0 70 134 97 95
+421 4 3 0 37 0 35 105 101 93
+422 4 3 0 37 0 100 63 79 135
+423 4 3 0 37 0 91 88 85 36
+424 4 3 0 37 0 87 62 131 23
+425 4 3 0 37 0 103 59 131 72
+426 4 3 0 37 0 91 86 85 136
+427 4 3 0 37 0 33 91 88 136
+428 4 3 0 37 0 57 98 17 131
+429 4 3 0 37 0 132 21 133 58
+430 4 3 0 37 0 22 77 57 23
+431 4 3 0 37 0 59 57 17 131
+432 4 3 0 37 0 44 70 97 95
+433 4 3 0 37 0 84 135 28 68
+434 4 3 0 37 0 132 91 86 60
+435 4 3 0 37 0 134 70 97 81
+436 4 3 0 37 0 70 44 134 95
+437 4 3 0 37 0 100 102 83 94
+438 4 3 0 37 0 134 100 94 95
+439 4 3 0 37 0 103 97 131 94
+440 4 3 0 37 0 57 59 23 131
+441 4 3 0 37 0 133 57 131 98
+442 4 3 0 37 0 133 94 98 131
+443 4 3 0 37 0 103 59 17 131
+444 4 3 0 37 0 69 103 72 42
+445 4 3 0 37 0 74 3 24 62
+446 4 3 0 37 0 103 4 72 42
+447 4 3 0 37 0 66 135 68 30
+448 4 3 0 37 0 77 57 23 131
+449 4 3 0 37 0 93 105 101 135
+450 4 3 0 37 0 89 93 101 135
+451 4 3 0 37 0 89 84 93 135
+452 4 3 0 37 0 77 39 81 131
+453 4 3 0 37 0 132 61 21 58
+454 4 3 0 37 0 85 88 78 37
+455 4 3 0 37 0 105 93 90 135
+456 4 3 0 37 0 66 105 90 135
+457 4 3 0 37 0 19 61 92 106
+458 4 3 0 37 0 105 35 90 93
+459 4 3 0 37 0 96 102 94 136
+460 4 3 0 37 0 63 27 79 64
+461 4 3 0 37 0 97 134 94 95
+462 4 3 0 37 0 134 32 63 95
+463 4 3 0 37 0 133 58 22 57
+464 4 3 0 37 0 59 74 24 62
+465 4 3 0 37 0 74 59 24 72
+466 4 3 0 37 0 101 102 99 136
+467 4 3 0 37 0 18 58 19 96
+468 4 3 0 37 0 86 91 85 36
+469 4 3 0 37 0 100 135 79 83
+470 4 3 0 37 0 135 84 79 78
+471 4 3 0 37 0 41 7 82 71
+472 4 3 0 37 0 8 44 107 73
+473 4 3 0 37 0 84 28 6 68
+474 4 3 0 37 0 26 134 65 63
+475 4 3 0 37 0 134 41 82 71
+476 4 3 0 37 0 19 106 92 1
+477 4 3 0 37 0 89 84 78 37
+478 4 3 0 37 0 84 93 6 38
+479 4 3 0 37 0 93 84 6 68
+480 4 3 0 37 0 134 82 65 71
+481 4 3 0 37 0 73 67 25 65
+482 4 3 0 37 0 66 105 135 30
+483 4 3 0 37 0 94 133 75 131
+484 4 3 0 37 0 31 100 63 95
+485 4 3 0 37 0 44 107 134 95
+486 4 3 0 37 0 134 41 71 73
+487 4 3 0 37 0 70 41 134 73
+488 4 3 0 37 0 133 77 75 131
+489 4 3 0 37 0 82 7 65 71
+490 4 3 0 37 0 102 135 78 136
+491 4 3 0 37 0 35 105 90 5
+492 4 3 0 37 0 100 102 135 83
+493 4 3 0 37 0 28 135 64 68
+494 4 3 0 37 0 89 101 99 136
+495 4 3 0 37 0 132 96 136 106
+496 4 3 0 37 0 132 80 136 133
+497 4 3 0 37 0 89 135 136 78
+498 4 3 0 37 0 66 105 30 5
+499 4 3 0 37 0 71 73 25 65
+500 4 3 0 37 0 43 69 42 97
+501 4 3 0 37 0 97 94 75 131
+502 4 3 0 37 0 76 134 83 75
+503 4 3 0 37 0 91 86 60 36
+504 4 3 0 37 0 18 133 96 98
+505 4 3 0 37 0 78 136 75 83
+506 4 3 0 37 0 69 103 131 72
+507 4 3 0 37 0 21 133 58 22
+508 4 3 0 37 0 107 67 134 32
+509 4 3 0 37 0 134 26 82 76
+510 4 3 0 37 0 134 41 81 76
+511 4 3 0 37 0 105 66 90 5
+512 4 3 0 37 0 135 84 28 79
+513 4 3 0 37 0 67 8 107 73
+514 4 3 0 37 0 41 134 82 76
+515 4 3 0 37 0 97 69 131 81
+516 4 3 0 37 0 2 91 60 36
+517 4 3 0 37 0 91 20 2 60
+518 4 3 0 37 0 63 134 79 76
+519 4 3 0 37 0 27 63 79 76
+520 4 3 0 37 0 26 134 63 76
+521 4 3 0 37 0 81 134 76 75
+522 4 3 0 37 0 61 132 19 58
+523 4 3 0 37 0 90 66 29 5
+524 4 3 0 37 0 27 26 63 76
+525 4 3 0 37 0 61 20 91 60
+526 4 3 0 37 0 79 134 83 76
+527 4 3 0 37 0 7 71 25 65
+528 4 3 0 37 0 70 69 97 81
+529 4 3 0 37 0 74 59 131 62
+530 4 3 0 37 0 69 43 70 97
+531 4 3 0 37 0 100 134 83 79
+532 4 3 0 37 0 84 93 135 68
+533 4 3 0 37 0 31 100 104 64
+534 4 3 0 37 0 100 134 79 63
+535 4 3 0 37 0 90 93 68 135
+536 4 3 0 37 0 31 64 104 30
+537 4 3 0 37 0 39 69 81 131
+538 4 3 0 37 0 80 77 75 133
+539 4 3 0 37 0 66 90 68 135
+540 4 3 0 37 0 4 59 17 103
+541 4 3 0 37 0 102 96 99 136
+542 4 3 0 37 0 77 133 22 57
+543 4 3 0 37 0 84 89 38 37
+544 4 3 0 37 0 28 27 64 79
+545 4 3 0 37 0 69 39 81 40
+546 4 3 0 37 0 41 70 134 81
+547 4 3 0 37 0 43 70 97 44
+548 4 3 0 37 0 97 69 42 103
+549 4 3 0 37 0 90 93 29 68
+550 4 3 0 37 0 77 133 57 131
+551 4 3 0 37 0 74 87 131 39
+552 4 3 0 37 0 94 103 98 131
+553 4 3 0 37 0 66 90 29 68
+554 4 3 0 37 0 86 80 78 136
+555 4 3 0 37 0 32 134 63 65
+556 4 3 0 37 0 61 132 21 60
+557 4 3 0 37 0 67 134 32 65
+558 4 3 0 37 0 134 94 83 75
+559 4 3 0 37 0 135 102 78 83
+560 4 3 0 37 0 134 100 83 94
+561 4 3 0 37 0 44 107 73 134
+562 4 3 0 37 0 79 135 78 83
+563 4 3 0 37 0 74 39 131 72
+564 4 3 0 37 0 74 59 72 131
+565 4 3 0 37 0 87 74 131 62
+566 4 3 0 37 0 100 63 135 64
+567 4 3 0 37 0 77 87 39 131
+568 4 3 0 37 0 64 135 104 30
+569 4 3 0 37 0 39 69 131 72
+570 4 3 0 37 0 100 31 63 64
+571 4 3 0 37 0 67 8 73 25
+572 4 3 0 37 0 101 102 136 135
+573 4 3 0 37 0 102 100 135 104
+574 4 3 0 37 0 101 102 135 104
+575 4 3 0 37 0 133 96 94 136
+576 4 3 0 38 0 127 140 139 137
+577 4 3 0 38 0 127 140 137 120
+578 4 3 0 38 0 54 111 124 10
+579 4 3 0 38 0 137 138 121 139
+580 4 3 0 38 0 140 127 130 56
+581 4 3 0 38 0 113 121 138 117
+582 4 3 0 38 0 117 54 14 121
+583 4 3 0 38 0 139 110 53 124
+584 4 3 0 38 0 124 53 139 126
+585 4 3 0 38 0 12 112 130 56
+586 4 3 0 38 0 127 137 52 116
+587 4 3 0 38 0 113 137 115 49
+588 4 3 0 38 0 122 117 50 121
+589 4 3 0 38 0 53 129 128 139
+590 4 3 0 38 0 140 137 121 139
+591 4 3 0 38 0 140 108 118 112
+592 4 3 0 38 0 51 13 126 114
+593 4 3 0 38 0 138 117 121 125
+594 4 3 0 38 0 123 140 118 119
+595 4 3 0 38 0 138 51 125 126
+596 4 3 0 38 0 45 139 110 128
+597 4 3 0 38 0 113 50 115 122
+598 4 3 0 38 0 45 108 110 139
+599 4 3 0 38 0 140 56 118 120
+600 4 3 0 38 0 129 138 114 52
+601 4 3 0 38 0 137 127 120 116
+602 4 3 0 38 0 117 138 51 125
+603 4 3 0 38 0 13 129 126 114
+604 4 3 0 38 0 111 54 124 121
+605 4 3 0 38 0 119 140 118 120
+606 4 3 0 38 0 123 109 140 108
+607 4 3 0 38 0 12 112 56 118
+608 4 3 0 38 0 109 123 11 47
+609 4 3 0 38 0 121 108 47 123
+610 4 3 0 38 0 111 54 121 10
+611 4 3 0 38 0 111 10 121 47
+612 4 3 0 38 0 137 52 113 138
+613 4 3 0 38 0 140 122 121 137
+614 4 3 0 38 0 118 108 140 109
+615 4 3 0 38 0 12 45 130 112
+616 4 3 0 38 0 113 121 117 122
+617 4 3 0 38 0 112 56 140 130
+618 4 3 0 38 0 113 121 137 138
+619 4 3 0 38 0 55 123 118 119
+620 4 3 0 38 0 16 127 120 56
+621 4 3 0 38 0 123 122 121 140
+622 4 3 0 38 0 127 138 139 129
+623 4 3 0 38 0 125 54 121 124
+624 4 3 0 38 0 50 117 14 121
+625 4 3 0 38 0 117 54 121 125
+626 4 3 0 38 0 129 138 126 114
+627 4 3 0 38 0 129 127 128 139
+628 4 3 0 38 0 51 113 114 138
+629 4 3 0 38 0 137 122 115 119
+630 4 3 0 38 0 124 125 126 139
+631 4 3 0 38 0 127 16 116 52
+632 4 3 0 38 0 122 113 137 115
+633 4 3 0 38 0 109 123 47 108
+634 4 3 0 38 0 51 113 138 117
+635 4 3 0 38 0 127 16 120 116
+636 4 3 0 38 0 122 123 55 119
+637 4 3 0 38 0 138 127 139 137
+638 4 3 0 38 0 123 122 140 119
+639 4 3 0 38 0 46 124 9 110
+640 4 3 0 38 0 15 122 55 119
+641 4 3 0 38 0 140 121 108 139
+642 4 3 0 38 0 112 140 56 118
+643 4 3 0 38 0 138 51 126 114
+644 4 3 0 38 0 137 113 116 49
+645 4 3 0 38 0 125 138 126 139
+646 4 3 0 38 0 115 15 49 119
+647 4 3 0 38 0 140 127 56 120
+648 4 3 0 38 0 122 15 115 119
+649 4 3 0 38 0 129 13 52 114
+650 4 3 0 38 0 111 46 124 10
+651 4 3 0 38 0 9 45 110 128
+652 4 3 0 38 0 111 124 139 121
+653 4 3 0 38 0 53 9 110 128
+654 4 3 0 38 0 108 46 139 111
+655 4 3 0 38 0 137 115 49 119
+656 4 3 0 38 0 139 46 108 110
+657 4 3 0 38 0 109 123 140 118
+658 4 3 0 38 0 139 46 124 111
+659 4 3 0 38 0 138 113 114 52
+660 4 3 0 38 0 138 125 121 139
+661 4 3 0 38 0 124 46 139 110
+662 4 3 0 38 0 113 50 122 117
+663 4 3 0 38 0 16 116 49 120
+664 4 3 0 38 0 137 119 49 120
+665 4 3 0 38 0 13 53 126 129
+666 4 3 0 38 0 48 109 118 11
+667 4 3 0 38 0 127 138 129 52
+668 4 3 0 38 0 116 137 49 120
+669 4 3 0 38 0 45 108 139 112
+670 4 3 0 38 0 112 128 140 139
+671 4 3 0 38 0 140 127 128 130
+672 4 3 0 38 0 129 138 139 126
+673 4 3 0 38 0 125 124 121 139
+674 4 3 0 38 0 140 108 121 123
+675 4 3 0 38 0 108 140 139 112
+676 4 3 0 38 0 127 138 52 137
+677 4 3 0 38 0 54 117 14 125
+678 4 3 0 38 0 113 121 122 137
+679 4 3 0 38 0 121 108 139 111
+680 4 3 0 38 0 118 108 48 112
+681 4 3 0 38 0 112 128 130 140
+682 4 3 0 38 0 123 109 11 118
+683 4 3 0 38 0 122 140 119 137
+684 4 3 0 38 0 12 48 112 118
+685 4 3 0 38 0 127 140 128 139
+686 4 3 0 38 0 15 122 115 50
+687 4 3 0 38 0 117 51 14 125
+688 4 3 0 38 0 53 124 110 9
+689 4 3 0 38 0 137 140 119 120
+690 4 3 0 38 0 137 113 52 116
+691 4 3 0 38 0 53 129 139 126
+692 4 3 0 38 0 139 53 110 128
+693 4 3 0 38 0 112 128 139 45
+694 4 3 0 38 0 48 108 118 109
+695 4 3 0 38 0 55 123 11 118
+696 4 3 0 38 0 121 108 111 47
+697 4 3 0 38 0 112 128 45 130
+$EndElements
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/triangle_3.msh b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/triangle_3.msh
new file mode 100644
index 000000000..833ea8051
--- /dev/null
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/data/triangle_3.msh
@@ -0,0 +1,106 @@
+$MeshFormat
+2.1 0 8
+$EndMeshFormat
+$Nodes
+31
+1 0 0 0
+2 0.5 0 0
+3 0.5 1 0
+4 0 1 0
+5 0.505 0.375 0
+6 0.755 0.375 0
+7 0.755 0.625 0
+8 0.505 0.625 0
+9 0 0.7500000000003469 0
+10 0 0.5000000000013878 0
+11 0 0.2500000000010407 0
+12 0.2499999999995108 0 0
+13 0.5 0.2499999999993998 0
+14 0.5 0.4999999999990217 0
+15 0.5 0.7499999999993374 0
+16 0.2500000000006939 1 0
+17 0.505 0.5 0
+18 0.63 0.375 0
+19 0.755 0.5 0
+20 0.63 0.625 0
+21 0.2290540664779867 0.6221042419860815 0
+22 0.2256756777462904 0.3745173736645753 0
+23 0.2256756777465046 0.8328507069975725 0
+24 0.3437499999998166 0.09374999999998004 0
+25 0.2199042796242696 0.1613778956108326 0
+26 0.3689189194367996 0.8957126767492275 0
+27 0.63 0.5 0
+28 0.5675 0.4375 0
+29 0.5675 0.5625 0
+30 0.6925 0.4375 0
+31 0.6925 0.5625 0
+$EndNodes
+$Elements
+66
+1 15 3 0 1 0 1
+2 15 3 0 2 0 2
+3 15 3 0 3 0 3
+4 15 3 0 4 0 4
+5 15 3 0 5 0 5
+6 15 3 0 6 0 6
+7 15 3 0 7 0 7
+8 15 3 0 8 0 8
+9 1 3 0 1 0 4 9
+10 1 3 0 1 0 9 10
+11 1 3 0 1 0 10 11
+12 1 3 0 1 0 11 1
+13 1 3 0 2 0 1 12
+14 1 3 0 2 0 12 2
+15 1 3 0 3 0 2 13
+16 1 3 0 3 0 13 14
+17 1 3 0 3 0 14 15
+18 1 3 0 3 0 15 3
+19 1 3 0 4 0 3 16
+20 1 3 0 4 0 16 4
+21 1 3 0 5 0 8 17
+22 1 3 0 5 0 17 5
+23 1 3 0 6 0 5 18
+24 1 3 0 6 0 18 6
+25 1 3 0 7 0 6 19
+26 1 3 0 7 0 19 7
+27 1 3 0 8 0 7 20
+28 1 3 0 8 0 20 8
+29 2 3 0 9 0 21 14 15
+30 2 3 0 9 0 22 10 11
+31 2 3 0 9 0 13 14 22
+32 2 3 0 9 0 22 14 21
+33 2 3 0 9 0 9 10 21
+34 2 3 0 9 0 21 10 22
+35 2 3 0 9 0 23 4 9
+36 2 3 0 9 0 16 4 23
+37 2 3 0 9 0 12 2 24
+38 2 3 0 9 0 24 2 13
+39 2 3 0 9 0 11 1 25
+40 2 3 0 9 0 25 1 12
+41 2 3 0 9 0 26 3 16
+42 2 3 0 9 0 15 3 26
+43 2 3 0 9 0 16 23 26
+44 2 3 0 9 0 23 9 21
+45 2 3 0 9 0 21 15 23
+46 2 3 0 9 0 26 23 15
+47 2 3 0 9 0 24 25 12
+48 2 3 0 9 0 25 13 22
+49 2 3 0 9 0 22 11 25
+50 2 3 0 9 0 13 25 24
+51 2 3 0 10 0 17 5 28
+52 2 3 0 10 0 18 27 28
+53 2 3 0 10 0 28 5 18
+54 2 3 0 10 0 28 27 17
+55 2 3 0 10 0 29 8 17
+56 2 3 0 10 0 29 27 20
+57 2 3 0 10 0 20 8 29
+58 2 3 0 10 0 17 27 29
+59 2 3 0 10 0 18 6 30
+60 2 3 0 10 0 19 27 30
+61 2 3 0 10 0 30 6 19
+62 2 3 0 10 0 30 27 18
+63 2 3 0 10 0 19 7 31
+64 2 3 0 10 0 20 27 31
+65 2 3 0 10 0 31 7 20
+66 2 3 0 10 0 31 27 19
+$EndElements
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/io_helper_tools.cc b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/io_helper_tools.cc
new file mode 100644
index 000000000..d7d55e1ea
--- /dev/null
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/io_helper_tools.cc
@@ -0,0 +1,294 @@
+/**
+ * @file   io_helper_tools.cc
+ * @author Nicolas Richart <nicolas.richart@epfl.ch>
+ * @date   Fri Sep 30 11:13:01 2011
+ *
+ * @brief
+ *
+ * @section LICENSE
+ *
+ * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne)
+ * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
+ *
+ * Akantu is free  software: you can redistribute it and/or  modify it under the
+ * terms  of the  GNU Lesser  General Public  License as  published by  the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A  PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
+ * details.
+ *
+ * You should  have received  a copy  of the GNU  Lesser General  Public License
+ * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/* -------------------------------------------------------------------------- */
+#include "io_helper_tools.hh"
+
+#include "aka_common.hh"
+#include "mesh.hh"
+#include "solid_mechanics_model.hh"
+#include "material.hh"
+#include "static_communicator.hh"
+// #include "dof_synchronizer.hh"
+
+/* -------------------------------------------------------------------------- */
+using namespace akantu;
+
+/* ------------------------------------------------------------------------ */
+template <ElementType type>
+static UInt getIOHelperType() { AKANTU_DEBUG_TO_IMPLEMENT(); return -1; };
+
+template <> UInt getIOHelperType<_segment_2>()      { return LINE1; }
+template <> UInt getIOHelperType<_segment_3>()      { return LINE2; }
+template <> UInt getIOHelperType<_triangle_3>()     { return TRIANGLE1; }
+template <> UInt getIOHelperType<_triangle_6>()     { return TRIANGLE2; }
+template <> UInt getIOHelperType<_quadrangle_4>()   { return QUAD1; }
+template <> UInt getIOHelperType<_quadrangle_8>()   { return QUAD2; }
+template <> UInt getIOHelperType<_tetrahedron_4>()  { return TETRA1; }
+template <> UInt getIOHelperType<_tetrahedron_10>() { return TETRA2; }
+template <> UInt getIOHelperType<_hexahedron_8>()   { return HEX1; }
+
+static UInt getIOHelperType(ElementType type) {
+  UInt ioh_type = -1;
+#define GET_IOHELPER_TYPE(type)			\
+  ioh_type = getIOHelperType<type>();
+
+  AKANTU_BOOST_ELEMENT_SWITCH(GET_IOHELPER_TYPE);
+#undef GET_IOHELPER_TYPE
+  return ioh_type;
+}
+
+/* ------------------------------------------------------------------------ */
+void paraviewInit(Dumper & dumper,
+		  const SolidMechanicsModel & model,
+		  const ElementType & type,
+		  const std::string & filename) {
+  const Mesh & mesh = model.getFEM().getMesh();
+  UInt spatial_dimension = mesh.getSpatialDimension(type);
+  UInt nb_nodes   = mesh.getNbNodes();
+  UInt nb_element = mesh.getNbElement(type);
+
+  std::stringstream filename_sstr; filename_sstr << filename << "_" << type;
+
+  UInt whoami = StaticCommunicator::getStaticCommunicator()->whoAmI();
+  UInt nproc  = StaticCommunicator::getStaticCommunicator()->getNbProc();
+
+  dumper.SetMode(TEXT);
+  dumper.SetParallelContext(whoami, nproc);
+
+  dumper.SetPoints(mesh.getNodes().values,
+		   spatial_dimension, nb_nodes, filename_sstr.str().c_str());
+  dumper.SetConnectivity((int *)mesh.getConnectivity(type).values,
+			 getIOHelperType(type), nb_element, C_MODE);
+
+  dumper.AddNodeDataField(model.getDisplacement().values,
+			  spatial_dimension, "displacements");
+  dumper.AddNodeDataField(model.getVelocity().values,
+			  spatial_dimension, "velocity");
+  dumper.AddNodeDataField(model.getAcceleration().values,
+			  spatial_dimension, "acceleration");
+  dumper.AddNodeDataField(model.getMass().values,
+			  spatial_dimension, "mass");
+  dumper.AddNodeDataField(model.getResidual().values,
+			  spatial_dimension, "force");
+  dumper.AddNodeDataField(model.getForce().values,
+			  spatial_dimension, "applied_force");
+
+  dumper.AddElemDataField(model.getMaterial(0).getStrain(type).values,
+			  spatial_dimension*spatial_dimension, "strain");
+  dumper.AddElemDataField(model.getMaterial(0).getStress(type).values,
+			  spatial_dimension*spatial_dimension, "stress");
+
+
+  if(dynamic_cast<const MaterialDamage *>(&model.getMaterial(0))) {
+    const MaterialDamage & mat = dynamic_cast<const MaterialDamage &>(model.getMaterial(0));
+    Real * dam = mat.getDamage(type).storage();
+    dumper.AddElemDataField(dam, 1, "damage");
+  }
+
+  dumper.SetEmbeddedValue("displacements", 1);
+  dumper.SetEmbeddedValue("applied_force", 1);
+
+  dumper.SetPrefix("paraview/");
+
+  dumper.Init();
+  dumper.Dump();
+}
+
+/* ------------------------------------------------------------------------ */
+void paraviewDump(Dumper & dumper) {
+  dumper.Dump();
+}
+
+/* ------------------------------------------------------------------------ */
+/* ------------------------------------------------------------------------ */
+
+// Vector<Real> checkpoint_displacements(0, spatial_dimension);
+// Vector<Real> checkpoint_velocity(0, spatial_dimension);
+// Vector<Real> checkpoint_acceleration(0, spatial_dimension);
+// Vector<Real> checkpoint_force(0, spatial_dimension);
+
+// /* ------------------------------------------------------------------------ */
+// void checkpointInit(Dumper & dumper,
+// 		    const SolidMechanicsModel & model,
+// 		    const ElementType & type,
+// 		    const std::string & filename) {
+//   UInt whoami = StaticCommunicator::getStaticCommunicator()->whoAmI();
+//   UInt nproc  = StaticCommunicator::getStaticCommunicator()->getNbProc();
+
+//   Vector<Real> & displacements = model.getDisplacement();
+//   Vector<Real> & velocity      = model.getVelocity();
+//   Vector<Real> & acceleration  = model.getAcceleration();
+//   Vector<Real> & force         = model.getForce();
+
+//   DOFSynchronizer & dof_synchronizer = const_cast<DOFSynchronizer &>(model.getDOFSynchronizer());
+//   dof_synchronizer.initScatterGatherCommunicationScheme();
+
+//   if(whoami == 0){
+//     const Mesh & mesh = model.getFEM().getMesh();
+//     UInt nb_nodes   = mesh.getNbGlobalNodes();
+
+//     checkpoint_displacements.resize(nb_nodes);
+//     checkpoint_velocity	    .resize(nb_nodes);
+//     checkpoint_acceleration .resize(nb_nodes);
+//     checkpoint_force        .resize(nb_nodes);
+
+//     dof_synchronizer.gather(displacements, 0, &checkpoint_displacements);
+//     dof_synchronizer.gather(velocity     , 0, &checkpoint_velocity     );
+//     dof_synchronizer.gather(acceleration , 0, &checkpoint_acceleration );
+//     dof_synchronizer.gather(force        , 0, &checkpoint_force        );
+
+//     UInt nb_element = mesh.getNbElement(type);
+//     UInt spatial_dimension = mesh.getSpatialDimension(type);
+
+//     std::stringstream filename_sstr; filename_sstr << filename << "_" << type;
+
+//     dumper.SetMode(COMPRESSED);
+//     dumper.SetParallelContext(whoami, nproc);
+
+//     dumper.SetPoints(mesh.getNodes().values,
+// 		     spatial_dimension, nb_nodes, filename_sstr.str().c_str());
+//     dumper.SetConnectivity((int *)mesh.getConnectivity(type).values,
+// 			   getIOHelperType(type), nb_element, C_MODE);
+
+//     dumper.AddNodeDataField(checkpoint_displacements.storage(), spatial_dimension, "displacements");
+//     dumper.AddNodeDataField(checkpoint_velocity     .storage(), spatial_dimension, "velocity");
+//     dumper.AddNodeDataField(checkpoint_acceleration .storage(), spatial_dimension, "acceleration");
+//     dumper.AddNodeDataField(checkpoint_force        .storage(), spatial_dimension, "applied_force");
+//     dumper.SetPrefix("restart/");
+
+//     dumper.Init();
+//     dumper.Dump();
+//   } else {
+//     dof_synchronizer.gather(displacements, 0);
+//     dof_synchronizer.gather(velocity     , 0);
+//     dof_synchronizer.gather(acceleration , 0);
+//     dof_synchronizer.gather(force        , 0);
+//   }
+// }
+
+// /* ------------------------------------------------------------------------ */
+// void checkpoint(Dumper & dumper,
+// 		const SolidMechanicsModel & model) {
+//   UInt whoami = StaticCommunicator::getStaticCommunicator()->whoAmI();
+
+//   DOFSynchronizer & dof_synchronizer = const_cast<DOFSynchronizer &>(model.getDOFSynchronizer());
+//   Vector<Real> & displacements = model.getDisplacement();
+//   Vector<Real> & velocity      = model.getVelocity();
+//   Vector<Real> & acceleration  = model.getAcceleration();
+//   Vector<Real> & force         = model.getForce();
+
+//   if(whoami == 0){
+//     dof_synchronizer.gather(displacements, 0, &checkpoint_displacements);
+//     dof_synchronizer.gather(velocity     , 0, &checkpoint_velocity     );
+//     dof_synchronizer.gather(acceleration , 0, &checkpoint_acceleration );
+//     dof_synchronizer.gather(force        , 0, &checkpoint_force        );
+
+//     dumper.Dump();
+//   } else {
+//     dof_synchronizer.gather(displacements, 0);
+//     dof_synchronizer.gather(velocity     , 0);
+//     dof_synchronizer.gather(acceleration , 0);
+//     dof_synchronizer.gather(force        , 0);
+//   }
+// }
+
+// /* ------------------------------------------------------------------------ */
+// /* ------------------------------------------------------------------------ */
+
+// void restart(const SolidMechanicsModel & model,
+// 	     const ElementType & type,
+// 	     const std::string & filename) {
+//   UInt whoami = StaticCommunicator::getStaticCommunicator()->whoAmI();
+//   UInt nproc  = StaticCommunicator::getStaticCommunicator()->getNbProc();
+
+//   DOFSynchronizer & dof_synchronizer = const_cast<DOFSynchronizer &>(model.getDOFSynchronizer());
+//   dof_synchronizer.initScatterGatherCommunicationScheme();
+
+//   Vector<Real> & displacements = model.getDisplacement();
+//   Vector<Real> & velocity      = model.getVelocity();
+//   Vector<Real> & acceleration  = model.getAcceleration();
+//   Vector<Real> & force         = model.getForce();
+
+//   if(whoami == 0){
+//     const Mesh & mesh = model.getFEM().getMesh();
+//     UInt nb_nodes   = mesh.getNbGlobalNodes();
+//     UInt spatial_dimension = mesh.getSpatialDimension(type);
+
+//     std::stringstream filename_sstr; filename_sstr << filename << "_" << type;
+
+//     ReaderRestart reader;
+
+//     reader.SetMode(COMPRESSED);
+//     reader.SetParallelContext(whoami, nproc);
+
+//     reader.SetPoints(filename_sstr.str().c_str());
+//     reader.SetConnectivity(getIOHelperType(type));
+
+//     reader.AddNodeDataField("displacements");
+//     reader.AddNodeDataField("velocity");
+//     reader.AddNodeDataField("acceleration");
+//     reader.AddNodeDataField("applied_force");
+//     reader.SetPrefix("restart/");
+
+//     reader.Init();
+//     reader.Read();
+
+//     Vector<Real> restart_tmp_vect(nb_nodes, spatial_dimension);
+
+//     displacements.clear();
+//     velocity.clear();
+//     acceleration.clear();
+//     force.clear();
+
+//     Real * tmp = reader.GetNodeDataField("displacements");
+//     std::copy(tmp, tmp + nb_nodes * spatial_dimension, restart_tmp_vect.storage());
+//     dof_synchronizer.scatter(displacements, 0, &restart_tmp_vect);
+
+//     tmp = reader.GetNodeDataField("velocity");
+//     std::copy(tmp, tmp + nb_nodes * spatial_dimension, restart_tmp_vect.storage());
+//     dof_synchronizer.scatter(velocity     , 0, &restart_tmp_vect);
+
+//     tmp = reader.GetNodeDataField("acceleration");
+//     std::copy(tmp, tmp + nb_nodes * spatial_dimension, restart_tmp_vect.storage());
+//     dof_synchronizer.scatter(acceleration , 0, &restart_tmp_vect);
+
+//     tmp = reader.GetNodeDataField("applied_force");
+//     std::copy(tmp, tmp + nb_nodes * spatial_dimension, restart_tmp_vect.storage());
+//     dof_synchronizer.scatter(force        , 0, &restart_tmp_vect);
+//   } else {
+//     displacements.clear();
+//     velocity.clear();
+//     acceleration.clear();
+//     force.clear();
+//     dof_synchronizer.scatter(displacements, 0);
+//     dof_synchronizer.scatter(velocity     , 0);
+//     dof_synchronizer.scatter(acceleration , 0);
+//     dof_synchronizer.scatter(force        , 0);
+//   }
+// }
+/* ------------------------------------------------------------------------ */
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/io_helper_tools.hh b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/io_helper_tools.hh
new file mode 100644
index 000000000..f9098b366
--- /dev/null
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/io_helper_tools.hh
@@ -0,0 +1,53 @@
+/**
+ * @file   io_helper_tools.hh
+ * @author Nicolas Richart <nicolas.richart@epfl.ch>
+ * @date   Fri Sep 30 11:15:18 2011
+ *
+ * @brief  
+ *
+ * @section LICENSE
+ *
+ * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne)
+ * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
+ *
+ * Akantu is free  software: you can redistribute it and/or  modify it under the
+ * terms  of the  GNU Lesser  General Public  License as  published by  the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+ * A  PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
+ * details.
+ *
+ * You should  have received  a copy  of the GNU  Lesser General  Public License
+ * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+/* -------------------------------------------------------------------------- */
+#include "aka_common.hh"
+#include "solid_mechanics_model.hh"
+#include "io_helper.h"
+
+extern const akantu::UInt spatial_dimension;
+
+/* ------------------------------------------------------------------------ */
+void paraviewInit(Dumper & dumper,
+		  const akantu::SolidMechanicsModel & model,
+		  const akantu::ElementType & type,
+		  const std::string & filename);
+
+void paraviewDump(Dumper & dumper);
+
+// void checkpointInit(Dumper & dumper,
+// 		    const akantu::SolidMechanicsModel & model,
+// 		    const akantu::ElementType & type,
+// 		    const std::string & filename);
+
+// void checkpoint(Dumper & dumper,
+// 		const akantu::SolidMechanicsModel & model);
+
+// void restart(const akantu::SolidMechanicsModel & model,
+// 	     const akantu::ElementType & type,
+// 	     const std::string & filename);
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/squares.geo b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/squares.geo
index feb5911ab..edc93e21d 100644
--- a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/squares.geo
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/squares.geo
@@ -1,38 +1,46 @@
 // Element size
-h = 0.05;
-h1 = 0.2;  
+h = 0.2;
+h1 = 0.1;  
 
 // Dimension of square
 L = 1;
+L1 = L/4.;
 
 // ------------------------------------------
 // Geometry
 // ------------------------------------------
 
 // Points
-Point(1) = {0.8*L, 0, 0, h};
-Point(2) = {L, 0, 0, h};
-Point(3) = {L, L, 0, h};
-Point(4) = {0.8*L, L, 0, h};
+Point(1) = {0, 0, 0, h};
+Point(2) = {L/2, 0, 0, h};
+Point(3) = {L/2, L, 0, h};
+Point(4) = {0, L, 0, h};
 
-Point(5) = {1.01*L, 2*L/5, 0, h1};
-Point(6) = {1.25*L, 2*L/5, 0, h1};
-Point(7) = {1.25*L, 3*L/5, 0, h1};
-Point(8) = {1.01*L, 3*L/5, 0, h1};
+Point(5) = {1.01*L/2,    L/2-L1/2, 0, h1};
+Point(6) = {1.01*L/2+L1, L/2-L1/2, 0, h1};
+Point(7) = {1.01*L/2+L1, L/2+L1/2, 0, h1};
+Point(8) = {1.01*L/2,    L/2+L1/2, 0, h1};
 
 // Lines
 Line(1) = {4, 1};
 Line(2) = {1, 2};
 Line(3) = {2, 3};
 Line(4) = {3, 4};
 
 Line(5) = {8, 5};
 Line(6) = {5, 6};
 Line(7) = {6, 7};
 Line(8) = {7, 8};
 
 // Geometric and Physical Surface
-Line Loop(1) = {1, 2, 3, 4};
-Line Loop(2) = {5, 6, 7, 8};
-Plane Surface(1) = {1};
-Plane Surface(2) = {2};
+Line Loop(9) = {1, 2, 3, 4};
+Plane Surface(9) = {9};
+
+//Transfinite Surface {9};
+//Recombine Surface {9};
+
+Line Loop(10) = {5, 6, 7, 8};
+Plane Surface(10) = {10};
+
+//Transfinite Surface {10};
+//Recombine Surface {10};
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit.cc
similarity index 63%
copy from test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc
copy to test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit.cc
index 79900a2d2..22bde571b 100644
--- a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit.cc
@@ -1,216 +1,219 @@
 /**
- * @file   test_contact_search_explicit_tetrahedron_4.cc
+ * @file   test_contact_search_explicit.cc
  * @author David Kammer <david.kammer@epfl.ch>
- * @date   Fri Dec 03 12:11:42 2010
+ * @date   Fri Oct  7 16:15:48 2011
  *
- * @brief  test contact_search_explicit for 3d case with tetrahedron_4 elements
+ * @brief  test contact search for all types
  *
  * @section LICENSE
  *
  * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as  published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A  PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 
 #include "aka_common.hh"
 #include "mesh.hh"
 #include "mesh_io.hh"
 #include "mesh_io_msh.hh"
 #include "mesh_utils.hh"
 #include "solid_mechanics_model.hh"
 #include "material.hh"
 #include "contact.hh"
 #include "contact_rigid.hh"
 #include "contact_neighbor_structure.hh"
 #include "regular_grid_neighbor_structure.hh"
 #include "contact_search.hh"
 #include "contact_search_explicit.hh"
 
 #ifdef AKANTU_USE_IOHELPER
-#  include "io_helper.h"
+#  include "io_helper_tools.hh"
 #endif //AKANTU_USE_IOHELPER
 
 using namespace akantu;
 
 int main(int argc, char *argv[])
 {
   akantu::initialize(&argc, &argv);
+  debug::setDebugLevel(dblWarning);
 
-  UInt dim = 3;
-  //const ElementType element_type = _tetrahedron_4;
+  const ElementType element_type = TYPE;
+  UInt dim = Mesh::getSpatialDimension(element_type);
 
   /// load mesh
   Mesh my_mesh(dim);
   MeshIOMSH mesh_io;
-  mesh_io.read("cubes.msh", my_mesh);
+  std::stringstream meshname_sstr; 
+  meshname_sstr << element_type << ".msh";
+  mesh_io.read(meshname_sstr.str().c_str(), my_mesh);
 
   /// build facet connectivity and surface id
   MeshUtils::buildFacets(my_mesh,1,0);
   MeshUtils::buildSurfaceID(my_mesh);
 
-  UInt max_steps = 2; 
+  UInt max_steps = 3; 
   unsigned int nb_nodes = my_mesh.getNbNodes();
 
-  /// dump facet and surface information to paraview
-#ifdef AKANTU_USE_IOHELPER
-  DumperParaview dumper;
-  dumper.SetMode(TEXT);
-  
-  dumper.SetPoints(my_mesh.getNodes().values, dim, nb_nodes, "tetrahedron_4_nodes_test-surface-extraction");
-  dumper.SetConnectivity((int*)my_mesh.getConnectivity(_tetrahedron_4).values,
-   			 TETRA1, my_mesh.getNbElement(_tetrahedron_4), C_MODE);
-  dumper.SetPrefix("paraview/");
-  dumper.Init();
-  dumper.Dump();
-#endif //AKANTU_USE_IOHELPER
-
   /// declaration of model
   SolidMechanicsModel  my_model(my_mesh);
   /// model initialization
   my_model.initVectors();
-  // initialize the vectors
-  memset(my_model.getForce().values,        0, dim*nb_nodes*sizeof(Real));
-  memset(my_model.getVelocity().values,     0, dim*nb_nodes*sizeof(Real));
-  memset(my_model.getAcceleration().values, 0, dim*nb_nodes*sizeof(Real));
-  memset(my_model.getDisplacement().values, 0, dim*nb_nodes*sizeof(Real));
+  my_model.getForce().clear();
+  my_model.getVelocity().clear();
+  my_model.getAcceleration().clear();
+  my_model.getDisplacement().clear();
 
   Real * displacement = my_model.getDisplacement().values;
 
-  my_model.initExplicit();  
+  my_model.initExplicit();
   my_model.initModel();  
   my_model.readMaterials("material.dat");
   my_model.initMaterials();
 
+  /// dump facet and surface information to paraview
+#ifdef AKANTU_USE_IOHELPER
+  DumperParaview dumper;
+  paraviewInit(dumper, my_model, element_type, "para");
+#endif //AKANTU_USE_IOHELPER
+
   Real time_step = my_model.getStableTimeStep();
   my_model.setTimeStep(time_step/10.);
-
   my_model.assembleMassLumped();
 
    /// contact declaration
   Contact * contact = Contact::newContact(my_model, 
 					  _ct_rigid, 
 					  _cst_expli, 
 					  _cnst_regular_grid);
 
   ContactRigid * my_contact = dynamic_cast<ContactRigid *>(contact);
 
   my_contact->initContact(false);
 
   Surface master = 0;
   Surface impactor = 1;
-  
   my_contact->addMasterSurface(master);
   my_contact->addImpactorSurfaceToMasterSurface(impactor, master);
-
+  
   my_model.updateCurrentPosition(); // neighbor structure uses current position for init
   my_contact->initNeighborStructure(master);
 
+  /// define output file for testing
+  std::stringstream filename_sstr; 
+  filename_sstr << "test_contact_search_explicit_" << element_type << ".out";
+  std::ofstream test_output;
+  test_output.open(filename_sstr.str().c_str());
+
+  /*
   const NodesNeighborList & my_neighbor_list = dynamic_cast<const NodesNeighborList &>(my_contact->getContactSearch().getContactNeighborStructure(master).getNeighborList());
 
   UInt nb_nodes_neigh = my_neighbor_list.impactor_nodes.getSize();
   Vector<UInt> impact_nodes = my_neighbor_list.impactor_nodes;
   UInt * impact_nodes_val = impact_nodes.values;
+  UInt * master_nodes_offset_val = my_neighbor_list.master_nodes_offset.values;
+  UInt * master_nodes_val = my_neighbor_list.master_nodes.values;
 
   /// print impactor nodes
-  std::cout << "we have " << nb_nodes_neigh << " impactor nodes:";
+  test_output << "we have " << nb_nodes_neigh << " impactor nodes:";
   for (UInt i = 0; i < nb_nodes_neigh; ++i) {
-    std::cout << " " << impact_nodes_val[i];
+    test_output << " " << impact_nodes_val[i];
   }
-  std::cout << std::endl;
-
-  UInt * master_nodes_offset_val = my_neighbor_list.master_nodes_offset.values;
-  UInt * master_nodes_val = my_neighbor_list.master_nodes.values;
+  test_output << std::endl;
   
   for (UInt i = 0; i < nb_nodes_neigh; ++i) {
-    std::cout << " Impactor node: " << impact_nodes_val[i] << " has master nodes:";
+    test_output << " Impactor node: " << impact_nodes_val[i] << " has master nodes:";
     for(UInt mn = master_nodes_offset_val[i]; mn < master_nodes_offset_val[i+1]; ++mn) {
-      std::cout << " " << master_nodes_val[mn];
+      test_output << " " << master_nodes_val[mn];
     }
-    std::cout << std::endl;
+    test_output << std::endl;
   }
+  */
 
   my_contact->initSearch(); // does nothing so far
   
-  std::cout << std::endl << "epsilon = " << std::numeric_limits<Real>::epsilon() << std::endl;
-
   /* ------------------------------------------------------------------------ */
   /* Main loop                                                                */
   /* ------------------------------------------------------------------------ */
   for(UInt s = 1; s <= max_steps; ++s) {
 
-    std::cout << std::endl << "passing step " << s << "/" << max_steps << std::endl;
+    test_output << std::endl << "passing step " << s << "/" << max_steps << std::endl;
 
     /// apply a displacement to the slave body
     if(s == 2) {
       Real * coord = my_mesh.getNodes().values;
       for(UInt n = 0; n < nb_nodes; ++n) {
-	if(coord[n*dim + 2] > 1.0) {
-	  displacement[n*dim+2] = -0.01;
+	if(coord[n*dim + 0] > 0.5) {
+	  displacement[n*dim+0] = -0.02;
 	}
       }
-      /*
-      UInt nb_elements = my_mesh.getNbElement(element_type);
-      UInt nb_nodes_element = my_mesh.getNbNodesPerElement(element_type);
-      Vector<UInt> element_mat = my_model.getElementMaterial(element_type);
-      UInt * element_mat_val = element_mat.values;
-      UInt * connectivity = my_mesh.getConnectivity(element_type).values;
-      for(UInt el = 0; el < nb_elements; ++el) {
-	std::cout << "element: " << el << " with mat: " <<  element_mat_val[el] << std::endl;
-	if(element_mat_val[el] == impactor) {
-	  for(UInt n = 0; n < nb_nodes_element; ++n) {
-	    displacement[connectivity[el * nb_nodes_element + n]+2] = -0.2;
-	  }
-	}
-	}*/
     }
 
-    /// central difference predictor
+    /// integration
     my_model.explicitPred();
-
-    /// update current positions
     my_model.initializeUpdateResidualData();
 
     /// compute the penetration list
-    PenetrationList * my_penetration_list = new PenetrationList("penetration_list");
+    test_output << "Before solveContact" << std::endl;
+    PenetrationList * my_penetration_list = new PenetrationList("penetration_list_1");
     const_cast<ContactSearch &>(my_contact->getContactSearch()).findPenetration(master, *my_penetration_list);
 
     UInt nb_nodes_pen = my_penetration_list->penetrating_nodes.getSize();
     Vector<UInt> pen_nodes = my_penetration_list->penetrating_nodes;
     UInt * pen_nodes_val = pen_nodes.values;
-    std::cout << "we have " << nb_nodes_pen << " penetrating nodes:";
-    for (UInt i = 0; i < nb_nodes_pen; ++i)
-      std::cout << " " << pen_nodes_val[i];
-    std::cout << std::endl;
+    test_output << "we have " << nb_nodes_pen << " penetrating nodes:" << std::endl;
+    for (UInt i = 0; i < nb_nodes_pen; ++i) {
+      test_output << "node " << pen_nodes_val[i] << " with disp:";
+      for (UInt j=0; j<dim; ++j)
+	test_output << " " << std::setprecision(10) << displacement[pen_nodes_val[i]*dim+j];
+      test_output << std::endl;
+    }
+    test_output << std::endl;
     delete my_penetration_list;
 
-    /// compute the residual
+    /// solve contact
+    my_contact->solveContact();
+
+    /// compute the penetration list
+    test_output << "After solveContact" << std::endl;
+    PenetrationList * my_penetration_list_2 = new PenetrationList("penetration_list_2");
+    const_cast<ContactSearch &>(my_contact->getContactSearch()).findPenetration(master, *my_penetration_list_2);
+
+    UInt nb_nodes_pen_2 = my_penetration_list_2->penetrating_nodes.getSize();
+    Vector<UInt> pen_nodes_2 = my_penetration_list_2->penetrating_nodes;
+    UInt * pen_nodes_2_val = pen_nodes_2.values;
+    test_output << "we have " << nb_nodes_pen_2 << " penetrating nodes:";
+    for (UInt i = 0; i < nb_nodes_pen_2; ++i)
+      test_output << " " << pen_nodes_2_val[i];
+    test_output << std::endl;
+    delete my_penetration_list_2;
+
+    /// further integration
     my_model.updateResidual(false);
-    
-    /// compute the acceleration
+    my_contact->avoidAdhesion();
     my_model.updateAcceleration();
-
-    /// central difference corrector
     my_model.explicitCorr();
+
+#ifdef AKANTU_USE_IOHELPER
+    paraviewDump(dumper);
+#endif //AKANTU_USE_IOHELPER
   }
 
   delete my_contact;
-  
   finalize();
-
   return EXIT_SUCCESS;
 }
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc
index 79900a2d2..d4ab7dd92 100644
--- a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_tetrahedron_4.cc
@@ -1,216 +1,203 @@
 /**
  * @file   test_contact_search_explicit_tetrahedron_4.cc
  * @author David Kammer <david.kammer@epfl.ch>
  * @date   Fri Dec 03 12:11:42 2010
  *
  * @brief  test contact_search_explicit for 3d case with tetrahedron_4 elements
  *
  * @section LICENSE
  *
  * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as  published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A  PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 
 #include "aka_common.hh"
 #include "mesh.hh"
 #include "mesh_io.hh"
 #include "mesh_io_msh.hh"
 #include "mesh_utils.hh"
 #include "solid_mechanics_model.hh"
 #include "material.hh"
 #include "contact.hh"
 #include "contact_rigid.hh"
 #include "contact_neighbor_structure.hh"
 #include "regular_grid_neighbor_structure.hh"
 #include "contact_search.hh"
 #include "contact_search_explicit.hh"
 
 #ifdef AKANTU_USE_IOHELPER
 #  include "io_helper.h"
 #endif //AKANTU_USE_IOHELPER
 
 using namespace akantu;
 
 int main(int argc, char *argv[])
 {
   akantu::initialize(&argc, &argv);
 
   UInt dim = 3;
   //const ElementType element_type = _tetrahedron_4;
 
   /// load mesh
   Mesh my_mesh(dim);
   MeshIOMSH mesh_io;
   mesh_io.read("cubes.msh", my_mesh);
 
   /// build facet connectivity and surface id
   MeshUtils::buildFacets(my_mesh,1,0);
   MeshUtils::buildSurfaceID(my_mesh);
 
   UInt max_steps = 2; 
   unsigned int nb_nodes = my_mesh.getNbNodes();
 
   /// dump facet and surface information to paraview
 #ifdef AKANTU_USE_IOHELPER
   DumperParaview dumper;
   dumper.SetMode(TEXT);
   
   dumper.SetPoints(my_mesh.getNodes().values, dim, nb_nodes, "tetrahedron_4_nodes_test-surface-extraction");
   dumper.SetConnectivity((int*)my_mesh.getConnectivity(_tetrahedron_4).values,
    			 TETRA1, my_mesh.getNbElement(_tetrahedron_4), C_MODE);
   dumper.SetPrefix("paraview/");
   dumper.Init();
   dumper.Dump();
 #endif //AKANTU_USE_IOHELPER
 
   /// declaration of model
   SolidMechanicsModel  my_model(my_mesh);
   /// model initialization
   my_model.initVectors();
   // initialize the vectors
   memset(my_model.getForce().values,        0, dim*nb_nodes*sizeof(Real));
   memset(my_model.getVelocity().values,     0, dim*nb_nodes*sizeof(Real));
   memset(my_model.getAcceleration().values, 0, dim*nb_nodes*sizeof(Real));
   memset(my_model.getDisplacement().values, 0, dim*nb_nodes*sizeof(Real));
 
   Real * displacement = my_model.getDisplacement().values;
 
   my_model.initExplicit();  
   my_model.initModel();  
   my_model.readMaterials("material.dat");
   my_model.initMaterials();
 
   Real time_step = my_model.getStableTimeStep();
   my_model.setTimeStep(time_step/10.);
 
   my_model.assembleMassLumped();
 
    /// contact declaration
   Contact * contact = Contact::newContact(my_model, 
 					  _ct_rigid, 
 					  _cst_expli, 
 					  _cnst_regular_grid);
 
   ContactRigid * my_contact = dynamic_cast<ContactRigid *>(contact);
 
   my_contact->initContact(false);
 
   Surface master = 0;
   Surface impactor = 1;
   
   my_contact->addMasterSurface(master);
   my_contact->addImpactorSurfaceToMasterSurface(impactor, master);
 
   my_model.updateCurrentPosition(); // neighbor structure uses current position for init
   my_contact->initNeighborStructure(master);
 
   const NodesNeighborList & my_neighbor_list = dynamic_cast<const NodesNeighborList &>(my_contact->getContactSearch().getContactNeighborStructure(master).getNeighborList());
 
   UInt nb_nodes_neigh = my_neighbor_list.impactor_nodes.getSize();
   Vector<UInt> impact_nodes = my_neighbor_list.impactor_nodes;
   UInt * impact_nodes_val = impact_nodes.values;
 
+  /// define output file for testing
+  std::ofstream test_output;
+  test_output.open("test_contact_search_explicit_tetrahedron_4.out");
+
   /// print impactor nodes
-  std::cout << "we have " << nb_nodes_neigh << " impactor nodes:";
+  test_output << "we have " << nb_nodes_neigh << " impactor nodes:";
   for (UInt i = 0; i < nb_nodes_neigh; ++i) {
-    std::cout << " " << impact_nodes_val[i];
+    test_output << " " << impact_nodes_val[i];
   }
-  std::cout << std::endl;
+  test_output << std::endl;
 
   UInt * master_nodes_offset_val = my_neighbor_list.master_nodes_offset.values;
   UInt * master_nodes_val = my_neighbor_list.master_nodes.values;
   
   for (UInt i = 0; i < nb_nodes_neigh; ++i) {
-    std::cout << " Impactor node: " << impact_nodes_val[i] << " has master nodes:";
+    test_output << " Impactor node: " << impact_nodes_val[i] << " has master nodes:";
     for(UInt mn = master_nodes_offset_val[i]; mn < master_nodes_offset_val[i+1]; ++mn) {
-      std::cout << " " << master_nodes_val[mn];
+      test_output << " " << master_nodes_val[mn];
     }
-    std::cout << std::endl;
+    test_output << std::endl;
   }
 
   my_contact->initSearch(); // does nothing so far
   
   std::cout << std::endl << "epsilon = " << std::numeric_limits<Real>::epsilon() << std::endl;
 
   /* ------------------------------------------------------------------------ */
   /* Main loop                                                                */
   /* ------------------------------------------------------------------------ */
   for(UInt s = 1; s <= max_steps; ++s) {
 
-    std::cout << std::endl << "passing step " << s << "/" << max_steps << std::endl;
+    test_output << std::endl << "passing step " << s << "/" << max_steps << std::endl;
 
     /// apply a displacement to the slave body
     if(s == 2) {
       Real * coord = my_mesh.getNodes().values;
       for(UInt n = 0; n < nb_nodes; ++n) {
 	if(coord[n*dim + 2] > 1.0) {
 	  displacement[n*dim+2] = -0.01;
 	}
       }
-      /*
-      UInt nb_elements = my_mesh.getNbElement(element_type);
-      UInt nb_nodes_element = my_mesh.getNbNodesPerElement(element_type);
-      Vector<UInt> element_mat = my_model.getElementMaterial(element_type);
-      UInt * element_mat_val = element_mat.values;
-      UInt * connectivity = my_mesh.getConnectivity(element_type).values;
-      for(UInt el = 0; el < nb_elements; ++el) {
-	std::cout << "element: " << el << " with mat: " <<  element_mat_val[el] << std::endl;
-	if(element_mat_val[el] == impactor) {
-	  for(UInt n = 0; n < nb_nodes_element; ++n) {
-	    displacement[connectivity[el * nb_nodes_element + n]+2] = -0.2;
-	  }
-	}
-	}*/
     }
 
     /// central difference predictor
     my_model.explicitPred();
-
     /// update current positions
     my_model.initializeUpdateResidualData();
 
     /// compute the penetration list
     PenetrationList * my_penetration_list = new PenetrationList("penetration_list");
     const_cast<ContactSearch &>(my_contact->getContactSearch()).findPenetration(master, *my_penetration_list);
 
     UInt nb_nodes_pen = my_penetration_list->penetrating_nodes.getSize();
     Vector<UInt> pen_nodes = my_penetration_list->penetrating_nodes;
     UInt * pen_nodes_val = pen_nodes.values;
-    std::cout << "we have " << nb_nodes_pen << " penetrating nodes:";
+    test_output << "we have " << nb_nodes_pen << " penetrating nodes:";
     for (UInt i = 0; i < nb_nodes_pen; ++i)
-      std::cout << " " << pen_nodes_val[i];
-    std::cout << std::endl;
+      test_output << " " << pen_nodes_val[i];
+    test_output << std::endl;
     delete my_penetration_list;
 
     /// compute the residual
     my_model.updateResidual(false);
-    
     /// compute the acceleration
     my_model.updateAcceleration();
-
     /// central difference corrector
     my_model.explicitCorr();
   }
 
   delete my_contact;
   
   finalize();
 
   return EXIT_SUCCESS;
 }
diff --git a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_triangle_3.cc b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_triangle_3.cc
index a0339862a..8c9251996 100644
--- a/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_triangle_3.cc
+++ b/test/test_model/test_solid_mechanics_model/test_contact/test_contact_search/test_contact_search_explicit/test_contact_search_explicit_triangle_3.cc
@@ -1,216 +1,202 @@
 /**
  * @file   test_contact_search_explicit_triangle_3.cc
  * @author David Kammer <david.kammer@epfl.ch>
  * @date   Mon Jan 17 11:13:42 2011
  *
  * @brief  test contact search explicit for 2d case with triangle_3 elements
  *
  * @section LICENSE
  *
  * Copyright (©) 2010-2011 EPFL (Ecole Polytechnique Fédérale de Lausanne)
  * Laboratory (LSMS - Laboratoire de Simulation en Mécanique des Solides)
  *
  * Akantu is free  software: you can redistribute it and/or  modify it under the
  * terms  of the  GNU Lesser  General Public  License as  published by  the Free
  * Software Foundation, either version 3 of the License, or (at your option) any
  * later version.
  *
  * Akantu is  distributed in the  hope that it  will be useful, but  WITHOUT ANY
  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
  * A  PARTICULAR PURPOSE. See  the GNU  Lesser General  Public License  for more
  * details.
  *
  * You should  have received  a copy  of the GNU  Lesser General  Public License
  * along with Akantu. If not, see <http://www.gnu.org/licenses/>.
  *
  */
 
 /* -------------------------------------------------------------------------- */
 
 #include "aka_common.hh"
 #include "mesh.hh"
 #include "mesh_io.hh"
 #include "mesh_io_msh.hh"
 #include "mesh_utils.hh"
 #include "solid_mechanics_model.hh"
 #include "material.hh"
 #include "contact.hh"
 #include "contact_rigid.hh"
 #include "contact_neighbor_structure.hh"
 #include "regular_grid_neighbor_structure.hh"
 #include "contact_search.hh"
 #include "contact_search_explicit.hh"
 
 #ifdef AKANTU_USE_IOHELPER
 #  include "io_helper.h"
 #endif //AKANTU_USE_IOHELPER
 
 using namespace akantu;
 
 int main(int argc, char *argv[])
 {
   akantu::initialize(&argc, &argv);
 
   UInt dim = 2;
   const ElementType element_type = _triangle_3;
 
   /// load mesh
   Mesh my_mesh(dim);
   MeshIOMSH mesh_io;
   mesh_io.read("squares.msh", my_mesh);
 
   /// build facet connectivity and surface id
   MeshUtils::buildFacets(my_mesh,1,0);
   MeshUtils::buildSurfaceID(my_mesh);
 
   UInt max_steps = 2;
   unsigned int nb_nodes = my_mesh.getNbNodes();
 
   /// dump facet and surface information to paraview
 #ifdef AKANTU_USE_IOHELPER
   DumperParaview dumper;
   dumper.SetMode(TEXT);
 
   dumper.SetPoints(my_mesh.getNodes().values, dim, nb_nodes, "triangle_3_nodes_test");
   dumper.SetConnectivity((int*)my_mesh.getConnectivity(element_type).values,
    			 TRIANGLE1, my_mesh.getNbElement(element_type), C_MODE);
   dumper.SetPrefix("paraview/");
   dumper.Init();
   dumper.Dump();
 #endif //AKANTU_USE_IOHELPER
 
   /// declaration of model
   SolidMechanicsModel  my_model(my_mesh);
   /// model initialization
   my_model.initVectors();
   // initialize the vectors
   memset(my_model.getForce().values,        0, dim*nb_nodes*sizeof(Real));
   memset(my_model.getVelocity().values,     0, dim*nb_nodes*sizeof(Real));
   memset(my_model.getAcceleration().values, 0, dim*nb_nodes*sizeof(Real));
   memset(my_model.getDisplacement().values, 0, dim*nb_nodes*sizeof(Real));
 
   Real * displacement = my_model.getDisplacement().values;
 
   my_model.initExplicit();
   my_model.initModel();
   my_model.readMaterials("material.dat");
   my_model.initMaterials();
 
   Real time_step = my_model.getStableTimeStep();
   my_model.setTimeStep(time_step/10.);
 
   my_model.assembleMassLumped();
 
    /// contact declaration
   Contact * contact = Contact::newContact(my_model,
 					     _ct_rigid,
 					     _cst_expli,
 					     _cnst_regular_grid);
 
   ContactRigid * my_contact = dynamic_cast<ContactRigid *>(contact);
 
   my_contact->initContact(false);
 
   Surface master = 0;
   Surface impactor = 1;
   my_contact->addMasterSurface(master);
   my_contact->addImpactorSurfaceToMasterSurface(impactor, master);
 
-
   my_model.updateCurrentPosition(); // neighbor structure uses current position for init
   my_contact->initNeighborStructure(master);
 
   const NodesNeighborList & my_neighbor_list = dynamic_cast<const NodesNeighborList &>(my_contact->getContactSearch().getContactNeighborStructure(master).getNeighborList());
 
   UInt nb_nodes_neigh = my_neighbor_list.impactor_nodes.getSize();
   Vector<UInt> impact_nodes = my_neighbor_list.impactor_nodes;
   UInt * impact_nodes_val = impact_nodes.values;
 
+  /// define output file for testing
+  std::ofstream test_output;
+  test_output.open("test_contact_search_explicit_triangle_3.out");
+
   /// print impactor nodes
-  std::cout << "we have " << nb_nodes_neigh << " impactor nodes:";
+  test_output << "we have " << nb_nodes_neigh << " impactor nodes:";
   for (UInt i = 0; i < nb_nodes_neigh; ++i) {
-    std::cout << " " << impact_nodes_val[i];
+    test_output << " " << impact_nodes_val[i];
   }
-  std::cout << std::endl;
+  test_output << std::endl;
 
   UInt * master_nodes_offset_val = my_neighbor_list.master_nodes_offset.values;
   UInt * master_nodes_val = my_neighbor_list.master_nodes.values;
 
   for (UInt i = 0; i < nb_nodes_neigh; ++i) {
-    std::cout << " Impactor node: " << impact_nodes_val[i] << " has master nodes:";
+    test_output << " Impactor node: " << impact_nodes_val[i] << " has master nodes:";
     for(UInt mn = master_nodes_offset_val[i]; mn < master_nodes_offset_val[i+1]; ++mn) {
-      std::cout << " " << master_nodes_val[mn];
+      test_output << " " << master_nodes_val[mn];
     }
-    std::cout << std::endl;
+    test_output << std::endl;
   }
 
   my_contact->initSearch(); // does nothing so far
 
   std::cout << std::endl << "epsilon = " << std::numeric_limits<Real>::epsilon() << std::endl;
 
   /* ------------------------------------------------------------------------ */
   /* Main loop                                                                */
   /* ------------------------------------------------------------------------ */
   for(UInt s = 1; s <= max_steps; ++s) {
 
-    std::cout << std::endl << "passing step " << s << "/" << max_steps << std::endl;
+    test_output << std::endl << "passing step " << s << "/" << max_steps << std::endl;
 
     /// apply a displacement to the slave body
     if(s == 2) {
       Real * coord = my_mesh.getNodes().values;
       for(UInt n = 0; n < nb_nodes; ++n) {
 	if(coord[n*dim + 0] > 1.0) {
 	  displacement[n*dim+0] = -0.02;
 	}
       }
-      /*
-      UInt nb_elements = my_mesh.getNbElement(element_type);
-      UInt nb_nodes_element = my_mesh.getNbNodesPerElement(element_type);
-      Vector<UInt> element_mat = my_model.getElementMaterial(element_type);
-      UInt * element_mat_val = element_mat.values;
-      UInt * connectivity = my_mesh.getConnectivity(element_type).values;
-      for(UInt el = 0; el < nb_elements; ++el) {
-	std::cout << "element: " << el << " with mat: " <<  element_mat_val[el] << std::endl;
-	if(element_mat_val[el] == impactor) {
-	  for(UInt n = 0; n < nb_nodes_element; ++n) {
-	    displacement[connectivity[el * nb_nodes_element + n]+2] = -0.2;
-	  }
-	}
-	}*/
     }
 
     /// central difference predictor
     my_model.explicitPred();
-
     /// update current position
     my_model.initializeUpdateResidualData();
 
     /// compute the penetration list
     PenetrationList * my_penetration_list = new PenetrationList("penetration_list");
     const_cast<ContactSearch &>(my_contact->getContactSearch()).findPenetration(master, *my_penetration_list);
 
     UInt nb_nodes_pen = my_penetration_list->penetrating_nodes.getSize();
     Vector<UInt> pen_nodes = my_penetration_list->penetrating_nodes;
     UInt * pen_nodes_val = pen_nodes.values;
-    std::cout << "we have " << nb_nodes_pen << " penetrating nodes:";
+    test_output << "we have " << nb_nodes_pen << " penetrating nodes:";
     for (UInt i = 0; i < nb_nodes_pen; ++i)
-      std::cout << " " << pen_nodes_val[i];
-    std::cout << std::endl;
+      test_output << " " << pen_nodes_val[i];
+    test_output << std::endl;
     delete my_penetration_list;
 
     /// compute the residual
     my_model.updateResidual(false);
-
     /// compute the acceleration
     my_model.updateAcceleration();
-
     /// central difference corrector
     my_model.explicitCorr();
   }
 
   delete my_contact;
 
   finalize();
 
   return EXIT_SUCCESS;
 }