Télécharger devso4.eso

Retour à la liste

Numérotation des lignes :

  1. C DEVSO4 SOURCE FANDEUR 13/01/16 21:15:09 7666
  2. SUBROUTINE DEVSO4(KTRES,KTLIAA,KTLIAB,KTNUM,NINS,
  3. & ICHAIN,MTABLE,REPRIS,LMODYN,ITDYN,ITSORT)
  4. IMPLICIT INTEGER(I-N)
  5. IMPLICIT REAL*8(A-H,O-Z)
  6. *--------------------------------------------------------------------*
  7. * *
  8. * Operateur DYNE : algorithme de Fu - de Vogelaere *
  9. * ________________________________________________ *
  10. * *
  11. * Creation et remplissage de la table resultat *
  12. * *
  13. * Parametres: *
  14. * *
  15. * e KTRES segment de sauvegarde des resultats *
  16. * e KTLIAA segment descriptif des liaisons en base A *
  17. * e KTLIAB segment descriptif des liaisons en base B *
  18. * e KTNUM segment contenant les parametres numeriques *
  19. * e NINS on veut une sortie tous les NINS pas de calcul *
  20. * e ICHAIN Segment MLENTI (ACTIF) contenant les adresses des *
  21. * chaines dans la pile des mots de CCNOYAU *
  22. * s MTABLE table resultat de l'operateur DYNE *
  23. * e REPRIS vrai si reprise de calcul, faux sinon *
  24. * *
  25. * Auteur, date de creation : *
  26. * *
  27. * Denis ROBERT-MOUGIN, le 11 aout 1989. *
  28. * IBRAHIM PINTO, 05/97 , LIAISONS SEGEMENT_CERCLE *
  29. *--------------------------------------------------------------------*
  30. -INC CCOPTIO
  31. -INC SMTABLE
  32. -INC SMLREEL
  33. -INC SMLENTI
  34. -INC SMCHPOI
  35. *
  36. SEGMENT,MTLIAA
  37. INTEGER IPALA(NLIAA,NIPALA),IPLIA(NLIAA,NPLAA),JPLIA(NPLA)
  38. REAL*8 XPALA(NLIAA,NXPALA)
  39. ENDSEGMENT
  40. SEGMENT,MTLIAB
  41. INTEGER IPALB(NLIAB,NIPALB),IPLIB(NLIAB,NPLBB),JPLIB(NPLB)
  42. REAL*8 XPALB(NLIAB,NXPALB)
  43. REAL*8 XABSCI(NLIAB,NIP),XORDON(NLIAB,NIP)
  44. ENDSEGMENT
  45. SEGMENT,MTRES
  46. REAL*8 XRES(NRES,NCRES,NPRES),XREP(NREP,NCRES)
  47. REAL*8 XRESLA(NLSA,NPRES,NVALA),XRESLB(NLSB,NPRES,NVALB)
  48. REAL*8 XMREP(NLIAB,4,IDIMB)
  49. INTEGER ICHRES(NVES),IPORES(NRES,NPRES),IPOREP(NREP)
  50. INTEGER IPOLA(NLSA),INULA(NLSA),IPLRLA(NLSA,NVALA)
  51. INTEGER IPOLB(NLSB),INULB(NLSB),IPLRLB(NLSB,NVALB)
  52. INTEGER ILIREA(NLSA,NTVAR),ILIREB(NLSB,NTVAR)
  53. INTEGER ILIRNA(NLSA,NTVAR),ILIRNB(NLSB,NTVAR)
  54. INTEGER IPOLR(1),IMREP(NLIAB,2),IPPREP(NLIAB,4)
  55. INTEGER ILPOLA(NLIAA,2)
  56. ENDSEGMENT
  57. SEGMENT,MTNUM
  58. REAL*8 XDT(NPC1),XTEMPS(NPC1)
  59. ENDSEGMENT
  60. *
  61. POINTEUR LCHAIN.MLENTI
  62. POINTEUR MTABU.MTABLE, MTAB4.MTABLE
  63. *
  64. INTEGER ipotab(8)
  65. LOGICAL L0,L1,REPRIS,LMODYN
  66. CHARACTER*8 TYPRET,TYPOBJ
  67. CHARACTER*72 CHARRE,CHARRI
  68. *
  69. MTRES = KTRES
  70. MTLIAA = KTLIAA
  71. MTLIAB = KTLIAB
  72. MTNUM = KTNUM
  73. NRES = XRES(/1)
  74. NCRES = XRES(/2)
  75. NPRES = XRES(/3)
  76. NREP = XREP(/1)
  77. NLSA = XRESLA(/1)
  78. NLSB = XRESLB(/1)
  79. NTVAR = ILIREB(/2)
  80. NLIAB = XMREP(/1)
  81. NLIAA = ILPOLA(/1)
  82. IF (MTLIAA.NE.0) THEN
  83. NPLAA = IPLIA(/2)
  84. NXPALA = XPALA(/2)
  85. ELSE
  86. NPLAA = 0
  87. NXPALA = 0
  88. ENDIF
  89. NPLB = JPLIB(/1)
  90. IDIMB = XMREP(/3)
  91. LCHAIN = ICHAIN
  92. INDC10 = -12345
  93. MTAB1 = -6661
  94. MTAB3 = -6663
  95.  
  96. IF (ITSORT.EQ.INDC10) GOTO 1234
  97. *
  98. *---------- Cr{ation de la table r{sultat : ----------
  99. *
  100. M = 3 + NLSA + NLSB
  101. IF (NRES.NE.0) THEN
  102. M = M + NPRES
  103. ENDIF
  104. SEGINI,MTABLE
  105. MLOTAB = M
  106.  
  107. *
  108. * Sous-typage de la table r{sultat:
  109. *
  110. MTABTI(1) = 'MOT'
  111. ICHA6 = LCHAIN.LECT(6)
  112. MTABII(1) = ICHA6
  113. MTABTV(1) = 'MOT'
  114. ICHA1 = LCHAIN.LECT(1)
  115. MTABIV(1) = ICHA1
  116. *
  117. *---------- Cr{ation de la liste des temps ----------
  118. *
  119. IINS = 1
  120. IF ( REPRIS ) IINS = NINS + 1
  121. MLREEL = IPOLR(1)
  122. segact mlreel*mod
  123. DO 10 IRES = 1,NPRES
  124. PROG(IRES) = XTEMPS(IINS)
  125. IINS = IINS + NINS
  126. 10 CONTINUE
  127. * end do
  128. SEGDES,MLREEL
  129. *
  130. * Ecriture de la liste des temps de sortie dans la table r{sultat
  131. *
  132. MTABTI(2) = 'MOT'
  133. ICHA3 = LCHAIN.LECT(3)
  134. MTABII(2) = ICHA3
  135. MTABTV(2) = 'LISTREEL'
  136. MTABIV(2) = MLREEL
  137. *
  138. *---------- Cr{ation du bloc de reprise : ----------
  139. *+* SOUSTYPE / TEMPS_DE_REPRISE / variables "principales"
  140. M = NREP + 2
  141. IF (NLIAA.NE.0) THEN
  142. IPOLY = 0
  143. DO 180 I = 1,NLIAA
  144. IF (ILPOLA(I,1).NE.0) IPOLY = IPOLY + 1
  145. 180 CONTINUE
  146. IF (IPOLY.NE.0) M = M + 1
  147. ENDIF
  148. IF (NLIAB.NE.0) M = M + 1
  149. SEGINI,MTAB2
  150. MTAB2.MLOTAB = M
  151. *
  152. * Sous-typage du bloc de reprise:
  153. *
  154. MTAB2.MTABTI(1) = 'MOT'
  155. ICHA6 = LCHAIN.LECT(6)
  156. MTAB2.MTABII(1) = ICHA6
  157. MTAB2.MTABTV(1) = 'MOT'
  158. ICHA5 = LCHAIN.LECT(5)
  159. MTAB2.MTABIV(1) = ICHA5
  160. *
  161. * Ecriture du temps de reprise:
  162. *
  163. TREPRI = XTEMPS(IINS-NINS)
  164. MTAB2.MTABTI(2) = 'MOT'
  165. ICHA4 = LCHAIN.LECT(4)
  166. MTAB2.MTABII(2) = ICHA4
  167. MTAB2.MTABTV(2) = 'FLOTTANT'
  168. MTAB2.RMTABV(2) = TREPRI
  169. *
  170. * Ecriture des CHPOINTs de reprise:
  171. *
  172. J2 = 2
  173. DO 20 J = 1,NREP
  174. J2 = J2 + 1
  175. MTAB2.MTABTI(J2) = 'MOT'
  176. ICHAR = LCHAIN.LECT(6+J)
  177. * chpoints des travaux
  178. IF (J.GT.8) ICHAR = LCHAIN.LECT(74+J)
  179.  
  180. MTAB2.MTABII(J2) = ICHAR
  181. MTAB2.MTABTV(J2) = 'CHPOINT'
  182. MTAB2.MTABIV(J2) = IPOREP(J)
  183. 20 CONTINUE
  184. * end do
  185. *
  186. * Ecriture des variables de liaison en base A
  187. *
  188. IF (NLIAA.NE.0) THEN
  189. *
  190. * A ce jour, seule la liaison POLYNOMIALE est concernee
  191. *
  192. IF (IIMPI.EQ.333) THEN
  193. WRITE(IOIMP,*)'DEVSO4 : bloc reprise liaison POLYNOMIALE'
  194. WRITE(IOIMP,*)'Nombre de liaisons a sauver : ',IPOLY
  195. ENDIF
  196. IF (IPOLY.NE.0) THEN
  197. M = IPOLY
  198. SEGINI,MTAB1
  199. MTAB1.MLOTAB = M
  200. II = 0
  201. DO 200 I = 1,NLIAA
  202. IF (IIMPI.EQ.333) THEN
  203. WRITE(IOIMP,*)'I = ',I,' ILPOLA = ',ILPOLA(I,1)
  204. ENDIF
  205. * indice du numero de liaison base A
  206. * II = II + 1
  207. IF (ILPOLA(I,1).NE.0) THEN
  208. * indice du numero de liaison POLY
  209. II = II + 1
  210. M = 3
  211. SEGINI MTAB3
  212. MTAB3.MLOTAB = M
  213. *
  214. MTAB1.MTABTI(II) = 'ENTIER'
  215. MTAB1.MTABII(II) = II
  216. MTAB1.MTABTV(II) = 'TABLE'
  217. MTAB1.MTABIV(II) = MTAB3
  218. *
  219. MTAB3.MTABTI(1) = 'MOT'
  220. ICHAR = LCHAIN.LECT(40)
  221. MTAB3.MTABII(1) = ICHAR
  222. MTAB3.MTABTV(1) = 'ENTIER'
  223. MTAB3.MTABIV(1) = 6
  224. *
  225. MLENTI = ILPOLA(I,1)
  226. IPLEN1 = MLENTI
  227. DO 220 J = 1,NPLAA
  228. K = (J*2) - 1
  229. IPP = IPLIA(I,J)
  230. LECT(K) = JPLIA(IPP)
  231. K = J * 2
  232. LECT(K) = IPP
  233. 220 CONTINUE
  234. IF (IIMPI.EQ.333) THEN
  235. NPLA2 = NPLAA * 2
  236. DO 221 K=1,NPLA2
  237. WRITE(IOIMP,*)'DEVSO4 : LECT(',K,')=',LECT(K)
  238. 221 CONTINUE
  239. ENDIF
  240. SEGDES MLENTI
  241. *
  242. MTAB3.MTABTI(2) = 'MOT'
  243. ICHAR = LCHAIN.LECT(78)
  244. MTAB3.MTABII(2) = ICHAR
  245. MTAB3.MTABTV(2) = 'LISTENTI'
  246. MTAB3.MTABIV(2) = IPLEN1
  247. *
  248. MLREEL = ILPOLA(I,2)
  249. IPLRE1 = MLREEL
  250. DO 230 J = 1,NXPALA
  251. PROG(J) = XPALA(I,J)
  252. IF (IIMPI.EQ.333) THEN
  253. WRITE(IOIMP,*)'DEVSO4 : PROG(',J,') = ',PROG(J)
  254. ENDIF
  255. 230 CONTINUE
  256. SEGDES MLREEL
  257. *
  258. MTAB3.MTABTI(3) = 'MOT'
  259. ICHAR = LCHAIN.LECT(79)
  260. MTAB3.MTABII(3) = ICHAR
  261. MTAB3.MTABTV(3) = 'LISTREEL'
  262. MTAB3.MTABIV(3) = IPLRE1
  263. SEGDES MTAB3
  264. ENDIF
  265. 200 CONTINUE
  266. SEGDES MTAB1
  267. *
  268. * Bloc des variables internes liaison A ---> bloc de reprise
  269. *
  270. J2 = J2 + 1
  271. MTAB2.MTABTI(J2) = 'MOT'
  272. ICHAR = LCHAIN.LECT(80)
  273. MTAB2.MTABII(J2) = ICHAR
  274. MTAB2.MTABTV(J2) = 'TABLE'
  275. MTAB2.MTABIV(J2) = MTAB1
  276. ENDIF
  277. ENDIF
  278. *
  279. * Ecriture des variables de liaison en base B
  280. *
  281. IF (NLIAB.NE.0) THEN
  282. M = NLIAB
  283. SEGINI,MTAB1
  284. MTAB1.MLOTAB = M
  285. *
  286. DO 100 I = 1,NLIAB
  287. ITYP = IMREP(I,1)
  288. IF (ITYP.EQ.23 .OR.
  289. & ITYP.EQ.24 .OR. ITYP.EQ.3 .OR. ITYP.EQ.103 .OR.
  290. & ITYP.EQ.13 .OR. ITYP.EQ.113 .OR. ITYP.EQ.5 .OR.
  291. & ITYP.EQ.6 .OR. ITYP.EQ.33 .OR. ITYP.EQ.34
  292. & .OR.ITYP.EQ.-13) THEN
  293. M = 5
  294. SEGINI,MTAB3
  295. MTAB3.MLOTAB = M
  296. *
  297. MTAB1.MTABTI(I) = 'ENTIER'
  298. MTAB1.MTABII(I) = I
  299. MTAB1.MTABTV(I) = 'TABLE'
  300. MTAB1.MTABIV(I) = MTAB3
  301. *
  302. MTAB3.MTABTI(1) = 'MOT'
  303. ICHAR = LCHAIN.LECT(40)
  304. MTAB3.MTABII(1) = ICHAR
  305. MTAB3.MTABTV(1) = 'ENTIER'
  306. MTAB3.MTABIV(1) = ITYP
  307. *
  308. MTAB3.MTABTI(2) = 'MOT'
  309. ICHAR = LCHAIN.LECT(43)
  310. MTAB3.MTABII(2) = ICHAR
  311. MTAB3.MTABTV(2) = 'ENTIER'
  312. MTAB3.MTABIV(2) = IMREP(I,2)
  313. *
  314. MTAB3.MTABTI(3) = 'MOT'
  315. ICHAR = LCHAIN.LECT(41)
  316. MTAB3.MTABII(3) = ICHAR
  317. MTAB3.MTABTV(3) = 'POINT'
  318. MTAB3.MTABIV(3) = IPPREP(I,1)
  319. *
  320. MTAB3.MTABTI(4) = 'MOT'
  321. ICHAR = LCHAIN.LECT(42)
  322. MTAB3.MTABII(4) = ICHAR
  323. MTAB3.MTABTV(4) = 'POINT'
  324. MTAB3.MTABIV(4) = IPPREP(I,2)
  325. *
  326. MTAB3.MTABTI(5) = 'MOT'
  327. ICHAR = LCHAIN.LECT(37)
  328. MTAB3.MTABII(5) = ICHAR
  329. MTAB3.MTABTV(5) = 'POINT'
  330. MTAB3.MTABIV(5) = IPPREP(I,3)
  331.  
  332. ELSE IF (ITYP.EQ.25 .OR. ITYP.EQ.26) THEN
  333.  
  334. M = 6
  335. SEGINI,MTAB3
  336. MTAB3.MLOTAB = M
  337. *
  338. MTAB1.MTABTI(I) = 'ENTIER'
  339. MTAB1.MTABII(I) = I
  340. MTAB1.MTABTV(I) = 'TABLE'
  341. MTAB1.MTABIV(I) = MTAB3
  342. *
  343. MTAB3.MTABTI(1) = 'MOT'
  344. ICHAR = LCHAIN.LECT(40)
  345. MTAB3.MTABII(1) = ICHAR
  346. MTAB3.MTABTV(1) = 'ENTIER'
  347. MTAB3.MTABIV(1) = ITYP
  348. *
  349. MTAB3.MTABTI(2) = 'MOT'
  350. ICHAR = LCHAIN.LECT(43)
  351. MTAB3.MTABII(2) = ICHAR
  352. MTAB3.MTABTV(2) = 'ENTIER'
  353. MTAB3.MTABIV(2) = IMREP(I,2)
  354. *
  355. MTAB3.MTABTI(3) = 'MOT'
  356. ICHAR = LCHAIN.LECT(41)
  357. MTAB3.MTABII(3) = ICHAR
  358. MTAB3.MTABTV(3) = 'POINT'
  359. MTAB3.MTABIV(3) = IPPREP(I,1)
  360. *
  361. MTAB3.MTABTI(4) = 'MOT'
  362. ICHAR = LCHAIN.LECT(42)
  363. MTAB3.MTABII(4) = ICHAR
  364. MTAB3.MTABTV(4) = 'POINT'
  365. MTAB3.MTABIV(4) = IPPREP(I,2)
  366. *
  367. MTAB3.MTABTI(5) = 'MOT'
  368. ICHAR = LCHAIN.LECT(37)
  369. MTAB3.MTABII(5) = ICHAR
  370. MTAB3.MTABTV(5) = 'POINT'
  371. MTAB3.MTABIV(5) = IPPREP(I,3)
  372.  
  373. MTAB3.MTABTI(6) = 'MOT'
  374. ICHAR = LCHAIN.LECT(120)
  375. MTAB3.MTABII(6) = ICHAR
  376. MTAB3.MTABTV(6) = 'POINT'
  377. MTAB3.MTABIV(6) = IPPREP(I,4)
  378.  
  379. ELSE IF (ITYP.EQ.35 .OR. ITYP.EQ.36 .OR. ITYP.EQ.37
  380. &.OR. ITYP.EQ.38 .OR. ITYP.EQ.39 .OR. ITYP.EQ.40 ) THEN
  381. M = 3
  382. SEGINI,MTAB3
  383. MTAB3.MLOTAB = M
  384. *
  385. MTAB1.MTABTI(I) = 'ENTIER'
  386. MTAB1.MTABII(I) = I
  387. MTAB1.MTABTV(I) = 'TABLE'
  388. MTAB1.MTABIV(I) = MTAB3
  389. *
  390. MTAB3.MTABTI(1) = 'MOT'
  391. ICHAR = LCHAIN.LECT(40)
  392. MTAB3.MTABII(1) = ICHAR
  393. MTAB3.MTABTV(1) = 'ENTIER'
  394. MTAB3.MTABIV(1) = ITYP
  395. *
  396. MTAB3.MTABTI(2) = 'MOT'
  397. ICHAR = LCHAIN.LECT(43)
  398. MTAB3.MTABII(2) = ICHAR
  399. MTAB3.MTABTV(2) = 'ENTIER'
  400. MTAB3.MTABIV(2) = IMREP(I,2)
  401. *
  402. *
  403. * noeud voisin
  404. * cr�ation du list entier contenant les noeuds voisins
  405. NNOEMA = IPALB(I,21)
  406. NNOEES = IPALB(I,22)
  407. JG = (NNOEMA+NNOEES)
  408. SEGINI,MLENTI
  409. DO 120 IVOIS=1,(NNOEMA+NNOEES)
  410. LECT(IVOIS)=IPALB(I,26+IVOIS)
  411. 120 CONTINUE
  412. IVOIS1=MLENTI
  413. SEGDES,MLENTI
  414. MTAB3.MTABTI(3) = 'MOT'
  415. ICHAR = LCHAIN.LECT(103)
  416. MTAB3.MTABII(3) = ICHAR
  417. MTAB3.MTABTV(3) = 'LISTENTI'
  418. MTAB3.MTABIV(3) = IVOIS1
  419. *
  420. ELSE IF (ITYP.EQ.7) THEN
  421. M = 4
  422. SEGINI,MTAB3
  423. MTAB3.MLOTAB = M
  424. *
  425. MTAB1.MTABTI(I) = 'ENTIER'
  426. MTAB1.MTABII(I) = I
  427. MTAB1.MTABTV(I) = 'TABLE'
  428. MTAB1.MTABIV(I) = MTAB3
  429. *
  430. MTAB3.MTABTI(1) = 'MOT'
  431. ICHAR = LCHAIN.LECT(40)
  432. MTAB3.MTABII(1) = ICHAR
  433. MTAB3.MTABTV(1) = 'ENTIER'
  434. MTAB3.MTABIV(1) = ITYP
  435. *
  436. MTAB3.MTABTI(2) = 'MOT'
  437. ICHAR = LCHAIN.LECT(9)
  438. MTAB3.MTABII(2) = ICHAR
  439. MTAB3.MTABTV(2) = 'POINT'
  440. MTAB3.MTABIV(2) = IPPREP(I,1)
  441. *
  442. MTAB3.MTABTI(3) = 'MOT'
  443. ICHAR = LCHAIN.LECT(10)
  444. MTAB3.MTABII(3) = ICHAR
  445. MTAB3.MTABTV(3) = 'POINT'
  446. MTAB3.MTABIV(3) = IPPREP(I,2)
  447. *
  448. MTAB3.MTABTI(4) = 'MOT'
  449. ICHAR = LCHAIN.LECT(12)
  450. MTAB3.MTABII(4) = ICHAR
  451. MTAB3.MTABTV(4) = 'POINT'
  452. MTAB3.MTABIV(4) = IPPREP(I,3)
  453. ** ianis
  454. ELSE IF (ITYP.EQ.100 .OR. ITYP.EQ.101) THEN
  455. M = 2
  456. SEGINI,MTAB3
  457. MTAB3.MLOTAB = M
  458. *
  459. MTAB1.MTABTI(I) = 'ENTIER'
  460. MTAB1.MTABII(I) = I
  461. MTAB1.MTABTV(I) = 'TABLE'
  462. MTAB1.MTABIV(I) = MTAB3
  463. *
  464. MTAB3.MTABTI(1) = 'MOT'
  465. ICHAR = LCHAIN.LECT(40)
  466. MTAB3.MTABII(1) = ICHAR
  467. MTAB3.MTABTV(1) = 'ENTIER'
  468. MTAB3.MTABIV(1) = ITYP
  469. *
  470. IDIM = IPALB(I,3)
  471. id1 = 4
  472. MTAB3.MTABTI(2) = 'MOT'
  473. ICHAR = LCHAIN.LECT(82)
  474. MTAB3.MTABII(2) = ICHAR
  475. MTAB3.MTABTV(2) = 'FLOTTANT'
  476. MTAB3.RMTABV(2) = XPALB(I,id1+idim+1)
  477. *
  478. C NW
  479. ELSE IF (ITYP.EQ.16 .OR. ITYP.EQ.17) THEN
  480. M = 4
  481. SEGINI,MTAB3
  482. MTAB3.MLOTAB = M
  483. *
  484. MTAB1.MTABTI(I) = 'ENTIER'
  485. MTAB1.MTABII(I) = I
  486. MTAB1.MTABTV(I) = 'TABLE'
  487. MTAB1.MTABIV(I) = MTAB3
  488. *
  489. MTAB3.MTABTI(1) = 'MOT'
  490. ICHAR = LCHAIN.LECT(40)
  491. MTAB3.MTABII(1) = ICHAR
  492. MTAB3.MTABTV(1) = 'ENTIER'
  493. MTAB3.MTABIV(1) = ITYP
  494.  
  495. *
  496. idim = IPALB(I,3)
  497. if (ityp.eq.16) nn = 4 + idim
  498. if (ityp.eq.17) nn = 5 + idim
  499. MTAB3.MTABTI(2) = 'MOT'
  500. ICHAR = LCHAIN.LECT(82)
  501. MTAB3.MTABII(2) = ICHAR
  502. MTAB3.MTABTV(2) = 'FLOTTANT'
  503. MTAB3.RMTABV(2) = XPALB(I,NN-2)
  504.  
  505. MTAB3.MTABTI(3) = 'MOT'
  506. ICHAR = LCHAIN.LECT(100)
  507. MTAB3.MTABII(3) = ICHAR
  508. MTAB3.MTABTV(3) = 'FLOTTANT'
  509. MTAB3.RMTABV(3) = XPALB(I,NN-1)
  510.  
  511. MTAB3.MTABTI(4) = 'MOT'
  512. ICHAR = LCHAIN.LECT(111)
  513. MTAB3.MTABII(4) = ICHAR
  514. MTAB3.MTABTV(4) = 'FLOTTANT'
  515. MTAB3.RMTABV(4) = XPALB(I,NN)
  516.  
  517. *
  518. ELSE IF (ITYP.EQ.50 .OR. ITYP.EQ.51) THEN
  519. M = 4
  520. SEGINI,MTAB3
  521. MTAB3.MLOTAB = M
  522. *
  523. MTAB1.MTABTI(I) = 'ENTIER'
  524. MTAB1.MTABII(I) = I
  525. MTAB1.MTABTV(I) = 'TABLE'
  526. MTAB1.MTABIV(I) = MTAB3
  527. *
  528. MTAB3.MTABTI(1) = 'MOT'
  529. ICHAR = LCHAIN.LECT(40)
  530. MTAB3.MTABII(1) = ICHAR
  531. MTAB3.MTABTV(1) = 'ENTIER'
  532. MTAB3.MTABIV(1) = ITYP
  533. *
  534. idim = IPALB(I,3)
  535. if (ityp.eq.50) nn = 4 + idim
  536. if (ityp.eq.51) nn = 5 + idim
  537. MTAB3.MTABTI(2) = 'MOT'
  538. ICHAR = LCHAIN.LECT(102)
  539. MTAB3.MTABII(2) = ICHAR
  540. MTAB3.MTABTV(2) = 'FLOTTANT'
  541. MTAB3.RMTABV(2) = XPALB(I,NN-2)
  542.  
  543. MTAB3.MTABTI(3) = 'MOT'
  544. ICHAR = LCHAIN.LECT(99)
  545. MTAB3.MTABII(3) = ICHAR
  546. MTAB3.MTABTV(3) = 'FLOTTANT'
  547. MTAB3.RMTABV(3) = XPALB(I,NN-1)
  548.  
  549. MTAB3.MTABTI(4) = 'MOT'
  550. ICHAR = LCHAIN.LECT(112)
  551. MTAB3.MTABII(4) = ICHAR
  552. MTAB3.MTABTV(4) = 'FLOTTANT'
  553. MTAB3.RMTABV(4) = XPALB(I,NN)
  554. *
  555. ELSE
  556. M = 1
  557. SEGINI,MTAB3
  558. MTAB3.MLOTAB = M
  559. *
  560. MTAB1.MTABTI(I) = 'ENTIER'
  561. MTAB1.MTABII(I) = I
  562. MTAB1.MTABTV(I) = 'TABLE'
  563. MTAB1.MTABIV(I) = MTAB3
  564. *
  565. MTAB3.MTABTI(1) = 'MOT'
  566. ICHAR = LCHAIN.LECT(40)
  567. MTAB3.MTABII(1) = ICHAR
  568. MTAB3.MTABTV(1) = 'ENTIER'
  569. MTAB3.MTABIV(1) = ITYP
  570. ENDIF
  571. *
  572. SEGDES,MTAB3
  573. 100 CONTINUE
  574. * end do
  575. SEGDES,MTAB1
  576. *
  577. * Ecriture du bloc des variables de liaison dans le bloc reprise
  578. *
  579. J2 = J2 + 1
  580. MTAB2.MTABTI(J2) = 'MOT'
  581. ICHAR = LCHAIN.LECT(44)
  582. MTAB2.MTABII(J2) = ICHAR
  583. MTAB2.MTABTV(J2) = 'TABLE'
  584. MTAB2.MTABIV(J2) = MTAB1
  585. ENDIF
  586. *
  587. SEGDES,MTAB2
  588. *
  589. * Ecriture du bloc de reprise dans la table r{sultat:
  590. *
  591.  
  592. IF (LMODYN) THEN
  593. iptlar = mtab2
  594. CALL ECCTAB(ITDYN,'MOT',0,0.D0,'REPRISE_DYNE',.TRUE.,0,
  595. # 'TABLE',0,0.D0,CHARRE,.TRUE.,iptlar)
  596. ELSE
  597. MTABTI(3) = 'MOT'
  598. ICHA5 = LCHAIN.LECT(5)
  599. MTABII(3) = ICHA5
  600. MTABTV(3) = 'TABLE'
  601. MTABIV(3) = MTAB2
  602. ENDIF
  603. *
  604. IRE2 = 3
  605. *
  606. *---------- Cr{ation des tables aux pas de sortie ----------
  607. *
  608. IF (LMODYN) THEN
  609. *
  610. typobj = ' '
  611. CALL ACCTAB(ITDYN,'MOT',IM,X0,'TEMPS',L0,IP0,
  612. & typobj,np,X1,CHARRE,L1,IPTEMP)
  613. M = 1
  614. segini MTABU
  615. MTABU.MLOTAB = 1
  616. if (iptemp.gt.0.and.typobj(1:8).eq.'TABLE') then
  617. call dimen7(iptemp,idimen)
  618. indi1 = idimen - 1
  619. DO ISOR = 1 , 8
  620. IF (ICHRES(ISOR).EQ.1) THEN
  621. ICHAR = LCHAIN.LECT(6+ISOR)
  622. IF(ISOR.GT.6) ICHAR = LCHAIN.LECT(76+ISOR)
  623. segact MTABU*mod
  624. MTABU.MTABTI(1) = 'ENTIER'
  625. MTABU.MTABII(1) = 1
  626. MTABU.MTABTV(1) = 'MOT'
  627. MTABU.MTABIV(1) = ICHAR
  628. typret=' '
  629. CALL ACCTAB(MTABU,'ENTIER',1,X0,CHARRI,L0,IP0,
  630. & typret,IUI,X1,CHARRE,L1,IP1)
  631. if (CHARRE.EQ.'VITESSE') CHARRE = 'VITESSES'
  632. if (CHARRE.EQ.'DEPLACEMENT') CHARRE = 'DEPLACEMENTS'
  633. CALL ACCTAB(ITDYN,'MOT',0,0.D0,CHARRE,.TRUE.,0,
  634. # 'TABLE',0,0.D0,CHARRI,.TRUE.,IPTCHP)
  635. ipotab(isor) = IPTCHP
  636. ENDIF
  637. ENDDO
  638.  
  639. else
  640.  
  641. CALL CRTABL(IPTEMP)
  642. CALL ECCTAB(ITDYN,'MOT',0,0.D0,'TEMPS',.TRUE.,0,
  643. # 'TABLE',0,0.D0,CHARRE,.TRUE.,iptemp)
  644. indi1 = -1
  645. DO ISOR = 1 , 8
  646. IF (ICHRES(ISOR).EQ.1) THEN
  647. CALL CRTABL(IPTCHP)
  648. ipotab(isor) = IPTCHP
  649. ICHAR = LCHAIN.LECT(6+ISOR)
  650. IF(ISOR.GT.6) ICHAR = LCHAIN.LECT(76+ISOR)
  651. segact MTABU*mod
  652. MTABU.MTABTI(1) = 'ENTIER'
  653. MTABU.MTABII(1) = 1
  654. MTABU.MTABTV(1) = 'MOT'
  655. MTABU.MTABIV(1) = ICHAR
  656. typret=' '
  657. CALL ACCTAB(MTABU,'ENTIER',1,X0,CHARRI,L0,IP0,
  658. & typret,IUI,X1,CHARRE,L1,IP1)
  659.  
  660. if (CHARRE.EQ.'VITESSE') CHARRE = 'VITESSES'
  661. if (CHARRE.EQ.'DEPLACEMENT') CHARRE = 'DEPLACEMENTS'
  662. CALL ECCTAB(ITDYN,'MOT',0,0.D0,CHARRE,.TRUE.,0,
  663. # 'TABLE',0,0.D0,CHARRI,.TRUE.,IPTCHP)
  664. ENDIF
  665. ENDDO
  666. segsup MTABU
  667. endif
  668. MLREEL = IPOLR(1)
  669. segact mlreel
  670. indi0 = indi1
  671.  
  672. DO ires = 1,npres
  673. indi1 = indi1 + 1
  674. xtemp1 = prog(ires)
  675. * temps calcules
  676. CALL ECCTAB(IPTEMP,'ENTIER',INDI1,0.D0,CHARRI,.TRUE.,IP0,
  677. # 'FLOTTANT',0,xtemp1,CHARRE,.TRUE.,IP1)
  678. ENDDO
  679. ENDIF
  680.  
  681. IF (NRES.NE.0) THEN
  682. IF (LMODYN) THEN
  683. indi1 = indi0
  684. DO ires = 1,npres
  685. indi1 = indi1 + 1
  686. IVAR = 0
  687. DO isor = 1,8
  688. * champs en sortie
  689. IF (ICHRES(ISOR).EQ.1) THEN
  690. IVAR = IVAR + 1
  691. IPTCHP = ipotab(isor)
  692. ipch1 = IPORES(IVAR,IRES)
  693. CALL ECCTAB(IPTCHP,'ENTIER',INDI1,0.D0,CHARRI,.TRUE.,IP0,
  694. # 'CHPOINT',0,0.D0,CHARRE,.TRUE.,ipch1)
  695.  
  696. ENDIF
  697. ENDDO
  698.  
  699. ENDDO
  700. *
  701. ELSE
  702. *
  703. DO 30 IRES = 1 , NPRES
  704. *
  705. * Cr{ation de la table au pas de sortie IRES:
  706. *
  707. M = NRES + 1
  708. SEGINI,MTAB1
  709. MTAB1.MLOTAB = M
  710. *
  711. * Sous-typage de la table au pas de sortie IRES:
  712. *
  713. MTAB1.MTABTI(1) = 'MOT'
  714. ICHA6 = LCHAIN.LECT(6)
  715. MTAB1.MTABII(1) = ICHA6
  716. MTAB1.MTABTV(1) = 'MOT'
  717. ICHA2 = LCHAIN.LECT(2)
  718. MTAB1.MTABIV(1) = ICHA2
  719. *
  720. * Ecriture des CHPOINTs r{sultats:
  721. *
  722. IVA2 = 1
  723. IVAR = 0
  724. DO 40 ISOR = 1 , 8
  725. IF (ICHRES(ISOR).EQ.1) THEN
  726. IVA2 = IVA2 + 1
  727. IVAR = IVAR + 1
  728. MTAB1.MTABTI(IVA2) = 'MOT'
  729. ICHAR = LCHAIN.LECT(6+ISOR)
  730. * chpoints de travaux
  731. IF(ISOR.GT.6) ICHAR = LCHAIN.LECT(76+ISOR)
  732. MTAB1.MTABII(IVA2) = ICHAR
  733. MTAB1.MTABTV(IVA2) = 'CHPOINT'
  734. MTAB1.MTABIV(IVA2) = IPORES(IVAR,IRES)
  735. ENDIF
  736. 40 CONTINUE
  737. * end do
  738. SEGDES,MTAB1
  739. *
  740. * Ecriture de la table au pas IRES dans la table r{sultat:
  741. *
  742. IRE2 = IRE2 + 1
  743. MTABTI(IRE2) = 'ENTIER'
  744. MTABII(IRE2) = IRES
  745. MTABTV(IRE2) = 'TABLE'
  746. MTABIV(IRE2) = MTAB1
  747. 30 CONTINUE
  748. * end do
  749. ENDIF
  750. ENDIF
  751.  
  752. 1234 CONTINUE
  753. *
  754. *----- Cr{ation des tables de liaisons aux pas de sortie -----
  755. *
  756. IPTLA1 = 0
  757. IF (LMODYN) THEN
  758. IF (NLSA.NE.0.OR.NLSB.NE.0) THEN
  759. typobj = ' '
  760. CALL ACCTAB(ITDYN,'MOT',IM,X0,'LIAISONS',L0,IP0,
  761. & typobj,np,X1,CHARRE,L1,IPTLA1)
  762. if (iptla1.gt.0.and.typobj(1:8).eq.'TABLE') then
  763. call dimen7(iptla1,idimen)
  764. indi1 = idimen - 1
  765. else
  766. CALL CRTABL(IPTLA1)
  767. c* idimen = 0
  768. c* indi1 = -1
  769. CALL ECCTAB(ITDYN,'MOT',0,0.D0,'LIAISONS',.TRUE.,0,
  770. # 'TABLE',0,0.D0,CHARRE,.TRUE.,IPTLA1)
  771. ENDIF
  772. ENDIF
  773. ENDIF
  774. *
  775. MTABU = 0
  776. M = 1
  777. segini MTABU
  778. MTABU.MLOTAB = 1
  779.  
  780. IF (NLSA.NE.0) THEN
  781. DO 50 IL = 1,NLSA
  782. *
  783. * Cr{ation de la table pour la liaison IL :
  784. *
  785. NVAR = ICHRES(10 + IL)
  786. M = NVAR + 1
  787. SEGINI,MTAB3
  788. MTAB3.MLOTAB = M
  789. *
  790. * Sous-typage de la table pour la liaison IL :
  791. *
  792. ID = 1
  793. MTAB3.MTABTI(ID) = 'MOT'
  794. ICHA6 = LCHAIN.LECT(6)
  795. MTAB3.MTABII(ID) = ICHA6
  796. MTAB3.MTABTV(ID) = 'MOT'
  797. ICHA1 = LCHAIN.LECT(ID)
  798. MTAB3.MTABIV(ID) = ICHA1
  799. *
  800. IPTLA3 = 0
  801. IF (LMODYN) THEN
  802. itmodl = IPOLA(IL)
  803. typobj = ' '
  804. CALL ACCTAB(IPTLA1,'MMODEL ',IM,X0,CHARRE,L0,itmodl,
  805. & typobj,np,X1,CHARRI,L1,IPTLA3)
  806.  
  807. if (typobj.eq.'TABLE'.and.iptla3.gt.0) then
  808. ipta3 = 0
  809. else
  810. iptla3 = 0
  811. ipta3 = mtab3
  812. CALL ECCTAB(IPTLA1,'MMODEL ',0,0.D0,CHARRE,.TRUE.,itmodl,
  813. # 'TABLE',0,0.D0,CHARRI,.TRUE.,ipta3)
  814. endif
  815. ELSE
  816. *
  817. * Ecriture de la table de liaison dans la table r{sultat:
  818. *
  819. IRE2 = IRE2 + 1
  820. MTABTI(IRE2) = 'TABLE'
  821. MTABII(IRE2) = IPOLA(IL)
  822. MTABTV(IRE2) = 'TABLE'
  823. MTABIV(IRE2) = MTAB3
  824. *
  825. ENDIF
  826. *
  827. II = 0
  828. IF (IIMPI.EQ.333) THEN
  829. WRITE(IOIMP,*)'DEVSO4 : creation table liaison ',IL
  830. WRITE(IOIMP,*)'DEVSO4 : longueur table = ',M
  831. WRITE(IOIMP,*)'DEVSO4 : !!! NTVAR = ',NTVAR
  832. ENDIF
  833. DO 52 IV = 1,NTVAR
  834. IF (ILIREA(IL,IV).EQ.1) THEN
  835. II = II + 1
  836. ICHA = ILIRNA(IL,IV)
  837. MLREEL = IPLRLA(IL,II)
  838. DO 54 IRES = 1 , NPRES
  839. PROG(IRES) = XRESLA(IL,IRES,II)
  840. 54 CONTINUE
  841. * end do
  842. ipl2 = mlreel
  843. SEGDES,MLREEL
  844. *
  845. * Ecriture de la liste de r{els dans la table MTAB3 :
  846. *
  847. ID = ID + 1
  848. MTAB3.MTABTI(ID) = 'MOT'
  849. MTAB3.MTABII(ID) = LCHAIN.LECT(ICHA)
  850. MTAB3.MTABTV(ID) = 'LISTREEL'
  851. MTAB3.MTABIV(ID) = MLREEL
  852. ENDIF
  853. 52 CONTINUE
  854. * end do
  855. if (IPTLA3.gt.0.and.ILIREA(IL,IV).EQ.1) then
  856. ICHAR = LCHAIN.LECT(ICHA)
  857. segact MTABU*mod
  858. MTABU.MTABTI(1) = 'ENTIER'
  859. MTABU.MTABII(1) = 1
  860. MTABU.MTABTV(1) = 'MOT'
  861. MTABU.MTABIV(1) = ICHAR
  862. typret=' '
  863. CALL ACCTAB(MTABU,'ENTIER',1,X0,CHARRI,L0,IP0,
  864. & typret,IUI,X1,CHARRE,L1,IP1)
  865. typret=' '
  866. CALL ACCTAB(IPTLA3,'MOT',0,0.D0,CHARRE,.TRUE.,0,
  867. # typret,0,0.D0,CHARRI,.TRUE.,IPTC3)
  868. if (typret.eq.'LISTREEL') then
  869. call fuspro(iptc3,ipl2,ipl3)
  870. CALL ECCTAB(IPTLA3,'MOT',0,0.D0,CHARRE,.TRUE.,0,
  871. # typret,0,0.D0,CHARRI,.TRUE.,ipl3)
  872. else if (typret.eq.'TABLE') then
  873. MTAB4 = IPTC3
  874. segact MTAB4,MTAB1
  875. M4 = MTAB4.MLOTAB
  876. do IRES = 1,NPRES
  877. ipch3 = MTAB1.MTABIV(IRES)
  878. CALL ECCTAB(IPTC3,'ENTIER',M4+IRES,0.D0,CHARRE,.TRUE.,0,
  879. # 'CHPOINT ',0,0.D0,CHARRI,.TRUE.,ipch3)
  880.  
  881. enddo
  882. segsup MTAB1
  883. segdes MTAB4
  884. else
  885. endif
  886.  
  887. endif
  888. SEGDES,MTAB3
  889. if (IPTLA3.gt.0) segsup MTAB3
  890. *
  891. 50 CONTINUE
  892. * end do
  893. ENDIF
  894. IF (NLSB.NE.0) THEN
  895. DO 60 IL = 1,NLSB
  896. *
  897. * Cr{ation de la table pour la liaison IL :
  898. *
  899. NVAR = ICHRES(10 + IL + NLSA)
  900. M = NVAR + 1
  901. SEGINI,MTAB3
  902. MTAB3.MLOTAB = M
  903. *
  904. * Sous-typage de la table pour la liaison IL :
  905. *
  906. ID = 1
  907. MTAB3.MTABTI(ID) = 'MOT'
  908. ICHA6 = LCHAIN.LECT(6)
  909. MTAB3.MTABII(ID) = ICHA6
  910. MTAB3.MTABTV(ID) = 'MOT'
  911. ICHA1 = LCHAIN.LECT(ID)
  912. MTAB3.MTABIV(ID) = ICHA1
  913. *
  914. * Ecriture de la table de liaison dans la table r{sultat:
  915. *
  916. IPTLA3 = 0
  917. IF (LMODYN) THEN
  918. itmodl = IPOLB(IL)
  919. typobj = ' '
  920. CALL ACCTAB(IPTLA1,'MMODEL ',IM,X0,CHARRE,L0,itmodl,
  921. & typobj,np,X1,CHARRI,L1,IPTLA3)
  922. ipta3 = mtab3
  923. if (typobj.eq.'TABLE'.and.iptla3.gt.0) then
  924. else
  925. iptla3 = 0
  926. CALL ECCTAB(IPTLA1,'MMODEL ',0,0.D0,CHARRE,.TRUE.,itmodl,
  927. # 'TABLE',0,0.D0,CHARRI,.TRUE.,ipta3)
  928. endif
  929. ELSE
  930. IRE2 = IRE2 + 1
  931. MTABTI(IRE2) = 'TABLE'
  932. MTABII(IRE2) = IPOLB(IL)
  933. MTABTV(IRE2) = 'TABLE'
  934. MTABIV(IRE2) = MTAB3
  935. *
  936. ENDIF
  937. *
  938. II = 0
  939. DO 62 IV = 1,NTVAR
  940. IF (ILIREB(IL,IV).EQ.1) THEN
  941. II = II + 1
  942. ICHA = ILIRNB(IL,IV)
  943.  
  944. MLREEL = IPLRLB(IL,II)
  945. DO 64 IRES = 1 , NPRES
  946. PROG(IRES) = XRESLB(IL,IRES,II)
  947. 64 CONTINUE
  948. * end do
  949. ipl2 = mlreel
  950. SEGDES,MLREEL
  951. *
  952. * Ecriture de la liste de r{els dans la table MTAB3 :
  953. *
  954. ID = ID + 1
  955. MTAB3.MTABTI(ID) = 'MOT'
  956. MTAB3.MTABII(ID) = LCHAIN.LECT(ICHA)
  957. MTAB3.MTABTV(ID) = 'LISTREEL'
  958. MTAB3.MTABIV(ID) = MLREEL
  959. ELSE
  960. * Ecriture des chpoints dans la table MTAB1, puis de cette
  961. * table dans la table MTAB3
  962. IF (ILIREB(IL,IV).EQ.2) THEN
  963. ICHA = ILIRNB(IL,IV)
  964. MTAB1 = IPLRLB(IL,II+1)
  965. SEGACT,MTAB1*MOD
  966. MLENTI= IPLRLB(IL,II+2)
  967. SEGACT,MLENTI
  968. DO 65 IRES=1,NPRES
  969. III=II
  970. MCHPOI=LECT(IRES)
  971. SEGACT MCHPOI
  972. MSOUPO=IPCHP(1)
  973. SEGACT,MSOUPO
  974. MPOVAL=IPOVAL
  975. SEGACT,MPOVAL*MOD
  976. DO 66 IP=1,NPLB
  977. DO 67 IDD=1,2
  978. III=III+1
  979. VPOCHA(IP,IDD)=XRESLB(IL,IRES,III)
  980. 67 CONTINUE
  981. 66 CONTINUE
  982. SEGDES,MPOVAL,MSOUPO,MCHPOI
  983. MTAB1.MTABIV(IRES)=MCHPOI
  984. 65 CONTINUE
  985. SEGSUP,MLENTI
  986. SEGDES,MTAB1
  987. II=III
  988. ID = ID + 1
  989. MTAB3.MTABTI(ID) = 'MOT'
  990. MTAB3.MTABII(ID) = LCHAIN.LECT(ICHA)
  991. MTAB3.MTABTV(ID) = 'TABLE'
  992. MTAB3.MTABIV(ID) = MTAB1
  993. ENDIF
  994. ENDIF
  995. if (IPTLA3.gt.0.and.
  996. & (ILIREB(IL,IV).EQ.1.or.ILIREB(IL,IV).EQ.2)) then
  997. ICHAR = LCHAIN.LECT(ICHA)
  998. segact MTABU*mod
  999. MTABU.MTABTI(1) = 'ENTIER'
  1000. MTABU.MTABII(1) = 1
  1001. MTABU.MTABTV(1) = 'MOT'
  1002. MTABU.MTABIV(1) = ICHAR
  1003. typret=' '
  1004. CALL ACCTAB(MTABU,'ENTIER',1,X0,CHARRI,L0,IP0,
  1005. & typret,IUI,X1,CHARRE,L1,IP1)
  1006. typret=' '
  1007. CALL ACCTAB(IPTLA3,'MOT',0,0.D0,CHARRE,.TRUE.,0,
  1008. # typret,0,0.D0,CHARRI,.TRUE.,IPTC3)
  1009. if (typret.eq.'LISTREEL') then
  1010. call fuspro(iptc3,ipl2,ipl3)
  1011. CALL ECCTAB(IPTLA3,'MOT',0,0.D0,CHARRE,.TRUE.,0,
  1012. # typret,0,0.D0,CHARRI,.TRUE.,ipl3)
  1013. else if (typret.eq.'TABLE') then
  1014. MTAB4 = IPTC3
  1015. segact MTAB4,MTAB1
  1016. M4 = MTAB4.MLOTAB
  1017. do IRES = 1,NPRES
  1018. ipch3 = MTAB1.MTABIV(IRES)
  1019. CALL ECCTAB(IPTC3,'ENTIER',M4+IRES,0.D0,CHARRE,.TRUE.,0,
  1020. # 'CHPOINT ',0,0.D0,CHARRI,.TRUE.,ipch3)
  1021.  
  1022. enddo
  1023. segsup MTAB1
  1024. segdes MTAB4
  1025. else
  1026. endif
  1027.  
  1028. endif
  1029. 62 CONTINUE
  1030. * end do
  1031. SEGDES,MTAB3
  1032. if (IPTLA3.gt.0) segsup MTAB3
  1033. 60 CONTINUE
  1034. * end do
  1035. ENDIF
  1036.  
  1037. segsup MTABU
  1038. IF (ITSORT.EQ.INDC10) THEN
  1039. if (iptla1.gt.0) THEN
  1040. MTAB1 = IPTLA1
  1041. segsup MTAB1
  1042. ENDIF
  1043. if (itdyn.gt.0) THEN
  1044. MTAB2 = ITDYN
  1045. segsup MTAB2
  1046. ITDYN = MTAB3
  1047. ENDIF
  1048. RETURN
  1049. ENDIF
  1050. SEGDES,MTABLE
  1051. *
  1052. RETURN
  1053. END
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  

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