Télécharger quepo1.eso

Retour à la liste

Numérotation des lignes :

quepo1
  1. C QUEPO1 SOURCE OF166741 24/12/13 21:17:20 12097
  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.  
  31. -INC PPARAM
  32. -INC CCOPTIO
  33. -INC SMELEME
  34. -INC SMCHPOI
  35. -INC SMLMOTS
  36. -INC SMLENTI
  37. C
  38. POINTEUR MLEORD.MLENTI, MLEPOI.MLENTI
  39. C
  40. INTEGER ICHP1, IPSG, LMOT, NSOUPO, NBCOMP, JGN, JGM
  41. & , IC, JG, NBCOM1, IC2, NBSOUS, N, NC, ICOLD, NGP
  42. & , NLP, NLPOLD
  43.  
  44. CHARACTER*(LOCOMP) MOT1
  45.  
  46. LOGICAL LOGORD
  47. C
  48. C- Test si le CHPO est partitionné
  49. C
  50. MCHPOI = ICHP1
  51. SEGACT MCHPOI
  52. NSOUPO = MCHPOI.IPCHP(/1)
  53. IF (NSOUPO.NE.1) THEN
  54. MOTERR='CHPOINT '
  55. CALL ERREUR(132)
  56. GOTO 9999
  57. ENDIF
  58. C
  59. C- Test/Récupération/Imposition du nom des composantes
  60. C
  61. MSOUPO = MCHPOI.IPCHP(1)
  62. SEGDES MCHPOI
  63. SEGACT MSOUPO*MOD
  64. NBCOMP = MSOUPO.NOCOMP(/2)
  65. IF(LMOT .LE. 0)THEN
  66. LOGORD = .TRUE.
  67. JG = NBCOMP
  68. SEGINI MLEORD
  69. C
  70. C******** Recuperation
  71. C
  72. JGN = LOCOMP
  73. JGM = NBCOMP
  74. SEGINI MLMOTS
  75. LMOT = MLMOTS
  76. DO IC = 1, NBCOMP, 1
  77. MLMOTS.MOTS(IC) = MSOUPO.NOCOMP(IC)
  78. MLEORD.LECT(IC) = IC
  79. ENDDO
  80. ELSE
  81. C
  82. C******** Test/imposition
  83. C
  84. MLMOTS = LMOT
  85. SEGACT MLMOTS
  86. NBCOM1 = MLMOTS.MOTS(/2)
  87. IF (NBCOM1.NE.NBCOMP) THEN
  88. MOTERR(1:8) = ' QUEPOI '
  89. MOTERR(9:16) = 'CHAMPOIN'
  90. INTERR(1) = NBCOM1
  91. INTERR(2) = NBCOMP
  92. C
  93. C********** Message d'erreur standard
  94. C 699 2
  95. C routine %m1:8 : On voulait un %m9:16 à %i1 composantes au lieu de %i2 .
  96. C
  97. CALL ERREUR(699)
  98. GOTO 9999
  99. ENDIF
  100. JG = NBCOMP
  101. LOGORD = .TRUE.
  102. SEGINI MLEORD
  103. DO IC = 1, NBCOMP, 1
  104. C
  105. C********** On cherche la position de chaque composante en MLMOTS
  106. C
  107. MOT1 = MSOUPO.NOCOMP(IC)
  108. DO IC2 = 1, NBCOMP, 1
  109. IF(MLMOTS.MOTS(IC2) .EQ. MOT1) THEN
  110. IF(IC2 .NE. IC) LOGORD= .FALSE.
  111. MLEORD.LECT(IC2) = IC
  112. GOTO 1
  113. ENDIF
  114. ENDDO
  115. C
  116. C********** On est la car on n'as pas de MOT1
  117. MOTERR=MOT1
  118. CALL ERREUR(197)
  119. GOTO 9999
  120. C
  121. 1 CONTINUE
  122. ENDDO
  123. ENDIF
  124. C
  125. C- Transforme le maillage en POI1 si maillage quelconque
  126. C- Le maillage POI1 de pointeur IPT1 est actif au retour de CHANGE
  127. C
  128. IPT1 = MSOUPO.IGEOC
  129. IF(IPSG .EQ. 0)THEN
  130. MELEME = IPT1
  131. ELSE
  132. MELEME = IPSG
  133. ENDIF
  134. SEGACT MELEME
  135. NBSOUS = MELEME.LISOUS(/1)
  136. IF ((NBSOUS.NE.0).OR.(ITYPEL.NE.1)) THEN
  137. CALL CHANGE(MELEME,1)
  138. IF (IERR.NE.0) GOTO 9999
  139. ENDIF
  140. C
  141. C- Si égalité des pointeurs et LOGORD -> OK, sinon
  142. C
  143. IF (LOGORD .AND. (MELEME .EQ. IPT1)) THEN
  144. SEGDES MELEME
  145. SEGDES MLMOTS
  146. SEGSUP MLEORD
  147. SEGDES MSOUPO
  148. IF(MLEORD .GT. 0) SEGSUP MLEORD
  149. RETURN
  150. ELSE
  151. C
  152. C- Dans le cas d'un MELEME de POI1 création d'un CHPO de support
  153. C- géométrique le POI1 en question.
  154. C
  155. N = MELEME.NUM(/2)
  156. NC = NBCOMP
  157. SEGINI MPOVA1
  158. MPOVAL = MSOUPO.IPOVAL
  159. SEGACT MPOVAL
  160. C
  161. C- Recherche si les points du MELEME de type POI1 sont dans le CHPO
  162. C- et ordonnencement
  163. C
  164. CALL KRIPAD(IPT1,MLEPOI)
  165. C SEGACT MLEPOI
  166. DO IC = 1, NC, 1
  167. ICOLD = MLEORD.LECT(IC)
  168. MSOUPO.NOCOMP(IC) = MLMOTS.MOTS(IC)
  169. DO NLP = 1, N, 1
  170. NGP = MELEME.NUM(1,NLP)
  171. NLPOLD = MLEPOI.LECT(NGP)
  172. IF(NLPOLD .EQ. 0)THEN
  173. MOTERR(1:8) = 'CHAMPOIN'
  174. MOTERR(9:16) = 'MAILLAGE'
  175. INTERR(1) = 1
  176. CALL ERREUR(698)
  177. GOTO 9999
  178. C
  179. C**************** Message d'erreur standard
  180. C 698 2
  181. C Incohérence entre les pointeurs géométriques des objets %m1:8 et %m9:16
  182. C 698 2
  183. C pour la zone élémentaire numéro %i1.
  184. C
  185. ELSE
  186. MPOVA1.VPOCHA(NLP,IC)=MPOVAL.VPOCHA(NLPOLD,ICOLD)
  187. ENDIF
  188. ENDDO
  189. ENDDO
  190. SEGDES MPOVA1
  191. MSOUPO.IGEOC=MELEME
  192. MSOUPO.IPOVAL=MPOVA1
  193. SEGDES MSOUPO
  194. SEGSUP MLEORD
  195. SEGSUP MLEPOI
  196. ENDIF
  197. 9999 CONTINUE
  198. RETURN
  199. END
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  

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