Télécharger quepo1.eso

Retour à la liste

Numérotation des lignes :

quepo1
  1. C QUEPO1 SOURCE CB215821 20/11/25 13:38:07 10792
  2. SUBROUTINE QUEPO1(ICHP1,IPSG,LMOT)
  3. C-----------------------------------------------------------------------
  4. C On teste le champoint ICHP1 afin de vérifier :
  5. C 1) qu'il est non partitionné
  6. C 2) qu'il a le bon nombre de composantes et/ou les bonnes composantes
  7. C 3) que son support géométrique est IPSG
  8. C-----------------------------------------------------------------------
  9. C
  10. C---------------------------
  11. C Parametres Entree/Sortie :
  12. C---------------------------
  13. C
  14. C E/ ICHP1 : Champoint à tester
  15. C E/ IPSG : Maillage de référence, en général de type POI1
  16. C Si IPSG = 0: pas de test sur le maiilage
  17. C E/S LMOT : En entrée (si LMOT > 0),
  18. C noms des composantes à tester
  19. C En sortie (si LMOT <= 0),
  20. C noms des composantes du CHPO
  21. C-----------------------------------------------------------------------
  22. C
  23. C Langage : ESOPE + FORTRAN77
  24. C
  25. C Auteurs : A. BECCANTINI
  26. C
  27. C-----------------------------------------------------------------------
  28. IMPLICIT INTEGER(I-N)
  29. IMPLICIT REAL*8 (A-H,O-Z)
  30. C
  31.  
  32. -INC PPARAM
  33. -INC CCOPTIO
  34. -INC SMELEME
  35. -INC SMCHPOI
  36. -INC SMLMOTS
  37. -INC SMLENTI
  38. C
  39. C**** Variables de COOPTIO
  40. C
  41. C INTEGER IPLLB, IERPER, IERMAX, IERR, INTERR
  42. C & ,IOTER, IOLEC, IOIMP, IOCAR, IOACQ
  43. C & ,IOPER, IOSGB, IOGRA, IOSAU, IORES
  44. C & ,IECHO, IIMPI, IOSPI
  45. C & ,IDIM
  46. C & ,MCOORD
  47. C & ,IFOMOD, NIFOUR, IFOUR, NSDPGE, IONIVE
  48. C & ,NGMAXY, IZROSF, ISOTYP, IOSCR,LTEXLU
  49. C & ,NORINC,NORVAL,NORIND,NORVAD
  50. C & ,NUCROU, IPSAUV
  51. CC
  52. POINTEUR MLEORD.MLENTI, MLEPOI.MLENTI
  53. C
  54. INTEGER ICHP1, IPSG, LMOT, NSOUPO, NBCOMP, JGN, JGM
  55. & , IC, JG, NBCOM1, IC2, NBSOUS, N, NC, ICOLD, NGP
  56. & , NLP, NLPOLD
  57.  
  58. CHARACTER*(LOCOMP) MOT1
  59.  
  60. LOGICAL LOGORD
  61. C
  62. C- Test si le CHPO est partitionné
  63. C
  64. MCHPOI = ICHP1
  65. SEGACT MCHPOI
  66. NSOUPO = MCHPOI.IPCHP(/1)
  67. IF (NSOUPO.NE.1) THEN
  68. MOTERR='CHPOINT '
  69. CALL ERREUR(132)
  70. GOTO 9999
  71. ENDIF
  72. C
  73. C- Test/Récupération/Imposition du nom des composantes
  74. C
  75. MSOUPO = MCHPOI.IPCHP(1)
  76. SEGDES MCHPOI
  77. SEGACT MSOUPO*MOD
  78. NBCOMP = MSOUPO.NOCOMP(/2)
  79. IF(LMOT .LE. 0)THEN
  80. LOGORD = .TRUE.
  81. JG = NBCOMP
  82. SEGINI MLEORD
  83. C
  84. C******** Recuperation
  85. C
  86. JGN = LOCOMP
  87. JGM = NBCOMP
  88. SEGINI MLMOTS
  89. LMOT = MLMOTS
  90. DO IC = 1, NBCOMP, 1
  91. MLMOTS.MOTS(IC) = MSOUPO.NOCOMP(IC)
  92. MLEORD.LECT(IC) = IC
  93. ENDDO
  94. ELSE
  95. C
  96. C******** Test/imposition
  97. C
  98. MLMOTS = LMOT
  99. SEGACT MLMOTS
  100. NBCOM1 = MLMOTS.MOTS(/2)
  101. IF (NBCOM1.NE.NBCOMP) THEN
  102. MOTERR(1:8) = ' QUEPOI '
  103. MOTERR(9:16) = 'CHAMPOIN'
  104. INTERR(1) = NBCOM1
  105. INTERR(2) = NBCOMP
  106. C
  107. C********** Message d'erreur standard
  108. C 699 2
  109. C routine %m1:8 : On voulait un %m9:16 à %i1 composantes au lieu de %i2 .
  110. C
  111. CALL ERREUR(699)
  112. GOTO 9999
  113. ENDIF
  114. JG = NBCOMP
  115. LOGORD = .TRUE.
  116. SEGINI MLEORD
  117. DO IC = 1, NBCOMP, 1
  118. C
  119. C********** On cherche la position de chaque composante en MLMOTS
  120. C
  121. MOT1 = MSOUPO.NOCOMP(IC)
  122. DO IC2 = 1, NBCOMP, 1
  123. IF(MLMOTS.MOTS(IC2) .EQ. MOT1) THEN
  124. IF(IC2 .NE. IC) LOGORD= .FALSE.
  125. MLEORD.LECT(IC2) = IC
  126. GOTO 1
  127. ENDIF
  128. ENDDO
  129. C
  130. C********** On est la car on n'as pas de MOT1
  131. MOTERR=MOT1
  132. CALL ERREUR(197)
  133. GOTO 9999
  134. C
  135. 1 CONTINUE
  136. ENDDO
  137. ENDIF
  138. C
  139. C- Transforme le maillage en POI1 si maillage quelconque
  140. C- Le maillage POI1 de pointeur IPT1 est actif au retour de CHANGE
  141. C
  142. IPT1 = MSOUPO.IGEOC
  143. IF(IPSG .EQ. 0)THEN
  144. MELEME = IPT1
  145. ELSE
  146. MELEME = IPSG
  147. ENDIF
  148. SEGACT MELEME
  149. NBSOUS = MELEME.LISOUS(/1)
  150. IF ((NBSOUS.NE.0).OR.(ITYPEL.NE.1)) THEN
  151. CALL CHANGE(MELEME,1)
  152. IF (IERR.NE.0) GOTO 9999
  153. ENDIF
  154. C
  155. C- Si égalité des pointeurs et LOGORD -> OK, sinon
  156. C
  157. IF (LOGORD .AND. (MELEME .EQ. IPT1)) THEN
  158. SEGDES MELEME
  159. SEGDES MLMOTS
  160. SEGSUP MLEORD
  161. SEGDES MSOUPO
  162. IF(MLEORD .GT. 0) SEGSUP MLEORD
  163. RETURN
  164. ELSE
  165. C
  166. C- Dans le cas d'un MELEME de POI1 création d'un CHPO de support
  167. C- géométrique le POI1 en question.
  168. C
  169. N = MELEME.NUM(/2)
  170. NC = NBCOMP
  171. SEGINI MPOVA1
  172. MPOVAL = MSOUPO.IPOVAL
  173. SEGACT MPOVAL
  174. C
  175. C- Recherche si les points du MELEME de type POI1 sont dans le CHPO
  176. C- et ordonnencement
  177. C
  178. CALL KRIPAD(IPT1,MLEPOI)
  179. C SEGACT MLEPOI
  180. DO IC = 1, NC, 1
  181. ICOLD = MLEORD.LECT(IC)
  182. MSOUPO.NOCOMP(IC) = MLMOTS.MOTS(IC)
  183. DO NLP = 1, N, 1
  184. NGP = MELEME.NUM(1,NLP)
  185. NLPOLD = MLEPOI.LECT(NGP)
  186. IF(NLPOLD .EQ. 0)THEN
  187. MOTERR(1:8) = 'CHAMPOIN'
  188. MOTERR(9:16) = 'MAILLAGE'
  189. INTERR(1) = 1
  190. CALL ERREUR(698)
  191. GOTO 9999
  192. C
  193. C**************** Message d'erreur standard
  194. C 698 2
  195. C Incohérence entre les pointeurs géométriques des objets %m1:8 et %m9:16
  196. C 698 2
  197. C pour la zone élémentaire numéro %i1.
  198. C
  199. ELSE
  200. MPOVA1.VPOCHA(NLP,IC)=MPOVAL.VPOCHA(NLPOLD,ICOLD)
  201. ENDIF
  202. ENDDO
  203. ENDDO
  204. SEGDES MPOVA1
  205. MSOUPO.IGEOC=MELEME
  206. MSOUPO.IPOVAL=MPOVA1
  207. SEGDES MSOUPO
  208. SEGSUP MLEORD
  209. SEGSUP MLEPOI
  210. ENDIF
  211. 9999 CONTINUE
  212. RETURN
  213. END
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  

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