31 logical triangulation,interpolation,multistage
35 character*5 p0,p1,p2,p3,p7,p9999
37 character*20 labmpc(*),label
39 character*132 jobnamec(*),fntria
41 integer ipompc(*),nodempc(3,*),nneigh,ne,ipkon(*),kon(*),
42 & j,k,nk,nmpc,mpcfree,ics(*),nterms,ncyclicsymmetrymodel,
43 & nr(*),nz(*),noded,nodei,ikmpc(*),ilmpc(*),kontri(3,*),
44 & number,idof,ndir,node,ncsnodes,id,mpcfreeold,
45 & mcs,nrcg(*),nzcg(*),jcs(*),lcs(*),nodef(8),
46 & netri,ifacetet(*),inodface(*),lathyp(3,6),inum,one,i,
47 & noden(10),ncounter,ier,ipos,cfd,mi(*),ilen
49 real*8 tolloc,co(3,*),coefmpc(*),rcs(*),zcs(*),rcs0(*),zcs0(*),
50 & csab(7),xn,yn,zn,xap,yap,zap,rp,zp,al(3,3),ar(3,3),phi,
51 & x2,y2,z2,x3,y3,z3,rcscg(*),rcs0cg(*),zcscg(*),zcs0cg(*),
52 & straight(9,*),ratio(8),vold(0:mi(2),*)
54 save netri,ncyclicsymmetrymodel
56 data ncyclicsymmetrymodel /0/
60 data lathyp /1,2,3,1,3,2,2,1,3,2,3,1,3,1,2,3,2,1/
65 xap=co(1,noded)-csab(1)
66 yap=co(2,noded)-csab(2)
67 zap=co(3,noded)-csab(3)
69 zp=xap*xn+yap*yn+zap*zn
70 rp=dsqrt((xap-zp*xn)**2+(yap-zp*yn)**2+(zap-zp*zn)**2)
72 call near2d(rcs0,zcs0,rcs,zcs,nr,nz,rp,zp,ncsnodes,noden,nneigh)
74 nodei=abs(ics(noden(1)))
78 if(nodei.eq.noded)
then 93 if((tolloc.ge.0.d0).and.
94 & (tolloc.le.dsqrt((rp-rcs0(node))**2+(zp-zcs0(node))**2)))
114 if(.not.triangulation)
then 116 & rcscg,rcs0cg,zcscg,zcs0cg,nrcg,nzcg,jcs,kontri,
117 & straight,ne,ipkon,kon,lakon,lcs,netri,ifacetet,
141 ilen=index(indepset,
' ')
144 fntria(j:j)=indepset(j-3:j-3)
146 fntria(ilen+3:ilen+6)=
'.frd' 182 write(label(7:7),
'(i1)') mcs
183 elseif(mcs.lt.100)
then 184 write(label(7:8),
'(i2)') mcs
186 write(*,*)
'*ERROR in generatecycmpcs: no more than 99' 187 write(*,*)
' cyclic symmetry definitions allowed' 196 vold(i,nodei)=vold(i,noded)
199 co(1,nodei)=csab(1)+zp*xn+rp*(x2*dcos(phi)+x3*dsin(phi))
200 co(2,nodei)=csab(2)+zp*yn+rp*(y2*dcos(phi)+y3*dsin(phi))
201 co(3,nodei)=csab(3)+zp*zn+rp*(z2*dcos(phi)+z3*dsin(phi))
206 & rcscg,rcs0cg,zcscg,zcs0cg,nrcg,nzcg,straight,
207 & nodef,ratio,nterms,rp,zp,netri,
208 & nodei,ifacetet,inodface,noded,xn,yn,
217 if(ics(node).lt.0)
return 231 if((dabs(al(lathyp(1,inum),1)).gt.1.d-3).and.
232 & (dabs(al(lathyp(2,inum),2)).gt.1.d-3).and.
233 & (dabs(al(lathyp(3,inum),3)).gt.1.d-3))
exit 243 number=lathyp(ndir,inum)
244 idof=8*(noded-1)+number
245 call nident(ikmpc,idof,nmpc,id)
247 if(ikmpc(id).eq.idof)
then 248 write(*,*)
'*WARNING in generatecycmpcs: cyclic MPC in no 250 write(*,*)
' ',noded,
' and direction ',ndir
251 write(*,*)
' cannot be created: the' 252 write(*,*)
' DOF in this node is already used' 259 labmpc(nmpc)=
'CYCLIC ' 261 write(labmpc(nmpc)(7:7),
'(i1)') mcs
262 elseif(mcs.lt.100)
then 263 write(labmpc(nmpc)(7:8),
'(i2)') mcs
265 write(*,*)
'*ERROR in generatecycmpcs: no more than 99' 266 write(*,*)
' cyclic symmetry definitions allowed' 282 if(number.gt.3) number=1
283 if(dabs(al(number,ndir)).lt.1.d-5) cycle
284 nodempc(1,mpcfree)=noded
285 nodempc(2,mpcfree)=number
286 coefmpc(mpcfree)=al(number,ndir)
287 mpcfree=nodempc(3,mpcfree)
288 if(mpcfree.eq.0)
then 289 write(*,*)
'*ERROR in generatecycmpcs: increase memmpc_' 295 if(number.gt.3) number=1
296 if(dabs(ar(number,ndir)).lt.1.d-5) cycle
297 if(.not.interpolation)
then 298 nodempc(1,mpcfree)=nodei
299 nodempc(2,mpcfree)=number
300 coefmpc(mpcfree)=-ar(number,ndir)
302 mpcfree=nodempc(3,mpcfree)
303 if(mpcfree.eq.0)
then 305 &
'*ERROR in generatecycmpcs: increase memmpc_' 310 nodempc(1,mpcfree)=nodef(k)
311 nodempc(2,mpcfree)=number
312 coefmpc(mpcfree)=-ar(number,ndir)*ratio(k)
314 mpcfree=nodempc(3,mpcfree)
315 if(mpcfree.eq.0)
then 316 write(*,*)
'*ERROR in generatecycmpcs: increase nmp 323 nodempc(3,mpcfreeold)=0
330 labmpc(nmpc)=
'CYCLIC ' 332 write(labmpc(nmpc)(7:7),
'(i1)') mcs
333 elseif(mcs.lt.100)
then 334 write(labmpc(nmpc)(7:8),
'(i2)') mcs
336 write(*,*)
'*ERROR in generatecycmpcs: no more than 99' 337 write(*,*)
' cyclic symmetry definitions allowed' 342 call nident(ikmpc,idof,nmpc-1,id)
344 if(ikmpc(id).eq.idof)
then 345 write(*,*)
'*ERROR in generatecycmpcs: temperature' 346 write(*,*)
' in node',noded,
'is already used' 360 nodempc(1,mpcfree)=noded
362 coefmpc(mpcfree)=1.d0
363 mpcfree=nodempc(3,mpcfree)
364 if(mpcfree.eq.0)
then 365 write(*,*)
'*ERROR in generatecycmpcs: increase memmpc_' 368 if(.not.interpolation)
then 369 nodempc(1,mpcfree)=nodei
371 coefmpc(mpcfree)=-1.d0
373 mpcfree=nodempc(3,mpcfree)
374 if(mpcfree.eq.0)
then 375 write(*,*)
'*ERROR in generatecycmpcs: increase memmpc_' 380 nodempc(1,mpcfree)=nodef(k)
382 coefmpc(mpcfree)=-ratio(k)
384 mpcfree=nodempc(3,mpcfree)
385 if(mpcfree.eq.0)
then 386 write(*,*)
'*ERROR in generatecycmpcs: increase memmpc_' 391 nodempc(3,mpcfreeold)=0
398 labmpc(nmpc)=
'CYCLIC ' 400 write(labmpc(nmpc)(7:7),
'(i1)') mcs
401 elseif(mcs.lt.100)
then 402 write(labmpc(nmpc)(7:8),
'(i2)') mcs
404 write(*,*)
'*ERROR in generatecycmpcs: no more than 99' 405 write(*,*)
' cyclic symmetry definitions allowed' 410 call nident(ikmpc,idof,nmpc-1,id)
412 if(ikmpc(id).eq.idof)
then 413 write(*,*)
'*ERROR in generatecycmpcs: pressure' 414 write(*,*)
' in node',noded,
'is already used' 428 nodempc(1,mpcfree)=noded
430 coefmpc(mpcfree)=1.d0
431 mpcfree=nodempc(3,mpcfree)
432 if(mpcfree.eq.0)
then 433 write(*,*)
'*ERROR in generatecycmpcs: increase memmpc_' 436 if(.not.interpolation)
then 437 nodempc(1,mpcfree)=nodei
439 coefmpc(mpcfree)=-1.d0
441 mpcfree=nodempc(3,mpcfree)
442 if(mpcfree.eq.0)
then 443 write(*,*)
'*ERROR in generatecycmpcs: increase memmpc_' 448 nodempc(1,mpcfree)=nodef(k)
450 coefmpc(mpcfree)=-ratio(k)
452 mpcfree=nodempc(3,mpcfree)
453 if(mpcfree.eq.0)
then 455 &
'*ERROR in generatecycmpcs: increase memmpc_' 460 nodempc(3,mpcfreeold)=0
subroutine triangulate(ics, rcs0, zcs0, ncsnodes, rcscg, rcs0cg, zcscg, zcs0cg, nrcg, nzcg, jcs, kontri, straight, ne, ipkon, kon, lakon, lcs, netri, ifacetet, inodface)
Definition: triangulate.f:22
subroutine nident(x, px, n, id)
Definition: nident.f:26
subroutine linkdissimilar(co, csab, rcscg, rcs0cg, zcscg, zcs0cg, nrcg, nzcg, straight, nodef, ratio, nterms, rp, zp, netri, nodei, ifacetet, inodface, noded, xn, yn, zn, ier, multistage)
Definition: linkdissimilar.f:23
subroutine near2d(xo, yo, x, y, nx, ny, xp, yp, n, neighbor, k)
Definition: near2d.f:20