renuel
C RENUEL SOURCE PV 20/03/30 21:24:02 10567 * * renumerote les elements dans un meleme de proche en proche * ne fonctionne que pour un meleme simple * -INC PPARAM -INC CCOPTIO -INC SMELEME -INC SMCOORD SEGMENT IADJ(NODES+1) SEGMENT JADJC(JADDIM) C IADJ(i) pointe sur JADJC qui contient les voisins de i entre C IADJ(i) et IADJ(i+1)-1 SEGMENT IELFAI(NBELEM) SEGMENT IPTFAI(NODES) SEGMENT ICPR(nbpts) SEGMENT IPLIST(NODES) * segini icpr segact ipt6*mod meleme=ipt6 do 10000 isous=1,max(1,ipt6.lisous(/1)) if (ipt6.lisous(/1).ne.0) meleme=ipt6.lisous(isous) segact meleme*mod segini,ipt1=meleme ipt2=meleme nodes=0 do 100 il=1,ipt1.num(/2) do 100 ip=1,ipt1.num(/1) if (icpr(num(ip,il)).ne.0) goto 100 nodes=nodes+1 icpr(num(ip,il))=nodes 100 continue ** iadj: nombre d'elements touchant un noeud segini iadj do 200 il=1,ipt1.num(/2) do 200 ip=1,ipt1.num(/1) ipt=icpr(num(ip,il)) iadj(ipt)=iadj(ipt)+1 200 continue ** position fin dans jadjc do ipt=1,nodes iadj(ipt+1)=iadj(ipt)+iadj(ipt+1) enddo ** iadjc: element touchant noeud JADDIM=iadj(nodes+1) segini jadjc do 300 il=1,ipt1.num(/2) do 300 ip=1,ipt1.num(/1) ipt=icpr(num(ip,il)) jadjc(iadj(ipt))=il iadj(ipt)=iadj(ipt)-1 300 continue * creation tableau des elements faits, tableau des noeuds faits, et * et nouveau meleme nbsous=0 nbref=0 nbnn=ipt1.num(/1) nbelem=ipt1.num(/2) segini ielfai,iptfai ipt2.itypel=ipt1.itypel * remplissage maillage ordonnee et noeuds ordonné ielcou=0 segini iplist * point de depart chosi par minimum degre nbconn=100000 idep=0 do ip=1,nodes nbc=iadj(ip+1)-iadj(ip) if (nbc.lt.nbconn) then nbconn=nbc idep=ip endif enddo iplist(1)=idep iptfai(idep)=1 ipc=1 ipf=1 1000 continue if (ipc.gt.nodes) goto 2000 i=iplist(ipc) ipre=iadj(i)+1 ider=iadj(i+1) do 1010 jel=ipre,ider iel=jadjc(jel) if (ielfai(iel).eq.1) goto 1010 ielcou=ielcou+1 do ip=1,nbnn ipt2.num(ip,ielcou)=ipt1.num(ip,iel) ipt=icpr(ipt1.num(ip,iel)) if (iptfai(ipt).eq.0) then ipf=ipf+1 iplist(ipf)=ipt iptfai(ipt)=1 endif enddo ielfai(iel)=1 1010 continue ipc=ipc+1 if (ipc.le.ipf) goto 1000 if (ipc.gt.nodes) goto 2000 * plusieurs composantes connexes on cherche un nouveau point de depart nbconn=100000 idep=0 do ip=1,nodes if (iptfai(ip).eq.0) then nbc=iadj(ip+1)-iadj(ip) if (nbc.lt.nbconn) then nbconn=nbc idep=ip endif endif enddo ipf=ipf+1 iptfai(idep)=1 iplist(ipf)=idep goto 1000 * on a fini 2000 continue if (ipf.ne.nodes) write (6,*) ' probleme ',ipc,ipf,nodes segsup iadj,jadjc,ielfai,iptfai,icpr,iplist segdes ipt1,ipt2 10000 continue return end
© Cast3M 2003 - Tous droits réservés.
Mentions légales