Télécharger ponbpo.eso

Retour à la liste

Numérotation des lignes :

ponbpo
  1. C PONBPO SOURCE GOUNAND 25/04/30 21:15:27 12258
  2. SUBROUTINE PONBPO(P2ELPR,MELDUA,
  3. $ POPPOD,
  4. $ IMPR,IRET)
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8 (A-H,O-Z)
  7. C***********************************************************************
  8. C NOM : PONBPO
  9. C PROJET : Noyau linéaire NLIN
  10. C DESCRIPTION : Maillage + liste indexée d'entiers (poelm2) => liste
  11. C d'entiers (un point)->(nb. de points adjacents
  12. C i.e. appartenant aux mêmes éléments).
  13. C
  14. C Construire la liste d'entiers suivante (POPPOD) :
  15. C * Nombre d'entiers = nb points P1 de MELPRI ;
  16. C * pour chaque P1 : nb. de points P2 de MELDUA avec lesquels il
  17. C a une liaison.
  18. C
  19. C LANGAGE : ESOPE
  20. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  21. C mél : gounand@semt2.smts.cea.fr
  22. C***********************************************************************
  23. C APPELES : ACTMEL, INIRPL, RPELEM
  24. C APPELES (ESOPE) : OOOETA
  25. C APPELE PAR : MAKPRM
  26. C***********************************************************************
  27. C ENTREES : P2ELPR, MELDUA
  28. C SORTIES : POPPOD
  29. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  30. C***********************************************************************
  31. C VERSION : v2, 15/12/99
  32. C HISTORIQUE : v1, 05/10/99, création
  33. C HISTORIQUE : v2, 15/12/99, utilisation de listes chaînées
  34. C HISTORIQUE :
  35. C HISTORIQUE :
  36. C***********************************************************************
  37. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  38. C en cas de modification de ce sous-programme afin de faciliter
  39. C la maintenance !
  40. C***********************************************************************
  41.  
  42. -INC PPARAM
  43. -INC CCOPTIO
  44. -INC SMCOORD
  45. -INC SMELEME
  46. POINTEUR MELDUA.MELEME
  47. POINTEUR SOUMDU.MELEME
  48. -INC SMLENTI
  49. INTEGER JG
  50. POINTEUR POPPOD.MLENTI
  51. POINTEUR RPDUAL.MLENTI
  52. POINTEUR IWORK.MLENTI
  53. *
  54. * Includes perso
  55. *
  56. *-INC SLSTIND
  57. *
  58. * Segment LSTIND (liste séquentielle indexée)
  59. *
  60. SEGMENT LSTIND
  61. INTEGER IDX(NBM+1)
  62. INTEGER IVAL(NBTVAL)
  63. ENDSEGMENT
  64. *
  65. * LISTE SEQUENTIELLE INDEXEE D'ENTIERS
  66. *
  67. * NBM : NOMBRE DE MULTIPLETS
  68. * NBTVAL : NOMBRE TOTAL DE VALEURS
  69. * IDX(I) : INDICE DE LA PREMIERE VALEUR DU IEME
  70. * MULTIPLET DANS LE TABLEAU IVAL
  71. * IVAL(IDX(I) -> IDX(I+1)-1) : VALEURS DU IEME MULTIPLET
  72. POINTEUR P2ELPR.LSTIND
  73. INTEGER IMPR,IRET
  74. INTEGER P2LETA
  75. *
  76. INTEGER IELDUA,IPLDU, IPPRI
  77. INTEGER NUMELD,NBPLDU,NPPRI
  78. INTEGER NOELDU,NOSODU,NPODUA
  79. INTEGER LDG,ILDG,LAST,IPREC
  80. *
  81. * Executable statements
  82. *
  83. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans ponbpo'
  84. SEGACT P2ELPR
  85. NPPRI=P2ELPR.IDX(/1)-1
  86. JG=nbpts
  87. SEGINI IWORK
  88. * Activations
  89. CALL ACTMEL(MELDUA)
  90. * In INIRPL : SEGINI RPDUAL
  91. CALL INIRPL(MELDUA,
  92. $ RPDUAL,
  93. $ IMPR,IRET)
  94. IF (IRET.NE.0) GOTO 9999
  95. JG=NPPRI
  96. SEGINI POPPOD
  97. DO 5 IPPRI=1,NPPRI
  98. LDG=0
  99. * Fin de la liste chaînée
  100. LAST=-1
  101. DO 52 IELDUA=P2ELPR.IDX(IPPRI),
  102. $ P2ELPR.IDX(IPPRI+1)-1
  103. NUMELD=P2ELPR.IVAL(IELDUA)
  104. CALL RPELEM(NUMELD,RPDUAL,
  105. $ NOSODU,NOELDU,
  106. $ IMPR,IRET)
  107. IF (IRET.NE.0) GOTO 9999
  108. IF (NOSODU.NE.0) THEN
  109. SOUMDU=MELDUA.LISOUS(NOSODU)
  110. ELSE
  111. SOUMDU=MELDUA
  112. ENDIF
  113. NBPLDU=SOUMDU.NUM(/1)
  114. DO 522 IPLDU=1,NBPLDU
  115. NPODUA=SOUMDU.NUM(IPLDU,NOELDU)
  116. IF (IWORK.LECT(NPODUA).EQ.0) THEN
  117. LDG=LDG+1
  118. IWORK.LECT(NPODUA)=LAST
  119. LAST=NPODUA
  120. ENDIF
  121. 522 CONTINUE
  122. 52 CONTINUE
  123. * Le nombre de points distincts trouvés est:
  124. POPPOD.LECT(IPPRI)=LDG
  125. * On remet la liste chaînée à 0
  126. DO 54 ILDG=1,LDG
  127. IPREC=IWORK.LECT(LAST)
  128. IWORK.LECT(LAST)=0
  129. LAST=IPREC
  130. 54 CONTINUE
  131. 5 CONTINUE
  132. SEGSUP RPDUAL
  133. SEGSUP IWORK
  134. *
  135. * Normal termination
  136. *
  137. IRET=0
  138. RETURN
  139. *
  140. * Format handling
  141. *
  142. *
  143. * Error handling
  144. *
  145. 9999 CONTINUE
  146. IRET=1
  147. WRITE(IOIMP,*) 'An error was detected in subroutine ponbpo'
  148. RETURN
  149. *
  150. * End of subroutine PONBPO
  151. *
  152. END
  153.  
  154.  

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