Télécharger wrmtik.eso

Retour à la liste

Numérotation des lignes :

wrmtik
  1. C WRMTIK SOURCE PV 20/09/26 21:20:17 10724
  2. SUBROUTINE WRMTIK(IFSAU,ITLACC,IMAX1,IFORM,IDEB)
  3. IMPLICIT INTEGER(I-N)
  4. IMPLICIT REAL*8(A-H,O-Z)
  5. C***********************************************************************
  6. C NOM : WRMTIK
  7. C DESCRIPTION : Ecriture des objets de type MATRIK sur le
  8. C fichier IFSAU
  9. C (appelé par wrpil.eso)
  10. C
  11. C LANGAGE : ESOPE
  12. C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/TTMF)
  13. C mél : gounand@semt2.smts.cea.fr
  14. C***********************************************************************
  15. C APPELES (E/S) : ECDIFE (ecriture d'un tableau d'entiers)
  16. C ECDIFR (ecriture d'un tableau de REAL*8)
  17. C ECDIFM (ecriture d'un tableau de CHARACTER*4)
  18. C***********************************************************************
  19. C SYNTAXE GIBIANE : SAUV
  20. C ENTREES : IFSAU, numéro du fichier en écriture
  21. C IDEB, IMAX1, indice de début et de fin
  22. C de la pile des objets MATRIK (ITLACC)
  23. C à écrire.
  24. C IFORM, le fichier a ecrire est formaté ou
  25. C non.
  26. C***********************************************************************
  27. C VERSION : v1, 15/07/98, version initiale
  28. C HISTORIQUE : v1, 15/07/98, 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. -INC TMCOLAC
  40. SEGMENT/ITBBM1/( ITABM1(NM))
  41. C
  42. INTEGER NDTAB
  43. INTEGER IEL,I,J,K,L
  44. INTEGER ILENA(11)
  45. INTEGER IV1,IV2,IV3,IV4
  46. C======================================================================
  47. *
  48. * Executable statements
  49. *
  50. C
  51. C ... BOUCLE SUR LES MATRIK DE LA PILE
  52. NM=0
  53. SEGINI ITBBM1
  54. DO 1 IEL=IDEB,IMAX1
  55. MATRIK=ITLAC(IEL)
  56. IF (MATRIK.EQ.0) THEN
  57. WRITE(IOIMP,*) 'Failing to save a nil pointer'
  58. WRITE(IOIMP,*) 'MATRIK type object...'
  59. GOTO 9999
  60. ENDIF
  61. C.... On initialise des piles d'objets non connus de CASTEM
  62. C MINC, PMORS, IZA, IDMAT
  63. C (Pb : des entiers distincts (par ex. KISPGP, KISPGT)
  64. C peuvent etre egaux (i.e. pointer sur le meme objet)
  65. C On ne veut pas sauvegarder l'objet deux fois...)
  66. SEGINI ITLAC1
  67. SEGINI ITLAC2
  68. SEGINI ITLAC3
  69. SEGINI ITLAC4
  70. C Sauvegarde du chapeau
  71. C Dimensions
  72. SEGACT MATRIK
  73. NRIGE =IRIGEL(/1)
  74. NMATRI=IRIGEL(/2)
  75. NKID=KIDMAT(/1)
  76. NKMT=KKMMT(/1)
  77. ILENA(1)=NRIGE
  78. ILENA(2)=NMATRI
  79. ILENA(3)=NKID
  80. ILENA(4)=NKMT
  81. NDTAB=4
  82. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  83. C Rigidités élémentaires
  84. NDTAB = NRIGE * NMATRI
  85. CALL ECDIFE(IFSAU,NDTAB,IRIGEL,IFORM)
  86. C Matrice assemblée
  87. ILENA( 1)=KSYM
  88. ILENA( 2)=KMINC
  89. ILENA( 3)=KMINCP
  90. ILENA( 4)=KMINCD
  91. ILENA( 5)=KIZM
  92. ILENA( 6)=KISPGT
  93. ILENA( 7)=KISPGP
  94. ILENA( 8)=KISPGD
  95. ILENA( 9)=KNTTT
  96. ILENA(10)=KNTTP
  97. ILENA(11)=KNTTD
  98. NDTAB=11
  99. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  100. NDTAB=NKID
  101. CALL ECDIFE(IFSAU,NDTAB,KIDMAT,IFORM)
  102. NDTAB=NKMT
  103. CALL ECDIFE(IFSAU,NDTAB,KKMMT,IFORM)
  104. C Sauvegarde des IMATRI
  105. DO 11 I=1,NMATRI
  106. IMATRI=IRIGEL(4,I)
  107. IF (IMATRI.NE.0) THEN
  108. SEGACT IMATRI
  109. NBSOUS=LIZAFM(/1)
  110. NBME=LIZAFM(/2)
  111. ILENA(1)=NBSOUS
  112. ILENA(2)=NBME
  113. NDTAB=2
  114. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  115. NM=4*NBME
  116. SEGADJ ITBBM1
  117. DO 111 J=1,NBME
  118. J4=(4*J)-3
  119. READ (LISPRI(J),FMT='(2A4)') ITABM1(J4),ITABM1(J4+1)
  120. READ (LISDUA(J),FMT='(2A4)') ITABM1(J4+2),ITABM1(J4+3)
  121. 111 CONTINUE
  122. CALL ECDIFM(IFSAU,NM,ITABM1,IFORM)
  123. NDTAB=NBSOUS*NBME
  124. CALL ECDIFE(IFSAU,NDTAB,LIZAFM,IFORM)
  125. ILENA(1)=KSPGP
  126. ILENA(2)=KSPGD
  127. NDTAB=2
  128. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  129. C Sauvegarde des IZAFM
  130. DO 112 K=1,NBME
  131. DO 1121 L=1,NBSOUS
  132. IZAFM=LIZAFM(L,K)
  133. IF (IZAFM.NE.0) THEN
  134. SEGACT IZAFM
  135. NBEL=AM(/1)
  136. NP =AM(/2)
  137. MP =AM(/3)
  138. ILENA(1)=NBEL
  139. ILENA(2)=NP
  140. ILENA(3)=MP
  141. NDTAB=3
  142. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  143. NDTAB=NBEL*NP*MP
  144. CALL ECDIFR(IFSAU,NDTAB,AM,IFORM)
  145. SEGDES IZAFM
  146. ENDIF
  147. 1121 CONTINUE
  148. 112 CONTINUE
  149. SEGDES IMATRI
  150. ENDIF
  151. 11 CONTINUE
  152. C Sauvegarde des MINC
  153. IV1=KMINC
  154. IF (IV1.NE.0) THEN
  155. CALL AJOUN2(ITLAC1,IV1)
  156. ENDIF
  157. JMINC=IV1
  158. IV1=KMINCP
  159. IF (IV1.NE.0) THEN
  160. CALL AJOUN2(ITLAC1,IV1)
  161. ENDIF
  162. JMINCP=IV1
  163. IV1=KMINCD
  164. IF (IV1.NE.0) THEN
  165. CALL AJOUN2(ITLAC1,IV1)
  166. ENDIF
  167. JMINCD=IV1
  168. NBMINC=MAX(JMINC,JMINCP,JMINCD)
  169. ILENA(1)=NBMINC
  170. ILENA(2)=JMINC
  171. ILENA(3)=JMINCP
  172. ILENA(4)=JMINCD
  173. NDTAB=4
  174. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  175. DO 12 I=1,NBMINC
  176. MINC=ITLAC1.ITLAC(I)
  177. SEGACT MINC
  178. NPT=MPOS(/1)
  179. NBI=MPOS(/2)-1
  180. ILENA(1)=NPT
  181. ILENA(2)=NBI
  182. NDTAB=2
  183. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  184. NM=2*NBI
  185. SEGADJ ITBBM1
  186. DO 121 J=1,NBI
  187. J2=(2*J)-1
  188. READ (LISINC(J),FMT='(2A4)') ITABM1(J2),ITABM1(J2+1)
  189. 121 CONTINUE
  190. CALL ECDIFM(IFSAU,NM,ITABM1,IFORM)
  191. NDTAB=NPT+1
  192. CALL ECDIFE(IFSAU,NDTAB,NPOS,IFORM)
  193. NDTAB=NPT*(NBI+1)
  194. CALL ECDIFE(IFSAU,NDTAB,MPOS,IFORM)
  195. SEGDES MINC
  196. 12 CONTINUE
  197. C Sauvegarde des PMORS
  198. IV2=KIDMAT(4)
  199. IF (IV2.NE.0) THEN
  200. CALL AJOUN2(ITLAC2,IV2)
  201. ENDIF
  202. JMORS=IV2
  203. IV2=KIDMAT(6)
  204. IF (IV2.NE.0) THEN
  205. CALL AJOUN2(ITLAC2,IV2)
  206. ENDIF
  207. JMRST=IV2
  208. NBMORS=MAX(JMORS,JMRST)
  209. ILENA(1)=NBMORS
  210. ILENA(2)=JMORS
  211. ILENA(3)=JMRST
  212. NDTAB=3
  213. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  214. DO 13 I=1,NBMORS
  215. PMORS=ITLAC2.ITLAC(I)
  216. SEGACT PMORS
  217. NTT=IA(/1)-1
  218. NJA=JA(/1)
  219. ILENA(1)=NTT
  220. ILENA(2)=NJA
  221. NDTAB=2
  222. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  223. NDTAB=NTT+1
  224. CALL ECDIFE(IFSAU,NDTAB,IA,IFORM)
  225. NDTAB=NJA
  226. CALL ECDIFE(IFSAU,NDTAB,JA,IFORM)
  227. SEGDES PMORS
  228. 13 CONTINUE
  229. C Sauvegarde des IDMAT (faite avant les IZA
  230. C car IDIAG pointe sur un IZA)
  231. IV4=KIDMAT(1)
  232. IF (IV4.NE.0) THEN
  233. CALL AJOUN2(ITLAC4,IV4)
  234. ENDIF
  235. JDMATP=IV4
  236. IV4=KIDMAT(2)
  237. IF (IV4.NE.0) THEN
  238. CALL AJOUN2(ITLAC4,IV4)
  239. ENDIF
  240. JDMATD=IV4
  241. NBIDMA=MAX(JDMATP,JDMATD)
  242. ILENA(1)=NBIDMA
  243. ILENA(2)=JDMATP
  244. ILENA(3)=JDMATD
  245. NDTAB=3
  246. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  247. C Sauvegarde des IZA
  248. IV3=KIDMAT(3)
  249. IF (IV3.NE.0) THEN
  250. CALL AJOUN2(ITLAC3,IV3)
  251. ENDIF
  252. JS2B=IV3
  253. IV3=KIDMAT(5)
  254. IF (IV3.NE.0) THEN
  255. CALL AJOUN2(ITLAC3,IV3)
  256. ENDIF
  257. JISA=IV3
  258. IV3=KIDMAT(7)
  259. IF (IV3.NE.0) THEN
  260. CALL AJOUN2(ITLAC3,IV3)
  261. ENDIF
  262. JIST=IV3
  263. IV3=KKMMT(4)
  264. IF (IV3.NE.0) THEN
  265. CALL AJOUN2(ITLAC3,IV3)
  266. ENDIF
  267. JZDU=IV3
  268. IV3=KKMMT(5)
  269. IF (IV3.NE.0) THEN
  270. CALL AJOUN2(ITLAC3,IV3)
  271. ENDIF
  272. JZDP=IV3
  273. IV3=KKMMT(6)
  274. IF (IV3.NE.0) THEN
  275. CALL AJOUN2(ITLAC3,IV3)
  276. ENDIF
  277. JZFU=IV3
  278. IV3=KKMMT(7)
  279. IF (IV3.NE.0) THEN
  280. CALL AJOUN2(ITLAC3,IV3)
  281. ENDIF
  282. JZFP=IV3
  283. NBIZA=MAX(JS2B,JISA,JIST,JZDU,JZDP,JZFU,JZFP)
  284. C On sauvegarde les IZA contenus dans les IDMAT
  285. DO 16 I=1,NBIDMA
  286. IDMAT=ITLAC4.ITLAC(I)
  287. SEGACT IDMAT*MOD
  288. NBLK=IDESCL(/1)
  289. C IDIAG
  290. IV3=IDIAG
  291. IF (IV3.NE.0) THEN
  292. CALL AJOUN2(ITLAC3,IV3)
  293. NBIZA=MAX(NBIZA,IV3)
  294. ENDIF
  295. IDIAG=IV3
  296. C IDESCL
  297. DO 161 J=1,NBLK
  298. IV3=IDESCL(J)
  299. IF (IV3.NE.0) THEN
  300. CALL AJOUN2(ITLAC3,IV3)
  301. NBIZA=MAX(NBIZA,IV3)
  302. ENDIF
  303. IDESCL(J)=IV3
  304. 161 CONTINUE
  305. C IDESCU
  306. DO 162 J=1,NBLK
  307. IV3=IDESCU(J)
  308. IF (IV3.NE.0) THEN
  309. CALL AJOUN2(ITLAC3,IV3)
  310. NBIZA=MAX(NBIZA,IV3)
  311. ENDIF
  312. IDESCU(J)=IV3
  313. 162 CONTINUE
  314. SEGDES IDMAT
  315. 16 CONTINUE
  316. DO 15 I=1,NBIDMA
  317. IDMAT=ITLAC4.ITLAC(I)
  318. SEGACT IDMAT
  319. NTT =KZA(/1)
  320. NPT =NUAN(/1)
  321. NBLK=IDESCL(/1)
  322. ILENA(1)=NTT
  323. ILENA(2)=NPT
  324. ILENA(3)=NBLK
  325. ILENA(4)=IDIAG
  326. NDTAB=4
  327. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  328. NDTAB=NTT
  329. CALL ECDIFE(IFSAU,NDTAB,KZA,IFORM)
  330. NDTAB=2*NTT
  331. CALL ECDIFE(IFSAU,NDTAB,NUIA,IFORM)
  332. NDTAB=NPT
  333. CALL ECDIFE(IFSAU,NDTAB,NUAN,IFORM)
  334. NDTAB=NPT
  335. CALL ECDIFE(IFSAU,NDTAB,NUNA,IFORM)
  336. NDTAB=NBLK
  337. CALL ECDIFE(IFSAU,NDTAB,IDESCL,IFORM)
  338. NDTAB=NBLK
  339. CALL ECDIFE(IFSAU,NDTAB,IDESCU,IFORM)
  340. NDTAB=NBLK+1
  341. CALL ECDIFE(IFSAU,NDTAB,NLDBLK,IFORM)
  342. SEGDES IDMAT
  343. 15 CONTINUE
  344. ILENA( 1)=NBIZA
  345. ILENA( 2)=JS2B
  346. ILENA( 3)=JISA
  347. ILENA( 4)=JIST
  348. ILENA( 5)=JZDU
  349. ILENA( 6)=JZDP
  350. ILENA( 7)=JZFU
  351. ILENA( 8)=JZFP
  352. NDTAB=8
  353. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  354. DO 14 I=1,NBIZA
  355. IZA=ITLAC3.ITLAC(I)
  356. SEGACT IZA
  357. NBVA=A(/1)
  358. ILENA(1)=NBVA
  359. NDTAB=1
  360. CALL ECDIFE(IFSAU,NDTAB,ILENA,IFORM)
  361. NDTAB=NBVA
  362. CALL ECDIFR(IFSAU,NDTAB,A,IFORM)
  363. SEGDES IZA
  364. 14 CONTINUE
  365. C Restauration des pointeurs des IZA dans IDMAT
  366. DO 17 I=1,NBIDMA
  367. IDMAT=ITLAC4.ITLAC(I)
  368. SEGACT IDMAT*MOD
  369. NBLK=IDESCL(/1)
  370. C IDIAG
  371. IV3=IDIAG
  372. IF (IV3.NE.0) IDIAG=ITLAC3.ITLAC(IV3)
  373. C IDESCL
  374. DO 171 J=1,NBLK
  375. IV3=IDESCL(J)
  376. IF (IV3.NE.0) IDESCL(J)=ITLAC3.ITLAC(IV3)
  377. 171 CONTINUE
  378. C IDESCU
  379. DO 172 J=1,NBLK
  380. IV3=IDESCU(J)
  381. IF (IV3.NE.0) IDESCU(J)=ITLAC3.ITLAC(IV3)
  382. 172 CONTINUE
  383. SEGDES IDMAT
  384. 17 CONTINUE
  385. SEGDES MATRIK
  386. SEGSUP ITLAC4
  387. SEGSUP ITLAC3
  388. SEGSUP ITLAC2
  389. SEGSUP ITLAC1
  390. 1 CONTINUE
  391. SEGSUP ITBBM1
  392. *
  393. * Normal termination
  394. *
  395. RETURN
  396. *
  397. * Format handling
  398. *
  399. *
  400. * Error handling
  401. *
  402. 9999 CONTINUE
  403. WRITE(IOIMP,*) 'An error was detected in subroutine wrmtik'
  404. RETURN
  405. *
  406. * End of subroutine WRMTIK
  407. *
  408. END
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  
  423.  
  424.  

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