Télécharger refe.eso

Retour à la liste

Numérotation des lignes :

refe
  1. C REFE SOURCE CB215821 26/08/24 21:18:11 12622
  2. SUBROUTINE REFE
  3. C***********************************************************************
  4. C
  5. C Opérateur REFE
  6. C ______________
  7. C
  8. C
  9. C OBJET : Lister les objets maillages inclus au sens des noeuds dans
  10. C ----- un autre ou indiquer si un objet maillage est inclus dans
  11. C un autre.
  12. C
  13. C SYNTAXE 1 : LOBI = REFE OBJ2 ;
  14. C -------
  15. C LOBI : objet LISTMOTS contenant la liste
  16. C
  17. C
  18. C SYNTAXE 2 : LOGI = OBJ1 REFE OBJ2 ;
  19. C -------
  20. C LOGI : objet de type LOGIQUE prenant les valeurs VRAI
  21. C ou FAUX suivant que OBJ1 est inclus ou non dans
  22. C OBJ2
  23. C
  24. C***********************************************************************
  25. IMPLICIT INTEGER(I-N)
  26. IMPLICIT REAL*8 (A-H,O-Z)
  27. C
  28.  
  29. -INC PPARAM
  30. -INC CCOPTIO
  31. -INC CCNOYAU
  32. -INC SMELEME
  33. -INC SMLMOTS
  34. -INC SMCOORD
  35. -INC SMLENTI
  36. C
  37. SEGMENT IZTGN
  38. CHARACTER*(LONOM) NOML(0)
  39. ENDSEGMENT
  40. SEGMENT/IZTGP/(IPTL(0))
  41. SEGMENT TABOG
  42. CHARACTER*(LONOM) NOMOG(0)
  43. ENDSEGMENT
  44. SEGMENT TIBOG
  45. INTEGER NIMOG(0)
  46. ENDSEGMENT
  47. C
  48. C- Décodage des arguments et détermination de la syntaxe utilisée :
  49. C- CAS 1 : On fait la liste de tous les objets inclus dans obj1
  50. C- CAS 2 : On regarde si obj1 est inclus dans obj2
  51. C
  52. CALL LIROBJ('MAILLAGE',MELEM1,1,IRETOU)
  53. IF (IRETOU.NE.1) RETURN
  54. CALL LIROBJ('MAILLAGE',MELEM2,0,IRETOU)
  55. IF (IRETOU.EQ.0) THEN
  56. IKAS = 1
  57. MELEME = MELEM1
  58. ELSE
  59. IKAS = 2
  60. MELEME = MELEM2
  61. ENDIF
  62. MELEM0 = MELEME
  63. C
  64. C- Initialisation du LISTENTI de travail indiquant si le point
  65. C- numéro I est dans le maillage;
  66. C- LECT(I)<>0 : Le point numéro I est dans le MELEME
  67. C
  68. SEGACT MCOORD
  69. NBNOUV = nbpts
  70. JG = NBNOUV
  71. SEGINI MLENTI
  72. SEGACT MELEME
  73. NBSOUS = LISOUS(/1)
  74. IF (NBSOUS.EQ.0) NBSOUS=1
  75. NPTD = 0
  76. DO 20 KS=1,NBSOUS
  77. IF (NBSOUS.EQ.1) THEN
  78. IPT1 = MELEME
  79. ELSE
  80. IPT1 = LISOUS(KS)
  81. ENDIF
  82. SEGACT IPT1
  83. NP = IPT1.NUM(/1)
  84. NEL = IPT1.NUM(/2)
  85. DO 71 K=1,NEL
  86. DO 10 N=1,NP
  87. IF (LECT(IPT1.NUM(N,K)).EQ.0) THEN
  88. NPTD = NPTD + 1
  89. LECT(IPT1.NUM(N,K)) = NPTD
  90. ENDIF
  91. 10 CONTINUE
  92. 71 CONTINUE
  93. 20 CONTINUE
  94. C
  95. C- Liste des objets maillage à comparer à MELEM0
  96. C
  97. IF (IKAS.EQ.1) THEN
  98. IZTGN = 0
  99. IZTGP = 0
  100. CALL LFILE(' ','MAILLAGE',IZTGN,IZTGP)
  101. IF (IERR.NE.0) THEN
  102. SEGSUP MLENTI
  103. RETURN
  104. ENDIF
  105. SEGACT IZTGN,IZTGP
  106. ELSE
  107. SEGINI IZTGN,IZTGP
  108. NOML(**) = 'INDEFINI'
  109. IPTL(**) = MELEM1
  110. ENDIF
  111. C
  112. C- Inclusion au sens des points des maillages de pointeur IPTL(L)
  113. C- et de nom NOML(L) dans le maillage de pointeur MELEM0.
  114. C
  115. SEGINI TABOG,TIBOG
  116. NL = IPTL(/1)
  117. DO 60 L=1,NL
  118. MELEME = IPTL(L)
  119. IPT1 = MELEME
  120. IF (MELEME.EQ.MELEM0) THEN
  121. NOMOG(**) = NOML(L)
  122. NIMOG(**) = IPTL(L)
  123. ELSE
  124. SEGACT MELEME
  125. NBSOUS = LISOUS(/1)
  126. IF (NBSOUS.EQ.0) NBSOUS=1
  127. DO 40 KS=1,NBSOUS
  128. IF (NBSOUS.EQ.1) THEN
  129. IPT1 = MELEME
  130. ELSE
  131. IPT1 = LISOUS(KS)
  132. ENDIF
  133. SEGACT IPT1
  134. NP = IPT1.NUM(/1)
  135. NEL = IPT1.NUM(/2)
  136. DO 72 K=1,NEL
  137. DO 30 I=1,NP
  138. NU = LECT(IPT1.NUM(I,K))
  139. IF (NU.EQ.0) GOTO 50
  140. 30 CONTINUE
  141. 72 CONTINUE
  142. 40 CONTINUE
  143. NOMOG(**) = NOML(L)
  144. NIMOG(**) = IPTL(L)
  145. 50 CONTINUE
  146. ENDIF
  147. 60 CONTINUE
  148. C
  149. C- Ecriture du résultat et ménage
  150. C
  151. NBO = NIMOG(/1)
  152. IF (IKAS.EQ.1) THEN
  153. JGM = NOMOG(/2)
  154. JGN = 8
  155. SEGINI MLMOTS
  156. IF (JGM.EQ.0) THEN
  157. CALL ERREUR(-313)
  158. ELSE
  159. DO 70 I=1,JGM
  160. MOTS(I) = NOMOG(I)
  161. 70 CONTINUE
  162. ENDIF
  163. SEGACT,MLMOTS
  164. CALL ECROBJ('LISTMOTS',MLMOTS)
  165. ELSE
  166. IF (NBO.EQ.0) THEN
  167. CALL ECRLOG(.FALSE.)
  168. ELSE
  169. CALL ECRLOG(.TRUE.)
  170. ENDIF
  171. ENDIF
  172. SEGSUP IZTGN,IZTGP,TABOG,TIBOG,MLENTI
  173. END
  174.  
  175.  
  176.  
  177.  
  178.  

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