Télécharger extr25.eso

Retour à la liste

Numérotation des lignes :

extr25
  1. C EXTR25 SOURCE FD218221 25/03/13 21:15:01 12195
  2. SUBROUTINE EXTR25(MCHEL1,MOT)
  3. C
  4. C Extrait les valeurs d'une composante d'un MCHAML et les range dans
  5. C - un LISTREEL si la composante est de type REAL*8
  6. C - un LISTENTI si la composante est de type POINTEUR
  7. C
  8. C Entrees :
  9. C ---------
  10. C
  11. C MCHEL1 Pointeur sur un MCHAML
  12. C MOT Nom de la composante a extraire
  13. C
  14. C La liste resultat est ecrite dans la pile
  15. C
  16.  
  17.  
  18. C Typages implicites habituels
  19. IMPLICIT INTEGER(I-N)
  20. IMPLICIT REAL*8(A-H,O-Z)
  21.  
  22.  
  23. C Les includes necessaires
  24. -INC PPARAM
  25. -INC SMLREEL
  26. -INC SMCHAML
  27. -INC SMINTE
  28. -INC SMELEME
  29. -INC SMLENTI
  30.  
  31.  
  32. C Type de certains objets
  33. CHARACTER*(LOCOMP) MOT,TYC
  34. LOGICAL LREAL
  35.  
  36. C LRELA indique si l'on doit faire un LISTREEL (.TRUE.) ou
  37. C un LISTENTI (.FALSE.)
  38. LREAL=.TRUE.
  39.  
  40. C Initialisation de la liste resultat
  41. C On suppose que ce sera un LISTREEL pour le moment
  42. JG=0
  43. SEGINI MLREE1
  44.  
  45. C Nombre de valeurs de la liste
  46. IV=0
  47.  
  48. C Boucle sur les sous zones
  49. NSZ=MCHEL1.IMACHE(/1)
  50. DO I=1,NSZ
  51. IPT1=MCHEL1.IMACHE(I)
  52. MCHAM1=MCHEL1.ICHAML(I)
  53. MINTE1=MCHEL1.INFCHE(I,4)
  54. NBPSUP=MINTE1.POIGAU(/1)
  55. IF (NBPSUP.EQ.0) NBPSUP=IPT1.NUM(/1)
  56. C Type de la 1ere composante
  57. TYC=MCHAM1.TYPCHE(1)
  58. C Si composante non reele, on initialise un LISTENTI
  59. IF ((LREAL).AND.(TYC.NE.'REAL*8 ')) THEN
  60. LREAL=.FALSE.
  61. JG=0
  62. SEGINI MLENT1
  63. ENDIF
  64. C Boucle sur les composantes
  65. NCO=MCHAM1.IELVAL(/1)
  66. DO J=1,NCO
  67. C On ne travaille que sur la composante MOT
  68. IF (MCHAM1.NOMCHE(J).EQ.MOT) THEN
  69. C Tableau des valeurs de la composante MOT
  70. MELVA1=MCHAM1.IELVAL(J)
  71. C Nombre d'elements du maillage
  72. NEL=IPT1.NUM(/2)
  73. C Dimensions du tableau VELCHE
  74. IF (LREAL) THEN
  75. NP=MELVA1.VELCHE(/1)
  76. NE=MELVA1.VELCHE(/2)
  77. ELSE
  78. NP=MELVA1.IELCHE(/1)
  79. NE=MELVA1.IELCHE(/2)
  80. ENDIF
  81. C Ajustement de la liste selon ce tableau VELCHE
  82. JG=IV+(NEL*NBPSUP)
  83. IF (LREAL) THEN
  84. SEGADJ MLREE1
  85. ELSE
  86. SEGADJ MLENT1
  87. ENDIF
  88. C Boucle sur les elements
  89. DO K=1,NEL
  90. KK=K
  91. C Champ uniforme dans le maillage ?
  92. IF ((NP.EQ.1).AND.(NE.EQ.1)) KK=1
  93. C Boucle sur les points supports
  94. DO L=1,NBPSUP
  95. LL=L
  96. C Champ uniforme dans l'element ?
  97. IF (NP.EQ.1) LL=1
  98. C Remplissage de la liste
  99. IF (LREAL) THEN
  100. XVAL=MELVA1.VELCHE(LL,KK)
  101. IV=IV+1
  102. MLREE1.PROG(IV)=XVAL
  103. ELSE
  104. IVAL=MELVA1.IELCHE(LL,KK)
  105. IV=IV+1
  106. MLENT1.LECT(IV)=IVAL
  107. ENDIF
  108. ENDDO
  109. ENDDO
  110. ENDIF
  111. ENDDO
  112. ENDDO
  113.  
  114. C Ecriture de la liste dans la pile et sortie
  115. IF (LREAL) THEN
  116. CALL ECROBJ('LISTREEL',MLREE1)
  117. ELSE
  118. SEGSUP MLREE1
  119. CALL ECROBJ('LISTENTI',MLENT1)
  120. ENDIF
  121. RETURN
  122.  
  123. END
  124.  
  125.  

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