part4
C PART4 SOURCE PASCAL 20/01/14 21:15:30 10496 * partitionne meleme dans itab en fonction du contenu de ipos * * IMPLICIT INTEGER(I-N) -INC SMELEME -INC PPARAM -INC CCOPTIO segment ifait(2**nb) segment ipos(0) segment icpr(0) segment iadj(0) segment jadjc(0) IF (KESCL.GT.0) THEN # 0,'MOT',0,0.D0,'ESCLAVE',.TRUE.,0) # 0,'MOT',0,0.D0,'PART',.TRUE.,0) ENDIF 90 continue segini ifait nodes=ipos(/1)/3 nbelan=0 nbelno=0 * boucle sur les zones de maillages à creer izr=0 do 10 iz=1,2**nb segact meleme nbnn=0 nbelem=0 nbref=0 nbsous=max(1,lisous(/1)) segini,ipt4 jsous=0 ipt1=meleme do 20 isous=1,max(1,lisous(/1)) if (lisous(/1).ne.0) ipt1=lisous(isous) segact ipt1 if (iz.eq.1) nbelan=nbelan+ipt1.num(/2) segini,ipt5=ipt1 do 30 j=1,ipt5.num(/2) ifro=1 do 40 i=1,ipt5.num(/1) ip=icpr(ipt5.num(i,j)) if (ipos(2*nodes+ip).lt.nb) goto 40 ifro=0 if (ifait(iz).eq.0) then do k=1,iz-1 if (ifait(k).eq.ipos(nodes+ip)) goto 35 enddo ifait(iz)=ipos(nodes+ip) endif * write (6,*) ' itypel ifait ipos ',ipt5.itypel,ifait(iz), * > ipos(nodes+ip),ipos(2*nodes+ip) if (ifait(iz).eq.ipos(nodes+ip)) goto 37 40 continue if (ifro.eq.1) then * write (6,*) ' ifro 1 ',ifro * embetant tous les noeuds sont sur la frontiere * recherche de la zone voisine la plus grande izone=0 * write (6,*) ' element sur la frontiere ',ipt5.num(/1) do 60 i=1,ipt5.num(/1) ip=icpr(ipt5.num(i,j)) do 65 iv=iadj(ip),iadj(ip+1)-1 K=JADJC(iv) * write (6,*) ' noeud ',ip,' vois ',k,' zone ',ipos(2*nodes+k), * > 'nb ',nb if (ipos(2*nodes+k).lt.nb) goto 65 izone=max(izone,ipos(nodes+k)) 65 continue 60 continue if (izone.eq.0) then * write (6,*) 'izone 0 apres 60 ' * on essaye un peu plus loin do 80 i=1,ipt5.num(/1) ip=icpr(ipt5.num(i,j)) do 85 iv=iadj(ip),iadj(ip+1)-1 ivv=jadjc(iv) do 86 iw=iadj(ivv),iadj(ivv+1)-1 K=JADJC(iw) * write (6,*) 'noeud ',ip,' vois ',k,' zone ',ipos(2*nodes+k), * > 'nb ',nb if (ipos(2*nodes+k).lt.nb) goto 86 izone=max(izone,ipos(nodes+k)) 86 continue 85 continue 80 continue if (ierr.ne.0) return endif if (ifait(iz).eq.0) then do k=1,iz-1 if (ifait(k).eq.izone) goto 35 enddo ifait(iz)=izone endif if (izone.eq.ifait(iz)) goto 37 endif 35 continue * on annule l'element ipt5.num(1,j)=0 37 continue 30 continue * compaction de ipt5 jf=0 * write (6,*) 'avant compaction ipt5 itypel nbel',ipt5.itypel, * > ipt5.num(/2) do 50 j=1,ipt5.num(/2) if (ipt5.num(1,j).eq.0) goto 50 jf=jf+1 ipt5.icolor(jf)=ipt5.icolor(j) do i=1,ipt5.num(/1) ipt5.num(i,jf)=ipt5.num(i,j) enddo 50 continue nbnn=ipt5.num(/1) nbelem=jf nbelno=nbelno+nbelem nbsous=0 nbref=0 segadj ipt5 * write (6,*) 'apres compaction ipt5 itypel nbel',ipt5.itypel, * > ipt5.num(/2) segdes ipt5 if (jf.ne.0) then jsous=jsous+1 ipt4.lisous(jsous)=ipt5 else segsup ipt5 endif segdes ipt1 20 continue nbsous=jsous nbref=0 nbnn=0 nbelem=0 segadj ipt4 if (jsous.eq.1) then ipt5=ipt4.lisous(1) segsup ipt4 ipt4=ipt5 endif segdes meleme,ipt4 if (jsous.eq.0) goto 10 izr=izr+1 # 0,'MAILLAGE',0,0.D0,' ',.TRUE.,ipt4) 10 continue segsup ifait,ipos,icpr,iadj,jadjc end
© Cast3M 2003 - Tous droits réservés.
Mentions légales