Télécharger versen.eso

Retour à la liste

Numérotation des lignes :

versen
  1. C VERSEN SOURCE PV 20/03/30 21:25:46 10567
  2. C CE SOUS PROGRAMME TRES ATTENDU VERIFIE QUE DANS UN MAILLAGE
  3. C 1 DEUX ELEMENTS AU PLUS ONT UNE ARETE COMMUNE
  4. C 2 CETTE ARETE EST ORIENTE DE MANIERE OPPOSEE DANS CHACUN DES 2
  5. C
  6. C CECI EXISTAIT DEJA DANS COCO (REALISATION THIERRY CHARRAS)
  7. C LA PRESENTE PROGRAMMATION EST HONTEUSEMENT INSPIREE DE CELLE
  8. C DE PRCONT
  9. C
  10. C COPYRIGHT P VERPEAUX & CEA/IRDI/DEDR/DEMT/SMTS/LAMS
  11. C
  12. C SG 2016/06/22 : on saute les elements de dimension 3 pour lesquels
  13. C la verification de sens des aretes ne semble pas avoir de sens
  14. C Peut-etre faudrait-il comparer l'orientation des faces plutot que des
  15. C aretes mais on ne le fait pas encore.
  16. C
  17. C
  18. SUBROUTINE VERSEN
  19. IMPLICIT INTEGER(I-N)
  20. -INC PPARAM
  21. -INC CCOPTIO
  22. -INC CCGEOME
  23. -INC SMELEME
  24. -INC SMCOORD
  25. SEGMENT ICPR(nbpts)
  26. SEGMENT KON(NBCON,NMAX,2)
  27. *
  28. *dbg write(ioimp,*) 'coucou versen'
  29. CALL LIROBJ('MAILLAGE',MELEME,1,IRETOU)
  30. IF (IERR.NE.0) RETURN
  31. SEGINI ICPR
  32. ITE=0
  33. SEGACT MELEME
  34. IPT1=MELEME
  35. DO 3 I=1,MAX(1,LISOUS(/1))
  36. IF (LISOUS(/1).NE.0) THEN
  37. IPT1=LISOUS(I)
  38. SEGACT IPT1
  39. ENDIF
  40. K=IPT1.ITYPEL
  41. *
  42. idiml=ldlr(k)
  43. if (idiml.eq.3) goto 3
  44. *
  45. IDEP=NSPOS(K)
  46. IF (NBSOM(K).GT.0) THEN
  47. IFEP=IDEP+NBSOM(K)-1
  48. ELSE
  49. C Cas du polygone
  50. IFEP=IDEP+NUM(/1)-1
  51. ENDIF
  52. IF (IFEP.LT.IDEP) GOTO 3
  53. DO 4 JJ=IDEP,IFEP
  54. J=IBSOM(JJ)
  55. DO 41 K=1,IPT1.NUM(/2)
  56. IPOIT=IPT1.NUM(J,K)
  57. IF (ICPR(IPOIT).EQ.0) THEN
  58. ITE=ITE+1
  59. ICPR(IPOIT)=ITE
  60. ENDIF
  61. 41 CONTINUE
  62. 4 CONTINUE
  63. 3 CONTINUE
  64.  
  65. IF (ite.eq.0) then
  66. C DO I=1,MAX(1,LISOUS(/1))
  67. C IF (LISOUS(/1).NE.0) THEN
  68. C IPT1=LISOUS(I)
  69. C SEGDES IPT1
  70. C ENDIF
  71. C ENDDO
  72. C SEGDES MELEME
  73. goto 101
  74. ENDIF
  75. C ITE EST LE NOMBRE DE POINTS A CONSIDERER ICPR LE TABLEAU
  76. C ON VA MAINTENANT INITIALISER ET REMPLIR LE TABLEAU DES CONNECTIONS
  77. NBCON=7
  78. NBCONR=NBCON-1
  79. NMAX=(10*ITE)/NBCON+10
  80. SEGINI KON
  81. C FABRICATION DU TABLEAU DES CONNECTIONS
  82. C 1 POINT FINAL
  83. C 2 POINT INTERMEDIAIRE EVENTUEL ET SENS
  84. ICHAIN=ITE
  85. DO 30 IO=1,MAX(1,LISOUS(/1))
  86. IF (LISOUS(/1).NE.0) IPT1=LISOUS(IO)
  87. K=IPT1.ITYPEL
  88. KTYPEL=K
  89. C LE NOMBRE DE FACE EST 1 QUEL EST SON TYPE
  90. KK=LTEL(2,K)
  91. * POUR LE CAS DES LIGNE ON PREND LES FACES TRIANGLE CORRESPONDANTES
  92. IF (K.EQ.KDEGRE(K)) THEN
  93. KA=2*K
  94. KK=LTEL(2,KA)
  95. ENDIF
  96. IF (KK.EQ.0) GOTO 21
  97. ITYP=LDEL(1,KK)
  98. IDEP=LDEL(2,KK)
  99. IF (ITYP.NE.6) THEN
  100. IFEP=IDEP+KDFAC(1,ITYP)-1
  101. * SG 20160711 pour les faces TRI7 et QUA9, on ignore le dernier
  102. * point (centre de la face)
  103. IF (ITYP.EQ.7.OR.ITYP.EQ.8) IFEP=IFEP-1
  104. ELSE
  105. C Cas du polygone
  106. IFEP= IDEP+IPT1.NUM(/1)-1
  107. ENDIF
  108. NBNN=KDEGRE(K)
  109. IPAS=NBNN-1
  110. IF (K.EQ.KDEGRE(K)) IFEP=IDEP
  111. DO 22 I=1,IPT1.NUM(/2)
  112. DO 221 J=IDEP,IFEP,IPAS
  113. NMIL=1
  114. N1=ICPR(IPT1.NUM(LFAC(J),I))
  115. JSUIV=J+IPAS
  116. IF (JSUIV.GT.IFEP.AND.(KTYPEL.NE.KDEGRE(KTYPEL))) THEN
  117. JSUIV=IDEP
  118. ENDIF
  119. N2=ICPR(IPT1.NUM(LFAC(JSUIV),I))
  120. IF (IPAS.EQ.2) NMIL=IPT1.NUM(LFAC(J+1),I)
  121. NI=N1
  122. NJ=N2
  123. IF (N1*N2.EQ.0) GOTO 32
  124. IPO=0
  125. 23 CONTINUE
  126. DO 25 K=1,NBCONR
  127. IF (KON(K,NI,1).EQ.0) GOTO 26
  128. IF (KON(K,NI,1).EQ.NJ) GOTO 27
  129. 25 CONTINUE
  130. IF (KON(NBCON,NI,1).EQ.0) GOTO 28
  131. NI=KON(NBCON,NI,1)
  132. GOTO 23
  133. 27 CONTINUE
  134. IF(IIMPI.EQ.123)WRITE(IOIMP,1122) KON(K,NI,2),NMIL
  135. * 319 : Verification d'orientation impossible car une arete
  136. * appartient a plus de deux elements
  137. IF (KON(K,NI,2).EQ.0) CALL ERREUR(319)
  138. * 318 : Deux elements adjacents ont des orientations opposees
  139. IF (1.*KON(K,NI,2)*NMIL.GT.0.) CALL ERREUR(318)
  140. * IF (IERR.NE.0) GOTO 32
  141. KON(K,NI,2)=0
  142. GOTO 29
  143. 26 KON(K,NI,1)=NJ
  144. KON(K,NI,2)=NMIL
  145. GOTO 29
  146. 28 ICHAIN=ICHAIN+1
  147. IF (ICHAIN.GE.NMAX) THEN
  148. NMAX=NMAX+250
  149. SEGADJ KON
  150. ENDIF
  151. KON(NBCON,NI,1)=ICHAIN
  152. K=1
  153. NI=ICHAIN
  154. GOTO 26
  155. 29 IF (IPO.EQ.1) GOTO 221
  156. NMIL=-NMIL
  157. NI=N2
  158. NJ=N1
  159. IPO=1
  160. GOTO 23
  161. 221 CONTINUE
  162. 22 CONTINUE
  163. 21 CONTINUE
  164. C IF (LISOUS(/1).NE.0) SEGDES IPT1
  165. 30 CONTINUE
  166. GOTO 31
  167. * Tache impossible. Probablement donnees erronees
  168. 32 CALL ERREUR(26)
  169. SEGSUP KON,ICPR
  170. C SEGDES MELEME
  171. RETURN
  172. 31 CONTINUE
  173. C SEGDES MELEME
  174. IF (IIMPI.EQ.2)WRITE (IOIMP,1122) (((KON(I,J,K),K=1,2),I=1,NBCON),
  175. # J=1,NMAX)
  176. 1122 FORMAT(1X,14I5)
  177. * TEST QUE LES ARETES RESTANTES TOURNENT DANS LE MEME SENS
  178. DO 100 I=1,ITE
  179. IF(IIMPI.EQ.123)WRITE(IOIMP,1122) KON(1,I,2),KON(2,I,2)
  180. IF (1.*KON(1,I,2)*KON(2,I,2).GT.0.) CALL ERREUR(318)
  181. 100 CONTINUE
  182. SEGSUP KON
  183. 101 CONTINUE
  184. CALL REFUS
  185. SEGSUP ICPR
  186. END
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  

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