Télécharger mkizat.eso

Retour à la liste

Numérotation des lignes :

mkizat
  1. C MKIZAT SOURCE PV 20/09/26 21:18:54 10724
  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. LOGICAL LPARTD,LPARTP
  71. INTEGER IDX,IDXDEB
  72. INTEGER ISOUM,NBSOUM,NBSOUD,NBSOUP
  73. INTEGER ITDDLD,ITDDLP,ITIDUA,ITIPRI,ITPODU,ITPOPR
  74. INTEGER NBCMPD,NBCMPP,NELPRI
  75. INTEGER ILMAT,JDMAT,IPMAT,IMATL
  76. INTEGER NLMAT,NDMAT,NPMAT,NBMATL
  77. INTEGER LONLIG
  78. INTEGER IELEM
  79. INTEGER NUELG,OLDISM,ISOUMA,NUELOC
  80. *
  81. * Executable statements
  82. *
  83. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans mkizat'
  84. * On régularise les maillage pour plus se faire chier si LISOUS(/1).EQ.0
  85. * In REGMAI : IF (.NOT.LPARTD) SEGINI ML2DUA
  86. CALL REGMAI(MELDUA,ML2DUA,LPARTD,IMPR,IRET)
  87. IF (IRET.NE.0) GOTO 9999
  88. * In REGMAI : IF (.NOT.LPARTP) SEGINI ML2PRI
  89. CALL REGMAI(MELPRI,ML2PRI,LPARTP,IMPR,IRET)
  90. IF (IRET.NE.0) GOTO 9999
  91. *
  92. * Activons les chapeaux (Matrices et supports)
  93. *
  94. SEGACT ML2DUA
  95. NBSOUD=ML2DUA.LISOUS(/1)
  96. SEGACT ML2PRI
  97. NBSOUP=ML2PRI.LISOUS(/1)
  98. SEGACT IMATEL
  99. NBSOUM=NBSOUP
  100. NBMATL=IMATEL.LIZAFM(/2)
  101. IF (NBSOUD.NE.NBSOUP) THEN
  102. WRITE(IOIMP,*) 'Maillage primal, dual :'
  103. WRITE(IOIMP,*) 'partitionnment différent...'
  104. WRITE(IOIMP,*) 'NBSOUD=',NBSOUD
  105. WRITE(IOIMP,*) 'NBSOUP=',NBSOUP
  106. GOTO 9999
  107. ENDIF
  108. *
  109. * Tableau de repérage dans la matrice
  110. *
  111. * In INIRPM : SEGINI RPMAT
  112. CALL INIRPM(IMATEL,RPMAT,IMPR,IRET)
  113. IF (IRET.NE.0) GOTO 9999
  114. *
  115. * Activons les tableaux de repérage
  116. *
  117. SEGACT KRINCD
  118. NBCMPD=KRINCD.LECT(/1)
  119. SEGACT KRINCP
  120. NBCMPP=KRINCP.LECT(/1)
  121. IF (NBCMPD.NE.NBMATL.OR.NBCMPP.NE.NBMATL) THEN
  122. WRITE(IOIMP,*) 'KRINCD, KRINCP et IMATEL :'
  123. WRITE(IOIMP,*) 'nb. comp. différents...'
  124. GOTO 9999
  125. ENDIF
  126. SEGACT KMINCT
  127. SEGACT KRSPGT
  128. SEGACT PMTOT
  129. SEGACT IZATOT*MOD
  130. *
  131. * Parcourons les matrices élémentaires par sous-domaine et
  132. * remplissons les valeurs de la matrice Morse.
  133. *
  134. DO 1 IMATL=1,NBMATL
  135. ITIDUA=KRINCD.LECT(IMATL)
  136. ITIPRI=KRINCP.LECT(IMATL)
  137. NUELG=0
  138. OLDISM=1
  139. VMATEL=IMATEL.LIZAFM(OLDISM,IMATL)
  140. SEGACT VMATEL
  141. DO 12 ISOUM=1,NBSOUM
  142. SMLDUA=ML2DUA.LISOUS(ISOUM)
  143. SEGACT SMLDUA
  144. SMLPRI=ML2PRI.LISOUS(ISOUM)
  145. SEGACT SMLPRI
  146. NELPRI=SMLPRI.NUM(/2)
  147. DO 122 IELEM=1,NELPRI
  148. NUELG=NUELG+1
  149. CALL RPELEM(NUELG,RPMAT,ISOUMA,NUELOC,IMPR,IRET)
  150. IF (IRET.NE.0) GOTO 9999
  151. ISOUMA=MAX(ISOUMA,1)
  152. IF (ISOUMA.NE.OLDISM) THEN
  153. SEGDES VMATEL
  154. VMATEL=IMATEL.LIZAFM(ISOUMA,IMATL)
  155. SEGACT VMATEL
  156. OLDISM=ISOUMA
  157. ENDIF
  158. ILMAT=NUELOC
  159. NPMAT=VMATEL.AM(/2)
  160. NDMAT=VMATEL.AM(/3)
  161. DO 1222 JDMAT=1,NDMAT
  162. ITPODU=KRSPGT.LECT(SMLDUA.NUM(JDMAT,IELEM))
  163. IF (ITPODU.EQ.0) THEN
  164. WRITE(IOIMP,*) 'Point dual ????'
  165. GOTO 9999
  166. ENDIF
  167. C Test du MPOS... déjà fait dans mkpmor...
  168. ITDDLD=KMINCT.NPOS(ITPODU)
  169. $ + KMINCT.MPOS(ITPODU,ITIDUA)-1
  170. C IPMAT parce que IDMAT est le nom d'un segment par défaut...
  171. DO 12222 IPMAT=1,NPMAT
  172. ITPOPR=KRSPGT.LECT(SMLPRI.NUM(IPMAT,IELEM))
  173. IF (ITPOPR.EQ.0) THEN
  174. WRITE(IOIMP,*) 'Point primal ????'
  175. GOTO 9999
  176. ENDIF
  177. ITDDLP=KMINCT.NPOS(ITPOPR)
  178. $ + KMINCT.MPOS(ITPOPR,ITIPRI)-1
  179. IDXDEB=PMTOT.IA(ITDDLP)
  180. LONLIG=PMTOT.IA(ITDDLP+1)-IDXDEB
  181. IF (LONLIG.EQ.0) THEN
  182. WRITE(IOIMP,*) 'Ligne inex. ddl pri =',ITDDLP
  183. GOTO 9999
  184. ENDIF
  185. CALL IFIDIC(LONLIG,PMTOT.JA(IDXDEB),ITDDLD,
  186. $ IDX,
  187. $ IMPR,IRET)
  188. IF (IRET.NE.0) GOTO 9999
  189. IZATOT.A(IDXDEB+IDX-1)=IZATOT.A(IDXDEB+IDX-1)
  190. $ + VMATEL.AM(ILMAT,IPMAT,JDMAT)
  191. 12222 CONTINUE
  192. 1222 CONTINUE
  193. 122 CONTINUE
  194. SEGDES VMATEL
  195. 12 CONTINUE
  196. SEGDES SMLPRI
  197. SEGDES SMLDUA
  198. 1 CONTINUE
  199. SEGDES IZATOT
  200. SEGDES PMTOT
  201. SEGDES KRSPGT
  202. SEGDES KMINCT
  203. SEGDES KRINCP
  204. SEGDES KRINCD
  205. SEGSUP RPMAT
  206. SEGDES IMATEL
  207. SEGDES ML2PRI
  208. SEGDES ML2DUA
  209. IF (.NOT.LPARTP) SEGSUP ML2PRI
  210. IF (.NOT.LPARTD) SEGSUP ML2DUA
  211. *
  212. * Normal termination
  213. *
  214. IRET=0
  215. RETURN
  216. *
  217. * Format handling
  218. *
  219. *
  220. * Error handling
  221. *
  222. 9999 CONTINUE
  223. IRET=1
  224. WRITE(IOIMP,*) 'An error was detected in subroutine mkizat'
  225. RETURN
  226. *
  227. * End of subroutine MKIZAT
  228. *
  229. END
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  

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