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; }