36 integer kon(*),nk,ne,i,j,ipkon(*),indexe,nodebase,
37 & k,ipneigh(*),neigh(2,*),ifree,node,ielem,ielem1,index,index1,m,
38 & jj,mi(*),ii,ncount,nope,itypflag,inum(nk),nenei20(3,8),maxcommon,
39 & icommon,idxnode,iecount,index2,lneigh8a(7,8),ipoints,icont,
40 & nmids(maxmid),nelem(3),nelemv,iavflag,members(ne),ielem2,
41 & linpatch,iterms,inodes(4),iaddelem,ielidx,nenei10(3,4),iscount,
44 real*8 co(3,*),stn(6,*),sti(6,mi(1),*),angle,scpav(6,nk),
47 data lneigh8a /2,3,4,5,6,7,8,1,3,4,5,6,7,8,1,2,4,5,6,7,8,
48 & 1,2,3,5,6,7,8,1,2,3,4,6,7,8,1,2,3,4,5,7,8,
49 & 1,2,3,4,5,6,8,1,2,3,4,5,6,7/
51 data nenei10 /5,7,8,5,6,9,6,7,10,8,9,10/
53 data nenei20 /9,12,17,9,10,18,10,11,19,11,12,20,
54 & 13,16,17,13,14,18,14,15,19,15,16,20/
56 write(*,*)
'Estimating the stress errors' 74 if(lakon(i)(1:4).eq.
'C3D4')
then 76 elseif(lakon(i)(1:4).eq.
'C3D6')
then 78 elseif(lakon(i)(1:4).eq.
'C3D8')
then 80 elseif(lakon(i)(1:5).eq.
'C3D10')
then 82 elseif(lakon(i)(1:5).eq.
'C3D15')
then 84 elseif(lakon(i)(1:5).eq.
'C3D20')
then 92 neigh(2,ifree)=ipneigh(node)
98 patches:
do nodebase=1,nk
99 if(ipneigh(nodebase).eq.0) cycle patches
100 index=ipneigh(nodebase)
111 linpatch=0;ipoints=0;iavflag=0;itypflag=0
118 if(lakon(ielem)(1:5).eq.
'C3D20')
then 120 elseif(lakon(ielem)(1:5).eq.
'C3D10')
then 122 elseif(lakon(ielem)(1:4).eq.
'C3D8')
then 126 if(neigh(2,index).eq.0)
exit 134 if(nelem(1).gt.0)
then 136 elseif(nelem(1).eq.0)
then 137 if(nelem(2).gt.0)
then 139 elseif(nelem(2).eq.0)
then 140 if(nelem(3).gt.0)
then 150 if(itypflag.eq.0)
then 151 write(*,*)
'*WARINING in estimator: Elements of node',
152 & nodebase,
' cannot be used for error estimation.' 154 scpav(j,nodebase)=stn(j,nodebase)
161 elseif(itypflag.eq.1.or.itypflag.eq.3)
then 165 call angsum(lakon,kon,ipkon,neigh,ipneigh,
166 & co,nodebase,itypflag,angle)
170 if(angle.lt.12.56535d0)
then 171 call chksurf(lakon,kon,ipkon,neigh,ipneigh,co,
172 & itypflag,nodebase,icont,iscount,angmax)
175 if(itypflag.eq.1)
then 177 elseif(itypflag.eq.3)
then 201 index=ipneigh(nodebase)
211 if(.not.((lakon(ielem)(1:5).eq.
'C3D20' 212 & .and.itypflag.eq.1)
213 & .or.(lakon(ielem)(1:4).eq.
'C3D8' 214 & .and.itypflag.eq.3)))
then 226 if(kon(indexe+m).eq.nodebase)
exit 238 node=kon(ipkon(ielem)+k)
242 call angsum(lakon,kon,ipkon,neigh,ipneigh,
243 & co,node,itypflag,angle)
244 if(angle.lt.12.56535d0) cycle
nodes 250 index1=ipneigh(nodebase)
252 if(index1.eq.0)
exit outer
253 ielem1=neigh(1,index1)
254 if(.not.((lakon(ielem1)(1:5).eq.
'C3D20' 255 & .and.itypflag.eq.1)
256 & .or.(lakon(ielem1)(1:4).eq.
'C3D8' 257 & .and.itypflag.eq.3)))
then 258 index1=neigh(2,index1)
263 if(index2.eq.0)
exit inner
264 ielem2=neigh(1,index2)
265 if(.not.((lakon(ielem2)(1:5).eq.
'C3D20' 266 & .and.itypflag.eq.1)
267 & .or.(lakon(ielem2)(1:4).eq.
'C3D8' 268 & .and.itypflag.eq.3)))
then 269 index2=neigh(2,index2)
275 if(ielem1.eq.ielem2)
then 278 index2=neigh(2,index2)
280 index1=neigh(2,index1)
286 if(icommon.gt.maxcommon)
then 300 index=ipneigh(nodebase)
304 if(index.eq.0)
exit elements1
307 if(.not.((lakon(ielem)(1:5).eq.
'C3D20' 308 & .and.itypflag.eq.1)
309 & .or.(lakon(ielem)(1:4).eq.
'C3D8' 310 & .and.itypflag.eq.3)))
then 318 if(kon(indexe+m).eq.nodebase)
exit 324 node=kon(ipkon(ielem)+k)
327 index1=ipneigh(nodebase)
329 if(index1.eq.0)
exit outer1
330 ielem1=neigh(1,index1)
331 if(.not.((lakon(ielem1)(1:5).eq.
'C3D20' 332 & .and.itypflag.eq.1)
333 & .or.(lakon(ielem1)(1:4).eq.
'C3D8' 334 & .and.itypflag.eq.3)))
then 335 index1=neigh(2,index1)
340 if(index2.eq.0)
exit inner1
341 ielem2=neigh(1,index2)
342 if(.not.((lakon(ielem2)(1:5).eq.
'C3D20' 343 & .and.itypflag.eq.1)
344 & .or.(lakon(ielem2)(1:4).eq.
'C3D8' 345 & .and.itypflag.eq.3)))
then 346 index2=neigh(2,index2)
350 if(ielem1.eq.ielem2)
then 353 index2=neigh(2,index2)
355 index1=neigh(2,index1)
358 if(icommon.gt.maxcommon1)
then 367 if(maxcommon1.gt.maxcommon)
then 371 index=ipneigh(idxnode)
376 if(.not.((lakon(ielem)(1:5).eq.
'C3D20' 377 & .and.itypflag.eq.1)
378 & .or.(lakon(ielem)(1:4).eq.
'C3D8' 379 & .and.itypflag.eq.3)))
then 389 call angsum(lakon,kon,ipkon,neigh,ipneigh,
390 & co,idxnode,itypflag,angle)
391 if(angle.lt.12.56535d0)
then 392 call chksurf(lakon,kon,ipkon,neigh,ipneigh,co,
393 & itypflag,idxnode,icont,iscount,angmax)
404 write(*,*)
'*WARNING in estimator: Patch not',
405 &
' appropriate for patch recovery,' 407 &
' average of sampling point values', nodebase
414 index=ipneigh(idxnode)
423 if(.not.((lakon(ielem)(1:5).eq.
'C3D20' 424 & .and.itypflag.eq.1)
425 & .or.(lakon(ielem)(1:4).eq.
'C3D8' 426 & .and.itypflag.eq.3)))
then 430 if(lakon(ielem)(1:4).eq.
'C3D8')
then 431 if(lakon(ielem)(5:5).eq.
'R')
then 436 elseif(lakon(ielem)(1:5).eq.
'C3D20')
then 437 if(lakon(ielem)(6:6).eq.
'R')
then 444 members(linpatch)=ielem
448 if(itypflag.eq.1) iterms=20
449 if(itypflag.eq.3) iterms=4
453 call patch(iterms,nodebase,sti,scpav,mi(1),kon,ipkon,
454 & ipoints,members,linpatch,co,lakon,iavflag)
459 if(itypflag.eq.1)
then 461 hexelements:
do ielidx=1,linpatch
462 ielem=members(ielidx)
467 if(nodebase.eq.kon(ipkon(ielem)+m))
exit 480 & .eq.kon(ipkon(ielem)+nenei20(j,m)))
then 485 nmids(k)=kon(ipkon(ielem)+nenei20(j,m))
486 inum(nmids(k))=inum(nmids(k))+1
487 call patch(iterms,nmids(k),sti,scpav,mi(1),kon,
488 & ipkon,ipoints,members,linpatch,co,lakon,
492 write(*,*)
'*ERROR in estimator: array size',
493 &
' for midnodes exceeded' 503 elseif(itypflag.eq.2)
then 547 call angsum(lakon,kon,ipkon,neigh,ipneigh,co,nodebase,
555 if(angle.lt.12.56535d0)
then 556 call chksurf(lakon,kon,ipkon,neigh,ipneigh,co,
557 & itypflag,nodebase,icont,iscount,angmax)
565 & angle.lt.12.56535d0
580 index=ipneigh(nodebase)
586 if(.not.(lakon(ielem)(1:5).eq.
'C3D10' 587 & .and.itypflag.eq.2))
then 592 node=kon(ipkon(ielem)+j)
593 if(node.eq.nodebase) cycle
597 index1=ipneigh(nodebase)
601 ielem1=neigh(1,index1)
602 if(.not.(lakon(ielem1)(1:5).eq.
'C3D10' 603 & .and.itypflag.eq.2))
then 604 index1=neigh(2,index1)
608 if(idxnode.eq.kon(ipkon(ielem1)+jj)
609 & .and.idxnode.ne.0) cycle
610 if(node.eq.kon(ipkon(ielem1)+jj))
613 index1=neigh(2,index1)
615 if(ncount.eq.nelemv)
then 623 if(icommon.gt.0)
then 629 index=ipneigh(idxnode)
634 if(.not.(lakon(ielem)(1:5).eq.
'C3D10' 635 & .and.itypflag.eq.2))
then 651 index=ipneigh(idxnode)
655 if(.not.(lakon(ielem)(1:5).eq.
'C3D10' 656 & .and.itypflag.eq.2))
then 661 members(linpatch)=ielem
665 if(nelemv.gt.0.and.nelemv.lt.4)
then 674 index=ipneigh(idxnode)
679 if(.not.(lakon(ielem)(1:5).eq.
'C3D10' 680 & .and.itypflag.eq.2))
then 693 inodes(j)=kon(ipkon(ielem)+j)
700 if(.not.(lakon(ielem)(1:5).eq.
'C3D10' 701 & .and.itypflag.eq.2))
then 707 index1=ipneigh(idxnode)
710 ielem1=neigh(1,index1)
711 if(.not.(lakon(ielem1)(1:5).eq.
'C3D10' 712 & .and.itypflag.eq.2))
then 713 index1=neigh(2,index1)
716 if(ielem1.eq.k) cycle tetloop
717 index1=neigh(2,index1)
723 if(inodes(jj).eq.kon(ipkon(k)+j))
then 733 if(nelemv+iecount.eq.2)
746 if(nelemv+iecount.eq.2)
then 751 inodes(j)=kon(ipkon(iaddelem)+j)
754 if(.not.(lakon(k)(1:5).eq.
'C3D10' 755 & .and.itypflag.eq.2))
then 758 index=ipneigh(idxnode)
762 if(.not.(lakon(ielem)(1:5).eq.
'C3D10' 763 & .and.itypflag.eq.2))
then 768 if(ielem.eq.k.or.iaddelem.eq.k) cycle loop3
772 if(inodes(jj).eq.kon(ipkon(k)+j))
784 nelemv=nelemv+iecount
791 write(*,*)
'*WARNING in estimator: Patch not',
792 &
' appropriate for patch recovery,' 794 &
' average of sampling point values:', nodebase
805 if(ipoints.ge.17.and.ipoints.lt.21)
then 807 elseif(ipoints.ge.21.and.ipoints.lt.63)
then 809 elseif(ipoints.ge.63)
then 817 call patch(iterms,nodebase,sti,scpav,mi(1),kon,ipkon,
818 & ipoints,members,linpatch,co,lakon,iavflag)
824 tetelements:
do ielidx=1,linpatch
825 ielem=members(ielidx)
830 if(nodebase.eq.kon(ipkon(ielem)+m))
exit 843 & .eq.kon(ipkon(ielem)+nenei10(j,m)))
then 848 nmids(k)=kon(ipkon(ielem)+nenei10(j,m))
849 inum(nmids(k))=inum(nmids(k))+1
850 call patch(iterms,nmids(k),sti,scpav,mi(1),kon,
851 & ipkon,ipoints,members,linpatch,co,lakon,
855 write(*,*)
'*ERROR in estimator: array size',
856 &
' for midnodes exceeded' 866 if(inum(i).gt.0)
then 868 stn(j,i)=scpav(j,i)/inum(i)
subroutine chksurf(lakon, kon, ipkon, neigh, ipneigh, co, itypflag, node, icont, iscount, angmax)
Definition: chksurf.f:21
subroutine angsum(lakon, kon, ipkon, neigh, ipneigh, co, node, itypflag, angle)
Definition: angsum.f:21
subroutine nodes(inpc, textpart, co, nk, nk_, set, istartset, iendset, ialset, nset, nset_, nalset, nalset_, istep, istat, n, iline, ipol, inl, ipoinp, inp, ipoinpc)
Definition: nodes.f:22
subroutine patch(iterms, node, sti, scpav, mi, kon, ipkon, ipoints, members, linpatch, co, lakon, iavflag)
Definition: patch.f:21
subroutine elements(inpc, textpart, kon, ipkon, lakon, nkon, ne, ne_, set, istartset, iendset, ialset, nset, nset_, nalset, nalset_, mi, ixfree, iponor, xnor, istep, istat, n, iline, ipol, inl, ipoinp, inp, iaxial, ipoinpc, solid, cfd, network, filab, nlabel, out3d, iuel, nuel_)
Definition: elements.f:24