Télécharger ajmtk.eso

Retour à la liste

Numérotation des lignes :

ajmtk
  1. C AJMTK SOURCE PV 20/09/26 21:15:04 10724
  2. SUBROUTINE AJMTK(GMS,MK,IMPR,IRET)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C NOM : AJMTK
  7. C DESCRIPTION : Ajoute à un objet matrice de type MATRIK, un objet
  8. C matrice simplifiée de type GMATSI (voir définition du
  9. C segment ci-dessous).
  10. C
  11. C
  12. C
  13. C LANGAGE : ESOPE
  14. C AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  15. C mél : gounand@semt2.smts.cea.fr
  16. C***********************************************************************
  17. C APPELES : -
  18. C APPELES (UTIL) : RSETI : copie d'un tableau d'entiers.
  19. C APPELE PAR : YLAP1{B,C,D,E}
  20. C***********************************************************************
  21. C ENTREES : MS (type MATSIM) : objet matrice à ajouter.
  22. C ENTREES/SORTIES : MK (type MATRIK) : en sortie, est égal à :
  23. C MK (en entrée) + MS
  24. C SORTIES : -
  25. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  26. C***********************************************************************
  27. C VERSION : v1, 03/08/2001, version initiale
  28. C HISTORIQUE : v1, 03/08/2001, création
  29. C HISTORIQUE :
  30. C HISTORIQUE :
  31. C***********************************************************************
  32. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  33. C en cas de modification de ce sous-programme afin de faciliter
  34. C la maintenance !
  35. C***********************************************************************
  36.  
  37. -INC PPARAM
  38. -INC CCOPTIO
  39. INTEGER NRIGE,NMATRI,NKID,NKMT
  40. INTEGER NBSOUS,NBME
  41. INTEGER NBEL,NP,MP
  42. POINTEUR MK.MATRIK
  43. POINTEUR IK.IMATRI
  44. POINTEUR JK.IZAFM
  45. -INC SMELEME
  46. INTEGER NBNN,NBELEM,NBREF
  47. POINTEUR MAIPRI.MELEME
  48. POINTEUR MAIDUA.MELEME
  49. *
  50. * Objet matrice élémentaire simplifié
  51. *
  52. SEGMENT GMATSI
  53. INTEGER POIPR1(NPP1,NEL1)
  54. INTEGER POIDU1(1,NEL1)
  55. INTEGER POIPR2(NPP2,NEL2)
  56. INTEGER POIDU2(2,NEL2)
  57. POINTEUR LMATSI(0).MATSIM
  58. ENDSEGMENT
  59. POINTEUR GMS.GMATSI
  60. SEGMENT MATSIM
  61. CHARACTER*8 NOMPRI,NOMDUA
  62. REAL*8 VALMA1(1,NPP1,NEL1)
  63. REAL*8 VALMA2(2,NPP2,NEL2)
  64. ENDSEGMENT
  65. POINTEUR MS.MATSIM
  66. *
  67. INTEGER IMPR,IRET
  68. *
  69. INTEGER IPOPR1,IPOPR2,IMAT,IELEM1,IELEM2
  70. INTEGER NPOPR1,NPOPR2,NMAT,NELEM1,NELEM2
  71. *
  72. * Executable statements
  73. *
  74. IF (IMPR.GT.2) WRITE(IOIMP,*) 'Entrée dans ajmtk.eso'
  75. SEGACT GMS
  76. NPOPR1=GMS.POIPR1(/1)
  77. NPOPR2=GMS.POIPR2(/1)
  78. NELEM1=GMS.POIPR1(/2)
  79. NELEM2=GMS.POIPR2(/2)
  80. IF (NELEM1.GT.0) THEN
  81. *
  82. * Création du premier MATRIK
  83. *
  84. * Création de MAIPRI
  85. NBNN=NPOPR1
  86. NBELEM=NELEM1
  87. NBSOUS=0
  88. NBREF=0
  89. SEGINI,MAIPRI
  90. C ITYPEL=32 -> 'POLY'
  91. MAIPRI.ITYPEL=32
  92. CALL RSETI(MAIPRI.NUM,GMS.POIPR1,NPOPR1*NELEM1)
  93. SEGDES MAIPRI
  94. * Création de MAIDUA
  95. NBNN=1
  96. NBELEM=NELEM1
  97. NBSOUS=0
  98. NBREF=0
  99. SEGINI,MAIDUA
  100. C ITYPEL=32 -> 'POLY'
  101. MAIDUA.ITYPEL=32
  102. CALL RSETI(MAIDUA.NUM,GMS.POIDU1,NELEM1)
  103. SEGDES MAIDUA
  104. * Création de IK (noms d'inconnues+pointeurs sur valeurs des matrices
  105. * élémentaires)
  106. NMAT=GMS.LMATSI(/1)
  107. NBME=NMAT
  108. NBSOUS=1
  109. SEGINI IK
  110. DO 1 IMAT=1,NMAT
  111. MS=GMS.LMATSI(IMAT)
  112. SEGACT MS
  113. * Création de JK (matrice élémentaire)
  114. NBEL=NELEM1
  115. NP=NPOPR1
  116. MP=1
  117. SEGINI JK
  118. DO 12 IELEM1=1,NELEM1
  119. DO 122 IPOPR1=1,NPOPR1
  120. JK.AM(IELEM1,IPOPR1,1)=MS.VALMA1(1,IPOPR1,IELEM1)
  121. 122 CONTINUE
  122. 12 CONTINUE
  123. SEGDES JK
  124. IK.LISPRI(IMAT)=MS.NOMPRI
  125. IK.LISDUA(IMAT)=MS.NOMDUA
  126. IK.LIZAFM(1,IMAT)=JK
  127. SEGDES MS
  128. 1 CONTINUE
  129. SEGDES IK
  130. * Mise à jour de MK (pointeurs sur les matrices élémentaires)
  131. SEGACT MK*MOD
  132. NMATRI=MK.IRIGEL(/2)+1
  133. NRIGE=MK.IRIGEL(/1)
  134. NKID=MK.KIDMAT(/1)
  135. NKMT=MK.KKMMT(/1)
  136. SEGADJ,MK
  137. MK.IRIGEL(1,NMATRI)=MAIPRI
  138. MK.IRIGEL(2,NMATRI)=MAIDUA
  139. MK.IRIGEL(4,NMATRI)=IK
  140. * Matrice rectangulaire
  141. MK.IRIGEL(7,NMATRI)=3
  142. SEGDES MK
  143. ENDIF
  144. IF (NELEM2.GT.0) THEN
  145. *
  146. * Création du deuxième MATRIK
  147. *
  148. * Création de MAIPRI
  149. NBNN=NPOPR2
  150. NBELEM=NELEM2
  151. NBSOUS=0
  152. NBREF=0
  153. SEGINI,MAIPRI
  154. C ITYPEL=32 -> 'POLY'
  155. MAIPRI.ITYPEL=32
  156. CALL RSETI(MAIPRI.NUM,GMS.POIPR2,NPOPR2*NELEM2)
  157. SEGDES MAIPRI
  158. * Création de MAIDUA
  159. NBNN=2
  160. NBELEM=NELEM2
  161. NBSOUS=0
  162. NBREF=0
  163. SEGINI,MAIDUA
  164. C ITYPEL=32 -> 'POLY'
  165. MAIDUA.ITYPEL=32
  166. CALL RSETI(MAIDUA.NUM,GMS.POIDU2,2*NELEM2)
  167. SEGDES MAIDUA
  168. * Création de IK (noms d'inconnues+pointeurs sur valeurs des matrices
  169. * élémentaires)
  170. NMAT=GMS.LMATSI(/1)
  171. NBME=NMAT
  172. NBSOUS=1
  173. SEGINI IK
  174. DO 3 IMAT=1,NMAT
  175. MS=GMS.LMATSI(IMAT)
  176. SEGACT MS
  177. * Création de JK (matrice élémentaire)
  178. NBEL=NELEM2
  179. NP=NPOPR2
  180. MP=2
  181. SEGINI JK
  182. DO 32 IELEM2=1,NELEM2
  183. DO 322 IPOPR2=1,NPOPR2
  184. JK.AM(IELEM2,IPOPR2,1)=MS.VALMA2(1,IPOPR2,IELEM2)
  185. JK.AM(IELEM2,IPOPR2,2)=MS.VALMA2(2,IPOPR2,IELEM2)
  186. 322 CONTINUE
  187. 32 CONTINUE
  188. SEGDES JK
  189. IK.LISPRI(IMAT)=MS.NOMPRI
  190. IK.LISDUA(IMAT)=MS.NOMDUA
  191. IK.LIZAFM(1,IMAT)=JK
  192. SEGDES MS
  193. 3 CONTINUE
  194. SEGDES IK
  195. SEGDES GMS
  196. * Mise à jour de MK (pointeurs sur les matrices élémentaires)
  197. SEGACT MK*MOD
  198. NMATRI=MK.IRIGEL(/2)+1
  199. NRIGE=MK.IRIGEL(/1)
  200. NKID=MK.KIDMAT(/1)
  201. NKMT=MK.KKMMT(/1)
  202. SEGADJ,MK
  203. MK.IRIGEL(1,NMATRI)=MAIPRI
  204. MK.IRIGEL(2,NMATRI)=MAIDUA
  205. MK.IRIGEL(4,NMATRI)=IK
  206. * Matrice rectangulaire
  207. MK.IRIGEL(7,NMATRI)=3
  208. SEGDES MK
  209. ENDIF
  210. *
  211. * Normal termination
  212. *
  213. IRET=0
  214. RETURN
  215. *
  216. * Format handling
  217. *
  218. *
  219. * Error handling
  220. *
  221. 9999 CONTINUE
  222. IRET=1
  223. WRITE(IOIMP,*) 'An error was detected in subroutine ajmtk'
  224. RETURN
  225. *
  226. * End of subroutine AJMTK
  227. *
  228. END
  229.  
  230.  
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  

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