diff --git a/trunk/mesh.f90 b/trunk/mesh.f90 index 1e88ddea4..a595599d1 100644 --- a/trunk/mesh.f90 +++ b/trunk/mesh.f90 @@ -26,8 +26,6 @@ ! FE-solver specific part (different for MARC/ABAQUS)..! ! Hence, I suggest to prefix with "FE_" ! -! _mapElementtype : map MARC/ABAQUS elemtype to 1...maxN -! ! _Nnodes : # nodes in a specific type of element ! _Nips : # IPs in a specific type of element ! _NipNeighbors : # IP neighbors in a specific type of element @@ -59,19 +57,20 @@ integer(pInt) :: hypoelasticTableStyle = 0 integer(pInt) :: initialcondTableStyle = 0 - integer(pInt), parameter :: FE_Nelemtypes = 6 - integer(pInt), parameter :: FE_maxNnodes = 8 - integer(pInt), parameter :: FE_maxNsubNodes = 19 - integer(pInt), parameter :: FE_maxNips = 9 + integer(pInt), parameter :: FE_Nelemtypes = 7 + integer(pInt), parameter :: FE_maxNnodes = 20 + integer(pInt), parameter :: FE_maxNsubNodes = 56 + integer(pInt), parameter :: FE_maxNips = 27 integer(pInt), parameter :: FE_maxNipNeighbors = 6 integer(pInt), parameter :: FE_NipFaceNodes = 4 integer(pInt), dimension(FE_Nelemtypes), parameter :: FE_Nnodes = & (/8, & ! element 7 4, & ! element 134 4, & ! element 11 - 8, & ! element 27 + 4, & ! element 27 4, & ! element 157 - 6 & ! element 136 + 6, & ! element 136 + 20 & ! element 21 /) integer(pInt), dimension(FE_Nelemtypes), parameter :: FE_Nips = & (/8, & ! element 7 @@ -79,7 +78,8 @@ 4, & ! element 11 9, & ! element 27 4, & ! element 157 - 6 & ! element 136 + 6, & ! element 136 + 27 & ! element 21 /) integer(pInt), dimension(FE_Nelemtypes), parameter :: FE_NipNeighbors = & (/6, & ! element 7 @@ -87,34 +87,220 @@ 4, & ! element 11 4, & ! element 27 6, & ! element 157 - 6 & ! element 136 + 6, & ! element 136 + 6 & ! element 21 /) integer(pInt), dimension(FE_Nelemtypes), parameter :: FE_NsubNodes = & - (/19, & ! element 7 + (/19,& ! element 7 0, & ! element 134 - 0, & ! element 11 - 0, & ! element 27 + 5, & ! element 11 + 12, & ! element 27 0, & ! element 157 - 0 & ! element 136 + 0, & ! element 136 + 56 & ! element 21 /) integer(pInt), dimension(FE_maxNipNeighbors,FE_Nelemtypes), parameter :: FE_NfaceNodes = & reshape((/& 4,4,4,4,4,4, & ! element 7 3,3,3,3,0,0, & ! element 134 2,2,2,2,0,0, & ! element 11 - 3,3,3,3,0,0, & ! element 27 + 2,2,2,2,0,0, & ! element 27 3,3,3,3,0,0, & ! element 157 - 3,4,4,4,3,0 & ! element 136 + 3,4,4,4,3,0, & ! element 136 + 4,4,4,4,4,4 & ! element 21 /),(/FE_maxNipNeighbors,FE_Nelemtypes/)) - integer(pInt), dimension(2,FE_maxNips,FE_Nelemtypes), parameter :: FE_nodesAtIP = & + integer(pInt), dimension(2,2,FE_maxNips,FE_Nelemtypes), parameter :: FE_nodesAtIP = & reshape((/& - 1,1, 2,2, 4,4, 3,3, 5,5, 6,6, 8,8, 7,7, 0,0, & ! element 7 - 1,1, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, 0,0, & ! element 134 - 1,1, 2,2, 4,4, 3,3, 0,0, 0,0, 0,0, 0,0, 0,0, & ! element 11 - 1,1, 5,5, 2,2, 8,8, 0,0, 6,6, 4,4, 7,7, 3,3, & ! element 27 - 1,1, 2,2, 3,3, 4,4, 0,0, 0,0, 0,0, 0,0, 0,0, & ! element 157 - 1,1, 2,2, 3,3, 4,4, 5,5, 6,6, 0,0, 0,0, 0,0 & ! element 136 - /),(/2,FE_maxNips,FE_Nelemtypes/)) + 1,0, 0,0, & ! element 7 + 2,0, 0,0, & + 4,0, 0,0, & + 3,0, 0,0, & + 5,0, 0,0, & + 6,0, 0,0, & + 8,0, 0,0, & + 7,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 1,0, 0,0, & ! element 134 + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 1,0, 0,0, & ! element 11 + 2,0, 0,0, & + 4,0, 0,0, & + 3,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 1,0, 0,0, & ! element 27 + 1,2, 0,0, & + 2,0, 0,0, & + 1,4, 0,0, & + 1,3, 2,4, & + 2,3, 0,0, & + 4,0, 0,0, & + 3,4, 0,0, & + 3,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 1,0, 0,0, & ! element 157 + 2,0, 0,0, & + 3,0, 0,0, & + 4,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 1,0, 0,0, & ! element 136 + 2,0, 0,0, & + 3,0, 0,0, & + 4,0, 0,0, & + 5,0, 0,0, & + 6,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 0,0, 0,0, & + 1,0, 0,0, & ! element 21 + 1,2, 0,0, & + 2,0, 0,0, & + 1,4, 0,0, & + 1,3, 2,4, & + 2,3, 0,0, & + 4,0, 0,0, & + 3,4, 0,0, & + 3,0, 0,0, & + 1,5, 0,0, & + 1,6, 2,5, & + 2,6, 0,0, & + 1,8, 4,5, & + 0,0, 0,0, & + 2,7, 3,6, & + 4,8, 0,0, & + 3,8, 4,7, & + 3,7, 0,0, & + 5,0, 0,0, & + 5,6, 0,0, & + 6,0, 0,0, & + 5,8, 0,0, & + 5,7, 6,8, & + 6,7, 0,0, & + 8,0, 0,0, & + 7,8, 0,0, & + 7,0, 0,0 & + /),(/2,2,FE_maxNips,FE_Nelemtypes/)) integer(pInt), dimension(FE_NipFaceNodes,FE_maxNipNeighbors,FE_Nelemtypes), parameter :: FE_nodeOnFace = & reshape((/& 1,2,3,4 , & ! element 7 @@ -135,10 +321,10 @@ 4,1,0,0 , & 0,0,0,0 , & 0,0,0,0 , & - 1,5,2,0 , & ! element 27 - 2,6,3,0 , & - 3,7,4,0 , & - 4,8,1,0 , & + 1,2,0,0 , & ! element 27 + 2,3,0,0 , & + 3,4,0,0 , & + 4,1,0,0 , & 0,0,0,0 , & 0,0,0,0 , & 1,2,3,0 , & ! element 157 @@ -152,7 +338,13 @@ 2,5,6,3 , & 1,3,6,4 , & 4,6,5,0 , & - 0,0,0,0 & + 0,0,0,0 , & + 1,2,3,4 , & ! element 21 + 2,1,5,6 , & + 3,2,6,7 , & + 4,3,7,8 , & + 4,1,5,8 , & + 8,7,6,5 & /),(/FE_NipFaceNodes,FE_maxNipNeighbors,FE_Nelemtypes/)) integer(pInt), dimension(FE_maxNipNeighbors,FE_maxNips,FE_Nelemtypes), parameter :: FE_ipNeighbor = & reshape((/& @@ -165,7 +357,43 @@ 8,-5,-4, 5,-6, 3 , & -3, 7,-4, 6,-6, 4 , & 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & -1,-2,-3,-4, 0, 0 , & ! element 134 + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & @@ -178,6 +406,24 @@ -2, 1, 4,-1, 0, 0 , & 4,-4,-3, 1, 0, 0 , & -2, 3,-3, 2, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & @@ -192,6 +438,24 @@ 8,-4,-3, 4, 0, 0 , & 9, 7,-3, 5, 0, 0 , & -2, 8,-3, 6, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & 2,-4, 3,-2, 4,-1 , & ! element 157 3,-2, 1,-3, 4,-1 , & 1,-3, 2,-4, 4,-1 , & @@ -201,6 +465,24 @@ 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & 2,-4, 3,-2, 4,-1 , & ! element 136 -3, 1, 3,-2, 5,-1 , & 2,-4,-3, 1, 6,-1 , & @@ -209,125 +491,448 @@ 5,-4,-3, 4,-5, 3 , & 0, 0, 0, 0, 0, 0 , & 0, 0, 0, 0, 0, 0 , & - 0, 0, 0, 0, 0, 0 & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 0, 0, 0, 0, 0, 0 , & + 2,-5, 4,-2,10,-1 , & ! element 21 + 3, 1, 5,-2,11,-1 , & + -3, 2, 6,-2,12,-1 , & + 5,-5, 7, 1,13,-1 , & + 6, 4, 8, 2,14,-1 , & + -3, 5, 9, 3,15,-1 , & + 8,-5,-4, 4,16,-1 , & + 9, 7,-4, 5,17,-1 , & + -3, 8,-4, 6,18,-1 , & + 11,-5,13,-2,10, 1 , & + 12,10,14,-2,11, 2 , & + -3,11,15,-2,12, 3 , & + 14,-5,16,10,13, 4 , & + 15,13,17,11,14, 5 , & + -3,14,18,12,15, 6 , & + 17,-5,-4,13,16, 7 , & + 18,16,-4,14,17, 8 , & + -3,17,-4,15,18, 9 , & + 20,-5,22,-2,-6,10 , & + 21,19,23,-2,-6,11 , & + -3,20,24,-2,-6,12 , & + 23,-5,25,19,-6,13 , & + 24,22,26,20,-6,14 , & + -3,23,27,21,-6,15 , & + 26,-5,-4,22,-6,16 , & + 27,25,-4,23,-6,17 , & + -3,26,-4,24,-6,18 & /),(/FE_maxNipNeighbors,FE_maxNips,FE_Nelemtypes/)) - integer(pInt), dimension(FE_maxNnodes,FE_maxNsubNodes,FE_Nelemtypes), parameter :: FE_subNodeParent = & + integer(pInt), dimension(FE_maxNips,FE_maxNsubNodes,FE_Nelemtypes), parameter :: FE_subNodeParent = & reshape((/& - 1, 2, 0, 0, 0, 0, 0, 0, & ! element 7 - 2, 3, 0, 0, 0, 0, 0, 0, & - 3, 4, 0, 0, 0, 0, 0, 0, & - 4, 1, 0, 0, 0, 0, 0, 0, & - 1, 5, 0, 0, 0, 0, 0, 0, & - 2, 6, 0, 0, 0, 0, 0, 0, & - 3, 7, 0, 0, 0, 0, 0, 0, & - 4, 8, 0, 0, 0, 0, 0, 0, & - 5, 6, 0, 0, 0, 0, 0, 0, & - 6, 7, 0, 0, 0, 0, 0, 0, & - 7, 8, 0, 0, 0, 0, 0, 0, & - 8, 5, 0, 0, 0, 0, 0, 0, & - 1, 2, 3, 4, 0, 0, 0, 0, & - 1, 2, 6, 5, 0, 0, 0, 0, & - 2, 3, 7, 6, 0, 0, 0, 0, & - 3, 4, 8, 7, 0, 0, 0, 0, & - 1, 4, 8, 5, 0, 0, 0, 0, & - 5, 6, 7, 8, 0, 0, 0, 0, & - 1, 2, 3, 4, 5, 6, 7, 8, & - 0, 0, 0, 0, 0, 0, 0, 0, & ! element 134 - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & ! element 11 - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & ! element 27 - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & ! element 157 - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & ! element 136 - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0, & - 0, 0, 0, 0, 0, 0, 0, 0 & - /),(/FE_maxNnodes,FE_maxNsubNodes,FE_Nelemtypes/)) + 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 7 + 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 2, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 3, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 4, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 4, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 2, 3, 4, 5, 6, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 134 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 11 + 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 27 + 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 157 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 136 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & ! element 21 + 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 6, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 6, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 7, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 8, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 8, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 1, 1, 2, 2, 4, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 2, 2, 1, 1, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 3, 3, 2, 2, 4, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 4, 4, 1, 1, 3, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 1, 1, 2, 2, 5, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 2, 2, 1, 1, 6, 6, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 2, 2, 2, 2, 3, 3, 6, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 3, 3, 2, 2, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 3, 3, 3, 3, 4, 4, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 4, 4, 3, 3, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 4, 4, 4, 4, 1, 1, 8, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 1, 1, 4, 4, 5, 5, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 5, 5, 5, 1, 1, 6, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 6, 6, 6, 6, 2, 2, 5, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 6, 6, 6, 6, 2, 2, 7, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 7, 7, 7, 7, 3, 3, 6, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 7, 7, 7, 7, 3, 3, 8, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 8, 8, 8, 8, 4, 4, 7, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 8, 8, 8, 8, 4, 4, 5, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 5, 5, 5, 1, 1, 8, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 5, 5, 5, 5, 6, 6, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 6, 6, 6, 6, 5, 5, 7, 7, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 7, 7, 7, 7, 6, 6, 8, 8, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 8, 8, 8, 8, 5, 5, 7, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, & + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 5, 5, 5, 5, 3, 3, 6, 6, 8, 8, 7, & + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3, 6, 6, 6, 6, 4, 4, 5, 5, 7, 7, 8, & + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, 7, 7, 7, 7, 1, 1, 6, 6, 8, 8, 5, & + 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3, 8, 8, 8, 8, 2, 2, 5, 5, 7, 7, 6, & + 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 1, 1, 6, 6, 6, 6, 8, 8, 8, 8, 2, 2, 4, 4, 7, 7, 3, & + 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 2, 2, 5, 5, 5, 5, 8, 8, 8, 8, 1, 1, 3, 3, 8, 8, 4, & + 7, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 6, 6, 6, 6, 7, 7, 7, 7, 2, 2, 4, 4, 5, 5, 1, & + 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 5, 5, 5, 5, 7, 7, 7, 7, 1, 1, 3, 3, 6, 6, 2 & + /),(/FE_maxNips,FE_maxNsubNodes,FE_Nelemtypes/)) integer(pInt), dimension(FE_NipFaceNodes,FE_maxNipNeighbors,FE_maxNips,FE_Nelemtypes), parameter :: FE_subNodeOnIPFace = & reshape((/& 9,21,27,22, & ! element 7 @@ -378,7 +983,115 @@ 18,26,27,23, & 7,19,26,18, & 15,23,27,24, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & @@ -438,12 +1151,138 @@ 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! element 11 + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 5, 9, 0, 0, & ! element 11 + 1, 8, 0, 0, & + 8, 9, 0, 0, & + 1, 5, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 2, 6, 0, 0, & ! + 5, 9, 0, 0, & + 6, 9, 0, 0, & + 2, 5, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 3, 6, 0, 0, & ! + 7, 9, 0, 0, & + 3, 7, 0, 0, & + 6, 9, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 7, 9, 0, 0, & ! + 4, 8, 0, 0, & + 4, 7, 0, 0, & + 8, 9, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & @@ -480,10 +1319,165 @@ 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 9,17, 0, 0, & ! element 27 + 1,16, 0, 0, & + 16,17, 0, 0, & + 1, 9, 0, 0, & + 0, 0, 0, 0, & + 10,18, 0, 0, & ! + 9,17, 0, 0, & + 17,18, 0, 0, & + 9,10, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 2,11, 0, 0, & ! + 10,18, 0, 0, & + 11,18, 0, 0, & + 2,10, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 17,20, 0, 0, & ! + 15,16, 0, 0, & + 15,20, 0, 0, & + 16,17, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 18,19, 0, 0, & ! + 17,20, 0, 0, & + 19,20, 0, 0, & + 17,18, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 11,12, 0, 0, & ! + 18,19, 0, 0, & + 12,19, 0, 0, & + 11,18, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 14,20, 0, 0, & ! + 4,15, 0, 0, & + 4,14, 0, 0, & + 15,20, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 13,19, 0, 0, & ! + 14,20, 0, 0, & + 13,14, 0, 0, & + 19,20, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 3,12, 0, 0, & ! + 13,19, 0, 0, & + 3,13, 0, 0, & + 12,19, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & ! @@ -492,55 +1486,109 @@ 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! element 27 + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0, & ! + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & @@ -600,6 +1648,114 @@ 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & 0, 0, 0, 0, & ! element 136 0, 0, 0, 0, & 0, 0, 0, 0, & @@ -653,7 +1809,277 @@ 0, 0, 0, 0, & 0, 0, 0, 0, & 0, 0, 0, 0, & - 0, 0, 0, 0 & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & ! + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 0, 0, 0, 0, & + 9,33,57,37, & ! element 21 + 1,17,44,16, & + 16,44,57,33, & + 1, 9,37,17, & + 17,37,44,57, & + 1,16,33, 9, & + 10,34,58,38, & ! + 9,37,57,33, & + 33,57,58,34, & + 9,10,38,37, & + 37,38,57,58, & + 9,33,34,10, & + 2,11,39,18, & ! + 10,38,58,34, & + 34,58,39,11, & + 10, 2,18,38, & + 38,18,58,39, & + 10,34,11, 2, & + 16,15,43,44, & ! + 2,18,39,11, & + 11,39,43,15, & + 2,16,44,18, & + 18,44,39,43, & + 2,11,15,16, & + 33,36,60,57, & ! + 16,44,43,15, & + 15,43,60,36, & + 16,33,57,44, & + 44,57,43,60, & + 16,15,36,33, & + 34,35,59,58, & ! + 33,57,60,36, & + 36,60,59,35, & + 33,34,58,57, & + 57,58,60,59, & + 33,36,35,34, & + 11,12,40,39, & ! + 34,58,59,35, & + 35,59,40,12, & + 34,11,39,58, & + 58,39,59,40, & + 34,35,12,11, & + 15, 4,20,43, & ! + 11,39,40,12, & + 12,40,20, 4, & + 11,15,43,39, & + 39,43,40,20, & + 11,12, 4,15, & + 36,14,42,60, & ! + 15,43,20, 4, & + 4,20,42,14, & + 15,36,60,43, & + 43,60,20,42, & + 15, 4,14,36, & + 37,57,61,45, & ! + 17,21,52,44, & + 44,52,61,57, & + 17,37,45,21, & + 21,45,52,61, & + 17,44,57,37, & + 38,58,62,46, & ! + 37,45,61,57, & + 57,61,62,58, & + 37,38,46,45, & + 45,46,61,62, & + 37,57,58,38, & + 18,39,47,22, & ! + 38,46,62,58, & + 58,62,47,39, & + 38,18,22,46, & + 46,22,62,47, & + 38,58,39,18, & + 44,43,51,52, & ! + 18,22,47,39, & + 39,47,51,43, & + 18,44,52,22, & + 22,52,47,51, & + 18,39,43,44, & + 57,60,64,61, & ! + 44,52,51,43, & + 43,51,64,60, & + 44,57,61,52, & + 52,61,51,64, & + 44,43,60,57, & + 58,59,63,62, & ! + 57,61,64,60, & + 60,64,63,59, & + 57,58,62,61, & + 61,62,64,63, & + 57,60,59,58, & + 39,40,48,47, & ! + 58,62,63,59, & + 59,63,48,40, & + 58,39,47,62, & + 62,47,63,48, & + 58,59,40,39, & + 43,20,24,51, & ! + 39,47,48,40, & + 40,48,24,20, & + 39,43,51,47, & + 47,51,48,24, & + 39,40,20,43, & + 60,42,50,64, & ! + 43,51,24,20, & + 20,24,50,42, & + 43,60,64,51, & + 51,64,24,50, & + 43,20,42,60, & + 45,61,53,25, & ! + 21, 5,32,52, & + 52,32,53,61, & + 21,45,25, 5, & + 5,25,32,53, & + 21,52,61,45, & + 46,62,54,26, & ! + 45,25,53,61, & + 61,53,54,62, & + 45,46,26,25, & + 25,26,53,54, & + 45,61,62,46, & + 22,47,27, 6, & ! + 46,26,54,62, & + 62,54,27,47, & + 46,22, 6,26, & + 26, 6,54,27, & + 46,62,47,22, & + 52,51,31,32, & ! + 22, 6,27,47, & + 47,27,31,51, & + 22,52,32, 6, & + 6,32,27,31, & + 22,47,51,52, & + 61,64,56,53, & ! + 52,32,31,51, & + 51,31,56,64, & + 52,61,53,32, & + 32,53,31,56, & + 52,51,64,61, & + 62,63,55,54, & ! + 61,53,56,64, & + 64,56,55,63, & + 61,62,54,53, & + 53,54,56,55, & + 61,64,63,62, & + 47,48,28,27, & ! + 62,54,55,63, & + 63,55,28,48, & + 62,47,27,54, & + 54,27,55,28, & + 62,63,48,47, & + 51,24, 8,31, & ! + 47,27,28,48, & + 48,28, 8,24, & + 47,51,31,27, & + 27,31,28, 8, & + 47,48,24,51, & + 64,50,30,56, & ! + 51,31, 8,24, & + 24, 8,30,50, & + 51,64,56,31, & + 31,56, 8,30, & + 51,24,50,64 & /),(/FE_NipFaceNodes,FE_maxNipNeighbors,FE_maxNips,FE_Nelemtypes/)) CONTAINS @@ -740,6 +2166,8 @@ FE_mapElemtype = 5 ! Three-dimensional, Low-order, Tetrahedron, Herrmann Formulations case ('136') FE_mapElemtype = 6 ! Three-dimensional Arbitrarily Distorted Pentahedral + case ('21') + FE_mapElemtype = 7 ! Three-dimensional Arbitrarily Distorted qudratic hexahedral case default FE_mapElemtype = 0 ! unknown element --> should raise an error upstream..! end select @@ -836,7 +2264,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements endif do faceNode=1,FE_NfaceNodes(face,t) ! check remaining face nodes to match if (faceNode == lonelyNode) cycle ! disregard lonely node (matches anyway) - n = nodeMap(faceNode) + n = nodeMap(faceNode) if (all(mesh_sharedElem(2:1+mesh_sharedElem(1,n),n) /= mesh_faceMatch)) then ! no ref to candidate elem? mesh_faceMatch = 0_pInt ! set to "no match" (so far) cycle candidate ! next candidate elem @@ -917,7 +2345,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements integer(pInt), dimension (mesh_Nnodes) :: node_count integer(pInt), dimension (:), allocatable :: node_seen - integer(pInt) unit,i,j,n,t,e + integer(pInt) unit,i,j,n,t,e,NnodesStillToBeRead integer(pInt), dimension (133) :: pos character*300 line @@ -931,33 +2359,45 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements read (unit,610,END=630) line pos = IO_stringPos(line,1) if( IO_lc(IO_stringValue(line,pos,1)) == 'connectivity' ) then - read (unit,610,END=630) line ! Garbage line - do i=1,mesh_Nelems ! read all elements - read (unit,610,END=630) line - pos = IO_stringPos(line,66) ! limit to 64 nodes max (plus ID, type) - e = mesh_FEasCP('elem',IO_intValue(line,pos,1)) - if (e /= 0) then - t = FE_mapElemtype(IO_StringValue(line,pos,2)) - mesh_maxNnodes = max(mesh_maxNnodes,FE_Nnodes(t)) - mesh_maxNips = max(mesh_maxNips,FE_Nips(t)) - mesh_maxNipNeighbors = max(mesh_maxNipNeighbors,FE_NipNeighbors(t)) - - mesh_maxNsubNodes = max(mesh_maxNsubNodes,FE_NsubNodes(t)) - - node_seen = 0_pInt - do j=1,FE_Nnodes(t) - n = mesh_FEasCP('node',IO_IntValue (line,pos,j+2)) - if (all(node_seen /= n)) then - node_count(n) = node_count(n)+1 - end if - node_seen(j) = n - end do - end if - end do + read (unit,610,END=630) line ! Garbage line + readThisElement: do i=1,mesh_Nelems ! read all elements + NnodesStillToBeRead = -1_pInt ! number of nodes per element still to be read + do while (NnodesStillToBeRead /= 0) + read (unit,610,END=630) line + pos = IO_stringPos(line,2+FE_maxNnodes) ! limit to maximal number of nodes (plus ID, type) + if (NnodesStillToBeRead < 0) then ! first line of element with FE ID and element type + e = mesh_FEasCP('elem',IO_intValue(line,pos,1)) + if (e < 1) exit readThisElement ! disregard non-CP elems + t = FE_mapElemtype(IO_StringValue(line,pos,2)) ! element type + NnodesStillToBeRead = FE_Nnodes(t) + mesh_maxNnodes = max(mesh_maxNnodes,FE_Nnodes(t)) + mesh_maxNips = max(mesh_maxNips,FE_Nips(t)) + mesh_maxNipNeighbors = max(mesh_maxNipNeighbors,FE_NipNeighbors(t)) + mesh_maxNsubNodes = max(mesh_maxNsubNodes,FE_NsubNodes(t)) + node_seen = 0_pInt + do j = 1,(pos(1)-2) + n = mesh_FEasCP('node',IO_IntValue (line,pos,j+2)) + if (all(node_seen /= n)) then + node_count(n) = node_count(n)+1 + end if + node_seen(j) = n + NnodesStillToBeRead = NnodesStillToBeRead - 1 + end do + else ! all lines after the first just contain nodes + do j = 1,pos(1) + n = mesh_FEasCP('node',IO_IntValue (line,pos,j)) + if (all(node_seen /= n)) then + node_count(n) = node_count(n)+1 + end if + node_seen(FE_Nnodes(t)-NnodesStillToBeRead+1) = n + NnodesStillToBeRead = NnodesStillToBeRead - 1 + end do + end if + end do + end do readThisElement exit end if end do - 630 mesh_maxNsharedElems = maxval(node_count) return @@ -987,7 +2427,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements rewind(unit) do - read (unit,610,END=620) line + read (unit,610,END=640) line pos = IO_stringPos(line,4) if( (IO_lc(IO_stringValue(line,pos,1)) == 'define' ).and. & (IO_lc(IO_stringValue(line,pos,2)) == 'element' ) )then @@ -996,8 +2436,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements mesh_mapElemSet(:,elem_set) = IO_continousIntValues(unit,mesh_maxNelemInSet,mesh_nameElemSet,mesh_mapElemSet,mesh_NelemSets) end if end do - -620 return +640 return END SUBROUTINE @@ -1026,20 +2465,20 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements rewind(unit) do - read (unit,610,END=620) line + read (unit,610,END=650) line pos = IO_stringPos(line,1) if( IO_lc(IO_stringValue(line,pos,1)) == 'coordinates' ) then - read (unit,610,END=620) line ! skip crap line + read (unit,610,END=650) line ! skip crap line do i=1,mesh_Nnodes - read (unit,610,END=620) line + read (unit,610,END=650) line mesh_mapFEtoCPnode(1,i) = IO_fixedIntValue (line,(/0,10/),1) mesh_mapFEtoCPnode(2,i) = i end do - exit + exit end if end do -620 call qsort(mesh_mapFEtoCPnode,1,size(mesh_mapFEtoCPnode,2)) +650 call qsort(mesh_mapFEtoCPnode,1,size(mesh_mapFEtoCPnode,2)) return END SUBROUTINE @@ -1072,11 +2511,11 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements rewind(unit) do - read (unit,610,END=620) line + read (unit,610,END=660) line pos = IO_stringPos(line,1) if( IO_lc(IO_stringValue(line,pos,1)) == 'hypoelastic' ) then do i=1,3+hypoelasticTableStyle ! skip three (or four if new table style!) lines - read (unit,610,END=620) line + read (unit,610,END=660) line end do contInts = IO_continousIntValues(unit,mesh_NcpElems,mesh_nameElemSet,mesh_mapElemSet,mesh_NelemSets) do i = 1,contInts(1) @@ -1087,7 +2526,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements end if end do -620 call qsort(mesh_mapFEtoCPelem,1,size(mesh_mapFEtoCPelem,2)) ! should be mesh_NcpElems +660 call qsort(mesh_mapFEtoCPelem,1,size(mesh_mapFEtoCPelem,2)) ! should be mesh_NcpElems return END SUBROUTINE @@ -1117,12 +2556,12 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements rewind(unit) do - read (unit,610,END=620) line + read (unit,610,END=670) line pos = IO_stringPos(line,1) if( IO_lc(IO_stringValue(line,pos,1)) == 'coordinates' ) then - read (unit,610,END=620) line ! skip crap line + read (unit,610,END=670) line ! skip crap line do i=1,mesh_Nnodes - read (unit,610,END=620) line + read (unit,610,END=670) line m = mesh_FEasCP('node',IO_fixedIntValue (line,node_ends,1)) do j=1,3 mesh_node(j,m) = IO_fixedNoEFloatValue (line,node_ends,j+1) @@ -1132,7 +2571,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements end if end do -620 return +670 return END SUBROUTINE @@ -1149,8 +2588,9 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements use IO implicit none - integer unit,i,j,sv,val,CP_elem - integer(pInt), dimension(133) :: pos + integer unit,e,i,j,sv,val,NnodesStillToBeRead + integer, parameter :: maxNchunks = 2+FE_maxNnodes + integer(pInt), dimension(1+2*maxNchunks) :: pos integer(pInt), dimension(1+mesh_NcpElems) :: contInts character*300 line @@ -1158,65 +2598,76 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements 610 FORMAT(A300) - + rewind(unit) do - read (unit,610,END=620) line + read (unit,610,END=680) line pos = IO_stringPos(line,2) if( IO_lc(IO_stringValue(line,pos,1)) == 'connectivity' ) then - read (unit,610,END=620) line ! Garbage line - do i=1,mesh_Nelems - read (unit,610,END=620) line - pos = IO_stringPos(line,66) ! limit to 64 nodes max (plus ID, type) - CP_elem = mesh_FEasCP('elem',IO_intValue(line,pos,1)) - if (CP_elem /= 0) then ! disregard non CP elems - mesh_element (1,CP_elem) = IO_IntValue (line,pos,1) ! FE id - mesh_element (2,CP_elem) = FE_mapElemtype(IO_StringValue (line,pos,2)) ! elem type - do j=1,FE_Nnodes(mesh_element(2,CP_elem)) - mesh_element(j+4,CP_elem) = IO_IntValue (line,pos,j+2) ! copy FE ids of nodes - end do - end if - end do + read (unit,610,END=680) line ! Garbage line + readThisElement: do i=1,mesh_Nelems + NnodesStillToBeRead = -1_pInt ! number of nodes per element still to be read + do while (NnodesStillToBeRead /= 0) + read (unit,610,END=680) line + pos = IO_stringPos(line,2+FE_maxNnodes) ! limit to maximal number of nodes (plus ID, type) + if (NnodesStillToBeRead < 0) then ! first line of element with FE ID and element type + e = mesh_FEasCP('elem',IO_intValue(line,pos,1)) + if (e < 1) exit readThisElement ! disregard non-CP elems + mesh_element(1,e) = IO_IntValue(line,pos,1) ! FE id + mesh_element(2,e) = FE_mapElemtype(IO_StringValue(line,pos,2)) ! elem type + NnodesStillToBeRead = FE_Nnodes(mesh_element(2,e)) + do j = 1,(pos(1)-2) + mesh_element(j+4,e) = IO_IntValue(line,pos,j+2) ! copy FE ids of nodes + NnodesStillToBeRead = NnodesStillToBeRead - 1 + end do + else ! all lines after the first just contain nodes + do j = 1,pos(1) + mesh_element(FE_Nnodes(mesh_element(2,e))-NnodesStillToBeRead+5,e) = IO_IntValue(line,pos,j) ! copy FE ids of nodes + NnodesStillToBeRead = NnodesStillToBeRead - 1 + end do + end if + end do + end do readThisElement exit - endif - enddo + end if + end do rewind(unit) ! just in case "initial state" apears before "connectivity" - read (unit,610,END=620) line + read (unit,610,END=680) line do pos = IO_stringPos(line,2) if( (IO_lc(IO_stringValue(line,pos,1)) == 'initial').and. & (IO_lc(IO_stringValue(line,pos,2)) == 'state') ) then - if (initialcondTableStyle == 2) read (unit,610,END=620) line ! read extra line for new style - read (unit,610,END=620) line ! read line with index of state var + if (initialcondTableStyle == 2) read (unit,610,END=680) line ! read extra line for new style + read (unit,610,END=680) line ! read line with index of state var pos = IO_stringPos(line,1) - sv = IO_IntValue (line,pos,1) ! figure state variable index - if( (sv == 2).or.(sv == 3) ) then ! only state vars 2 and 3 of interest - read (unit,610,END=620) line ! read line with value of state var + sv = IO_IntValue (line,pos,1) ! figure state variable index + if( (sv == 2).or.(sv == 3) ) then ! only state vars 2 and 3 of interest + read (unit,610,END=680) line ! read line with value of state var pos = IO_stringPos(line,1) - do while (scan(IO_stringValue(line,pos,1),'+-',back=.true.)>1) ! is noEfloat value? - val = NINT(IO_fixedNoEFloatValue (line,(/0,20/),1)) ! state var's value - mesh_maxValStateVar(sv-1) = max(val,mesh_maxValStateVar(sv-1)) ! remember max val of material and texture index + do while (scan(IO_stringValue(line,pos,1),'+-',back=.true.)>1) ! is noEfloat value? + val = NINT(IO_fixedNoEFloatValue (line,(/0,20/),1)) ! state var's value + mesh_maxValStateVar(sv-1) = max(val,mesh_maxValStateVar(sv-1)) ! remember max val of material and texture index if (initialcondTableStyle == 2) then - read (unit,610,END=620) line ! read extra line - read (unit,610,END=620) line ! read extra line - endif + read (unit,610,END=680) line ! read extra line + read (unit,610,END=680) line ! read extra line + end if contInts = IO_continousIntValues(unit,mesh_Nelems,mesh_nameElemSet,mesh_mapElemSet,mesh_NelemSets) ! get affected elements do i = 1,contInts(1) - CP_elem = mesh_FEasCP('elem',contInts(1+i)) - mesh_element(1+sv,CP_elem) = val - enddo - if (initialcondTableStyle == 0) read (unit,610,END=620) line ! ignore IP range for old table style - read (unit,610,END=620) line + e = mesh_FEasCP('elem',contInts(1+i)) + mesh_element(1+sv,e) = val + end do + if (initialcondTableStyle == 0) read (unit,610,END=680) line ! ignore IP range for old table style + read (unit,610,END=680) line pos = IO_stringPos(line,1) - enddo - endif + end do + end if else - read (unit,610,END=620) line - endif - enddo + read (unit,610,END=680) line + end if + end do -620 return +680 return END SUBROUTINE @@ -1233,7 +2684,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements use IO implicit none - integer(pint) unit,i,j,n,e + integer(pint) unit,i,j,n,e,t,NnodesStillToBeRead integer(pInt), dimension (133) :: pos integer(pInt), dimension (:), allocatable :: node_seen character*300 line @@ -1246,31 +2697,47 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements rewind(unit) do - read (unit,610,END=620) line + read (unit,610,END=690) line pos = IO_stringPos(line,1) if( IO_lc(IO_stringValue(line,pos,1)) == 'connectivity' ) then - read (unit,610,END=620) line ! Garbage line - do i=1,mesh_Nelems - read (unit,610,END=620) line - pos = IO_stringPos(line,66) ! limit to 64 nodes max (plus ID, type) - e = mesh_FEasCP('elem',IO_IntValue(line,pos,1)) - if (e /= 0) then ! disregard non CP elems - node_seen = 0_pInt - do j = 1,FE_Nnodes(FE_mapElemtype(IO_StringValue(line,pos,2))) - n = mesh_FEasCP('node',IO_IntValue (line,pos,j+2)) - if (all(node_seen /= n)) then - mesh_sharedElem(1,n) = mesh_sharedElem(1,n) + 1 - mesh_sharedElem(1+mesh_sharedElem(1,n),n) = e - end if - node_seen(j) = n - enddo - end if - end do + read (unit,610,END=690) line ! Garbage line + readThisElement: do i=1,mesh_Nelems ! read all elements + NnodesStillToBeRead = -1_pInt ! number of nodes per element still to be read + do while (NnodesStillToBeRead /= 0) + read (unit,610,END=690) line + pos = IO_stringPos(line,2+FE_maxNnodes) ! limit to maximal number of nodes (plus ID, type) + if (NnodesStillToBeRead < 0) then ! first line of element with FE ID and element type + e = mesh_FEasCP('elem',IO_intValue(line,pos,1)) + if (e < 1) exit readThisElement ! disregard non-CP elems + t = FE_mapElemtype(IO_StringValue(line,pos,2)) ! element type + NnodesStillToBeRead = FE_Nnodes(t) + node_seen = 0_pInt + do j = 1,(pos(1)-2) + n = mesh_FEasCP('node',IO_IntValue (line,pos,j+2)) + if (all(node_seen /= n)) then + mesh_sharedElem(1,n) = mesh_sharedElem(1,n) + 1 + mesh_sharedElem(1+mesh_sharedElem(1,n),n) = e + end if + node_seen(j) = n + NnodesStillToBeRead = NnodesStillToBeRead - 1 + end do + else + do j = 1,pos(1) + n = mesh_FEasCP('node',IO_IntValue (line,pos,j)) + if (all(node_seen /= n)) then + mesh_sharedElem(1,n) = mesh_sharedElem(1,n) + 1 + mesh_sharedElem(1+mesh_sharedElem(1,n),n) = e + end if + node_seen(FE_Nnodes(t)-NnodesStillToBeRead+1) = n + NnodesStillToBeRead = NnodesStillToBeRead - 1 + end do + end if + end do + end do readThisElement exit end if - end do - -620 return + end do +690 return END SUBROUTINE @@ -1288,7 +2755,7 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements integer(pInt) e,t,i,j,k,n integer(pInt) neighbor,neighboringElem,neighboringIP,matchingElem - integer(pInt), dimension(2) :: linkedNode + integer(pInt), dimension(2) :: linkedNode = 0_pInt allocate(mesh_ipNeighborhood(2,mesh_maxNipNeighbors,mesh_maxNips,mesh_NcpElems)) ; mesh_ipNeighborhood = 0_pInt @@ -1304,20 +2771,38 @@ candidate: do i=1,minN ! iterate over lonelyNode's shared elements neighboringElem = 0_pInt neighboringIP = 0_pInt matchingElem = mesh_faceMatch(-neighbor,e) ! get CP elem id of face match - if (matchingElem > 0 .and. & - mesh_element(2,matchingElem) == t) then ! found match of same type? - do j = 1,FE_Nnodes(t) ! check against all neighbor's nodes - if (mesh_element(4+FE_nodesAtIP(1,i,t),e)==mesh_element(4+j,matchingElem)) linkedNode(1) = j ! which neighboring node matches my first nodeAtIP (indexed globally) - if (mesh_element(4+FE_nodesAtIP(2,i,t),e)==mesh_element(4+j,matchingElem)) linkedNode(2) = j ! which neighboring node matches my second nodeAtIP (indexed globally) - enddo -matchFace: do j = 1,FE_Nips(t) - if ((linkedNode(1) == FE_nodesAtIP(1,j,t) .and. linkedNode(2) == FE_nodesAtIP(2,j,t)) .or. & - (linkedNode(1) == FE_nodesAtIP(2,j,t) .and. linkedNode(2) == FE_nodesAtIP(1,j,t)) ) then - neighboringElem = matchingElem - neighboringIP = j - exit matchFace - endif - enddo matchFace + if (matchingElem > 0 .and. mesh_element(2,matchingElem) == t) then ! found match of same type? + if (FE_nodesAtIP(2,1,i,t) == 0) then ! single linked node + matchNode1: do j = 1,FE_Nnodes(t) ! check against all neighbor's nodes + if (mesh_element(4+FE_nodesAtIP(1,1,i,t),e)==mesh_element(4+j,matchingElem)) then + linkedNode(1) = j ! which neighboring node matches my first nodeAtIP (indexed globally) + linkedNode(2) = 0_pInt + exit matchNode1 + endif + enddo matchNode1 + matchFace1: do j = 1,FE_Nips(t) + if ((linkedNode(1) == FE_nodesAtIP(1,1,j,t)) .and. (FE_nodesAtIP(2,1,j,t) == 0))then + neighboringElem = matchingElem + neighboringIP = j + exit matchFace1 + endif + enddo matchFace1 + else ! double linked node + matchNode2: do j = 1,FE_Nnodes(t) ! check against all neighbor's nodes + if (mesh_element(4+FE_nodesAtIP(1,1,i,t),e)==mesh_element(4+j,matchingElem)) linkedNode(1) = j ! which neighboring node matches my first nodeAtIP (indexed globally) + if (mesh_element(4+FE_nodesAtIP(2,1,i,t),e)==mesh_element(4+j,matchingElem)) linkedNode(2) = j ! which neighboring node matches my second nodeAtIP (indexed globally) + enddo matchNode2 + matchFace2: do j = 1,FE_Nips(t) + if ((linkedNode(1) == FE_nodesAtIP(1,1,j,t) .and. linkedNode(2) == FE_nodesAtIP(2,1,j,t)) .or. & + (linkedNode(1) == FE_nodesAtIP(2,1,j,t) .and. linkedNode(2) == FE_nodesAtIP(1,1,j,t)) .or. & + (linkedNode(1) == FE_nodesAtIP(1,2,j,t) .and. linkedNode(2) == FE_nodesAtIP(2,2,j,t)) .or. & + (linkedNode(1) == FE_nodesAtIP(2,2,j,t) .and. linkedNode(2) == FE_nodesAtIP(1,2,j,t))) then + neighboringElem = matchingElem + neighboringIP = j + exit matchFace2 + endif + enddo matchFace2 + endif endif endif mesh_ipNeighborhood(1,n,i,e) = neighboringElem @@ -1354,11 +2839,11 @@ matchFace: do j = 1,FE_Nips(t) enddo do n = 1,FE_NsubNodes(t) ! now for the true subnodes do p = 1,FE_Nnodes(t) ! loop through parents - if (FE_subNodeParent(p,n,t) > 0) & ! valid parent node + if (FE_subNodeParent(p,n,t) > 0) & ! valid parent node mesh_subNodeCoord(:,n+FE_Nnodes(t),e) = & - mesh_subNodeCoord(:,n+FE_Nnodes(t),e) + & - mesh_node(:,mesh_FEasCP('node',mesh_element(4+FE_subNodeParent(p,n,t),e))) ! add up parents - enddo + mesh_subNodeCoord(:,n+FE_Nnodes(t),e) + & + mesh_node(:,mesh_FEasCP('node',mesh_element(4+FE_subNodeParent(p,n,t),e))) ! add up parents + enddo mesh_subNodeCoord(:,n+FE_Nnodes(t),e) = mesh_subNodeCoord(:,n+FE_Nnodes(t),e) / count(FE_subNodeParent(:,n,t) > 0) enddo enddo @@ -1380,7 +2865,7 @@ matchFace: do j = 1,FE_Nips(t) use math, only: math_volTetrahedron implicit none - integer(pInt) e,f,t,i,j,k,n + integer(pInt) e,f,t,i,j,k,n,test integer(pInt), parameter :: Ntriangles = FE_NipFaceNodes-2 ! each interface is made up of this many triangles integer(pInt), dimension(mesh_maxNnodes+mesh_maxNsubNodes) :: gravityNode ! flagList to find subnodes determining center of grav real(pReal), dimension(3,mesh_maxNnodes+mesh_maxNsubNodes) :: gravityNodePos ! coordinates of subnodes determining center of grav @@ -1396,37 +2881,37 @@ matchFace: do j = 1,FE_Nips(t) gravityNode = 0_pInt ! reset flagList gravityNodePos = 0.0_pReal ! reset coordinates do f = 1,FE_NipNeighbors(t) ! loop over interfaces of IP - do n = 1,FE_NipFaceNodes ! loop over nodes on interface + do n = 1,FE_NipFaceNodes ! loop over nodes on interface gravityNode(FE_subNodeOnIPFace(n,f,i,t)) = 1 gravityNodePos(:,FE_subNodeOnIPFace(n,f,i,t)) = mesh_subNodeCoord(:,FE_subNodeOnIPFace(n,f,i,t),e) - enddo - enddo + end do + end do - do j = 1,mesh_maxNnodes+mesh_maxNsubNodes-1 ! walk through entire flagList except last + do j = 1,mesh_maxNnodes+mesh_maxNsubNodes-1 ! walk through entire flagList except last if (gravityNode(j) > 0_pInt) then ! valid node index do k = j+1,mesh_maxNnodes+mesh_maxNsubNodes ! walk through remainder of list if (all((gravityNodePos(:,j) - gravityNodePos(:,k)) == 0.0_pReal)) then ! found match - gravityNode(j) = 0_pInt ! delete first instance - gravityNodePos(:,j) = 0.0_pReal - exit ! continue with next suspect - endif - enddo - endif - enddo + gravityNode(j) = 0_pInt ! delete first instance + gravityNodePos(:,j) = 0.0_pReal + exit ! continue with next suspect + end if + end do + end if + end do centerOfGravity = sum(gravityNodePos,2)/count(gravityNode > 0) do f = 1,FE_NipNeighbors(t) ! loop over interfaces of IP and add tetrahedra which connect to CoG - forall (n = 1:FE_NipFaceNodes) nPos(:,n) = mesh_subNodeCoord(:,FE_subNodeOnIPFace(n,f,i,t),e) + forall (n = 1:FE_NipFaceNodes) nPos(:,n) = mesh_subNodeCoord(:,FE_subNodeOnIPFace(n,f,i,t),e) forall (n = 1:FE_NipFaceNodes, j = 1:Ntriangles) & ! start at each interface node and build valid triangles to cover interface volume(j,n) = math_volTetrahedron(nPos(:,n), & ! calc volume of respective tetrahedron to CoG nPos(:,1+mod(n+j-1,FE_NipFaceNodes)), & nPos(:,1+mod(n+j-0,FE_NipFaceNodes)), & centerOfGravity) mesh_ipVolume(i,e) = mesh_ipVolume(i,e) + sum(volume) ! add contribution from this interface - enddo + end do mesh_ipVolume(i,e) = mesh_ipVolume(i,e) / FE_NipFaceNodes ! renormalize with interfaceNodeNum due to loop over them - enddo - enddo + end do + end do return END SUBROUTINE