Télécharger poelm2.eso

Retour à la liste

Numérotation des lignes :

poelm2
  1. C POELM2 SOURCE CB215821 19/08/20 21:20:17 10287
  2. SUBROUTINE POELM2(MAIL,KRIPO1,PONBEL,
  3. $ LSTPL,
  4. $ IMPR,IRET)
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8 (A-H,O-Z)
  7. C***********************************************************************
  8. C NOM : POELM2
  9. C DESCRIPTION : Maillage + tableau de repérage de points + liste
  10. C d'entiers (ponbl2) => liste indexée d'entiers (un
  11. C point)->(numéro des éléments du maillage le contenant).
  12. C
  13. C Construit une liste indexée LSTPL (type LSTIND)
  14. C * Nombre de multiplets = nb d'éléments de PONBEL ;
  15. C * chaque multiplet i : numéros des éléments de
  16. C MAIL contenant un point dont le numéro n
  17. C est tel que KRIPO1(n)=i.
  18. C (Le nombre de ces éléments est PONBEL(i), cf. ponbl2).
  19. C
  20. C LANGAGE : ESOPE
  21. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF)
  22. C mél : gounand@semt2.smts.cea.fr
  23. C***********************************************************************
  24. C APPELES (ESOPE) : OOOETA
  25. C APPELE PAR : MAKPRM
  26. C***********************************************************************
  27. C SYNTAXE GIBIANE : -
  28. C ENTREES :
  29. C ENTREES/SORTIES : -
  30. C SORTIES : LSTPL (type LSTIND)
  31. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  32. C***********************************************************************
  33. C VERSION : v1, 20/05/99, version initiale
  34. C HISTORIQUE : v1, 20/05/99, création
  35. C HISTORIQUE :
  36. C HISTORIQUE :
  37. C***********************************************************************
  38. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  39. C en cas de modification de ce sous-programme afin de faciliter
  40. C la maintenance !
  41. C***********************************************************************
  42.  
  43. -INC PPARAM
  44. -INC CCOPTIO
  45. -INC SMELEME
  46. POINTEUR MAIL.MELEME
  47. POINTEUR SOUMAI.MELEME
  48. -INC SMLENTI
  49. POINTEUR PONBEL.MLENTI
  50. POINTEUR KRIPO1.MLENTI
  51. *
  52. * Segment LSTIND (liste séquentielle indexée)
  53. *
  54. SEGMENT LSTIND
  55. INTEGER IDX(NBM+1)
  56. INTEGER IVAL(NBTVAL)
  57. ENDSEGMENT
  58. *
  59. * LISTE SEQUENTIELLE INDEXEE D'ENTIERS
  60. *
  61. * NBL : NOMBRE DE MULTIPLETS
  62. * NBTVAL : NOMBRE TOTAL DE VALEURS
  63. * IDX(I) : INDICE DE LA PREMIERE VALEUR DU IEME
  64. * MULTIPLET DANS LE TABLEAU IVAL
  65. * IVAL(IDX(I) -> IDX(I+1)-1) : VALEURS DU IEME MULTIPLET
  66. *
  67. *-INC SLSTIND
  68. POINTEUR LSTPL.LSTIND
  69. POINTEUR ICOUR.LSTIND
  70. *
  71. INTEGER IMPR,IRET
  72. INTEGER MAETA,KRETA,POETA,SMETA
  73. INTEGER INBEL,INBM,INBNO,INBSOU,IDEPA,IDXCOU
  74. INTEGER NBEL, NBM, NBNO,NBSOUS
  75. INTEGER NBTVAL,NLOCP1,NPONB,NUELMA,NUMNO
  76. *
  77. * Executable statements
  78. *
  79. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans poelm2.eso'
  80. CALL OOOETA(PONBEL,POETA,IMOD)
  81. IF (POETA.NE.1) SEGACT PONBEL
  82. NPONB=PONBEL.LECT(/1)
  83. C On initialise le segment LSTPL
  84. C et le segment ICOUR
  85. C dans ICOUR, seul le tableau IDX nous intéresse
  86. NBM=NPONB
  87. NBTVAL=0
  88. SEGINI LSTPL
  89. IDEPA=1
  90. DO 2 INBM=1,NBM
  91. LSTPL.IDX(INBM)=IDEPA
  92. IDEPA=IDEPA+PONBEL.LECT(INBM)
  93. 2 CONTINUE
  94. LSTPL.IDX(NBM+1)=IDEPA
  95. SEGINI,ICOUR=LSTPL
  96. NBTVAL=IDEPA-1
  97. SEGADJ LSTPL
  98. CALL OOOETA(KRIPO1,KRETA,IMOD)
  99. IF (KRETA.NE.1) SEGACT KRIPO1
  100. *
  101. * Parcourons le maillage
  102. *
  103. NUELMA=0
  104. CALL OOOETA(MAIL,MAETA,IMOD)
  105. IF (MAETA.NE.1) SEGACT MAIL
  106. NBSOUS=MAX(1,MAIL.LISOUS(/1))
  107. DO 4 INBSOU=1,NBSOUS
  108. IF (NBSOUS.EQ.1) THEN
  109. SOUMAI=MAIL
  110. ELSE
  111. SOUMAI=MAIL.LISOUS(INBSOU)
  112. CALL OOOETA(SOUMAI,SMETA,IMOD)
  113. IF (SMETA.NE.1) SEGACT SOUMAI
  114. ENDIF
  115. NBNO=SOUMAI.NUM(/1)
  116. NBEL=SOUMAI.NUM(/2)
  117. DO 42 INBEL=1,NBEL
  118. NUELMA=NUELMA+1
  119. DO 422 INBNO=1,NBNO
  120. NUMNO=SOUMAI.NUM(INBNO,INBEL)
  121. NLOCP1=KRIPO1.LECT(NUMNO)
  122. IF (NLOCP1.NE.0) THEN
  123. IDXCOU=ICOUR.IDX(NLOCP1)
  124. LSTPL.IVAL(IDXCOU)=NUELMA
  125. ICOUR.IDX(NLOCP1)=IDXCOU+1
  126. ENDIF
  127. 422 CONTINUE
  128. 42 CONTINUE
  129. 4 CONTINUE
  130. SEGDES LSTPL
  131. SEGSUP ICOUR
  132. *
  133. * Normal termination
  134. *
  135. IRET=0
  136. RETURN
  137. *
  138. * Format handling
  139. *
  140. *
  141. * Error handling
  142. *
  143. 9999 CONTINUE
  144. IRET=1
  145. WRITE(IOIMP,*) 'An error was detected in subroutine poelm2'
  146. *
  147. * End of subroutine POELM2
  148. *
  149. END
  150.  
  151.  
  152.  

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