Télécharger rpenle.eso

Retour à la liste

Numérotation des lignes :

rpenle
  1. C RPENLE SOURCE CHAT 05/01/13 03:07:08 5004
  2. SUBROUTINE RPENLE(LENTI,KREF,NREF,
  3. $ LIREEN,
  4. $ IMPR,IRET)
  5. IMPLICIT INTEGER(I-N)
  6. IMPLICIT REAL*8 (A-H,O-Z)
  7. C***********************************************************************
  8. C NOM : RPENLE
  9. C DESCRIPTION : On construit LIREEN :
  10. C LIREEN(IREF)=liste des entiers i
  11. C tels que : KREF(LENTI(i))=IREF
  12. C Construction d'un liste indexée qui, à un entier associe les positions
  13. C des occurences de cet entier dans une liste d'entiers.
  14. C
  15. C LANGAGE : ESOPE
  16. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  17. C mél : gounand@semt2.smts.cea.fr
  18. C***********************************************************************
  19. C APPELES : -
  20. C APPELE PAR : PROMAT
  21. C***********************************************************************
  22. C ENTREES : LENTI, KREF, NREF
  23. C SORTIES : LIREEN
  24. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  25. C***********************************************************************
  26. C VERSION : v1, 04/02/2000, version initiale
  27. C HISTORIQUE : v1, 04/02/2000, création
  28. C HISTORIQUE :
  29. C HISTORIQUE :
  30. C***********************************************************************
  31. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  32. C en cas de modification de ce sous-programme afin de faciliter
  33. C la maintenance !
  34. C***********************************************************************
  35.  
  36. -INC PPARAM
  37. -INC CCOPTIO
  38. -INC SMLENTI
  39. POINTEUR LENTI.MLENTI
  40. POINTEUR KREF.MLENTI
  41. * Includes persos
  42. * Segment LSTIND (liste séquentielle indexée)
  43. INTEGER NBM,NBTVAL
  44. SEGMENT LSTIND
  45. INTEGER IDX(NBM+1)
  46. INTEGER IVAL(NBTVAL)
  47. ENDSEGMENT
  48. *-INC SLSTIND
  49. POINTEUR LIREEN.LSTIND
  50. *
  51. INTEGER NREF
  52. INTEGER IMPR,IRET
  53. *
  54. INTEGER NENTI
  55. INTEGER IENTI,IREF,IEGLO
  56. *
  57. * Executable statements
  58. *
  59. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans rpenle.eso'
  60. * Construction de l'indexation de la liste séquentielle
  61. * Pour l'instant LIREEN.IDX(IREF+1)=nombre d'éléments de LENTI()
  62. * tels que KREF(LENTI())=IREF
  63. SEGACT LENTI
  64. NENTI=LENTI.LECT(/1)
  65. SEGACT KREF
  66. NBM=NREF
  67. NBTVAL=0
  68. SEGINI LIREEN
  69. DO 1 IENTI=1,NENTI
  70. IEGLO=LENTI.LECT(IENTI)
  71. IREF=KREF.LECT(IEGLO)
  72. LIREEN.IDX(IREF+1)=LIREEN.IDX(IREF+1)+1
  73. 1 CONTINUE
  74. * SEGPRT,LIREEN
  75. * LIREEN.IDX est transformé en la liste d'indexation sur
  76. * LIREEN.IVAL
  77. LIREEN.IDX(1)=1
  78. DO 3 IREF=1,NREF
  79. LIREEN.IDX(IREF+1)=LIREEN.IDX(IREF+1)+LIREEN.IDX(IREF)
  80. 3 CONTINUE
  81. NBM=NREF
  82. NBTVAL=LIREEN.IDX(NREF+1)-1
  83. SEGADJ,LIREEN
  84. * SEGPRT,LIREEN
  85. * LIREEN.IDX est désormais la liste des index courants sur
  86. * LIREEN.IVAL que l'on remplit.
  87. DO 5 IENTI=1,NENTI
  88. IEGLO=LENTI.LECT(IENTI)
  89. IREF=KREF.LECT(IEGLO)
  90. LIREEN.IVAL(LIREEN.IDX(IREF))=IENTI
  91. LIREEN.IDX(IREF)=LIREEN.IDX(IREF)+1
  92. 5 CONTINUE
  93. * SEGPRT,LIREEN
  94. * On restaure les valeurs de LIREEN.IDX
  95. DO 7 IREF=NREF,2,-1
  96. LIREEN.IDX(IREF)=LIREEN.IDX(IREF-1)
  97. 7 CONTINUE
  98. LIREEN.IDX(1)=1
  99. SEGDES LIREEN
  100. SEGDES LENTI
  101. SEGDES KREF
  102. *
  103. * Normal termination
  104. *
  105. IRET=0
  106. RETURN
  107. *
  108. * Format handling
  109. *
  110. *
  111. * Error handling
  112. *
  113. 9999 CONTINUE
  114. IRET=1
  115. WRITE(IOIMP,*) 'An error was detected in subroutine rpenle'
  116. RETURN
  117. *
  118. * End of subroutine RPENLE
  119. *
  120. END
  121.  
  122.  
  123.  
  124.  

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