Télécharger mkiz2.eso

Retour à la liste

Numérotation des lignes :

mkiz2
  1. C MKIZ2 SOURCE GOUNAND 24/11/06 21:15:11 12073
  2. SUBROUTINE MKIZ2(MELDUA,MELPRI,IMATEL,
  3. $ KRINCD,KRINCP,KMINCT,KRSPGT,
  4. $ PMTOT,IDMATP,IDMATD,
  5. *IDMTOT,
  6. $ IZATOT,
  7. $ IMPR,IRET)
  8. IMPLICIT REAL*8 (A-H,O-Z)
  9. IMPLICIT INTEGER (I-N)
  10. C***********************************************************************
  11. C NOM : MKIZ2
  12. C DESCRIPTION : Pareil que mkiza + changement de numérotation (argument
  13. C d'entrée)
  14. C Remplissage des valeurs de la Matrice Morse.
  15. C (dont les colonnes sont supposées ordonnées)
  16. C <=> MKIZA avec passage de numérotation
  17. C
  18. C LANGAGE : ESOPE
  19. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  20. C mél : gounand@semt2.smts.cea.fr
  21. C***********************************************************************
  22. C APPELES : REGMAI, IFIDIC, INIRPM
  23. C APPELE PAR : PRASEM
  24. C***********************************************************************
  25. C ENTREES : MELDUA, MELPRI, IMATEL, KRINCD, KRINCP, KMINCT,
  26. C KRSPGT, PMTOT, IDMTOT
  27. C ENTREES/SORTIES : IZATOT
  28. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  29. C***********************************************************************
  30. C VERSION : v1, 17/12/99
  31. C HISTORIQUE : v1, 17/12/99, création
  32. C HISTORIQUE : 05/01/00 : On ne suppose plus les maillages duaux et
  33. C primaux partitionnés de la même façon que les matrices
  34. C élémentaires.
  35. C HISTORIQUE : 09/04/04 : rajou idmatp idmatd
  36. C HISTORIQUE :
  37. C***********************************************************************
  38. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  39. C en cas de modification de ce sous-programme afin de faciliter
  40. C la maintenance !
  41. C***********************************************************************
  42. -INC PPARAM
  43. -INC CCOPTIO
  44. -INC SMELEME
  45. POINTEUR MELDUA.MELEME
  46. POINTEUR ML2DUA.MELEME
  47. POINTEUR SMLDUA.MELEME
  48. POINTEUR MELPRI.MELEME
  49. POINTEUR ML2PRI.MELEME
  50. POINTEUR SMLPRI.MELEME
  51. POINTEUR IMATEL.IMATRI
  52. POINTEUR VMATEL.IZAFM
  53. POINTEUR KMINCT.MINC
  54. POINTEUR PMTOT.PMORS
  55. POINTEUR IZATOT.IZA
  56. * POINTEUR IDMTOT.IDMAT
  57. POINTEUR IDMATP.IDMAT
  58. POINTEUR IDMATD.IDMAT
  59. -INC SMLENTI
  60. POINTEUR KRINCD.MLENTI
  61. POINTEUR KRINCP.MLENTI
  62. POINTEUR KRSPGT.MLENTI
  63. POINTEUR RPMAT.MLENTI
  64. *
  65. INTEGER IMPR,IRET
  66. *
  67. INTEGER IDX,IDXDEB
  68. INTEGER ISOUM,NBSOUM,NBSOUD,NBSOUP
  69. INTEGER ITDDLD,ITDDLP,ITIDUA,ITIPRI,ITPODU,ITPOPR
  70. INTEGER NBCMPD,NBCMPP
  71. INTEGER NELPRI
  72. INTEGER ILMAT,JDMAT,IPMAT,IMATL
  73. INTEGER NDMAT,NPMAT,NBMATL
  74. INTEGER LONLIG
  75. INTEGER IELEM
  76. INTEGER NUELG,OLDISM,ISOUMA,NUELOC
  77. *
  78. * Executable statements
  79. *
  80. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans mkiz2'
  81. * On régularise les maillage pour plus se faire chier si LISOUS(/1).EQ.0
  82. * In REGMAI : SEGINI ML2DUA
  83. CALL REGMAI(MELDUA,ML2DUA)
  84. * In REGMAI : SEGINI ML2PRI
  85. CALL REGMAI(MELPRI,ML2PRI)
  86. *
  87. * Activons les chapeaux (Matrices et supports)
  88. *
  89. SEGACT ML2DUA
  90. NBSOUD=ML2DUA.LISOUS(/1)
  91. SEGACT ML2PRI
  92. NBSOUP=ML2PRI.LISOUS(/1)
  93. SEGACT IMATEL
  94. NBSOUM=NBSOUP
  95. NBMATL=IMATEL.LIZAFM(/2)
  96. IF (NBSOUD.NE.NBSOUP) THEN
  97. WRITE(IOIMP,*) 'Maillage primal, dual :'
  98. WRITE(IOIMP,*) 'partitionnment différent...'
  99. WRITE(IOIMP,*) 'NBSOUD=',NBSOUD
  100. WRITE(IOIMP,*) 'NBSOUP=',NBSOUP
  101. GOTO 9999
  102. ENDIF
  103. *
  104. * Tableau de repérage dans la matrice
  105. *
  106. * In INIRPM : SEGINI RPMAT
  107. CALL INIRPM(IMATEL,RPMAT,IMPR,IRET)
  108. IF (IRET.NE.0) GOTO 9999
  109. *
  110. * Activons les tableaux de repérage
  111. *
  112. SEGACT KRINCD
  113. NBCMPD=KRINCD.LECT(/1)
  114. SEGACT KRINCP
  115. NBCMPP=KRINCP.LECT(/1)
  116. IF (NBCMPD.NE.NBMATL.OR.NBCMPP.NE.NBMATL) THEN
  117. WRITE(IOIMP,*) 'KRINCD, KRINCP et IMATEL :'
  118. WRITE(IOIMP,*) 'nb. comp. différents...'
  119. GOTO 9999
  120. ENDIF
  121. SEGACT KMINCT
  122. SEGACT KRSPGT
  123. SEGACT PMTOT
  124. * SEGACT IDMTOT
  125. SEGACT IDMATP
  126. SEGACT IDMATD
  127. SEGACT IZATOT*MOD
  128. *
  129. * Parcourons les matrices élémentaires par sous-domaine et
  130. * remplissons les valeurs de la matrice Morse.
  131. *
  132. DO 1 IMATL=1,NBMATL
  133. ITIDUA=KRINCD.LECT(IMATL)
  134. ITIPRI=KRINCP.LECT(IMATL)
  135. NUELG=0
  136. OLDISM=1
  137. VMATEL=IMATEL.LIZAFM(OLDISM,IMATL)
  138. SEGACT VMATEL
  139. DO 12 ISOUM=1,NBSOUM
  140. SMLDUA=ML2DUA.LISOUS(ISOUM)
  141. SEGACT SMLDUA
  142. SMLPRI=ML2PRI.LISOUS(ISOUM)
  143. SEGACT SMLPRI
  144. NELPRI=SMLPRI.NUM(/2)
  145. DO 122 IELEM=1,NELPRI
  146. NUELG=NUELG+1
  147. CALL RPELEM(NUELG,RPMAT,ISOUMA,NUELOC,IMPR,IRET)
  148. IF (IRET.NE.0) GOTO 9999
  149. ISOUMA=MAX(ISOUMA,1)
  150. IF (ISOUMA.NE.OLDISM) THEN
  151. SEGDES VMATEL
  152. VMATEL=IMATEL.LIZAFM(ISOUMA,IMATL)
  153. SEGACT VMATEL
  154. OLDISM=ISOUMA
  155. ENDIF
  156. ILMAT=NUELOC
  157. NPMAT=VMATEL.AM(/2)
  158. NDMAT=VMATEL.AM(/3)
  159. DO 1222 JDMAT=1,NDMAT
  160. ITPODU=KRSPGT.LECT(SMLDUA.NUM(JDMAT,IELEM))
  161. IF (ITPODU.EQ.0) THEN
  162. WRITE(IOIMP,*) 'Point dual ????'
  163. GOTO 9999
  164. ENDIF
  165. C Test du MPOS... déjà fait dans mkpmor...
  166. ITDDLD=IDMATD.NUAN(
  167. $ KMINCT.NPOS(ITPODU)
  168. $ + KMINCT.MPOS(ITPODU,ITIDUA)-1
  169. $ )
  170. IDXDEB=PMTOT.IA(ITDDLD)
  171. LONLIG=PMTOT.IA(ITDDLD+1)-IDXDEB
  172. IF (LONLIG.EQ.0) THEN
  173. WRITE(IOIMP,*) 'Ligne inex. ddl dua =',ITDDLD
  174. GOTO 9999
  175. ENDIF
  176. C IPMAT parce que IDMAT est le nom d'un segment par défaut...
  177. DO 12222 IPMAT=1,NPMAT
  178. ITPOPR=KRSPGT.LECT(SMLPRI.NUM(IPMAT,IELEM))
  179. IF (ITPOPR.EQ.0) THEN
  180. WRITE(IOIMP,*) 'Point primal ????'
  181. GOTO 9999
  182. ENDIF
  183. ITDDLP=IDMATP.NUAN(
  184. $ KMINCT.NPOS(ITPOPR)
  185. $ + KMINCT.MPOS(ITPOPR,ITIPRI)-1
  186. $ )
  187. CALL IFIDIC(LONLIG,PMTOT.JA(IDXDEB),ITDDLP,
  188. $ IDX,
  189. $ IMPR,IRET)
  190. IF (IRET.NE.0) GOTO 9999
  191. IZATOT.A(IDXDEB+IDX-1)=IZATOT.A(IDXDEB+IDX-1)
  192. $ + VMATEL.AM(ILMAT,IPMAT,JDMAT)
  193. 12222 CONTINUE
  194. 1222 CONTINUE
  195. 122 CONTINUE
  196. SEGDES SMLPRI
  197. SEGDES SMLDUA
  198. 12 CONTINUE
  199. SEGDES VMATEL
  200. 1 CONTINUE
  201. SEGDES IZATOT
  202. SEGDES IDMATP
  203. SEGDES IDMATD
  204. * SEGDES IDMTOT
  205. SEGDES PMTOT
  206. SEGDES KRSPGT
  207. SEGDES KMINCT
  208. SEGDES KRINCP
  209. SEGDES KRINCD
  210. SEGSUP RPMAT
  211. SEGDES IMATEL
  212. SEGDES ML2PRI
  213. SEGDES ML2DUA
  214. SEGSUP ML2PRI
  215. SEGSUP ML2DUA
  216. *
  217. * Normal termination
  218. *
  219. IRET=0
  220. RETURN
  221. *
  222. * Format handling
  223. *
  224. *
  225. * Error handling
  226. *
  227. 9999 CONTINUE
  228. IRET=1
  229. WRITE(IOIMP,*) 'An error was detected in subroutine mkiz2'
  230. RETURN
  231. *
  232. * End of subroutine MKIZ2
  233. *
  234. END
  235.  
  236.  

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