Télécharger extr23.eso

Retour à la liste

Numérotation des lignes :

extr23
  1. C EXTR23 SOURCE CB215821 20/11/25 13:28:41 10792
  2. ************************************************************************
  3. * NOM : extr23
  4. * DESCRIPTION : Extrait les valeurs d'un CHPOINT a une composante pour
  5. * les mettre dans un LISTREEL
  6. ************************************************************************
  7. * HISTORIQUE : 12/12/2012 : JCARDO : création de la subroutine
  8. * HISTORIQUE : 13/12/2012 : JCARDO : nouvel argument MLMOTS contenant
  9. * la liste des composantes à sortir
  10. * HISTORIQUE : 31/05/2016 : JCARDO : nouvel argument IVID permettant
  11. * d'ignorer l'erreur quand une
  12. * composante n'existe pas
  13. * HISTORIQUE :
  14. ************************************************************************
  15. * Prière de PRENDRE LE TEMPS DE COMPLÉTER LES COMMENTAIRES
  16. * en cas de modification de ce sous-programme afin de faciliter
  17. * la maintenance !
  18. ************************************************************************
  19. * APPELÉ PAR : extrai.eso
  20. ************************************************************************
  21. * ENTRÉES :: aucune
  22. * SORTIES :: aucune
  23. ************************************************************************
  24. * SYNTAXE (GIBIANE) :
  25. *
  26. * LREEL1 = EXTR CHPO1 'VALE' (MOT1|LMOT1) (POIN1|MAIL1) ('NOID') ;
  27. *
  28. ************************************************************************
  29. SUBROUTINE EXTR23(ICHPOI,MLMOTS,MELEME,MLREEL,IVID)
  30. *
  31. IMPLICIT INTEGER(I-N)
  32. IMPLICIT REAL*8(A-H,O-Z)
  33. *
  34.  
  35. -INC PPARAM
  36. -INC CCOPTIO
  37. -INC SMCHPOI
  38. -INC SMELEME
  39. -INC SMLREEL
  40. -INC SMLMOTS
  41. *
  42. CHARACTER*(LOCOMP) MCO
  43. *
  44. *
  45. * Création de la liste de réels renvoyée en sortie
  46. JG=0
  47. SEGINI,MLREEL
  48. *
  49. ************************************************************************
  50. * G E S T I O N D E S C O M P O S A N T E S M U L T I P L E S
  51. ************************************************************************
  52. *
  53. * a) SI L'ON N'A PAS FOURNI DE LISTE DE COMPOSANTES
  54. * => on verifie que le CHPOINT ne contient qu'une seule composante
  55. * =============================================================
  56. IF (MLMOTS.NE.0) GOTO 50
  57. MCHPOI=ICHPOI
  58. SEGACT,MCHPOI
  59. NSOUPO=IPCHP(/1)
  60. IF (NSOUPO.EQ.0) GOTO 1000
  61. * /!\ on suppose que la partition est bien faite,
  62. * c'est-à-dire 1 SOUPO = 1 liste de composante unique)
  63.  
  64. DO ii=1,NSOUPO
  65. MSOUPO=MCHPOI.IPCHP(ii)
  66. SEGACT,MSOUPO
  67. NBCOMP=NBCOMP+MSOUPO.NOCOMP(/2)
  68. ENDDO
  69.  
  70. IF (NSOUPO.GT.1) GOTO 9
  71. IF (NBCOMP.GT.1) GOTO 9
  72. GOTO 100
  73. *
  74. * (ERREUR 761 => "L'objet %m1:8 ayant au moins %i1 composantes,
  75. * precisez le nom de la composante a traiter.")
  76. 9 MOTERR(1:8)='CHPOINT'
  77. INTERR(1)=NBCOMP
  78. CALL ERREUR(761)
  79. RETURN
  80. *
  81. *
  82. * b) SI ON A SPECIFIE LA LISTE DES COMPOSANTES A SORTIR
  83. * => on appelle EXCOPP pour faire le travail
  84. * ==================================================
  85. 50 SEGACT,MLMOTS
  86. ICO=0
  87. NCO=MOTS(/2)
  88. * (label 51 = boucle sur les composantes)
  89. 51 CONTINUE
  90. IF (ICO.EQ.NCO) GOTO 1000
  91. ICO=ICO+1
  92. MCO=MOTS(ICO)
  93. CALL EXCOPP(ICHPOI,MCO,NIFOUR,MCHPOI,MCO,NIFOUR,IVID)
  94. IF (IERR.NE.0) RETURN
  95. SEGACT,MCHPOI
  96. NSOUPO=IPCHP(/1)
  97. IF (NSOUPO.GT.1) THEN
  98. MOTERR(1:8)='EXTR23'
  99. CALL ERREUR(1039)
  100. RETURN
  101. ENDIF
  102. *
  103. *
  104. *
  105. ************************************************************************
  106. * G E S T I O N D E L ' O R D R E D U L I S T R E E L
  107. ************************************************************************
  108. *
  109. * a) UN MELEME A ETE FOURNI POUR SPECIFIER L'ORDRE DE SORTIE
  110. * =======================================================
  111. *
  112. 100 CONTINUE
  113. IF (MELEME.EQ.0) GOTO 200
  114. *
  115. * On vérifie qu'il est composé uniquement de POI1
  116. SEGACT,MELEME
  117. IF (LISOUS(/1).GT.0.OR.ITYPEL.NE.1) THEN
  118. MOTERR(1:8)='MAILLAGE'
  119. MOTERR(9:24)='POI1'
  120. CALL ERREUR(1025)
  121. RETURN
  122. ENDIF
  123. *
  124. * Agrandissement du LISTREEL
  125. NP1=NUM(/2)
  126. JG=JG+NP1
  127. SEGADJ,MLREEL
  128. *
  129. * Remplissage du LISTREEL selon l'ordre demandé
  130. IF (NSOUPO.EQ.0) GOTO 950
  131. MSOUPO=IPCHP(1)
  132. SEGACT,MSOUPO
  133. IPT1=IGEOC
  134. MPOVAL=IPOVAL
  135. SEGACT,IPT1,MPOVAL
  136. NP2=IPT1.NUM(/2)
  137. DO 150 I2=1,NP2
  138. DO I3=1,NP1
  139. IF (IPT1.NUM(1,I2).EQ.NUM(1,I3)) THEN
  140. PROG(JG-NP1+I3)=VPOCHA(I2,1)
  141. GOTO 150
  142. ENDIF
  143. ENDDO
  144. 150 CONTINUE
  145.  
  146. GOTO 950
  147. *
  148. *
  149. * b) ON NE S'INTERESSE PAS A L'ORDRE DE SORTIE
  150. * => Remplissage du LISTREEL dans l'ordre du VPOCHA
  151. * =================================================
  152. *
  153. 200 CONTINUE
  154. *
  155. IF (NSOUPO.EQ.0) GOTO 950
  156. MSOUPO=IPCHP(1)
  157. SEGACT,MSOUPO
  158. MPOVAL=IPOVAL
  159. SEGACT,MPOVAL
  160. NP2=VPOCHA(/1)
  161. JG=JG+NP2
  162. SEGADJ,MLREEL
  163. DO I2=1,NP2
  164. PROG(JG-NP2+I2)=VPOCHA(I2,1)
  165. ENDDO
  166. *
  167. *
  168. *
  169. 950 CONTINUE
  170. IF (MLMOTS.NE.0) THEN
  171. CALL DTCHPO(MCHPOI)
  172. GOTO 51
  173. ENDIF
  174. *
  175. *
  176. 1000 CONTINUE
  177. *
  178. END
  179.  
  180.  
  181.  
  182.  
  183.  

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