Télécharger prcmck.eso

Retour à la liste

Numérotation des lignes :

prcmck
  1. C PRCMCK SOURCE CB215821 20/11/25 13:36:03 10792
  2. SUBROUTINE PRCMCK(MATC,MATB,CHPOD,MATCDB,IMPR,IRET)
  3. IMPLICIT REAL*8 (A-H,O-Z)
  4. IMPLICIT INTEGER (I-N)
  5. C***********************************************************************
  6. C NOM : PRCMCK
  7. C DESCRIPTION : Préparation du calcul de CD-1Bt, on effectue les boucles
  8. C sur les matrices élémentaires.
  9. C
  10. C
  11. C
  12. C LANGAGE : ESOPE
  13. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  14. C mél : gounand@semt2.smts.cea.fr
  15. C***********************************************************************
  16. C APPELES : PROMAT
  17. C APPELES (E/S) : LIROBJ, ECROBJ
  18. C APPELES (STAT) : INMSTA, PRMSTA, SUMSTA
  19. C APPELE PAR : RYO2V
  20. C***********************************************************************
  21. C SYNTAXE GIBIANE : MATCDB = 'KOPS' 'CMCT' MATC MATB CHPOD
  22. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  23. C***********************************************************************
  24. C VERSION : v1, 28/01/2000, version initiale réécrite
  25. C HISTORIQUE : v1, 28/01/2000, création
  26. C HISTORIQUE :
  27. C HISTORIQUE :
  28. C***********************************************************************
  29. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  30. C en cas de modification de ce sous-programme afin de faciliter
  31. C la maintenance !
  32. C***********************************************************************
  33.  
  34. -INC PPARAM
  35. -INC CCOPTIO
  36. *
  37. * MATC, MATB, MATCDB : les deux matrices à multiplier et leur produit
  38. *
  39. INTEGER NRIGE,NMATRI,NKID,NKMT
  40. POINTEUR MATC.MATRIK
  41. POINTEUR MATB.MATRIK
  42. POINTEUR MATCDB.MATRIK
  43. POINTEUR IMATC.IMATRI
  44. POINTEUR IMATB.IMATRI
  45. POINTEUR IMTCDB.IMATRI
  46. -INC SMELEME
  47. POINTEUR MPRIC.MELEME,MDUAC.MELEME
  48. POINTEUR MPRIB.MELEME,MDUAB.MELEME
  49. POINTEUR MPCDB.MELEME,MDCDB.MELEME
  50. C POINTEUR MPCDB1.MELEME,MDCDB1.MELEME
  51. *
  52. * Les segments relatifs à la matrice diagonale D
  53. *
  54. -INC SMCHPOI
  55. POINTEUR CHPOD.MCHPOI
  56. *
  57. * Includes persos
  58. *
  59. C SEGMENT MELS
  60. C POINTEUR LISMEL(NBMEL).MELEME
  61. C ENDSEGMENT
  62. C INTEGER NBMEL
  63. C POINTEUR GPMELS.MELS
  64. *STAT-INC SMSTAT
  65. *STAT POINTEUR MSTOT.MSTAT
  66. *STAT POINTEUR MSMAT.MSTAT
  67. *
  68. INTEGER IMPR,IRET
  69. *
  70. INTEGER NMEB,NMEC
  71. INTEGER IMEB,IMEC
  72. *
  73. * Executable statements
  74. *
  75. *STAT CALL INMSTA(MSTOT,0)
  76. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans prcmck.eso'
  77. SEGACT MATB
  78. NMEB=MATB.IRIGEL(/2)
  79. SEGACT MATC
  80. NMEC=MATC.IRIGEL(/2)
  81. NRIGE=7
  82. NMATRI=0
  83. NKID=9
  84. NKMT=7
  85. SEGINI MATCDB
  86. DO 1 IMEB=1,NMEB
  87. MPRIB=MATB.IRIGEL(1,IMEB)
  88. MDUAB=MATB.IRIGEL(2,IMEB)
  89. IMATB=MATB.IRIGEL(4,IMEB)
  90. DO 12 IMEC=1,NMEC
  91. * Vérification des noms d'inconnues
  92. MPRIC=MATC.IRIGEL(1,IMEC)
  93. MDUAC=MATC.IRIGEL(2,IMEC)
  94. IMATC=MATC.IRIGEL(4,IMEC)
  95. *STAT CALL INMSTA(MSMAT,0)
  96. CALL PROMAT(MPRIB,MDUAB,IMATB,
  97. $ MPRIC,MDUAC,IMATC,
  98. $ CHPOD,
  99. $ MPCDB,MDCDB,IMTCDB,
  100. $ IMPR,IRET)
  101. IF (IRET.NE.0) GOTO 9999
  102. *STAT CALL PRMSTA(' Création matrice produit',MSMAT,1)
  103. *STAT CALL SUMSTA(MSMAT,0)
  104. IF (IMTCDB.NE.0) THEN
  105. NMATRI=MATCDB.IRIGEL(/2)+1
  106. SEGADJ,MATCDB
  107. MATCDB.IRIGEL(1,NMATRI)=MPCDB
  108. MATCDB.IRIGEL(2,NMATRI)=MDCDB
  109. MATCDB.IRIGEL(4,NMATRI)=IMTCDB
  110. IF (MATB.EQ.MATC) THEN
  111. MATCDB.IRIGEL(7,NMATRI)=0
  112. ELSE
  113. MATCDB.IRIGEL(7,NMATRI)=2
  114. ENDIF
  115. * Inutile avec le nouvel assemblage
  116. C SEGACT IMTCDB*MOD
  117. C NBMEL=1
  118. C SEGINI GPMELS
  119. C GPMELS.LISMEL(1)=MPCDB
  120. C CALL MLUNIQ(GPMELS,
  121. C $ MPCDB1,IMPR,IRET)
  122. C IF (IRET.NE.0) GOTO 9999
  123. C IMTCDB.KSPGP=MPCDB1
  124. C SEGACT GPMELS*MOD
  125. C GPMELS.LISMEL(1)=MDCDB
  126. C SEGDES GPMELS
  127. C CALL MLUNIQ(GPMELS,
  128. C $ MDCDB1,IMPR,IRET)
  129. C IF (IRET.NE.0) GOTO 9999
  130. C IMTCDB.KSPGD=MDCDB1
  131. C SEGSUP GPMELS
  132. C SEGDES IMTCDB
  133. ENDIF
  134. 12 CONTINUE
  135. 1 CONTINUE
  136. IF (MATCDB.IRIGEL(/2).EQ.0) THEN
  137. WRITE(IOIMP,*) 'Opérateur CMCT : la matrice produit est vide'
  138. ENDIF
  139. SEGDES MATCDB
  140. SEGDES MATC
  141. SEGDES MATB
  142. *STAT CALL PRMSTA('Total de CMCT',MSTOT,1)
  143. *STAT CALL SUMSTA(MSTOT,0)
  144. *
  145. * Normal termination
  146. *
  147. IRET=0
  148. RETURN
  149. *
  150. * Format handling
  151. *
  152. *
  153. * Error handling
  154. *
  155. 9999 CONTINUE
  156. IRET=1
  157. WRITE(IOIMP,*) 'An error was detected in subroutine prcmck'
  158. RETURN
  159. *
  160. * End of subroutine PRCMCK
  161. *
  162. END
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  

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