32 character*20 labmpc(*)
33 character*81 tieset(3,*),slavset,set(*)
35 integer ntie,nset,istartset(*),iendset(*),ialset(*),
36 & itietri(2,ntie),ipkon(*),kon(*),koncont(4,*),node,
37 & neigh(1),iflag,kneigh,i,j,k,l,isol,itri,ll,kflag,n,nx(*),
38 & ny(*),nz(*),nstart,ifaceq(8,6),ifacet(6,4),nboun,
39 & ifacew1(4,5),ifacew2(8,5),nelem,jface,indexe,imastop(3,*),
40 & nnodelem,nface,nope,nodef(8),idof,kstart,kend,jstart,id,
41 & jend,ifield(*),istartfield(*),iendfield(*),ifaceslave(*),
42 & ipompc(*),nodempc(3,*),nmpc,nmpctied,mpcfree,ikmpc(*),
43 & ilmpc(*),ithermal(2),cfd,ncont,mpcfreeold,m,id1,ikboun(*),
44 & itriold,itrinew,ntriangle,ntriangle_,itriangle(100)
46 real*8 cg(3,*),straight(16,*),co(3,*),p(3),
47 &
dist,xo(*),yo(*),zo(*),x(*),y(*),z(*),pl(3,9),
48 & ratio(9),xi,et,coefmpc(*),tietol(3,*),tolloc
52 data ifaceq /4,3,2,1,11,10,9,12,
53 & 5,6,7,8,13,14,15,16,
55 & 2,3,7,6,10,19,14,18,
56 & 3,4,8,7,11,20,15,19,
57 & 4,1,5,8,12,17,16,20/
61 data ifacet /1,3,2,7,6,5,
68 data ifacew1 /1,3,2,0,
76 data ifacew2 /1,3,2,9,8,7,0,0,
84 open(40,file=
'WarnNodeMissTiedContact.nam',status=
'unknown')
85 write(40,*)
'*NSET,NSET=WarnNodeMissTiedContact' 86 write(*,*)
'*INFO in gentiedmpc:' 87 write(*,*)
' failed nodes (if any) are stored in file' 88 write(*,*)
' WarnNodeMissTiedContact.nam' 89 write(*,*)
' This file can be loaded into' 90 write(*,*)
' an active cgx-session by typing' 92 &
' read WarnNodeMissTiedContact.nam inp' 101 tolloc=tolloc+dabs(straight(1,i)*cg(1,i)+
102 & straight(2,i)*cg(2,i)+
103 & straight(3,i)*cg(3,i)+
106 tolloc=0.025*tolloc/ncont
113 if(tieset(1,i)(81:81).ne.kind) cycle
122 if(ithermal(2).le.1)
then 130 if(ithermal(2).le.1)
then 133 elseif(ithermal(2).eq.2)
then 141 elseif(kind.eq.
'E')
then 145 if((tieset(1,i)(1:2).eq.
'12').or.
146 & (tieset(1,i)(1:2).eq.
'13').or.
147 & (tieset(1,i)(1:2).eq.
'23'))
then 150 elseif((tieset(1,i)(1:2).eq.
'21').or.
151 & (tieset(1,i)(1:2).eq.
'31'))
then 163 if(tietol(1,i).lt.1.d-10) tietol(1,i)=tolloc
167 if(ifaceslave(i).eq.0)
then 169 if(set(j).eq.slavset)
then 176 jstart=istartfield(i)
180 nstart=itietri(1,i)-1
181 n=itietri(2,i)-nstart
182 if(n.lt.kneigh) kneigh=n
194 call dsort(x,nx,n,kflag)
195 call dsort(y,ny,n,kflag)
196 call dsort(z,nz,n,kflag)
199 if(((ifaceslave(i).eq.0).and.(ialset(j).gt.0)).or.
200 & (ifaceslave(i).eq.1))
then 202 if(ifaceslave(i).eq.0)
then 215 call near3d(xo,yo,zo,x,y,z,nx,ny,nz,p(1),p(2),p(3),
223 itri=neigh(1)+itietri(1,i)-1
230 dist=straight(ll,itri)*p(1)+
231 & straight(ll+1,itri)*p(2)+
232 & straight(ll+2,itri)*p(3)+
233 & straight(ll+3,itri)
236 if(
dist.gt.tolloc)
then 237 itrinew=imastop(l,itri)
238 if(itrinew.eq.0)
then 242 elseif(itrinew.eq.itriold)
then 247 call nident(itriangle,itrinew,ntriangle,id)
249 if(itriangle(id).eq.itrinew)
then 255 ntriangle=ntriangle+1
256 if(ntriangle.gt.ntriangle_)
then 261 do k=ntriangle,id+2,-1
262 itriangle(k)=itriangle(k-1)
264 itriangle(id+1)=itrinew
281 dist=dabs(straight(13,itri)*p(1)+
282 & straight(14,itri)*p(2)+
283 & straight(15,itri)*p(3)+
285 if(
dist.gt.tietol(1,i)) isol=0
292 write(*,*)
'*WARNING in gentiedmpc: no tied MPC' 293 write(*,*)
' generated for node ',node
295 write(*,*)
' master face too far away' 296 write(*,*)
' distance: ',
dist 297 write(*,*)
' tolerance: ',tietol(1,i)
299 write(*,*)
' no corresponding master face' 300 write(*,*)
' found; tolerance: ',
307 nelem=int(koncont(4,itri)/10.d0)
308 jface=koncont(4,itri)-10*nelem
311 if(lakon(nelem)(4:4).eq.
'2')
then 314 elseif(lakon(nelem)(4:4).eq.
'8')
then 317 elseif(lakon(nelem)(4:5).eq.
'10')
then 320 elseif(lakon(nelem)(4:4).eq.
'4')
then 323 elseif(lakon(nelem)(4:5).eq.
'15')
then 331 elseif(lakon(nelem)(4:4).eq.
'6')
then 347 nodef(k)=kon(indexe+ifacet(k,jface))
349 elseif(nface.eq.5)
then 352 nodef(k)=kon(indexe+ifacew1(k,jface))
354 elseif(nope.eq.15)
then 356 nodef(k)=kon(indexe+ifacew2(k,jface))
359 elseif(nface.eq.6)
then 361 nodef(k)=kon(indexe+ifaceq(k,jface))
370 pl(l,k)=co(l,nodef(k))
379 if(tietol(2,i).gt.0.d0)
then 389 call nident(ikmpc,idof,nmpc,id)
391 if(ikmpc(id).eq.idof)
then 392 write(*,*)
'*WARNING in gentiedmpc:' 393 write(*,*)
' DOF ',l,
' of node ',
394 & node,
' is not active;' 395 write(*,*)
' no tied constraint ',
402 call nident(ikboun,idof,nboun,id1)
404 if(ikboun(id1).eq.idof)
then 405 write(*,*)
'*WARNING in gentiedmpc:' 406 write(*,*)
' DOF ',l,
' of node ',
407 & node,
' is not active;' 408 write(*,*)
' no tied constraint ',
428 nodempc(1,mpcfree)=node
430 coefmpc(mpcfree)=1.d0
431 mpcfree=nodempc(3,mpcfree)
432 if(mpcfree.eq.0)
then 434 &
'*ERROR in gentiedmpc: increase memmpc_' 438 nodempc(1,mpcfree)=nodef(k)
440 coefmpc(mpcfree)=-ratio(k)
442 mpcfree=nodempc(3,mpcfree)
443 if(mpcfree.eq.0)
then 445 &
'*ERROR in gentiedmpc: increase memmpc_' 449 nodempc(3,mpcfreeold)=0
458 if(node.ge.ialset(j-1))
exit 467 call near3d(xo,yo,zo,x,y,z,nx,ny,nz,p(1),p(2),p(3),
475 itri=neigh(1)+itietri(1,i)-1
482 dist=straight(ll,itri)*p(1)+
483 & straight(ll+1,itri)*p(2)+
484 & straight(ll+2,itri)*p(3)+
485 & straight(ll+3,itri)
488 if(
dist.gt.tolloc)
then 489 itrinew=imastop(l,itri)
490 if(itrinew.eq.0)
then 494 elseif(itrinew.eq.itriold)
then 499 call nident(itriangle,itrinew,ntriangle,id)
501 if(itriangle(id).eq.itrinew)
then 507 ntriangle=ntriangle+1
508 if(ntriangle.gt.ntriangle_)
then 513 do k=ntriangle,id+2,-1
514 itriangle(k)=itriangle(k-1)
516 itriangle(id+1)=itrinew
533 dist=dabs(straight(13,itri)*p(1)+
534 & straight(14,itri)*p(2)+
535 & straight(15,itri)*p(3)+
537 if(
dist.gt.tietol(1,i)) isol=0
547 write(*,*)
'*WARNING in gentiedmpc: no tied MPC' 548 write(*,*)
' generated for node ',node
550 write(*,*)
' master face too far away' 551 write(*,*)
' distance: ',
dist 552 write(*,*)
' tolerance: ',tietol(1,i)
554 write(*,*)
' no corresponding master face' 555 write(*,*)
' found; tolerance: ',
562 nelem=int(koncont(4,itri)/10.d0)
563 jface=koncont(4,itri)-10*nelem
566 if(lakon(nelem)(4:4).eq.
'2')
then 569 elseif(lakon(nelem)(4:4).eq.
'8')
then 572 elseif(lakon(nelem)(4:5).eq.
'10')
then 575 elseif(lakon(nelem)(4:4).eq.
'4')
then 578 elseif(lakon(nelem)(4:5).eq.
'15')
then 586 elseif(lakon(nelem)(4:4).eq.
'6')
then 602 nodef(k)=kon(indexe+ifacet(k,jface))
604 elseif(nface.eq.5)
then 607 nodef(k)=kon(indexe+ifacew1(k,jface))
609 elseif(nope.eq.15)
then 611 nodef(k)=kon(indexe+ifacew2(k,jface))
614 elseif(nface.eq.6)
then 616 nodef(k)=kon(indexe+ifaceq(k,jface))
625 pl(l,k)=co(l,nodef(k))
634 if(tietol(2,i).gt.0.d0)
then 644 call nident(ikmpc,idof,nmpc,id)
646 if(ikmpc(id).eq.idof)
then 647 write(*,*)
'*WARNING in gentiedmpc:' 648 write(*,*)
' DOF ',l,
' of node ',
649 & node,
' is not active;' 650 write(*,*)
' no tied constraint ',
657 call nident(ikboun,idof,nboun,id1)
659 if(ikboun(id1).eq.idof)
then 660 write(*,*)
'*WARNING in gentiedmpc:' 661 write(*,*)
' DOF ',l,
' of node ',
662 & node,
' is not active;' 663 write(*,*)
' no tied constraint ',
683 nodempc(1,mpcfree)=node
685 coefmpc(mpcfree)=1.d0
686 mpcfree=nodempc(3,mpcfree)
687 if(mpcfree.eq.0)
then 689 &
'*ERROR in gentiedmpc: increase memmpc_' 693 nodempc(1,mpcfree)=nodef(k)
695 coefmpc(mpcfree)=-ratio(k)
697 mpcfree=nodempc(3,mpcfree)
698 if(mpcfree.eq.0)
then 700 &
'*ERROR in gentiedmpc: increase memmpc_' 704 nodempc(3,mpcfreeold)=0
715 nmpctied=nmpc-nmpctied
subroutine near3d(xo, yo, zo, x, y, z, nx, ny, nz, xp, yp, zp, n, neighbor, k)
Definition: near3d.f:20
static double * dist
Definition: radflowload.c:42
subroutine nident(x, px, n, id)
Definition: nident.f:26
subroutine dsort(dx, iy, n, kflag)
Definition: dsort.f:6
subroutine attach(pneigh, pnode, nterms, ratio, dist, xil, etl)
Definition: attach.f:20