Télécharger prmcp5.eso

Retour à la liste

Numérotation des lignes :

prmcp5
  1. C PRMCP5 SOURCE CB215821 20/11/25 13:37:09 10792
  2. SUBROUTINE PRMCP5(MMLPRI,MMLDUA,MMATEL,ICMPRI,ICMDUA,LNBME,
  3. $ MPOPRI,KICPRI,KMCPRI,
  4. $ KICDUA,KMCDUA,
  5. $ MPODUA,
  6. $ IMPR,IRET)
  7. IMPLICIT INTEGER(I-N)
  8. IMPLICIT REAL*8 (A-H,O-Z)
  9. C***********************************************************************
  10. C NOM : PRMCP5
  11. C DESCRIPTION : Produit matrices élémentaires * mpoval primal
  12. C -> mpoval dual.
  13. C
  14. C
  15. C LANGAGE : ESOPE
  16. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  17. C mél : gounand@semt2.smts.cea.fr
  18. C***********************************************************************
  19. C APPELES : REGMAI, INIRPM, RPELEM
  20. C APPELE PAR : PRMCP2
  21. C***********************************************************************
  22. C ENTREES : MLPRI, MMLDUA, MMATEL, ICMPRI, ICMDUA, LNBME,
  23. C MPOPRI, KICPRI, KMCPRI, KICDUA, KMCDUA
  24. C ENTREES/SORTIES : -
  25. C SORTIES : MPODUA
  26. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  27. C***********************************************************************
  28. C VERSION : v1, 18/04/2000, version initiale
  29. C HISTORIQUE : v1, 18/04/2000, création
  30. C HISTORIQUE :
  31. C HISTORIQUE :
  32. C***********************************************************************
  33. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  34. C en cas de modification de ce sous-programme afin de faciliter
  35. C la maintenance !
  36. C***********************************************************************
  37. -INC PPARAM
  38. -INC CCOPTIO
  39. -INC SMELEME
  40. POINTEUR MMLPRI.MELEME
  41. POINTEUR MMLDUA.MELEME
  42. POINTEUR ML2PRI.MELEME
  43. POINTEUR ML2DUA.MELEME
  44. POINTEUR SMLPRI.MELEME
  45. POINTEUR SMLDUA.MELEME
  46. POINTEUR MMATEL.IMATRI
  47. POINTEUR VMATEL.IZAFM
  48. -INC SMLENTI
  49. POINTEUR RPMAT.MLENTI
  50. POINTEUR ICMPRI.MLENTI
  51. POINTEUR ICMDUA.MLENTI
  52. POINTEUR LNBME.MLENTI
  53. POINTEUR KICPRI.MLENTI
  54. POINTEUR KICDUA.MLENTI
  55. POINTEUR KMCPRI.MLENTI
  56. POINTEUR KMCDUA.MLENTI
  57. -INC SMCHPOI
  58. POINTEUR MPOPRI.MPOVAL
  59. POINTEUR MPODUA.MPOVAL
  60. *
  61. INTEGER IMPR,IRET
  62. *
  63. INTEGER ICCPRI,ICCDUA,ILMAT,NUELG,NUELOC,ITPOPR,ITPODU
  64. INTEGER IELEM ,IMATL ,IPMAT,JDMAT, ISOUM,ISOUMA,OLDISM
  65. INTEGER NELPRI,NMATL ,NPMAT,NDMAT,NBSOUM,NBSOUP,NBSOUD
  66. LOGICAL LPARTP,LPARTD
  67. *
  68. * Executable statements
  69. *
  70. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans prmcp5.eso'
  71. * On régularise les maillage pour plus se faire chier si LISOUS(/1).EQ.0
  72. * In REGMAI : IF (.NOT.LPARTD) SEGINI ML2DUA
  73. CALL REGMAI(MMLDUA,ML2DUA,LPARTD,IMPR,IRET)
  74. IF (IRET.NE.0) GOTO 9999
  75. * In REGMAI : IF (.NOT.LPARTP) SEGINI ML2PRI
  76. CALL REGMAI(MMLPRI,ML2PRI,LPARTP,IMPR,IRET)
  77. IF (IRET.NE.0) GOTO 9999
  78. *
  79. * Activons les chapeaux (Matrices et supports)
  80. *
  81. SEGACT ML2DUA
  82. NBSOUD=ML2DUA.LISOUS(/1)
  83. SEGACT ML2PRI
  84. NBSOUP=ML2PRI.LISOUS(/1)
  85. SEGACT MMATEL
  86. NBSOUM=NBSOUP
  87. IF (NBSOUD.NE.NBSOUP) THEN
  88. WRITE(IOIMP,*) 'Maillage primal, dual :'
  89. WRITE(IOIMP,*) 'partitionnment différent...'
  90. WRITE(IOIMP,*) 'NBSOUD=',NBSOUD
  91. WRITE(IOIMP,*) 'NBSOUP=',NBSOUP
  92. GOTO 9999
  93. ENDIF
  94. *
  95. * Tableau de repérage dans la matrice
  96. *
  97. * In INIRPM : SEGINI RPMAT
  98. CALL INIRPM(MMATEL,RPMAT,IMPR,IRET)
  99. IF (IRET.NE.0) GOTO 9999
  100. *
  101. * Activons les tableaux de repérage
  102. *
  103. * Matrices
  104. * Inconnues
  105. SEGACT ICMPRI
  106. SEGACT ICMDUA
  107. * Matrices élémentaires à parcourir
  108. SEGACT LNBME
  109. * Chpoints
  110. SEGACT MPOPRI
  111. SEGACT MPODUA*MOD
  112. * Inconnues
  113. SEGACT KICPRI
  114. SEGACT KICDUA
  115. * Maillages
  116. SEGACT KMCPRI
  117. SEGACT KMCDUA
  118. *
  119. * Parcourons les matrices élémentaires par sous-domaine et
  120. * remplissons les valeurs de MPODUA.
  121. *
  122. NMATL=LNBME.LECT(/1)
  123. DO 1 IMATL=1,NMATL
  124. * Numéros d'inconnues dans les chpo. primaux et duaux
  125. * pour la LNBME.LECT(IMATL)ième matrice
  126. ICCPRI=KICPRI.LECT(ICMPRI.LECT(LNBME.LECT(IMATL)))
  127. ICCDUA=KICDUA.LECT(ICMDUA.LECT(LNBME.LECT(IMATL)))
  128. NUELG=0
  129. OLDISM=1
  130. VMATEL=MMATEL.LIZAFM(OLDISM,LNBME.LECT(IMATL))
  131. SEGACT VMATEL
  132. DO 12 ISOUM=1,NBSOUM
  133. SMLDUA=ML2DUA.LISOUS(ISOUM)
  134. SEGACT SMLDUA
  135. SMLPRI=ML2PRI.LISOUS(ISOUM)
  136. SEGACT SMLPRI
  137. NELPRI=SMLPRI.NUM(/2)
  138. DO 122 IELEM=1,NELPRI
  139. NUELG=NUELG+1
  140. CALL RPELEM(NUELG,RPMAT,ISOUMA,NUELOC,IMPR,IRET)
  141. IF (IRET.NE.0) GOTO 9999
  142. ISOUMA=MAX(ISOUMA,1)
  143. IF (ISOUMA.NE.OLDISM) THEN
  144. SEGDES VMATEL
  145. VMATEL=MMATEL.LIZAFM(ISOUMA,LNBME.LECT(IMATL))
  146. SEGACT VMATEL
  147. OLDISM=ISOUMA
  148. ENDIF
  149. ILMAT=NUELOC
  150. NPMAT=VMATEL.AM(/2)
  151. NDMAT=VMATEL.AM(/3)
  152. DO 1222 JDMAT=1,NDMAT
  153. ITPODU=KMCDUA.LECT(SMLDUA.NUM(JDMAT,IELEM))
  154. IF (ITPODU.EQ.0) THEN
  155. WRITE(IOIMP,*) 'Point dual ????'
  156. GOTO 9999
  157. ENDIF
  158. DO 12222 IPMAT=1,NPMAT
  159. ITPOPR=KMCPRI.LECT(SMLPRI.NUM(IPMAT,IELEM))
  160. * IF (ITPOPR.EQ.0) THEN
  161. * WRITE(IOIMP,*) 'Un point du chpo. primal ',
  162. * $ 'n''est pas dans le spg primal de la ',
  163. * $ 'matrice..'
  164. * GOTO 9999
  165. * ENDIF
  166. IF (ITPOPR.NE.0) THEN
  167. MPODUA.VPOCHA(ITPODU,ICCDUA)=
  168. $ MPODUA.VPOCHA(ITPODU,ICCDUA)+
  169. $ (VMATEL.AM(ILMAT,IPMAT,JDMAT)
  170. $ *MPOPRI.VPOCHA(ITPOPR,ICCPRI))
  171. ENDIF
  172. 12222 CONTINUE
  173. 1222 CONTINUE
  174. 122 CONTINUE
  175. SEGDES SMLPRI
  176. SEGDES SMLDUA
  177. 12 CONTINUE
  178. SEGDES VMATEL
  179. 1 CONTINUE
  180. *
  181. * Désactivons les tableaux de repérage
  182. *
  183. SEGDES KMCDUA
  184. SEGDES KMCPRI
  185. SEGDES KICDUA
  186. SEGDES KICPRI
  187. SEGDES LNBME
  188. SEGDES ICMDUA
  189. SEGDES ICMPRI
  190. SEGDES RPMAT
  191. SEGDES MMATEL
  192. SEGDES ML2PRI
  193. SEGDES ML2DUA
  194. IF (.NOT.LPARTP) SEGSUP ML2PRI
  195. IF (.NOT.LPARTD) SEGSUP ML2DUA
  196. *
  197. * Normal termination
  198. *
  199. IRET=0
  200. RETURN
  201. *
  202. * Format handling
  203. *
  204. *
  205. * Error handling
  206. *
  207. 9999 CONTINUE
  208. IRET=1
  209. WRITE(IOIMP,*) 'An error was detected in subroutine prmcp5'
  210. RETURN
  211. *
  212. * End of subroutine PRMCP5
  213. *
  214. END
  215.  
  216.  
  217.  
  218.  
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  

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