Télécharger prase2.eso

Retour à la liste

Numérotation des lignes :

prase2
  1. C PRASE2 SOURCE PV 22/04/22 21:15:12 11344
  2. SUBROUTINE PRASE2(MATELE,MATASS,
  3. $ IMPR,IRET)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. IMPLICIT INTEGER (I-N)
  6. C***********************************************************************
  7. C NOM : PRASE2
  8. C PROJET : Noyau linéaire NLIN
  9. C DESCRIPTION : Version raccourcie de prasem lorsqu'on connaît la
  10. C structure de la matrice assemblée (tableau de repérage
  11. C des ddl, renumérotation, profil Morse). On effectue
  12. C l'assemblage d'un ensemble de matrices élémentaires pour
  13. C faire une matrice Morse.
  14. C Ceci est la version raccourcie de prasem.
  15. C on a une autre matrice identique sauf pour les
  16. C valeurs des matrices élémentaires.
  17. C
  18. C LANGAGE : ESOPE
  19. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF)
  20. C mél : gounand@semt2.smts.cea.fr
  21. C***********************************************************************
  22. C APPELES : MKIZ2, MKIZT2
  23. C APPELES (UTIL) : RSETXI, CREPER
  24. C APPELE PAR : KRES2
  25. C***********************************************************************
  26. C ENTREES : MATASS
  27. C ENTREES/SORTIES : MATELE
  28. C CODE RETOUR (IRET) : = 0 si tout s'est bien passé
  29. C***********************************************************************
  30. C VERSION : v1, 16/12/99, nouvelle version initiale
  31. C HISTORIQUE : v1, 16/12/99, création
  32. C HISTORIQUE : 09/04/04 rajout de idmatd
  33. C HISTORIQUE :
  34. C***********************************************************************
  35. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  36. C en cas de modification de ce sous-programme afin de faciliter
  37. C la maintenance !
  38. C***********************************************************************
  39. * MATASS est une matrice de préconditionnement déjà assemblée
  40. * permettant de sauter des étapes de l'assemblage
  41.  
  42. -INC PPARAM
  43. -INC CCOPTIO
  44. -INC SMCOORD
  45. -INC SMELEME
  46. POINTEUR KJSPGT.MELEME
  47. POINTEUR MELPRI.MELEME
  48. POINTEUR MELDUA.MELEME
  49. -INC SMLENTI
  50. INTEGER JG
  51. POINTEUR KRSPGT.MLENTI
  52. POINTEUR KRINCP.MLENTI
  53. POINTEUR KRINCD.MLENTI
  54. POINTEUR IWORK.MLENTI
  55. -INC SMLMOTS
  56. INTEGER JGN,JGM
  57. POINTEUR LITOT.MLMOTS
  58. POINTEUR MATELE.MATRIK
  59. POINTEUR MATASS.MATRIK
  60. POINTEUR IMATEL.IMATRI
  61. POINTEUR KMINCT.MINC
  62. * POINTEUR IDMTOT.IDMAT
  63. POINTEUR IDMATP.IDMAT
  64. POINTEUR IDMATD.IDMAT
  65. POINTEUR PMTOT.PMORS
  66. POINTEUR PMTOT2.PMORS
  67. INTEGER NBVA
  68. POINTEUR IZATOT.IZA
  69. *
  70. INTEGER LNMOTS
  71. PARAMETER (LNMOTS=8)
  72. *
  73. INTEGER IMPR,IRET
  74. *
  75. INTEGER NMATE,NTTDDL,NNZTOT,NTOGPO,NTOTIN,NTOTPO
  76. INTEGER IMATE, ITOTIN
  77. INTEGER LNM,NME
  78. REAL*8 RDUMMY(1)
  79. *
  80. * Executable statements
  81. *
  82. IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans prase2'
  83. SEGACT MATASS
  84. SEGACT MATELE*MOD
  85. NMATE=MATASS.IRIGEL(/2)
  86. * Copie de IRIGEL(1,I) et IRIGEL(2,I)
  87. DO 1 IMATE=1,NMATE
  88. MELPRI=MATASS.IRIGEL(1,IMATE)
  89. MELDUA=MATASS.IRIGEL(2,IMATE)
  90. MATELE.IRIGEL(1,IMATE)=MELPRI
  91. MATELE.IRIGEL(2,IMATE)=MELDUA
  92. 1 CONTINUE
  93. MATELE.KSYM=MATASS.KSYM
  94. *
  95. * Construire l'ensemble des points sur lesquels sont localisées des
  96. * inconnues (KSPGT).
  97. *
  98. KJSPGT=MATASS.KISPGT
  99. MATELE.KISPGT=KJSPGT
  100. MATELE.KISPGP=KJSPGT
  101. MATELE.KISPGD=KJSPGT
  102. *
  103. * Construire le repérage des inconnues KMINCT
  104. *
  105. KMINCT=MATASS.KMINC
  106. MATELE.KMINC=KMINCT
  107. MATELE.KMINCP=KMINCT
  108. MATELE.KMINCD=KMINCT
  109. *
  110. * Il faut reconstruire un profil Morse pour MATELE
  111. *
  112. NTTDDL=MATASS.KNTTT
  113. MATELE.KNTTT=NTTDDL
  114. MATELE.KNTTP=NTTDDL
  115. MATELE.KNTTD=NTTDDL
  116. IDMATP=MATASS.KIDMAT(1)
  117. IDMATD=MATASS.KIDMAT(2)
  118. MATELE.KIDMAT(1)=IDMATP
  119. MATELE.KIDMAT(2)=IDMATD
  120. PMTOT2=MATASS.KIDMAT(4)
  121. SEGINI,PMTOT=PMTOT2
  122. MATELE.KIDMAT(4)=PMTOT
  123. NNZTOT=PMTOT.JA(/1)
  124. SEGDES PMTOT
  125. *
  126. * L'ensemble des inconnues
  127. *
  128. SEGACT KMINCT
  129. NTOTIN=KMINCT.LISINC(/2)
  130. JGN=LNMOTS
  131. JGM=NTOTIN
  132. SEGINI LITOT
  133. DO 3 ITOTIN=1,NTOTIN
  134. LITOT.MOTS(ITOTIN)(1:8)=KMINCT.LISINC(ITOTIN)(1:LNMOTS)
  135. 3 CONTINUE
  136. SEGDES LITOT
  137. SEGDES KMINCT
  138. *
  139. * Le repérage dans KSPGT
  140. *
  141. SEGACT KJSPGT
  142. NTOTPO=KJSPGT.NUM(/2)
  143. NTOGPO=nbpts
  144. JG=NTOGPO
  145. SEGINI KRSPGT
  146. * SEGACT KRSPGT
  147. CALL RSETXI(KRSPGT.LECT,KJSPGT.NUM,NTOTPO)
  148. SEGDES KRSPGT
  149. SEGDES KJSPGT
  150. *
  151. * Ordonnancement du profil Morse total
  152. *
  153. SEGACT PMTOT*MOD
  154. NTTDDL=PMTOT.IA(/1)-1
  155. NNZTOT=PMTOT.JA(/1)
  156. JG=MAX(NTTDDL+1,2*NNZTOT)
  157. SEGINI IWORK
  158. CALL CSORT(PMTOT.IA(/1)-1,RDUMMY,PMTOT.JA,PMTOT.IA,
  159. $ IWORK.LECT,.FALSE.)
  160. SEGSUP IWORK
  161. SEGDES PMTOT
  162. *
  163. * Assemblage des matrices élémentaires
  164. *
  165. SEGACT LITOT
  166. NBVA=NNZTOT
  167. SEGINI IZATOT
  168. SEGDES IZATOT
  169. DO 77 IMATE=1,NMATE
  170. MELPRI=MATELE.IRIGEL(1,IMATE)
  171. MELDUA=MATELE.IRIGEL(2,IMATE)
  172. IMATEL=MATELE.IRIGEL(4,IMATE)
  173. SEGACT IMATEL
  174. * repérage dans la primale
  175. LNM=IMATEL.LISPRI(/1)
  176. NME=IMATEL.LISPRI(/2)
  177. JG=NME
  178. SEGINI KRINCP
  179. CALL CREPER(LNM,NME,NTOTIN,
  180. $ IMATEL.LISPRI,LITOT.MOTS,
  181. $ KRINCP.LECT,
  182. $ IMPR,IRET)
  183. IF (IRET.NE.0) GOTO 9999
  184. * repérage dans la duale
  185. LNM=IMATEL.LISDUA(/1)
  186. NME=IMATEL.LISDUA(/2)
  187. JG=NME
  188. SEGINI KRINCD
  189. CALL CREPER(LNM,NME,NTOTIN,
  190. $ IMATEL.LISDUA,LITOT.MOTS,
  191. $ KRINCD.LECT,
  192. $ IMPR,IRET)
  193. IF (IRET.NE.0) GOTO 9999
  194. CALL MKIZ2(MELDUA,MELPRI,IMATEL,
  195. $ KRINCD,KRINCP,KMINCT,KRSPGT,
  196. $ PMTOT,IDMATP,IDMATD,
  197. $ IZATOT,
  198. $ IMPR,IRET)
  199. IF (IRET.NE.0) GOTO 9999
  200. *
  201. * Cas particulier : celui des matrices CCt
  202. *
  203. ITYMAT=MATELE.IRIGEL(7,IMATE)
  204. IF (ITYMAT.EQ.4.OR.ITYMAT.EQ.-4) THEN
  205. CALL MKIZT2(MELDUA,MELPRI,IMATEL,
  206. $ KRINCD,KRINCP,KMINCT,KRSPGT,
  207. $ PMTOT,IDMATP,IDMATD,
  208. $ IZATOT,
  209. $ IMPR,IRET)
  210. IF (IRET.NE.0) GOTO 9999
  211. ENDIF
  212. SEGSUP KRINCD
  213. SEGSUP KRINCP
  214. SEGDES IMATEL
  215. 77 CONTINUE
  216. SEGSUP LITOT
  217. SEGSUP KRSPGT
  218. MATELE.KIDMAT(5)=IZATOT
  219. SEGDES MATELE
  220. SEGDES MATASS
  221. *
  222. * Normal termination
  223. *
  224. IRET=0
  225. RETURN
  226. *
  227. * Format handling
  228. *
  229. *
  230. * Error handling
  231. *
  232. 9999 CONTINUE
  233. IRET=1
  234. WRITE(IOIMP,*) 'An error was detected in subroutine prase2'
  235. RETURN
  236. *
  237. * End of subroutine PRASE2
  238. *
  239. END
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  

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