Télécharger relr1c.eso

Retour à la liste

Numérotation des lignes :

relr1c
  1. C RELR1C SOURCE GOUNAND 11/05/24 21:16:01 6976
  2. SUBROUTINE RELR1C(PROFM,NDDLPR,IMPR,IRET)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : RELR1C
  7. C DESCRIPTION :
  8. * Ordonnancement du profil morse
  9. *
  10. * Avant on utilisait csort, mais celui-ci suppose
  11. * la matrice carrée avec au moins un terme par ligne
  12. * de plus csort est en fortran pas robuste
  13. * On fait un code un peu plus lisible que csort
  14. * mais prenant plus de mémoire.
  15. * On pourrait écraser certains tableaux de travail
  16. * au fur et à mesure de leur utilisation (cf. csort)
  17. C
  18. C
  19. C LANGAGE : ESOPE
  20. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  21. C mél : gounand@semt2.smts.cea.fr
  22. C***********************************************************************
  23. C APPELES :
  24. C APPELES (E/S) :
  25. C APPELES (BLAS) :
  26. C APPELES (CALCUL) :
  27. C APPELE PAR :
  28. C***********************************************************************
  29. C SYNTAXE GIBIANE :
  30. C ENTREES :
  31. C ENTREES/SORTIES :
  32. C SORTIES :
  33. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  34. C***********************************************************************
  35. C VERSION : v1, 30/06/2003, version initiale
  36. C HISTORIQUE : v1, 30/06/2003, création
  37. C HISTORIQUE :
  38. C HISTORIQUE :
  39. C***********************************************************************
  40. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  41. C en cas de modification de ce sous-programme afin de faciliter
  42. C la maintenance !
  43. C***********************************************************************
  44.  
  45. -INC PPARAM
  46. -INC CCOPTIO
  47. * Includes persos
  48. CBEGININCLUDE SMPMORS
  49. SEGMENT PMORS
  50. INTEGER IA (NTT+1)
  51. INTEGER JA (NJA)
  52. ENDSEGMENT
  53. CENDINCLUDE SMPMORS
  54. POINTEUR PROFM.PMORS
  55. *
  56. -INC SMLENTI
  57. POINTEUR IWORK.MLENTI
  58. POINTEUR JWORK.MLENTI
  59. POINTEUR KWORK.MLENTI
  60. POINTEUR LWORK.MLENTI
  61. POINTEUR MWORK.MLENTI
  62. *
  63. INTEGER IMPR,IRET
  64. *
  65. * Executable statements
  66. *
  67. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans relr1c.eso'
  68. SEGACT PROFM*MOD
  69. NDDLDU=PROFM.IA(/1)-1
  70. NNZ=PROFM.JA(/1)
  71. c
  72. c Nombre d'éléments non nuls dans chaque colonne
  73. c IWORK(ICOL+1) = nb d'éléments non nuls dans la
  74. c colonne icol
  75. c
  76. JG=NDDLPR+1
  77. SEGINI IWORK
  78. DO IDDLDU=1,NDDLDU
  79. DO INZ=PROFM.IA(IDDLDU),PROFM.IA(IDDLDU+1)-1
  80. IDDLP1=PROFM.JA(INZ)+1
  81. IWORK.LECT(IDDLP1)=IWORK.LECT(IDDLP1)+1
  82. ENDDO
  83. ENDDO
  84. C
  85. C repérage de ces éléments non nuls dans le futur
  86. C tableau de travail JWORK
  87. C
  88. IWORK.LECT(1)=1
  89. DO IDDLPR=1,NDDLPR
  90. IWORK.LECT(IDDLPR+1)=IWORK.LECT(IDDLPR)+IWORK.LECT(IDDLPR+1)
  91. ENDDO
  92. C
  93. C JWORK est trié par colonne croissante
  94. C et pointe sur des éléments du tableau JA
  95. C
  96. JG=NNZ
  97. SEGINI JWORK
  98. DO IDDLDU=1,NDDLDU
  99. DO INZ=PROFM.IA(IDDLDU),PROFM.IA(IDDLDU+1)-1
  100. IDDLPR=PROFM.JA(INZ)
  101. JNZ=IWORK.LECT(IDDLPR)
  102. JWORK.LECT(JNZ)=INZ
  103. IWORK.LECT(IDDLPR)=JNZ+1
  104. ENDDO
  105. ENDDO
  106. * On n'aura plus besoin de IWORK
  107. SEGSUP IWORK
  108. C
  109. C Tableau de correspondance :
  110. C INZeme élément de JA est sur la IDDLDUeme ligne
  111. C KWORK
  112. C
  113. JG=NNZ
  114. SEGINI KWORK
  115. DO IDDLDU=1,NDDLDU
  116. DO INZ=PROFM.IA(IDDLDU),PROFM.IA(IDDLDU+1)-1
  117. KWORK.LECT(INZ)=IDDLDU
  118. ENDDO
  119. ENDDO
  120. C
  121. C Tableau de repérage dans le futur tableau de travail MWORK
  122. C qui contiendra la permutation a appliquer a PROFM
  123. C
  124. JG=NDDLDU
  125. SEGINI,LWORK
  126. DO IDDLDU=1,NDDLDU
  127. LWORK.LECT(IDDLDU)=PROFM.IA(IDDLDU)
  128. ENDDO
  129. C
  130. C Boucle de remplissage de MWORK
  131. C
  132. JG=NNZ
  133. SEGINI,MWORK
  134. DO JNZ=1,NNZ
  135. INZ=JWORK.LECT(JNZ)
  136. IDDLDU=KWORK.LECT(INZ)
  137. KNZ=LWORK.LECT(IDDLDU)
  138. MWORK.LECT(INZ)=KNZ
  139. LWORK.LECT(IDDLDU)=KNZ+1
  140. ENDDO
  141. SEGSUP JWORK
  142. SEGSUP KWORK
  143. SEGSUP LWORK
  144. C
  145. C Permutation "in place" de PROFM.JA
  146. C
  147. CALL IVPERM(NNZ,PROFM.JA,MWORK.LECT)
  148. SEGSUP MWORK
  149. SEGDES PROFM
  150. *
  151. * Normal termination
  152. *
  153. IRET=0
  154. RETURN
  155. *
  156. * Format handling
  157. *
  158. *
  159. * Error handling
  160. *
  161. 9999 CONTINUE
  162. IRET=1
  163. WRITE(IOIMP,*) 'An error was detected in subroutine relr1c'
  164. RETURN
  165. *
  166. * End of subroutine RELR1C
  167. *
  168. END
  169.  
  170.  
  171.  

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