Télécharger chleha.eso

Retour à la liste

Numérotation des lignes :

chleha
  1. C CHLEHA SOURCE PV 20/03/30 21:16:05 10567
  2. *
  3. * appele dans menage: elimination des meleme dupliques
  4. *
  5. subroutine chleha(ifonc,mele,mels,itab,ilisse)
  6. save ih1,ih2,ih3,nbmelr
  7. integer ifonc,mele,mels
  8. integer nbmel,nbmelr
  9. integer i,j,k,iel
  10. integer il,in,ipos
  11. integer mh1,mh2,mh3
  12. data ih1,ih2,ih3/0,0,0/
  13.  
  14. -INC PPARAM
  15. -INC CCOPTIO
  16. -INC SMELEME
  17. -INC TMCOLAC
  18. -INC SMCOORD
  19. segment itab(0)
  20. segment ih1(nbmel)
  21. segment ih2(nbmel)
  22. segment ih3(nbmel)
  23. *
  24. * ifonc = 1 initialisation des structures
  25. if (ifonc.eq.1) then
  26. nbmel=100
  27. segini ih1,ih2,ih3
  28. nbmelr=0
  29. segdes ih1
  30. segdes ih2
  31. segdes ih3
  32. return
  33. * ifonc = 2 suppression des structures
  34. elseif (ifonc.eq.2) then
  35. if (ih1.ne.0) segsup ih1,ih2,ih3
  36. ih1=0
  37. ih2=0
  38. ih3=0
  39. return
  40. endif
  41. * test si fontion activee
  42. mels = 0
  43. if (ih1.eq.0) then
  44. return
  45. endif
  46. *
  47. * mise a jour des hashcodes des segments de itab
  48. *
  49. segact ih1*mod
  50. segact ih2*mod
  51. segact ih3*mod
  52. nbmel=ih1(/1)
  53. if (nbmel.lt.itab(/1)) then
  54. nbmel = itab(/1)+100
  55. segadj ih1,ih2,ih3
  56. endif
  57. * write (6,*) ' nbmelr itab ',nbmelr,itab(/1)
  58. do 10 iel=nbmelr+1,itab(/1)
  59. meleme=itab(iel)
  60. if (meleme.eq.0) goto 10
  61. segact meleme
  62. * ne tester que les supports des chpts
  63. if (num(/1).ne.1) goto 10
  64. if (num(/2).gt.nbpts) goto 10
  65. do il=1,num(/2)
  66. do in=1,num(/1)
  67. ipos=in+num(/1)*(il-1)
  68. if (mod(ipos,3).eq.0) ih1(iel) = ih1(iel)+num(in,il)
  69. if (mod(ipos,3).eq.1) ih2(iel) = ih2(iel)+num(in,il)
  70. if (mod(ipos,3).eq.2) ih3(iel) = ih3(iel)+num(in,il)
  71. enddo
  72. enddo
  73. 10 continue
  74. nbmelr = itab(/1)
  75. *
  76. * verication identite avec mele
  77. *
  78. mels = 0
  79. meleme = mele
  80. segact meleme
  81.  
  82. i=iliseg((meleme-1)/npgcd)
  83. if (i.ne.0) then
  84. * meleme deja connu
  85. if (itab(i).ne.meleme) call erreur(5)
  86. mh1=ih1(i)
  87. mh2=ih2(i)
  88. mh3=ih3(i)
  89. else
  90. * meleme pas connu il faut recalculer le hash code
  91. if (num(/1).ne.1) goto 150
  92. if (num(/2).gt.nbpts) goto 150
  93. mh1=0
  94. mh2=0
  95. mh3=0
  96. do il=1,num(/2)
  97. do in=1,num(/1)
  98. ipos=in+num(/1)*(il-1)
  99. if (mod(ipos,3).eq.0) mh1 = mh1+num(in,il)
  100. if (mod(ipos,3).eq.1) mh2 = mh2+num(in,il)
  101. if (mod(ipos,3).eq.2) mh3 = mh3+num(in,il)
  102. enddo
  103. enddo
  104. endif
  105. * write (6,*) ' mh1 mh2 mh3 ',mh1,mh2,mh3
  106. *
  107. do 100 i = 1,nbmelr
  108. if (mele.eq.itab(i)) goto 150
  109. if (mh1.ne.ih1(i)) goto 100
  110. if (mh2.ne.ih2(i)) goto 100
  111. if (mh3.ne.ih3(i)) goto 100
  112. * hash identiques verification complete
  113. ipt1 = itab(i)
  114. segact ipt1
  115. if (itypel.ne.ipt1.itypel) goto 100
  116. if (lisous(/1).ne.ipt1.lisous(/1)) goto 100
  117. do j=1,lisous(/1)
  118. if (lisous(j).ne.ipt1.lisous(j)) goto 100
  119. enddo
  120. if (lisref(/1).ne.ipt1.lisref(/1)) goto 100
  121. do j=1,lisref(/1)
  122. if (lisref(j).ne.ipt1.lisref(j)) goto 100
  123. enddo
  124. * enddo
  125. if (icolor(/1).ne.ipt1.icolor(/1)) goto 100
  126. do j=1,icolor(/1)
  127. if (icolor(j).ne.ipt1.icolor(j)) goto 100
  128. enddo
  129. if (num(/1).ne.ipt1.num(/1)) goto 100
  130. if (num(/2).ne.ipt1.num(/2)) goto 100
  131. do k=1,num(/2)
  132. do j=1,num(/1)
  133. if (num(j,k).ne.ipt1.num(j,k)) goto 100
  134. enddo
  135. enddo
  136. ** write (6,*) ' maillages identiques trouves',mele,itab(i),
  137. ** > num(/1),num(/2)
  138.  
  139.  
  140. * maillages identiques!
  141. mels = itab(i)
  142. goto 150
  143. 100 continue
  144. 150 continue
  145. segdes ih1
  146. segdes ih2
  147. segdes ih3
  148. return
  149. end
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales