33       integer kon(*),ipkon(*),ielem,i,j,k,indexe,
    34      & neigh(2,*),ipneigh(*),index,m,nvertex,itypflag,isurf,node,index1,
    35      & ielem1,ncount,ntos8h(3,8),ntos4tet(3,4),iston8h(4,6),
    36      & isnode, isidx,ifreesur(3),iston20h(8,6),iston10tet(6,4),
    37      & iscount,lnod,icont,iston4tet(3,4)
    39       real*8 co(3,*),angle,shpder8q(2,4,8),shpder6tri(2,3,6),
    40      & vectors(3,3),vlen(2),lastvec(3),angtmp,xl(3,8),
    41      & shpder4q(2,4,4),shpder3tri(2,3,3),angmax
    46       data ntos8h /1,3,6,1,3,4,1,4,5,1,5,6,2,3,6,2,3,4,2,4,5,2,5,6/
    48       data ntos4tet /1,2,4,1,2,3,1,3,4,2,3,4/
    52       data iston8h /1,2,3,4,5,8,7,6,1,5,6,2,2,6,7,3,3,7,8,4,4,8,5,1/
    54       data iston20h /1,2,3,4,9,10,11,12,5,8,7,6,16,15,14,13,
    55      &              1,5,6,2,17,13,18,9,2,6,7,3,18,14,19,10,
    56      &              3,7,8,4,19,15,20,11,4,8,5,1,20,16,17,12/
    58       data iston4tet /1,2,3,1,4,2,2,4,3,3,4,1/
    60       data iston10tet /1,2,3,5,6 ,7,1,4,2,8 ,9,5,
    61      &                 2,4,3,9,10,6,3,4,1,10,8,7/
    70      & -1.5d0,-1.5d0, 0.5d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.5d0,
    71      & -0.5d0, 0.0d0, 1.5d0,-1.5d0, 0.0d0, 0.5d0, 0.0d0, 0.0d0,
    72      &  0.0d0, 0.0d0, 0.0d0,-0.5d0, 1.5d0, 1.5d0,-0.5d0, 0.0d0,
    73      &  0.0d0,-0.5d0, 0.0d0, 0.0d0, 0.5d0, 0.0d0,-1.5d0, 1.5d0,
    74      &  2.0d0, 0.0d0,-2.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0,
    75      &  0.0d0, 0.0d0, 0.0d0, 2.0d0, 0.0d0,-2.0d0, 0.0d0, 0.0d0,
    76      &  0.0d0, 0.0d0, 0.0d0, 0.0d0,-2.0d0, 0.0d0, 2.0d0, 0.0d0,
    77      &  0.0d0, 2.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0,-2.0d0/
    82      & -0.5d0,-0.5d0,-0.5d0, 0.0d0, 0.0d0, 0.0d0, 0.0d0,-0.5d0,
    83      &  0.5d0, 0.0d0, 0.5d0,-0.5d0, 0.0d0,-0.5d0, 0.0d0, 0.0d0,
    84      &  0.0d0, 0.0d0, 0.0d0, 0.5d0, 0.5d0, 0.5d0, 0.5d0, 0.0d0,
    85      &  0.0d0, 0.5d0, 0.0d0, 0.0d0,-0.5d0, 0.0d0,-0.5d0, 0.5d0/
    90      & -3.0d0,-3.0d0, 1.0d0, 1.0d0, 1.0d0, 1.0d0,
    91      & -1.0d0, 0.0d0, 3.0d0, 0.0d0,-1.0d0, 0.0d0,
    92      &  0.0d0,-1.0d0, 0.0d0,-1.0d0, 0.0d0, 3.0d0,
    93      &  4.0d0, 0.0d0,-4.0d0,-4.0d0, 0.0d0, 0.0d0,
    94      &  0.0d0, 0.0d0, 0.0d0, 4.0d0, 4.0d0, 0.0d0,
    95      &  0.0d0, 4.0d0, 0.0d0, 0.0d0,-4.0d0,-4.0d0/
   100      & -1.0d0,-1.0d0,-1.0d0,-1.0d0,-1.0d0,-1.0d0,
   101      &  1.0d0, 0.0d0, 1.0d0, 0.0d0, 1.0d0, 0.0d0,
   102      &  0.0d0, 1.0d0, 0.0d0, 1.0d0, 0.0d0, 1.0d0/
   115          if(lakon(ielem)(1:5).eq.
'C3D20'.and.itypflag.eq.1) 
then   117          elseif(lakon(ielem)(1:5).eq.
'C3D10'.and.itypflag.eq.2) 
then   119          elseif(lakon(ielem)(1:4).eq.
'C3D8'.and.itypflag.eq.3) 
then   121          elseif(lakon(ielem)(1:4).eq.
'C3D4'.and.itypflag.eq.4) 
then   132             if(kon(indexe+m).eq.node) 
exit   148             if(nvertex.eq.4) 
then   152                isidx=ntos4tet(isurf,m)
   153             elseif(nvertex.eq.8) 
then   154                isidx=ntos8h(isurf,m)
   163                ielem1=neigh(1,index1)
   166      &                  lakon(ielem1)(1:5).eq.
'C3D20'.and.itypflag.eq.1
   168      &                  lakon(ielem1)(1:5).eq.
'C3D10'.and.itypflag.eq.2
   170      &                  lakon(ielem1)(1:4).eq.
'C3D8'.and.itypflag.eq.3
   172      &                  lakon(ielem1)(1:4).eq.
'C3D4'.and.itypflag.eq.4
   174      &            .or.ielem.eq.ielem1
   176                   index1=neigh(2,index1)
   184                   if(nvertex.eq.4) 
then   185                      isnode=kon(indexe+iston4tet(k,isidx))
   186                   elseif(nvertex.eq.8) 
then   187                      isnode=kon(indexe+iston8h(k,isidx))
   190                      if(kon(ipkon(ielem1)+j).eq.isnode)
   202                index1=neigh(2,index1)
   207             if(ifreesur(isurf).eq.0) 
then   219                if(nvertex.eq.8) 
then   220                   isidx=ntos8h(isurf,m)
   222                      if(      (isidx.eq.1.and.m.eq.1)
   223      &                    .or.(isidx.eq.2.and.m.eq.5)
   224      &                    .or.(isidx.eq.3.and.m.eq.1)
   225      &                    .or.(isidx.eq.4.and.m.eq.2)
   226      &                    .or.(isidx.eq.5.and.m.eq.3)
   227      &                    .or.(isidx.eq.6.and.m.eq.4)) 
then   229                      elseif(  (isidx.eq.1.and.m.eq.2)
   230      &                    .or.(isidx.eq.2.and.m.eq.8)
   231      &                    .or.(isidx.eq.3.and.m.eq.5)
   232      &                    .or.(isidx.eq.4.and.m.eq.6)
   233      &                    .or.(isidx.eq.5.and.m.eq.7)
   234      &                    .or.(isidx.eq.6.and.m.eq.8)) 
then   236                      elseif(  (isidx.eq.1.and.m.eq.3)
   237      &                    .or.(isidx.eq.2.and.m.eq.7)
   238      &                    .or.(isidx.eq.3.and.m.eq.6)
   239      &                    .or.(isidx.eq.4.and.m.eq.7)
   240      &                    .or.(isidx.eq.5.and.m.eq.8)
   241      &                    .or.(isidx.eq.6.and.m.eq.5)) 
then   243                      elseif(  (isidx.eq.1.and.m.eq.4)
   244      &                    .or.(isidx.eq.2.and.m.eq.6)
   245      &                    .or.(isidx.eq.3.and.m.eq.2)
   246      &                    .or.(isidx.eq.4.and.m.eq.3)
   247      &                    .or.(isidx.eq.5.and.m.eq.4)
   248      &                    .or.(isidx.eq.6.and.m.eq.1)) 
then   258                   if(itypflag.eq.1) 
then   264                            xl(j,k)=co(j,kon(indexe+iston20h(k,isidx)))
   274                               vectors(j,i)=vectors(j,i)+
   275      &                             xl(i,k)*shpder8q(j,lnod,k)
   280                   elseif(itypflag.eq.3) 
then   283                            xl(j,k)=co(j,kon(indexe+iston8h(k,isidx)))
   289                               vectors(j,i)=vectors(j,i)+
   290      &                             xl(i,k)*shpder4q(j,lnod,k)
   296                elseif(nvertex.eq.4) 
then   297                   isidx=ntos4tet(isurf,m)
   299                      if(      (isidx.eq.1.and.m.eq.1)
   300      &                    .or.(isidx.eq.2.and.m.eq.1)
   301      &                    .or.(isidx.eq.3.and.m.eq.2)
   302      &                    .or.(isidx.eq.4.and.m.eq.3)) 
then   304                      elseif(  (isidx.eq.1.and.m.eq.2)
   305      &                    .or.(isidx.eq.2.and.m.eq.4)
   306      &                    .or.(isidx.eq.3.and.m.eq.4)
   307      &                    .or.(isidx.eq.4.and.m.eq.4)) 
then   309                      elseif(  (isidx.eq.1.and.m.eq.3)
   310      &                    .or.(isidx.eq.2.and.m.eq.2)
   311      &                    .or.(isidx.eq.3.and.m.eq.3)
   312      &                    .or.(isidx.eq.4.and.m.eq.1)) 
then   317                   if(itypflag.eq.2) 
then   320                            xl(j,k)=co(j,kon(indexe+iston10tet(k,isidx)))
   326                               vectors(j,i)=vectors(j,i)+
   327      &                             xl(i,k)*shpder6tri(j,lnod,k)
   331                   elseif(itypflag.eq.4) 
then   334                            xl(j,k)=co(j,kon(indexe+iston4tet(k,isidx)))
   340                               vectors(j,i)=vectors(j,i)+
   341      &                             xl(i,k)*shpder3tri(j,lnod,k)
   352                vectors(3,1)=vectors(1,2)*vectors(2,3)
   353      &              -vectors(1,3)*vectors(2,2)
   354                vectors(3,2)=vectors(1,3)*vectors(2,1)
   355      &              -vectors(1,1)*vectors(2,3)
   356                vectors(3,3)=vectors(1,1)*vectors(2,2)
   357      &              -vectors(1,2)*vectors(2,1)
   358                vlen(2)=dsqrt(vectors(3,1)*vectors(3,1)
   359      &              +vectors(3,2)*vectors(3,2)
   360      &              +vectors(3,3)*vectors(3,3))
   362                if(iscount.gt.1) 
then   363                   angtmp=dabs((vectors(3,1)*lastvec(1)
   364      &                 +vectors(3,2)*lastvec(2)
   365      &                 +vectors(3,3)*lastvec(3))
   366      &                 /(vlen(1)*vlen(2)))
   367                   if(angtmp.lt.1.d0) 
then   368                      angle=57.29577951d0*dacos(angtmp)
   369                      if(angle.gt.angmax) angmax=angle
   378                   if(angle.ge.10.d0) 
then   384                   lastvec(j)=vectors(3,j)