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)