Télécharger ecmatk.eso

Retour à la liste

Numérotation des lignes :

ecmatk
  1. C ECMATK SOURCE PV 20/09/26 21:16:33 10724
  2. SUBROUTINE ECMATK(IMATRK)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8 (A-H,O-Z)
  5. C***********************************************************************
  6. C NOM : ECMATK
  7. C DESCRIPTION : Impression d'un segment de type MATRIK
  8. C
  9. C Les sous-programmes ECIMAT, ECMINC, ECMORS sont
  10. C également appelables indépendamment en Esope.
  11. C (utiles pour la mise au point).
  12. C
  13. C Ils impriment respectivement les segments de type
  14. C IMATRI, MINC, (KMORS, KISA)<->matrice Morse.
  15. C
  16. C Pour plus de précisions, voir la notice de ces
  17. C sous-programmes et l'include SMMATRIK.
  18. C
  19. C
  20. C LANGAGE : ESOPE
  21. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF)
  22. C mél : gounand@semt2.smts.cea.fr
  23. C***********************************************************************
  24. C APPELES (E/S) : LIRENT, ERREUR
  25. C ECIMAT, ECMINC, ECMORS
  26. C***********************************************************************
  27. C SYNTAXE GIBIANE : 'LIST' MATRIK NIVIMP
  28. C ENTREES : IMATRK
  29. C ENTREES/SORTIES : -
  30. C SORTIES : -
  31. C CODE RETOUR (IRET) : -
  32. C IMATRK : segment de type MATRIK (include SMMATRIK)
  33. C NIVIMP : niveau d'impression. Suivant sa valeur, on obtient :
  34. C Convention (probablement non totalement respectée) :
  35. C ---------- 0 : presque rien (numéro de pointeur)
  36. C 1 : affichage du chapeau MATRIK
  37. C 2 : affichage des données concernant les objets
  38. C pointés par MATRIK
  39. C 3 : affichage du contenu des objets vectoriels
  40. C 4 : affichage du contenu des objets matriciels
  41. C On ne change pas l'état (actif ou inactif) du segment IMATRK.
  42. C***********************************************************************
  43. C VERSION : 20/12/99
  44. C HISTORIQUE : v1, 01/04/98, création
  45. C HISTORIQUE : 29/10/98, modif. l'état du segment reste inchangé
  46. C en sortie
  47. C HISTORIQUE : 20/12/99, ajout des nouveaux types de matrice (-3) et de
  48. C l'affichage éventuel des maillages supports.
  49. C HISTORIQUE :
  50. C***********************************************************************
  51. C Prière de PRENDRE LE TEMPS de compléter les commentaires
  52. C en cas de modification de ce sous-programme afin de faciliter
  53. C la maintenance !
  54. C***********************************************************************
  55.  
  56. -INC PPARAM
  57. -INC CCOPTIO
  58. POINTEUR IMATRK.MATRIK
  59. *
  60. * Variables pour la gestion des options de l'opérateur LIST
  61. *
  62. INTEGER NIVIMP
  63. *
  64. INTEGER I,IRETOU,LENTYP,NA
  65. INTEGER NBID,NBLK,NBTMAT,NKMT
  66. INTEGER NKZA,NMATRI,NPT,NRIGE
  67. * Variable d'état du segment IMATRK
  68. INTEGER IMAETA
  69. *
  70. * Tableau de correspondance (numéro <-> type de matrice)
  71. * stocké dans IRIGEL(7,.)
  72. PARAMETER (LENTYP=30)
  73. PARAMETER (NBTMAT=9)
  74. CHARACTER*(LENTYP) TYPMAT(-3:NBTMAT)
  75.  
  76. * Initialisations des tableaux
  77. * Tableau des types de matrice
  78. DATA TYPMAT/
  79. $ 'RECTANGULAIRE (DUAL mult.lag.)',
  80. $ 'inconnu au bataillon ',
  81. $ 'inconnu au bataillon ',
  82. $ 'SYMETRIQUE ',
  83. $ 'ANTISYMETRIQUE ',
  84. $ 'NON SYMETRIQUE ',
  85. $ 'RECTANGULAIRE ',
  86. $ 'CCt (DUAL mult.lag.)',
  87. $ 'DIAGONALE ',
  88. $ 'MORSE ',
  89. $ 'SYMETRIQUE apres assemblage ',
  90. $ 'NON SYMETRIQUE apres assem. ',
  91. $ 'MATRICE DE ROTATION '/
  92.  
  93. * Tableau message d'erreur
  94. MOTERR(1:40)=' '
  95. * Lecture des options :
  96. * On précise un niveau d'impression.
  97. * Par défaut : 1
  98. *
  99. CALL LIRENT(NIVIMP,0,IRETOU)
  100. IF (IRETOU.EQ.0) THEN
  101. NIVIMP=1
  102. ELSEIF ((NIVIMP.LT.0).OR.(NIVIMP.GT.9)) THEN
  103. * %m1:40
  104. * Données incompatibles
  105. MOTERR(1:6)='NIVIMP'
  106. CALL ERREUR(-301)
  107. CALL ERREUR(21)
  108. GOTO 9999
  109. ENDIF
  110. * Début
  111. MATRIK=IMATRK
  112. CALL OOOETA(MATRIK,IMAETA,IMOD)
  113. IF (IMAETA.NE.1) SEGACT MATRIK
  114. WRITE(IOIMP,2001) 'Segment MATRIK de pointeur ',MATRIK
  115. *
  116. * Affichage du chapeau
  117. *
  118. IF (NIVIMP.GT.0) THEN
  119. NRIGE =IRIGEL(/1)
  120. NMATRI=IRIGEL(/2)
  121. WRITE(IOIMP,1999) 'Rigidités élémentaires :'
  122. WRITE(IOIMP,1000) 'Tableau IRIGEL (',NRIGE,',',NMATRI,')'
  123. DO 2 I=1,NMATRI
  124. WRITE(IOIMP,1001) 'IRIGEL(1,',I,')=',IRIGEL(1,I),
  125. $ ' (Pointeur MELEME primal)'
  126. WRITE(IOIMP,1001) 'IRIGEL(2,',I,')=',IRIGEL(2,I),
  127. $ ' (Pointeur MELEME dual)'
  128. WRITE(IOIMP,1001) 'IRIGEL(4,',I,')=',IRIGEL(4,I),
  129. $ ' (Pointeur IMATRI)'
  130. WRITE(IOIMP,1001) 'IRIGEL(5,',I,')=',IRIGEL(5,I),
  131. $ ' (Non utilisé)'
  132. WRITE(IOIMP,1001) 'IRIGEL(6,',I,')=',IRIGEL(6,I),
  133. $ ' (Non utilisé)'
  134. WRITE(IOIMP,1001) 'IRIGEL(7,',I,')=',IRIGEL(7,I),
  135. $ ' : matrice ',TYPMAT(IRIGEL(7,I))
  136. WRITE(IOIMP,1998) '---'
  137. 2 CONTINUE
  138. WRITE(IOIMP,1999) ' '
  139. WRITE(IOIMP,1999) 'Matrice assemblée :'
  140. WRITE(IOIMP,1996) 'KSYM=',KSYM,' : matrice ',TYPMAT(KSYM)
  141. WRITE(IOIMP,1998) 'Pointeurs MINC (répartition des inconnues)'
  142. WRITE(IOIMP,1002) 'KMINC =',KMINC,'(total)',
  143. $ 'KMINCP=',KMINCP,'(primal)',
  144. $ 'KMINCD=',KMINCD,'(dual)'
  145. WRITE(IOIMP,1998) 'Pointeurs MELEME (SPG assemblés)'
  146. WRITE(IOIMP,1003) 'KISPGT=',KISPGT,
  147. $ 'KISPGP=',KISPGP,
  148. $ 'KISPGD=',KISPGD
  149. IF (NIVIMP.GT.4.AND.KISPGT.NE.0) THEN
  150. MELEME=KISPGT
  151. WRITE(IOIMP,2001) 'Segment MELEME de pointeur',MELEME
  152. WRITE(IOIMP,*) 'pointé par KISPGT'
  153. CALL ECROBJ('MAILLAGE',MELEME)
  154. CALL PRLIST
  155. ENDIF
  156. WRITE(IOIMP,1998) 'Nombre d''inconnues total'
  157. WRITE(IOIMP,1003) 'KNTTT =',KNTTT,
  158. $ 'KNTTP =',KNTTP,
  159. $ 'KNTTD =',KNTTD
  160. WRITE(IOIMP,1998) 'Pointeur MELEME (connectivités globales)'
  161. WRITE(IOIMP,1005) 'KIZM =',KIZM
  162. WRITE(IOIMP,1999) ' '
  163. WRITE(IOIMP,1999) 'Tableau KIDMAT(9) (stockage Choleski) :'
  164. WRITE(IOIMP,1998) 'Pointeur IDMAT'
  165. WRITE(IOIMP,1004) '(1) IDMATP=',KIDMAT(1),
  166. $ '(2) IDMATD=',KIDMAT(2)
  167. WRITE(IOIMP,1998) 'Pointeur IZA (second membre)'
  168. WRITE(IOIMP,1005) '(3) KS2B =',KIDMAT(3)
  169. WRITE(IOIMP,1998) 'Pointeurs PMORS,IZA (matrice assemblée)'
  170. WRITE(IOIMP,1004) '(4) KMORS =',KIDMAT(4),
  171. $ '(5) KISA =',KIDMAT(5)
  172. WRITE(IOIMP,1998) 'Pointeurs PMORS,IZA (matrice assemblée AAt)'
  173. WRITE(IOIMP,1004) '(6) KMRST =',KIDMAT(6),
  174. $ '(7) KIST =',KIDMAT(7)
  175. WRITE(IOIMP,1998) 'Pointeur MCHPOI (conditions aux limites)'
  176. WRITE(IOIMP,1005) '(8) KCLIM =',KIDMAT(8)
  177. WRITE(IOIMP,1007) '(9) KTRING=',KIDMAT(9),'(0=non triangulée)'
  178. NKMT=KKMMT(/1)
  179. WRITE(IOIMP,1999) ' '
  180. WRITE(IOIMP,1006) 'Tableau KKMMT(',NKMT,')',(KKMMT(I),I=1,NKMT)
  181. WRITE(IOIMP,1999) 'END Segment MATRIK'
  182. WRITE(IOIMP,1999) ' '
  183. ENDIF
  184. *
  185. * Affichage des segments pointés par MATRIK
  186. *
  187. IF (NIVIMP.GT.1) THEN
  188. * Affichage des IMATRI
  189. DO 3 I=1,NMATRI
  190. IF (NIVIMP.GT.4) THEN
  191. MELEME=IRIGEL(1,I)
  192. WRITE(IOIMP,2001) 'Segment MELEME de pointeur',MELEME
  193. WRITE(IOIMP,2002) 'pointé par IRIGEL(1,',I,')'
  194. CALL ECROBJ('MAILLAGE',MELEME)
  195. CALL PRLIST
  196. MELEME=IRIGEL(2,I)
  197. WRITE(IOIMP,2001) 'Segment MELEME de pointeur',MELEME
  198. WRITE(IOIMP,2002) 'pointé par IRIGEL(2,',I,')'
  199. CALL ECROBJ('MAILLAGE',MELEME)
  200. CALL PRLIST
  201. ENDIF
  202. IMATRI=IRIGEL(4,I)
  203. WRITE(IOIMP,2001) 'Segment IMATRI de pointeur',IMATRI
  204. WRITE(IOIMP,2002) 'pointé par IRIGEL(4,',I,')'
  205. IF (IMATRI.NE.0) THEN
  206. CALL ECIMAT(IMATRI,NIVIMP)
  207. ENDIF
  208. WRITE(IOIMP,1999) 'End segment IMATRI'
  209. WRITE(IOIMP,1999) ' '
  210. 3 CONTINUE
  211. * Affichage des MINC
  212. IF (KMINC.NE.0) THEN
  213. WRITE(IOIMP,3000) KMINC,'Total'
  214. MINC=KMINC
  215. CALL ECMINC(MINC,NIVIMP)
  216. WRITE(IOIMP,1999) 'End segment MINC'
  217. WRITE(IOIMP,1999) ' '
  218. ENDIF
  219. IF ((KMINCP.NE.0).AND.(KMINCP.NE.KMINC)) THEN
  220. WRITE(IOIMP,3000) KMINCP,'Primal'
  221. MINC=KMINCP
  222. CALL ECMINC(MINC,NIVIMP)
  223. WRITE(IOIMP,1999) 'End segment MINC'
  224. WRITE(IOIMP,1999) ' '
  225. ENDIF
  226. IF ((KMINCD.NE.0).AND.(KMINCD.NE.KMINC).AND.(KMINCD.NE.KMINCP))
  227. $ THEN
  228. WRITE(IOIMP,3000) KMINCD,'Dual'
  229. MINC=KMINCD
  230. CALL ECMINC(MINC,NIVIMP)
  231. WRITE(IOIMP,1999) 'End segment MINC'
  232. WRITE(IOIMP,1999) ' '
  233. ENDIF
  234. * Affichage des matrices stockées en MORSE
  235. PMORS=KIDMAT(4)
  236. IZA=KIDMAT(5)
  237. IF ((PMORS.NE.0).AND.(IZA.NE.0)) THEN
  238. WRITE(IOIMP,4000) PMORS,IZA,'assemblée'
  239. CALL ECMORS(PMORS,IZA,NIVIMP)
  240. WRITE(IOIMP,1999) 'End Matrice Morse'
  241. WRITE(IOIMP,1999) ' '
  242. ENDIF
  243. PMORS=KIDMAT(6)
  244. IZA=KIDMAT(7)
  245. IF ((PMORS.NE.0).AND.(IZA.NE.0)) THEN
  246. WRITE(IOIMP,4000) PMORS,IZA,'assemblée AAt'
  247. CALL ECMORS(PMORS,IZA,NIVIMP)
  248. WRITE(IOIMP,1999) 'End Matrice Morse'
  249. WRITE(IOIMP,1999) ' '
  250. ENDIF
  251. * Affichage du segment stockage bloc Choleski
  252. IF (NIVIMP.GT.3) THEN
  253. DO 5 NBID=1,2
  254. IDMAT=KIDMAT(NBID)
  255. IF (IDMAT.NE.0) THEN
  256. SEGACT IDMAT
  257. IF (NBID.EQ.1) WRITE(IOIMP,5000) IDMAT,'primal'
  258. IF (NBID.EQ.2) WRITE(IOIMP,5000) IDMAT,'dual'
  259. WRITE(IOIMP,*) 'IDIAG=',IDIAG
  260. IF (IDIAG.NE.0) THEN
  261. IZA=IDIAG
  262. SEGACT IZA
  263. NA=A(/1)
  264. WRITE(IOIMP,1902) (A(I),I=1,NA)
  265. SEGDES IZA
  266. ENDIF
  267. NKZA=KZA(/1)
  268. WRITE(IOIMP,*) 'KZA(1..',NKZA,')'
  269. WRITE(IOIMP,5001) (KZA(I),I=1,NKZA)
  270. WRITE(IOIMP,*) 'NUIA(1..',NKZA,',2)'
  271. WRITE(IOIMP,5001) (NUIA(I,1),I=1,NKZA)
  272. WRITE(IOIMP,5001) (NUIA(I,2),I=1,NKZA)
  273. NPT=NUAN(/1)
  274. WRITE(IOIMP,*) 'NUAN(1..',NPT,')'
  275. WRITE(IOIMP,5001) (NUAN(I),I=1,NPT)
  276. WRITE(IOIMP,*) 'NUNA(1..',NPT,')'
  277. WRITE(IOIMP,5001) (NUNA(I),I=1,NPT)
  278. NBLK=IDESCL(/1)
  279. WRITE(IOIMP,*) 'IDESCL(1..',NBLK,')'
  280. WRITE(IOIMP,5001) (IDESCL(I),I=1,NBLK)
  281. WRITE(IOIMP,*) 'IDESCU(1..',NBLK,')'
  282. WRITE(IOIMP,5001) (IDESCU(I),I=1,NBLK)
  283. WRITE(IOIMP,*) 'NLDBLK(1..',NBLK+1,')'
  284. WRITE(IOIMP,5001) (NLDBLK(I),I=1,NBLK+1)
  285. SEGDES IDMAT
  286. ENDIF
  287. 5 CONTINUE
  288. ENDIF
  289. ENDIF
  290. IF (IMAETA.NE.1) SEGDES MATRIK
  291. *
  292. * Normal termination
  293. *
  294. RETURN
  295. *
  296. * Format handling
  297. *
  298. 1901 FORMAT ( ' OBJET DE TYPE MATRIK '/
  299. & ' -------------------- ')
  300. 1902 FORMAT (8(1X,1PE11.2))
  301. * Chapeau MATRIK
  302. 1000 FORMAT (2X,A,I1,A,I1,A)
  303. 1001 FORMAT (4X,A,I1,A,I6,2A)
  304. 1002 FORMAT (4X,A,I6,1X,A,4X,A,I6,1X,A,4X,A,I6,1X,A)
  305. 1003 FORMAT (4X,A,I6,4X,A,I6,4X,A,I6)
  306. 1004 FORMAT (4X,A,I6,4X,A,I6)
  307. 1005 FORMAT (4X,A,I6)
  308. 1006 FORMAT (A,I1,A,8(1X,I6))
  309. 1007 FORMAT (4X,A,I1,2X,A)
  310. 1996 FORMAT (2X,A,I1,A,A)
  311. 1997 FORMAT (4X,A)
  312. 1998 FORMAT (2X,A)
  313. 1999 FORMAT (A)
  314. * Segments IMATRI
  315. 2001 FORMAT (A,1X,I6)
  316. 2002 FORMAT (A,I1,A)
  317. * Segments MINC
  318. 3000 FORMAT ('Segment MINC de pointeur',1X,I6,1X,'(',A,')')
  319. * Matrices Morses
  320. 4000 FORMAT ('Matrice Morse de pointeurs',1X,I6,1X,I6,1X,'(',A,')')
  321. * Chapeau Choleski
  322. 5000 FORMAT ('Chapeau Choleski de pointeur',1X,I6,1X,'(',A,')')
  323. 5001 FORMAT (8(1X,I8))
  324. *
  325. * Error handling
  326. *
  327. 9999 CONTINUE
  328. RETURN
  329. *
  330. * End of subroutine ECMATK
  331. *
  332. END
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  

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