Télécharger mkpmo3.eso

Retour à la liste

Numérotation des lignes :

mkpmo3
  1. C MKPMO3 SOURCE GOUNAND 25/04/30 21:15:21 12258
  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. NDUNIQ=KRIDUN.LECT(/1)
  109. SEGACT KJSPGD
  110. SEGACT KRSPGT
  111. SEGACT KMINCT
  112. NTOTPO=KMINCT.NPOS(/1)-1
  113. * NTTDDL=KMINCT.NPOS(NTOTPO+1)-1
  114. * JG=NTTDDL
  115. * SEGINI DD2DP
  116. SEGACT LPDPP
  117. NPDUA=KJSPGD.NUM(/2)
  118. nddldu=npdua*nduniq
  119. jg=nddldu
  120. segini lddldu
  121. segact lpdpp
  122. nja=0
  123. do ipdua=1,npdua
  124. nppri=LPDPP.IDX(IPDUA+1)-LPDPP.IDX(IPDUA)
  125. do iduniq=1,nduniq
  126. npuniq=LIPUN.IDX(IDUNIQ+1)-LIPUN.IDX(IDUNIQ)
  127. nja=nja+(npuniq*nppri)
  128. enddo
  129. enddo
  130.  
  131. * write(ioimp,*) 'dimensionnement'
  132. * write(ioimp,*) 'nddldu= ',nddldu
  133. * write(ioimp,*) 'nja= ',nja
  134. ntt=nddldu
  135. segini pmcou
  136. *
  137. iddldu=1
  138. ija=1
  139. * pmcou.ia(1)=ija
  140. do ipdua=1,npdua
  141. nutpdu=krspgt.lect(kjspgd.num(1,ipdua))
  142. do iduniq=1,nduniq
  143. nutddu=KMINCT.NPOS(NUTPDU)
  144. $ +KMINCT.MPOS(NUTPDU,KRIDUN.LECT(IDUNIQ))-1
  145. lddldu.lect(iddldu)=nutddu
  146. pmcou.ia(iddldu)=ija
  147. iddldu=iddldu+1
  148. do ippri=LPDPP.IDX(IPDUA),LPDPP.IDX(IPDUA+1)-1
  149. nutppr=krspgt.lect(lpdpp.ival(ippri))
  150. do ipuniq=LIPUN.IDX(IDUNIQ),LIPUN.IDX(IDUNIQ+1)-1
  151. NUTDPR=KMINCT.NPOS(NUTPPR)
  152. $ +KMINCT.MPOS(NUTPPR,LIPUN.IVAL(IPUNIQ))-1
  153. pmcou.ja(ija)=nutdpr
  154. ija=ija+1
  155. enddo
  156. enddo
  157. enddo
  158. enddo
  159. pmcou.ia(iddldu)=ija
  160. * write(ioimp,*) 'profil morse'
  161. * write(ioimp,*) 'iddldu= ',iddldu
  162. * write(ioimp,*) 'ija= ',ija
  163. * stop 16
  164.  
  165. SEGSUP LIPUN
  166. SEGSUP KRIDUN
  167. *
  168. * Normal termination
  169. *
  170. IRET=0
  171. RETURN
  172. *
  173. * Format handling
  174. *
  175. *
  176. * Error handling
  177. *
  178. 9999 CONTINUE
  179. IRET=1
  180. WRITE(IOIMP,*) 'An error was detected in subroutine mkpmo3'
  181. RETURN
  182. *
  183. * End of subroutine MKPMO3
  184. *
  185. END
  186.  
  187.  

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