Télécharger mkizat.eso

Retour à la liste

Numérotation des lignes :

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

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