31 character*8 lakon(*),lakonf(*)
32 character*81 set(*),noset,tieset(3,*),slavset,mastset
34 integer ne,ipkon(*),ipnei(*),ipoface(*),nodface(5,*),neifa(*),
35 & ielfa(4,*),nflnei,nface,i,j,k,index,indexe,neiel(*),ithree,
36 & nfaext,ifaext(*),isolidsurf(*),nsolidsurf,indexf,nneigh,
37 & nset,istartset(*),iendset(*),ialset(*),iaux,kflag,ifour,iel2,
38 & ifaceq(8,6),ifacet(7,4),ifacew(8,5),kon(*),
nodes(4),iel1,j2,
39 & indexold,ifree,ifreenew,ifreenei,mi(*),neij(*),ifreenei2,nef,
40 & nactdoh(*),ipkonf(*),ielmatf(mi(3),*),ielmat(mi(3),*),nf(5),
41 & nope,ielorien(mi(3),*),ielorienf(mi(3),*),norien,jopposite8(6),
42 & jopposite6(5),itie,nx(*),ny(*),nz(*),noden(1),nelemm,nelems,
43 & n,mcs,l,jfacem,jfaces,islav,imast,ifaces,ifacem,ifatie(*),
44 & nodeinface,nodeoutface,nopes,jop
46 real*8 vel(nef,0:7),vold(0:mi(2),*),coords(3),cs(17,*),x(*),
47 & y(*),z(*),xo(*),yo(*),zo(*),co(3,*),a(3),b(3),xn(3),p(3),
48 & q(3),c(3,3),dot,dc,ds,dd,theta,pi
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/
58 data ifacet /1,3,2,7,6,5,11,
62 data ifacew /1,3,2,9,8,7,0,0,
67 data jopposite6 /2,1,0,0,0/
68 data jopposite8 /2,1,5,6,3,4/
79 if(nactdoh(i).ne.0)
then 80 ipkonf(nactdoh(i))=ipkon(i)
81 lakonf(nactdoh(i))=lakon(i)
83 ielmatf(j,nactdoh(i))=ielmat(j,i)
84 if(norien.gt.0) ielorienf(j,nactdoh(i))=ielorien(j,i)
114 if(lakonf(i)(4:4).eq.
'8')
then 121 nodes(k)=kon(indexe+ifaceq(k,j))
125 index=ipoface(
nodes(1))
132 ifreenew=nodface(5,ifree)
133 nodface(1,ifree)=
nodes(2)
134 nodface(2,ifree)=
nodes(3)
137 nodface(5,ifree)=ipoface(
nodes(1))
138 ipoface(
nodes(1))=ifree
140 neifa(ifreenei)=ifree
150 if((nodface(1,index).eq.
nodes(2)).and.
151 & (nodface(2,index).eq.
nodes(3)))
then 156 neifa(ifreenei)=index
172 ifreenei2=ipnei(iel2)+j2
178 index=nodface(5,index)
181 else if(lakonf(i)(4:4).eq.
'6')
then 188 nodes(k)=kon(indexe+ifacew(k,j))
192 index=ipoface(
nodes(1))
199 ifreenew=nodface(5,ifree)
200 nodface(1,ifree)=
nodes(2)
201 nodface(2,ifree)=
nodes(3)
204 nodface(5,ifree)=ipoface(
nodes(1))
205 ipoface(
nodes(1))=ifree
207 neifa(ifreenei)=ifree
217 if((nodface(1,index).eq.
nodes(2)).and.
218 & (nodface(2,index).eq.
nodes(3)))
then 223 neifa(ifreenei)=index
239 ifreenei2=ipnei(iel2)+j2
245 index=nodface(5,index)
255 nodes(k)=kon(indexe+ifacet(k,j))
259 index=ipoface(
nodes(1))
266 ifreenew=nodface(5,ifree)
267 nodface(1,ifree)=
nodes(2)
268 nodface(2,ifree)=
nodes(3)
271 nodface(5,ifree)=ipoface(
nodes(1))
272 ipoface(
nodes(1))=ifree
274 neifa(ifreenei)=ifree
284 if((nodface(1,index).eq.
nodes(2)).and.
285 & (nodface(2,index).eq.
nodes(3)))
then 290 neifa(ifreenei)=index
306 ifreenei2=ipnei(iel2)+j2
312 index=nodface(5,index)
319 ipnei(nef+1)=ifreenei
326 if((tieset(1,itie)(81:81).ne.
'P').and.
327 & (tieset(1,itie)(81:81).ne.
'Z')) cycle
329 slavset=tieset(2,itie)
330 mastset=tieset(3,itie)
333 if(set(j).eq.slavset)
exit 338 if(set(j).eq.mastset)
exit 345 do j=istartset(imast),iendset(imast)
348 nelemm=int(ifacem/10)
349 jfacem=ifacem-nelemm*10
353 nelemm=nactdoh(nelemm)
355 indexe=ipkonf(nelemm)
359 if(lakonf(nelemm)(4:4).eq.
'8')
then 364 nodes(k)=kon(indexe+ifaceq(k,jfacem))
366 coords(l)=coords(l)+co(l,
nodes(k))
370 coords(l)=coords(l)/4.d0
372 elseif(lakonf(nelemm)(4:4).eq.
'6')
then 377 nodes(k)=kon(indexe+ifacew(k,jfacem))
379 coords(l)=coords(l)+co(l,
nodes(k))
383 coords(l)=coords(l)/nf(jfacem)
390 nodes(k)=kon(indexe+ifaceq(k,jfacem))
392 coords(l)=coords(l)+co(l,
nodes(k))
396 coords(l)=coords(l)/3.d0
400 if(j.eq.istartset(imast))
then 401 if(tieset(1,itie)(81:81).eq.
'Z')
then 405 if(lakonf(nelemm)(4:4).eq.
'8')
then 408 elseif(lakonf(nelemm)(4:4).eq.
'6')
then 426 if((co(1,
nodes(k))-a(1))**2+
427 & (co(2,
nodes(k))-a(2))**2+
428 & (co(3,
nodes(k))-a(3))**2.gt.1.d-20)
exit 436 nodeoutface=kon(indexe+k)
438 if(
nodes(l).eq.nodeoutface) cycle loop
445 dd=dsqrt((b(1)-a(1))**2+
456 p(k)=co(k,nodeinface)-a(k)
457 q(k)=co(k,nodeoutface)-a(k)
466 dot=xn(1)*(p(2)*q(3)-q(2)*p(3))
467 & +xn(2)*(p(3)*q(1)-q(3)*p(1))
468 & +xn(3)*(p(1)*q(2)-q(1)*p(2))
483 theta=-2.d0*pi/cs(1,i)
495 c(1,1)=dc+(1.d0-dc)*xn(1)*xn(1)
496 c(1,2)= (1.d0-dc)*xn(1)*xn(2)-ds*xn(3)
497 c(1,3)= (1.d0-dc)*xn(1)*xn(3)+ds*xn(2)
498 c(2,1)= (1.d0-dc)*xn(2)*xn(1)+ds*xn(3)
499 c(2,2)=dc+(1.d0-dc)*xn(2)*xn(2)
500 c(2,3)= (1.d0-dc)*xn(2)*xn(3)-ds*xn(1)
501 c(3,1)= (1.d0-dc)*xn(3)*xn(1)-ds*xn(2)
502 c(3,2)= (1.d0-dc)*xn(3)*xn(2)+ds*xn(1)
503 c(3,3)=dc+(1.d0-dc)*xn(3)*xn(3)
511 if(tieset(1,itie)(81:81).eq.
'P')
then 512 x(n)=coords(1)-cs(6,i)
513 y(n)=coords(2)-cs(7,i)
514 z(n)=coords(3)-cs(8,i)
522 dd=p(1)*xn(1)+p(2)*xn(2)+p(3)*xn(3)
530 q(k)=c(k,1)*p(1)+c(k,2)*p(2)+c(k,3)*p(3)
535 x(n)=coords(1)+q(1)-p(1)
536 y(n)=coords(2)+q(2)-p(2)
537 z(n)=coords(3)+q(3)-p(3)
552 call dsort(x,nx,n,kflag)
553 call dsort(y,ny,n,kflag)
554 call dsort(z,nz,n,kflag)
558 do j=istartset(islav),iendset(islav)
561 nelems=int(ifaces/10)
562 jfaces=ifaces-nelems*10
566 nelems=nactdoh(nelems)
568 indexe=ipkonf(nelems)
572 if(lakonf(nelems)(4:4).eq.
'8')
then 577 nodes(k)=kon(indexe+ifaceq(k,jfaces))
579 coords(l)=coords(l)+co(l,
nodes(k))
583 coords(l)=coords(l)/4.d0
585 elseif(lakonf(nelems)(4:4).eq.
'6')
then 590 nodes(k)=kon(indexe+ifacew(k,jfaces))
592 coords(l)=coords(l)+co(l,
nodes(k))
596 coords(l)=coords(l)/nf(jfaces)
603 nodes(k)=kon(indexe+ifaceq(k,jfaces))
605 coords(l)=coords(l)+co(l,
nodes(k))
609 coords(l)=coords(l)/3.d0
614 call near3d(xo,yo,zo,x,y,z,nx,ny,nz,coords(1),
615 & coords(2),coords(3),n,noden,nneigh)
617 ifacem=ialset(istartset(imast)+noden(1)-1)
619 nelemm=int(ifacem/10)
620 jfacem=ifacem-nelemm*10
624 nelemm=nactdoh(nelemm)
626 ielfa(2,neifa(ipnei(nelems)+jfaces))=nelemm
627 ielfa(2,neifa(ipnei(nelemm)+jfacem))=nelems
629 neiel(ipnei(nelems)+jfaces)=nelemm
630 neiel(ipnei(nelemm)+jfacem)=nelems
632 neij(ipnei(nelems)+jfaces)=jfacem
633 neij(ipnei(nelemm)+jfacem)=jfaces
638 ifatie(neifa(ipnei(nelems)+jfaces))=i
639 ifatie(neifa(ipnei(nelemm)+jfacem))=-i
648 if(ielfa(2,i).ne.0) cycle
653 if(lakonf(iel1)(4:4).eq.
'8')
then 659 elseif(lakonf(iel1)(4:4).eq.
'6')
then 670 if(neiel(indexf+jop).eq.0)
then 673 if(neiel(indexf+jop).eq.0) cycle
681 ielfa(3,i)=neiel(indexf+j)
700 noset(1:13)=
'SOLIDSURFACET' 702 if(set(i)(1:13).eq.noset(1:13))
exit 705 write(*,*)
'*WARNING in precfd: facial surface SOLID SURFACE ' 706 write(*,*)
' has not been defined.' 710 do j=istartset(i),iendset(i)
711 nsolidsurf=nsolidsurf+1
712 isolidsurf(nsolidsurf)=ialset(j)
714 call isortii(isolidsurf,iaux,nsolidsurf,kflag)
725 if(lakonf(i)(4:4).eq.
'8')
then 727 elseif(lakonf(i)(4:4).eq.
'6')
then 734 vel(i,j)=vel(i,j)+vold(j,kon(indexe+k))
736 vel(i,j)=vel(i,j)/nope
subroutine near3d(xo, yo, zo, x, y, z, nx, ny, nz, xp, yp, zp, n, neighbor, k)
Definition: near3d.f:20
subroutine isortii(ix, iy, n, kflag)
Definition: isortii.f:6
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 dsort(dx, iy, n, kflag)
Definition: dsort.f:6