Télécharger mkpmo3.eso

Retour à la liste

Numérotation des lignes :

mkpmo3
  1. C MKPMO3 SOURCE PV 20/09/26 21:18:56 10724
  2. SUBROUTINE MKPMO3(LPDPP,KJSPGD,KRINCP,KRINCD,
  3. $ KRSPGT,KMINCT,
  4. $ LDDLDU,PMCOU,
  5. $ IMPR,IRET)
  6. IMPLICIT INTEGER(I-N)
  7. IMPLICIT REAL*8 (A-H,O-Z)
  8. C***********************************************************************
  9. C NOM : MKPMO3
  10. C PROJET : Assemblage matrice élémentaire -> matrice Morse
  11. C DESCRIPTION : Matrice élémentaire + liste indexée d'entiers(popoin) =>
  12. C Profil Morse de la matrice assemblée (les colonnes ne
  13. C sont pas ordonnées).
  14. C Basé sur mkpmo2, mais ici les lignes ne sont pas non plus
  15. C ordonnées.
  16. C
  17. C
  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 : CORINC
  24. C APPELE PAR : MAKPRM
  25. C***********************************************************************
  26. C ENTREES : LPDPP, KJSPGD, KRINCP, KRINCD, KRSPGT, KMINCT
  27. C SORTIES : PMCOU
  28. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  29. C***********************************************************************
  30. C VERSION : v1, 09/02/2016, version initiale
  31. C HISTORIQUE : v1, 09/02/2016, création
  32. C HISTORIQUE :
  33. C HISTORIQUE :
  34. C***********************************************************************
  35. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  36. C en cas de modification de ce sous-programme afin de faciliter
  37. C la maintenance !
  38. C***********************************************************************
  39. *
  40. *
  41. * On peut optimiser les boucles en sortant les NPOS
  42. *
  43. *
  44.  
  45. -INC PPARAM
  46. -INC CCOPTIO
  47. -INC SMELEME
  48. POINTEUR KJSPGD.MELEME
  49. POINTEUR KMINCT.MINC
  50. INTEGER NTT,NJA
  51. POINTEUR PMCOU.PMORS
  52. -INC SMLENTI
  53. INTEGER JG
  54. POINTEUR KRINCD.MLENTI
  55. POINTEUR KRIDUN.MLENTI
  56. POINTEUR KRINCP.MLENTI
  57. POINTEUR KRSPGT.MLENTI
  58. POINTEUR DD2DP.MLENTI
  59. POINTEUR LDDLDU.MLENTI
  60. POINTEUR KDDLDU.MLENTI
  61. *
  62. * Includes perso
  63. *
  64. *-INC SLSTIND
  65. *
  66. * Segment LSTIND (liste séquentielle indexée)
  67. *
  68. SEGMENT LSTIND
  69. INTEGER IDX(NBM+1)
  70. INTEGER IVAL(NBTVAL)
  71. ENDSEGMENT
  72. *
  73. * LISTE SEQUENTIELLE INDEXEE D'ENTIERS
  74. *
  75. * NBM : NOMBRE DE MULTIPLETS
  76. * NBTVAL : NOMBRE TOTAL DE VALEURS
  77. * IDX(I) : INDICE DE LA PREMIERE VALEUR DU IEME
  78. * MULTIPLET DANS LE TABLEAU IVAL
  79. * IVAL(IDX(I) -> IDX(I+1)-1) : VALEURS DU IEME MULTIPLET
  80. POINTEUR LIPUN.LSTIND
  81. POINTEUR LPDPP.LSTIND
  82. *
  83. INTEGER IMPR,IRET
  84. *
  85. LOGICAL LEXIST
  86. INTEGER IDEPA
  87. INTEGER IDUNIQ,IPUNIQ,IPDUA,IPPRI,ITTDDL
  88. INTEGER NDUNIQ,NPDUA, NTTDDL
  89. INTEGER NOPPR,NOPDU
  90. INTEGER NUTPPR,NUTPDU,NUTDPR,NUTDDU
  91. INTEGER NTOTCO,NTOTPO
  92. *
  93. * Executable statements
  94. *
  95. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans mkpmo3'
  96. C Pour chaque composante primale distincte, il faudrait déterminer
  97. C avec quels composantes duales distinctes il est relié :
  98. C Par exemple, si on a :
  99. C KRINCD = 1 1 1 2
  100. C KRINCP = 2 2 3 4
  101. C On a : KRIDUN = 1 2
  102. C On veut : LIPUN = (2 3) (4) (c'est une liste indexée)
  103. C
  104. CALL CORINC(KRINCD,KRINCP,
  105. $ KRIDUN,LIPUN,
  106. $ IMPR,IRET)
  107. IF (IRET.NE.0) GOTO 9999
  108. SEGACT KRIDUN
  109. NDUNIQ=KRIDUN.LECT(/1)
  110. SEGACT LIPUN
  111. SEGACT KJSPGD
  112. SEGACT KRSPGT
  113. SEGACT KMINCT
  114. NTOTPO=KMINCT.NPOS(/1)-1
  115. * NTTDDL=KMINCT.NPOS(NTOTPO+1)-1
  116. * JG=NTTDDL
  117. * SEGINI DD2DP
  118. SEGACT LPDPP
  119. NPDUA=KJSPGD.NUM(/2)
  120. nddldu=npdua*nduniq
  121. jg=nddldu
  122. segini lddldu
  123. segact lpdpp
  124. nja=0
  125. do ipdua=1,npdua
  126. nppri=LPDPP.IDX(IPDUA+1)-LPDPP.IDX(IPDUA)
  127. do iduniq=1,nduniq
  128. npuniq=LIPUN.IDX(IDUNIQ+1)-LIPUN.IDX(IDUNIQ)
  129. nja=nja+(npuniq*nppri)
  130. enddo
  131. enddo
  132.  
  133. * write(ioimp,*) 'dimensionnement'
  134. * write(ioimp,*) 'nddldu= ',nddldu
  135. * write(ioimp,*) 'nja= ',nja
  136. ntt=nddldu
  137. segini pmcou
  138. *
  139. iddldu=1
  140. ija=1
  141. * pmcou.ia(1)=ija
  142. do ipdua=1,npdua
  143. nutpdu=krspgt.lect(kjspgd.num(1,ipdua))
  144. do iduniq=1,nduniq
  145. nutddu=KMINCT.NPOS(NUTPDU)
  146. $ +KMINCT.MPOS(NUTPDU,KRIDUN.LECT(IDUNIQ))-1
  147. lddldu.lect(iddldu)=nutddu
  148. pmcou.ia(iddldu)=ija
  149. iddldu=iddldu+1
  150. do ippri=LPDPP.IDX(IPDUA),LPDPP.IDX(IPDUA+1)-1
  151. nutppr=krspgt.lect(lpdpp.ival(ippri))
  152. do ipuniq=LIPUN.IDX(IDUNIQ),LIPUN.IDX(IDUNIQ+1)-1
  153. NUTDPR=KMINCT.NPOS(NUTPPR)
  154. $ +KMINCT.MPOS(NUTPPR,LIPUN.IVAL(IPUNIQ))-1
  155. pmcou.ja(ija)=nutdpr
  156. ija=ija+1
  157. enddo
  158. enddo
  159. enddo
  160. enddo
  161. pmcou.ia(iddldu)=ija
  162. * write(ioimp,*) 'profil morse'
  163. * write(ioimp,*) 'iddldu= ',iddldu
  164. * write(ioimp,*) 'ija= ',ija
  165. * stop 16
  166.  
  167. SEGDES LDDLDU
  168. SEGDES PMCOU
  169. SEGDES LPDPP
  170. SEGDES KMINCT
  171. SEGDES KRSPGT
  172. SEGDES KJSPGD
  173. SEGSUP LIPUN
  174. SEGSUP KRIDUN
  175. *
  176. * Normal termination
  177. *
  178. IRET=0
  179. RETURN
  180. *
  181. * Format handling
  182. *
  183. *
  184. * Error handling
  185. *
  186. 9999 CONTINUE
  187. IRET=1
  188. WRITE(IOIMP,*) 'An error was detected in subroutine mkpmo3'
  189. RETURN
  190. *
  191. * End of subroutine MKPMO3
  192. *
  193. END
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  

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