Télécharger paqlig.eso

Retour à la liste

Numérotation des lignes :

paqlig
  1. C PAQLIG SOURCE PV 20/03/30 21:21:55 10567
  2. SUBROUTINE PAQLIG(II,JJ)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. *
  6. * ii est un meleme de seg2 ou de seg3. on chzerche a reconstituer chaque ligne
  7. * en sortie jj est un pointeur sur PAQUET qui contient la liste consecutive
  8. * des noeuds formant une ligne, chaque ligne est séparé par un zero
  9. C
  10. -INC SMELEME
  11. -INC CCGEOME
  12.  
  13. -INC PPARAM
  14. -INC CCOPTIO
  15. -INC SMCOORD
  16. C
  17. INTEGER II,JJ,ITE,NELEM,IPOIT,N1,N2
  18. SEGMENT ICPR(nbpts)
  19. SEGMENT JCPR(nbpts)
  20. SEGMENT KON(ITE,nkon)
  21. segment ivoi(ite)
  22. SEGMENT IDCP(ITE)
  23. SEGMENT PAQUET
  24. INTEGER LIGNE(NELEM)
  25. ENDSEGMENT
  26.  
  27.  
  28. MELEME=II
  29. SEGACT MELEME
  30. SEGINI ICPR,JCPR
  31. ITE=0
  32. nkon=2
  33. IF (LISOUS(/1).NE.0) THEN
  34. CALL ERREUR(16)
  35. RETURN
  36. ENDIF
  37. K=ITYPEL
  38. IF (K.NE.KDEGRE(K)) THEN
  39. CALL ERREUR(16)
  40. RETURN
  41. ENDIF
  42. DO 1 J=1,K,K-1
  43. DO 2 L=1,NUM(/2)
  44. IPOIT=NUM(J,L)
  45. JCPR(IPOIT)=JCPR(IPOIT)+1
  46. nkon=max(nkon,jcpr(ipoit))
  47. IF (JCPR(IPOIT).EQ.3) then
  48. interr(1)=ipoit
  49. CALL ERREUR(-336)
  50. ENDIF
  51. IF( icpr(ipoit).eq.0) then
  52. ITE=ITE+1
  53. ICPR(IPOIT)=ITE
  54. ENDIF
  55. 2 CONTINUE
  56. 1 CONTINUE
  57. * write(6,*) ' ite nkon',ite,nkon
  58. nelem=ite*nkon
  59. c Création du vecteur de connexions
  60. c initialisation
  61. SEGINI KON,ivoi,paquet
  62. C Remplissage
  63. DO 4 L=1,NUM(/2)
  64. N1=ICPR(NUM(1,L))
  65. N2=ICPR(NUM(K,L))
  66. ivoi(n1)=ivoi(n1)+1
  67. ivoi(n2)=ivoi(n2)+1
  68. KON(N1,ivoi(n1))=N2
  69. KON(N2,ivoi(n2))=n1
  70. 4 CONTINUE
  71. SEGDES MELEME
  72. SEGINI IDCP
  73. DO 5 I=1,ICPR(/1)
  74. IF (ICPR(I).EQ.0) GOTO 5
  75. IDCP(ICPR(I))=I
  76. 5 CONTINUE
  77. SEGSUP ICPR ,jcpr
  78. C
  79. C Création d'un vecteur contenant les paquets de lignes
  80. SEGINI PAQUET
  81. J=0
  82. * write(6,*) ' longueur du tableau' , ivoi(/1)
  83. * write(6,*) ( ivoi(iou),iou=1,ivoi(/1))
  84. 100 continue
  85. * on cherche un point de depart
  86. do 10 ip=1,ite
  87. if(mod(ivoi(ip),2).eq.1) go to 7
  88. 10 continue
  89. * il n'y en a pas ... fin
  90. go to 6
  91. 7 ipd=ip
  92. * write(6,*) ' point de depart ' , idcp(ip)
  93. j=j+1
  94. ligne(j)= idcp(ipd)
  95. 70 ipn=kon(ipd,ivoi(ipd))
  96. ivoi(ipd)=ivoi(ipd)-1
  97. * mise a jour de kon et ivoi pour le nouveau point ipn
  98. do 8 io=1,ivoi(ipn)
  99. if(kon(ipn,io).eq.ipd) go to 9
  100. 8 continue
  101. call erreur(5)
  102. segsup idcp,ivoi,kon
  103. return
  104. 9 continue
  105. if(io.eq.ivoi(ipn)) then
  106. ivoi(ipn)=ivoi(ipn)-1
  107. else
  108. do 11 iu=io+1,ivoi(ipn)
  109. 11 kon(ipn,iu-1)=kon(ipn,iu)
  110. ivoi(ipn)=ivoi(ipn)-1
  111. endif
  112. j=j+1
  113. ligne(j)=idcp(ipn)
  114. ipd=ipn
  115. if(ivoi(ipd).eq.0) then
  116. j=j+1
  117. ligne(j)=0
  118. go to 100
  119. endif
  120. go to 70
  121. 6 continue
  122. nelem =j
  123. segsup idcp, ivoi,kon
  124. segadj paquet
  125. jj=paquet
  126. return
  127. end
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  

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