C CHLEHA SOURCE PV 13/04/16 21:15:11 7765 * * appele dans menage: elimination des meleme dupliques * subroutine chleha(ifonc,mele,mels,itab) -INC SMELEME data ih1,ih2,ih3/0,0,0/ save ih1,ih2,ih3,nbmelr segment itab(0) segment ih1(nbmel) segment ih2(nbmel) segment ih3(nbmel) * * ifonc = 1 initialisation des structures if (ifonc.eq.1) then nbmel=100 segini ih1,ih2,ih3 nbmelr=0 return * ifonc = 2 suppression des structures elseif (ifonc.eq.2) then if (ih1.ne.0) segsup ih1,ih2,ih3 ih1=0 ih2=0 ih3=0 return endif * test si fontion activee mels = 0 if (ih1.eq.0) then return endif * * mise a jour des hashcodes des segments de itab * if (nbmel.lt.itab(/1)) then nbmel = itab(/1)+100 segadj ih1,ih2,ih3 endif * write (6,*) ' nbmelr itab ',nbmelr,itab(/1) do 10 iel=nbmelr+1,itab(/1) meleme=itab(iel) if (meleme.eq.0) goto 10 segact meleme * ne tester que les supports des chpts if (num(/1).ne.1) goto 10 do i=lisous(/1) do il=1,num(/2) do in=1,num(/1) ipos=in+num(/1)*(il-1) if (mod(ipos,3).eq.0) ih1(iel) = ih1(iel)+num(in,il) if (mod(ipos,3).eq.1) ih2(iel) = ih2(iel)+num(in,il) if (mod(ipos,3).eq.2) ih3(iel) = ih3(iel)+num(in,il) enddo enddo 10 continue nbmelr = itab(/1) * * verication identite avec mele * mels = 0 meleme = mele segact meleme if (num(/1).ne.1) goto 150 mh1=0 mh2=0 mh3=0 do il=1,num(/2) do in=1,num(/1) ipos=in+num(/1)*(il-1) if (mod(ipos,3).eq.0) mh1 = mh1+num(in,il) if (mod(ipos,3).eq.1) mh2 = mh2+num(in,il) if (mod(ipos,3).eq.2) mh3 = mh3+num(in,il) enddo enddo * write (6,*) ' mh1 mh2 mh3 ',mh1,mh2,mh3 * do 100 i = 1,nbmelr if (mele.eq.itab(i)) goto 150 if (mh1.ne.ih1(i)) goto 100 if (mh2.ne.ih2(i)) goto 100 if (mh3.ne.ih3(i)) goto 100 * hash identiques verification complete ipt1 = itab(i) segact ipt1 if (itypel.ne.ipt1.itypel) goto 100 if (lisous(/1).ne.ipt1.lisous(/1)) goto 100 do j=1,lisous(/1) if (lisous(j).ne.ipt1.lisous(j)) goto 100 enddo if (lisref(/1).ne.ipt1.lisref(/1)) goto 100 do j=1,lisref(/1) if (lisref(j).ne.ipt1.lisref(j)) goto 100 enddo if (lisref(/1).ne.ipt1.lisref(/1)) goto 100 * do j=1,lisref(/1) * if (lisref(j).ne.ipt1.lisref(j)) goto 100 * enddo if (icolor(/1).ne.ipt1.icolor(/1)) goto 100 do j=1,icolor(/1) if (icolor(j).ne.ipt1.icolor(j)) goto 100 enddo if (num(/1).ne.ipt1.num(/1)) goto 100 if (num(/2).ne.ipt1.num(/2)) goto 100 do k=1,num(/2) do j=1,num(/1) if (num(j,k).ne.ipt1.num(j,k)) goto 100 enddo enddo ** write (6,*) ' maillages identiques trouves',mele,itab(i), ** > num(/1),num(/2) * maillages identiques! mels = itab(i) goto 150 100 continue 150 continue return end