Télécharger kcha0.eso

Retour à la liste

Numérotation des lignes :

kcha0
  1. C KCHA0 SOURCE CB215821 20/11/25 13:30:51 10792
  2. SUBROUTINE KCHA0(ICHP1,IPSG,NBCOMP,NOMTOT,MTRAV,ICCPR)
  3. C-----------------------------------------------------------------------
  4. C Création du segment de travail MTRAV (et du segment de redirection)
  5. C associé au champoint ICHP1 sur le maillage de référence IPSG.
  6. C Le segment de travail contient au plus les composantes contenues
  7. C dans le tableau NOMTOT (si NBCOMP est différent de 0) .
  8. C-----------------------------------------------------------------------
  9. C
  10. C---------------------------
  11. C Parametres Entree/Sortie :
  12. C---------------------------
  13. C
  14. C E/ ICHP1 : Champoint
  15. C E/ IPSG : Maillage de référence, en général de type POI1
  16. C E/ NBCOMP : Nombre de composantes à extraire (toutes NBCOMP = 0)
  17. C E/ NOMTOT : Tableau des noms des composantes à extraire
  18. C S/ MTRAV : Segment de travail
  19. C S/ ICCPR : Segment de redirection (ICPR inverse de IGEO dans MTRAV)
  20. C
  21. C-------------------------------------
  22. C Tableaux du segment de redirection :
  23. C-------------------------------------
  24. C
  25. C ICPR(I)=J : Le noeud I a le numero J dans le MELEME des faces
  26. C NNGOT : Nombre de noeuds total du domaine
  27. C
  28. C-----------------------------------------------------------------------
  29. C
  30. C Langage : ESOPE + FORTRAN77
  31. C
  32. C Auteurs : L. DADA
  33. C
  34. C-----------------------------------------------------------------------
  35. IMPLICIT INTEGER(I-N)
  36. IMPLICIT REAL*8 (A-H,O-Z)
  37. CHARACTER*(*) NOMTOT(*)
  38. C
  39.  
  40. -INC PPARAM
  41. -INC CCOPTIO
  42. -INC SMELEME
  43. -INC SMCHPOI
  44. -INC SMCOORD
  45. -INC TMTRAV
  46. C
  47. SEGMENT ICCPR
  48. INTEGER ICPR(NNGOT)
  49. ENDSEGMENT
  50. C
  51. C- Transforme le maillage en POI1 si maillage quelconque
  52. C- Le maillage POI1 de pointeur IPT1 est actif au retour de CHANGE
  53. C
  54. IPT1 = IPSG
  55. SEGACT IPT1
  56. C PPw NBSOUS = LISOUS(/1)
  57. NBSOUS = IPT1.LISOUS(/1)
  58. C PPw IF ((NBSOUS.NE.0).OR.(ITYPEL.NE.1)) THEN
  59. IF ((NBSOUS.NE.0).OR.(IPT1.ITYPEL.NE.1)) THEN
  60.  
  61. CALL CHANGE(IPT1,1)
  62. IF (IERR.NE.0) RETURN
  63. ENDIF
  64. C
  65. C - Création du tableau ICPR pour le maillage IPT1
  66. C
  67. NNGOT = nbpts
  68. SEGINI ICCPR
  69. C
  70. NNNOE = IPT1.NUM(/2)
  71. IK = 0
  72. DO 10 I2=1,NNNOE
  73. K = IPT1.NUM(1,I2)
  74. IF (ICPR(K).EQ.0) THEN
  75. IK = IK + 1
  76. ICPR(K) = IK
  77. ENDIF
  78. 10 CONTINUE
  79. SEGDES IPT1
  80. C
  81. C - Récupération du nombre de composantes de ICHP1
  82. C
  83. MCHPOI = ICHP1
  84. SEGACT MCHPOI
  85. NSOUPO = IPCHP(/1)
  86. NNIN = 0
  87. DO 20 I=1,NSOUPO
  88. MSOUPO = IPCHP(I)
  89. SEGACT MSOUPO
  90. NNIN = NNIN + NOCOMP(/2)
  91. 20 CONTINUE
  92.  
  93. C - Création et remplissage de MTRAV
  94. C - Balayage des partitions de ICHP1, utilisation du tableau ICPR
  95. C - Extraction des composantes uniquement contenues dans NOMTOT
  96. C - si NBCOMP.NE.0
  97.  
  98. SEGINI MTRAV
  99. C
  100. C - Nombre de composantes véritablement dans MTRAV :
  101. C
  102. NBIN = 0
  103. C
  104. DO 30 I=1,NSOUPO
  105. MSOUPO = IPCHP(I)
  106. NC = NOCOMP(/2)
  107. MPOVAL = IPOVAL
  108. SEGACT MPOVAL
  109. MELEME = IGEOC
  110. SEGACT MELEME
  111. NBELEM = NUM(/2)
  112. DO 50 ICOMP=1,NC
  113. IF (NBCOMP.NE.0) THEN
  114. CALL PLACE(NOMTOT,NBCOMP,IPEXT,NOCOMP(ICOMP))
  115. ENDIF
  116. IF ((NBCOMP.EQ.0).OR.(IPEXT.NE.0)) THEN
  117. CALL PLACE(INCO,NBIN,IPOS,NOCOMP(ICOMP))
  118.  
  119. C Obligatoire de séparer les 2 cas sinon plantage en evaluant NHAR(IPOS) lorsque IPOS=0
  120. NEWONE=0
  121. IF(IPOS.EQ.0)THEN
  122. NEWONE=1
  123. ELSEIF(NHAR(IPOS).NE.NOHARM(ICOMP))THEN
  124. NEWONE=1
  125. ENDIF
  126.  
  127. IF(NEWONE .EQ. 1)THEN
  128. NBIN = NBIN + 1
  129. INCO(NBIN) = NOCOMP(ICOMP)
  130. NHAR(NBIN) = NOHARM(ICOMP)
  131. IPOS = NBIN
  132. ENDIF
  133.  
  134. DO 40 J=1,NBELEM
  135. K = NUM(1,J)
  136. IK = ICPR(K)
  137. IF (IK.NE.0) THEN
  138. IGEO(IK) = K
  139. IBIN(IPOS,IK) = 1
  140. BB(IPOS,IK) = VPOCHA(J,ICOMP)
  141. ENDIF
  142. 40 CONTINUE
  143. ENDIF
  144.  
  145. 50 CONTINUE
  146. SEGDES MELEME
  147. SEGDES MPOVAL
  148. SEGDES MSOUPO
  149. 30 CONTINUE
  150. SEGDES MCHPOI
  151.  
  152. C
  153. NNIN = NBIN
  154. SEGADJ MTRAV
  155. C
  156. C - Test si toutes les composantes que l'on voulait extraire sont
  157. C - bien dans le segment de travail
  158. C
  159. DO 60 I=1,NBCOMP
  160. CALL PLACE(INCO,NNIN,IPEXT,NOMTOT(I))
  161. IF (IPEXT.EQ.0) THEN
  162. MOTERR(1:4) = NOMTOT(I)
  163. CALL ERREUR(197)
  164. SEGDES MTRAV,ICCPR
  165. RETURN
  166. ENDIF
  167. 60 CONTINUE
  168.  
  169. SEGDES MTRAV
  170. SEGDES ICCPR
  171. C
  172. END
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  

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