Télécharger extr14.eso

Retour à la liste

Numérotation des lignes :

extr14
  1. C EXTR14 SOURCE SP204843 24/11/07 21:15:02 12074
  2. SUBROUTINE EXTR14(IPCHE1,IENT1,IENT2,IENT3,MOT,IPMAI1)
  3. C_____________________________________________________________________
  4. C
  5. C Extrait une composante d'un MCHAML
  6. C
  7. C Entrees :
  8. C ---------
  9. C
  10. C IPCHE1 Pointeur sur un MCHAML
  11. C IENT1 Numero de la sous zone
  12. C IENT2 Numero de l'element
  13. C IENT3 Numero du point de gauss
  14. C MOT Nom de la composante a extraire ou mot cle indiquant
  15. C l'action a effectuer (TITR = TYPE ou MAIL)
  16. C
  17. C JM CAMPENON le 07/91
  18. C C La Borderie le 21/07/92 :possibilite d'extraire une composante entiere
  19. C PP 21/12/92 :extension a l'extraction d'un objet de type quelconque
  20. C_____________________________________________________________________
  21. C
  22. IMPLICIT INTEGER(I-N)
  23. IMPLICIT REAL*8(A-H,O-Z)
  24. C
  25.  
  26. -INC PPARAM
  27. -INC CCOPTIO
  28. -INC CCGEOME
  29. -INC SMCHAML
  30. -INC SMINTE
  31. -INC SMLMOTS
  32. -INC SMELEME
  33. C
  34. logical ltelq
  35. REAL*8 FLOX
  36. CHARACTER*(LOCOMP) MOT
  37. CHARACTER*(4) MOT4
  38. CHARACTER*8 TYPOBJ
  39. CHARACTER*(LOCHAI) CTEXT
  40. C
  41. MCHELM=IPCHE1
  42. SEGACT MCHELM
  43. NSOUS=ICHAML(/1)
  44. C
  45. MOT4=MOT
  46. IF ((MOT4.EQ.'TITR').OR.(MOT4.EQ.'TYPE')) THEN
  47. JGM=1
  48. JGN=TITCHE(/1)
  49. CTEXT=TITCHE
  50. SEGINI MLMOTS
  51. IPMOTS=MLMOTS
  52. MOTS(1)=CTEXT
  53. SEGDES MLMOTS
  54. CALL ECROBJ('LISTMOTS',IPMOTS)
  55. RETURN
  56. ELSEIF (MOT4.EQ.'MAIL') THEN
  57. N1 = IMACHE(/1)
  58. IF ( N1 .EQ. 0) THEN
  59. C Cas du MCHAML VIDE ==> MAILLAGE VIDE
  60. NBELEM=0
  61. NBNN =NBNNE(ILCOUR)
  62. NBREF =0
  63. NBSOUS=0
  64. SEGINI MELEME
  65. ITYPEL = ILCOUR
  66. IPP1 = MELEME
  67. ELSE
  68. IPP1=IMACHE(1)
  69. IF(NSOUS.GT.1) THEN
  70. DO 30 I=2,NSOUS
  71. IPP2=IMACHE(I)
  72. ltelq=.false.
  73. CALL FUSE (IPP1,IPP2,IRET,ltelq)
  74. IPP1=IRET
  75. 30 CONTINUE
  76. ENDIF
  77. ENDIF
  78. CALL ACTOBJ('MAILLAGE',IPP1,1)
  79. CALL ECROBJ('MAILLAGE',IPP1)
  80. GOTO 555
  81. ENDIF
  82.  
  83. C Extraction de la valeur dans 1 element :
  84. C Recherche du numero de la sous-zone et de l'element dans le MCHAML
  85. IF (IPMAI1.NE.0) THEN
  86. N1 = IMACHE(/1)
  87. IF (N1.EQ.0) THEN
  88. MOTERR(1:8) = 'MCHAML'
  89. CALL ERREUR(1027)
  90. GOTO 555
  91. ENDIF
  92. IPT1 = IPMAI1
  93. ITYP1 = IPT1.ITYPEL
  94. DO 40 I=1,NSOUS
  95. MELEME = IMACHE(I)
  96. SEGACT,MELEME
  97. IF (ITYPEL.NE.ITYP1) GOTO 40
  98. MCHAML = ICHAML(I)
  99. SEGACT,MCHAML
  100. IOK = 0
  101. NCOMP = NOMCHE(/1)
  102. DO 405 ICOMP=1,NCOMP
  103. IF (MOT.EQ.NOMCHE(ICOMP)) IOK = 1
  104. 405 CONTINUE
  105. IF (IOK.NE.1) GOTO 40
  106. NBNO1 = NUM(/1)
  107. NBEL1 = NUM(/2)
  108. DO 400 IEL=1,NBEL1
  109. DO 410 INO=1,NBNO1
  110. IF (NUM(INO,IEL).NE.IPT1.NUM(INO,1)) GOTO 400
  111. 410 CONTINUE
  112. IENT1 = I
  113. IENT2 = IEL
  114. GOTO 50
  115. 400 CONTINUE
  116. 40 CONTINUE
  117.  
  118. C Element pas trouve dans MCHAML
  119. CALL ERREUR(21)
  120. RETURN
  121.  
  122. C Element trouve : on poursuit
  123. 50 CONTINUE
  124. ENDIF
  125.  
  126. IF (IENT1.GT.NSOUS) THEN
  127. C
  128. C Sous zone inexistante
  129. C
  130. CALL ERREUR(279)
  131. GOTO 555
  132. ENDIF
  133. C
  134. MELEME=IMACHE(IENT1)
  135. SEGACT MELEME
  136. NBELEM=NUM(/2)
  137. NBPGAU=NUM(/1)
  138. C
  139. N3=INFCHE(/2)
  140. IF (N3.GE.4) THEN
  141. MINTE=INFCHE(IENT1,4)
  142. IF(MINTE.NE.0)THEN
  143. SEGACT MINTE
  144. NBPGAU=POIGAU(/1)
  145. ENDIF
  146. ENDIF
  147. C
  148. IF (IENT3.GT.NBPGAU.OR.IENT2.GT.NBELEM) THEN
  149. C
  150. C Numero du point de gauss ou de l'element trop grand
  151. C
  152. CALL ERREUR(281)
  153. GOTO 555
  154. ENDIF
  155. C
  156. MCHAML=ICHAML(IENT1)
  157. SEGACT MCHAML
  158. NCOMP=IELVAL(/1)
  159. DO 100 ICOMP=1,NCOMP
  160. IF (MOT.EQ.NOMCHE(ICOMP)) GOTO 200
  161. 100 CONTINUE
  162. C
  163. C Composante inexistante
  164. C
  165. CALL ERREUR (280)
  166. GOTO 444
  167. C
  168. 200 CONTINUE
  169. MELVAL=IELVAL(ICOMP)
  170. SEGACT MELVAL
  171. C+PP
  172. IF(TYPCHE(ICOMP)(1:6).EQ.'REAL*8')THEN
  173. IGMN=MIN(IENT3,VELCHE(/1))
  174. IBMN=MIN(IENT2,VELCHE(/2))
  175. FLOX=VELCHE(IGMN,IBMN)
  176. CALL ECRREE(FLOX)
  177. ELSE
  178. TYPOBJ=TYPCHE(ICOMP)(9:16)
  179. IGMN=MIN(IENT3,IELCHE(/1))
  180. IBMN=MIN(IENT2,IELCHE(/2))
  181. IPOOBJ=IELCHE(IGMN,IBMN)
  182. C Gestion des pointeurs nuls (et oui, ca arrive)
  183. IF (IPOOBJ.EQ.0) THEN
  184. MOTERR(1:8)=TYPOBJ
  185. CALL ERREUR(356)
  186. ENDIF
  187. CALL ACTOBJ(TYPOBJ,IPOOBJ,1)
  188. CALL ECROBJ(TYPOBJ,IPOOBJ)
  189. ENDIF
  190. C+PP
  191. C
  192. 444 CONTINUE
  193. C
  194. 555 CONTINUE
  195. END
  196.  
  197.  
  198.  
  199.  
  200.  

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