Télécharger kmdmt.eso

Retour à la liste

Numérotation des lignes :

  1. C KMDMT SOURCE PV 16/11/17 21:59:45 9180
  2. SUBROUTINE KMDMT(MTABP,MCHB,MCHR,IMPR,CBETA,KDPDQ,KPIMP,PIMP,NIMP)
  3. C ***********************************************************************
  4. C -1 T
  5. C CE SOUS PROGRAMME CALCULE LA MATRICE C D C CONNAISSANT C
  6. C
  7. C POINTEURS :
  8. C
  9. C IZL CONTIENT LE PROFIL ET LA RENUMEROTATION (CF PROFCH)
  10. C MELEME OBJET MAILLAGE SUR LEQUEL EST FAIT LE CALCUL
  11. C MATRAK MATRICES ELEMENTAIRES DE LA DIVERGENCE (ALIAS"C")
  12. C
  13. C IZDV DIAGONALE D
  14. C IZIPAD CORRESPONDANCE NUMER. GLOBALE --> NUMER. LOCALE
  15. C (DOMAINE SUR LEQUEL PORTE AP ET NON LA PRESSION)
  16. C
  17. C EN SORTIE :
  18. C
  19. C LA DEMI-MATRICE INFERIEUR EST RANGEE PAR LIGNE
  20. C (UN SEGMENT IZA PAR LIGNE)
  21. C LA DIAGONALE DE LA MATRICE EST RANGEE A PART DANS IZD
  22. C KZA CONTIENT TOUT LES POINTEURS IZA
  23. C IZD=KZA(1)
  24. C
  25. C ***********************************************************************
  26. IMPLICIT INTEGER(I-N)
  27. IMPLICIT REAL*8 (A-H,O-Z)
  28.  
  29.  
  30. -INC PPARAM
  31. -INC CCOPTIO
  32. -INC SMELEME
  33. POINTEUR IPTJ.MELEME,IPTK.MELEME,MELEM1.MELEME
  34. POINTEUR IGEOM.MELEME,IGEOMI.MELEME,IGEOMC.MELEME
  35. POINTEUR MELEMK.MELEME,MELEMC.MELEME
  36. POINTEUR MELSTB.MELEME
  37. C? POINTEUR ELTFA.MELEME,FACEL.MELEME,MELEMC.MELEME
  38. C? POINTEUR MELEMF.MELEME,MELEMK.MELEME,MELELI.MELEME
  39. -INC SMLENTI
  40. POINTEUR IZIPAD.MLENTI,MLENTP.MLENTI,IZIPAK.MLENTI
  41. -INC SMCOORD
  42. -INC SMCHPOI
  43. POINTEUR IZDV.MCHPOI
  44. POINTEUR IZDP.MCHPOI,IZDDP.MPOVAL
  45. POINTEUR MCHB.MCHPOI,MCHR.MCHPOI
  46. C? POINTEUR IZB.MPOVAL,IZR.MPOVAL,IZPOF.MPOVAL,IZPOC.MPOVAL
  47. POINTEUR IZB.MPOVAL,IZR.MPOVAL,IZPOC.MPOVAL
  48. C? POINTEUR IZP.MPOVAL,IZF.MPOVAL
  49. POINTEUR IZP.MPOVAL
  50. C? POINTEUR IZFAC.MPOVAL,IZVOL.MPOVAL
  51.  
  52. C-INC SMMATRAKANC
  53. C*************************************************************************
  54. C
  55. C REPERAGE ET STOKAGE DES MATRICES ELEMENTAIRES puis assemblees
  56. C
  57.  
  58. * LGEOC SPG de la pression et/ou des multiplicateurs de Lagrange
  59. * (points CENTRE ) pour chaque operateur de contrainte
  60. * KGEOC SPG pour la totalite des points CENTRE.
  61. * KGEOS SPG pour la totalite des points SOMMET (Diagonale vitesse)
  62. * KLEMC Connectivites de l'ensemble des contraintes
  63. * LIZAFM(NBSOUS) contient les pointeurs IZAFM des sous-zones
  64.  
  65. SEGMENT MATRAK
  66. INTEGER LGEOC(NBOP),IDEBS(NBOP),IFINS(NBOP)
  67. INTEGER LIZAFM(NBSOUS)
  68. INTEGER IKAM0 (NBSOUS)
  69. INTEGER IMEM (NBELC)
  70. INTEGER KLEMC,KGEOS,KGEOC,KDIAG,KCAC,KIZCL,KIZGC
  71. ENDSEGMENT
  72.  
  73. SEGMENT IZAFM
  74. REAL*8 AM(NNELP,NP,IESP),RPGI(NELAX)
  75. ENDSEGMENT
  76.  
  77. POINTEUR IPMJ.IZAFM,IPMK.IZAFM
  78.  
  79. C*******************************************************************
  80. SEGMENT/IZA/(A(LA)*D)
  81. SEGMENT/IZD/(D(NELP)*D)
  82. -INC SMTABLE
  83. POINTEUR MTABP.MTABLE
  84. C
  85. CHARACTER*8 TYPE,TYPC
  86. * SAVE BETA
  87. C***
  88. C KDPDQ=0
  89. C write(6,*)' Entree dans kmdmt KDPDQ=',kdpdq
  90.  
  91. TYPE=' '
  92. CALL ACMO(MTABP,'MATC',TYPE,MATRAK)
  93. C WRITE(6,*)' KMDMT : MATC=',MATRAK
  94. IF(TYPE.NE.'MATRAK')THEN
  95. WRITE(6,*)' IL N''Y A PAS D''ENTREE MATC DANS LA TABLE '
  96. GO TO 90
  97. ENDIF
  98.  
  99. SEGACT MATRAK
  100. * initialisations pour plaire a l'optimiseur IBM
  101. MELEMK=MATRAK
  102. IZPOC=MATRAK
  103. IZIPAK=MATRAK
  104. MELSTB=MATRAK
  105. IZA=MATRAK
  106. IZL=MATRAK
  107. MLENTI=MATRAK
  108. IZD=MATRAK
  109. IDBLK=MATRAK
  110. IPMJ=MATRAK
  111. NBELC=IMEM(/1)
  112. NIMP=NBELC/2
  113. IF(KPIMP.EQ.2)NIMP=NBELC
  114. C write(6,*)' CAS KPIMP=',kpimp,' PIMP=',pimp
  115.  
  116. CALL PROFCH(MATRAK,IMPR,KPIMP,NIMP)
  117.  
  118. TYPE=' '
  119. CALL ACMO(MTABP,'DIAGV',TYPE,IZDV)
  120. IF(TYPE.NE.'CHPOINT ')THEN
  121. WRITE(6,*)' IL N''Y A PAS D''ENTREE DIAGV DANS LA TABLE '
  122. GO TO 90
  123. ENDIF
  124.  
  125. SEGACT MATRAK*MOD
  126. IZL=KIZCL
  127. C write(6,*)' KIZCL=',KIZCL
  128. C WRITE(6,*)' KDIAG=',KDIAG,' IZDV=',IZDV,' KCAC=',KCAC
  129. IF(KDIAG.EQ.IZDV.AND.KCAC.EQ.1)THEN
  130. GO TO 500
  131. ENDIF
  132.  
  133.  
  134. IF(KDPDQ.NE.0)THEN
  135. C DPDQ
  136. TYPE=' '
  137. CALL ACMO(MTABP,'DOMAINE',TYPE,MTABD)
  138. IF(TYPE.NE.'TABLE')GO TO 90
  139. TYPE=' '
  140. CALL ACMO(MTABD,'MELSTB',TYPE,MELSTB)
  141. IF(TYPE.NE.'MAILLAGE') GO TO 90
  142. CALL LEKTAB(MTABD,'CENTRE',MELEMC)
  143.  
  144. TYPE=' '
  145. CALL ACMO(MTABD,'MCHPOC',TYPE,MCHPOC)
  146. IF(TYPE.NE.'CHPOINT') GO TO 90
  147. CALL LICHT(MCHPOC,IZPOC,TYPC,IGEOMC)
  148. NBK=IZPOC.VPOCHA(/2)
  149. SEGACT MELEMC,IGEOMC
  150. C DPDQ
  151. ENDIF
  152.  
  153. KDIAG=IZDV
  154. CALL LICHT(IZDV,MPOVAL,TYPC,IGEOM)
  155.  
  156. C WRITE(6,*)' DIAGONALE : '
  157. C LDG=VPOCHA(/1)
  158. C WRITE(6,*)' SUR X '
  159. C WRITE(6,1002)(VPOCHA(II,1),II=1,LDG)
  160. C WRITE(6,*)' SUR Y '
  161. C WRITE(6,1002)(VPOCHA(II,2),II=1,LDG)
  162.  
  163. C
  164. C ON COMMENCE PAR ACTIVER
  165. C
  166. SEGACT IZL
  167.  
  168. C. NJAN=NUAN(/1)
  169. C. write(6,*)' NUAN='
  170. C. write(6,1001)(NUAN(II),II=1,NJAN)
  171. C. write(6,*)' NUNA='
  172. C. write(6,1001)(NUNA(II),II=1,NJAN)
  173. C write(6,*)' IMEL='
  174. C write(6,1001)(IMEL(II),II=1,NJAN)
  175. C write(6,*)' IMJ='
  176. C write(6,1001)(IMJ(II),II=1,NJAN)
  177.  
  178. MELEM1=KGEOS
  179. CALL KRIPAD(MELEM1,IZIPAD)
  180.  
  181. MELEME=KLEMC
  182. SEGACT MELEME
  183.  
  184. IKAS=0
  185. IF(IKAS.EQ.1)THEN
  186. NIZ=LIZAFM(/1)
  187. DO 1940 L=1,NIZ
  188. IZAFM=LIZAFM(L)
  189. WRITE(6,*)' MATRICE AM BLOC N° ',L
  190. SEGACT IZAFM
  191. NP=AM(/2)
  192. IES=AM(/3)
  193. NNELP=AM(/1)
  194. WRITE(6,*)'NP,IES,NNELP=',NP,IES,NNELP
  195. DO 1941 K=1,NNELP
  196. WRITE(6,*)'K=',K
  197. WRITE(6,1008)((AM(K,I,J),I=1,NP),J=1,IES)
  198. 1941 CONTINUE
  199. 1940 CONTINUE
  200. C CALL ARRET(0)
  201. 1008 FORMAT(8(1X,1PE11.4))
  202. ENDIF
  203.  
  204. IES=VPOCHA(/2)
  205. NPT=VPOCHA(/1)
  206. NELP=B(/1)
  207. C
  208. IDMAT=KZA1
  209. SEGACT IDMAT*MOD
  210. NBLK=IDESCR(/1)
  211. WRITE(6,*) '* NOMBRE DE BLOCS DE LA MATRICE = ',NBLK
  212. SEGINI IZD
  213. IDIAG=IZD
  214. C
  215.  
  216. DO 71 NS=1,LIZAFM(/1)
  217. IZAFM=LIZAFM(NS)
  218. SEGACT IZAFM
  219. C
  220. C NP1=AM(/1)
  221. C NP2=AM(/3)
  222. C WRITE(6,*)' NP=',NP1,' NELB=',NP2
  223. C DO 1834 I=1,NP1
  224. C WRITE(6,*)' I1=',I
  225. C WRITE(6,1002)(AM(I,1,KK),KK=1,NP2)
  226. C WRITE(6,*)' I2=',I
  227. C WRITE(6,1002)(AM(I,2,KK),KK=1,NP2)
  228. C1834 CONTINUE
  229.  
  230. 71 CONTINUE
  231.  
  232. NBSOUS=LISOUS(/1)
  233. IF(NBSOUS.EQ.0)NBSOUS=1
  234.  
  235. DO 10 JIS=1,NBSOUS
  236. IF(NBSOUS.EQ.1)IPTJ=MELEME
  237. IF(NBSOUS.NE.1)IPTJ=LISOUS(JIS)
  238. SEGACT IPTJ
  239. 10 CONTINUE
  240.  
  241. IF(KDPDQ.NE.0)THEN
  242. C
  243. C OPERATEUR DPDQ
  244. C
  245. CALL KRIPAD(IGEOMC,MLENTI)
  246. SEGACT MELSTB,IGEOMC
  247. MELEMK=KGEOC
  248. CALL KRIPAD(MELEMK,IZIPAK)
  249. SEGACT MELEMK
  250. ENDIF
  251.  
  252. C Calcul de la diagonale
  253.  
  254. AD=0.D0
  255. ADB=1.D0
  256. NBELP=NUNA(/1)
  257. DO 7710 KJ=1,NBELP
  258. KJJ=NUNA(KJ)
  259.  
  260. IPMJ=LIZAFM(IMEM(NUNA(KJ)))
  261. JKAM=IKAM0 (IMEM(NUNA(KJ)))
  262. KJJ=KJJ-JKAM+1
  263. J=IMJ(KJ)
  264. IPTJ=IMEL(KJ)
  265. NPJ=IPTJ.NUM(/1)
  266. K1=KJ-KZA(KJ)+1
  267.  
  268. KK=KJ
  269. KKK=NUNA(KK)
  270.  
  271. IPMK=LIZAFM(IMEM(NUNA(KK)))
  272. KKAM=IKAM0 (IMEM(NUNA(KK)))
  273. KKK=KKK-KKAM+1
  274. K=IMJ(KK)
  275. IPTK=IMEL(KK)
  276. NPK=IPTK.NUM(/1)
  277. IF(KK.NE.KJ) KA=KA+1
  278. AUX=0.D0
  279. DO 7731 I=1,NPJ
  280. DO 7732 N=1,NPK
  281. IF(IPTJ.NUM(I,J).NE.IPTK.NUM(N,K))GO TO 7732
  282. JD=IZIPAD.LECT(IPTK.NUM(N,K))
  283.  
  284. AUX=AUX+IPMJ.AM(KJJ,I,1)*IPMK.AM(KKK,N,1)/VPOCHA(JD,1)
  285. & +IPMJ.AM(KJJ,I,2)*IPMK.AM(KKK,N,2)/VPOCHA(JD,2)
  286. IF(IES.EQ.3)
  287. &AUX=AUX+IPMJ.AM(KJJ,I,3)*IPMK.AM(KKK,N,3)/VPOCHA(JD,3)
  288.  
  289. 7732 CONTINUE
  290. 7731 CONTINUE
  291. C
  292. AD=AD+AUX
  293. D(KJ)=D(KJ)+AUX
  294.  
  295. 7710 CONTINUE
  296. AD=AD/FLOAT(NBELP)
  297.  
  298.  
  299. IF(KDPDQ.NE.0)THEN
  300. C
  301. C OPERATEUR DPDQ
  302. C
  303. NBELP=NUNA(/1)
  304. ADB=0.D0
  305. DO 7711 KJ=1,NBELP
  306. KC=NUNA(KJ)
  307. LPC=LECT(MELEMK.NUM(1,KC))
  308. IF(LPC.NE.0)THEN
  309. ADB=ADB+ABS(IZPOC.VPOCHA(LPC,1))
  310. ENDIF
  311. 7711 CONTINUE
  312. ADB=ADB/FLOAT(NBELP)
  313.  
  314. BETA0=AD/ADB*5.E-4
  315. BETA=CBETA*BETA0
  316. C WRITE(6,7271)AD,ADB,BETA0,CBETA
  317. C7271 FORMAT(1X,' AD=',1PE11.4,' ADB=',1PE11.4,' BETAopt=',1PE11.4,
  318. WRITE(6,7271)BETA0,CBETA
  319. 7271 FORMAT(1X,' BETAopt=',1PE11.4,' CBETA=',1PE11.4)
  320.  
  321. KJ=1
  322. KC=NUNA(KJ)
  323. LPC=LECT(MELEMK.NUM(1,KC))
  324. IF(LPC.NE.0)THEN
  325. P1=BETA*IZPOC.VPOCHA(LPC,1)
  326. D(KJ)=D(KJ)+ABS(P1)
  327. ENDIF
  328.  
  329. ENDIF
  330. C FIN DPDQ
  331.  
  332. C
  333. C CALCUL DES BLOCS
  334. C
  335. DO 100 IBLK=1,NBLK
  336. C NUMÉROS DES LIGNES DE DÉBUT ET DE FIN DE BLOC KJD,KJF
  337. KJD=NLDBLK(IBLK)
  338. KJF=NLDBLK(IBLK+1)-1
  339. C ALLOCATION DE LA MÉMOIRE POUR LE BLOC
  340. IDBLK=IDESCR(IBLK)
  341. SEGACT IDBLK*MOD
  342. LA=ILON
  343. WRITE(6,*) '* BLOC NUMÉRO : ',IBLK,' TAILLE = ',ILON,' MOTS'
  344. SEGINI IZA
  345. IMAT=IZA
  346. KA=0
  347. DO 1 KJ=KJD,KJF
  348. KJJ=NUNA(KJ)
  349.  
  350. IPMJ=LIZAFM(IMEM(NUNA(KJ)))
  351. JKAM=IKAM0 (IMEM(NUNA(KJ)))
  352. KJJ=KJJ-JKAM+1
  353. J=IMJ(KJ)
  354. IPTJ=IMEL(KJ)
  355. NPJ=IPTJ.NUM(/1)
  356. K1=KJ-KZA(KJ)+1
  357.  
  358. DO 2 KK=K1,KJ
  359. KKK=NUNA(KK)
  360.  
  361. IPMK=LIZAFM(IMEM(NUNA(KK)))
  362. KKAM=IKAM0 (IMEM(NUNA(KK)))
  363. KKK=KKK-KKAM+1
  364. K=IMJ(KK)
  365. IPTK=IMEL(KK)
  366. NPK=IPTK.NUM(/1)
  367. IF(KK.NE.KJ) KA=KA+1
  368. AUX=0.D0
  369. DO 31 I=1,NPJ
  370. DO 32 N=1,NPK
  371. IF(IPTJ.NUM(I,J).NE.IPTK.NUM(N,K))GO TO 32
  372. JD=IZIPAD.LECT(IPTK.NUM(N,K))
  373.  
  374. AUX=AUX+IPMJ.AM(KJJ,I,1)*IPMK.AM(KKK,N,1)/VPOCHA(JD,1)
  375. & +IPMJ.AM(KJJ,I,2)*IPMK.AM(KKK,N,2)/VPOCHA(JD,2)
  376. IF(IES.EQ.3)
  377. &AUX=AUX+IPMJ.AM(KJJ,I,3)*IPMK.AM(KKK,N,3)/VPOCHA(JD,3)
  378.  
  379. 32 CONTINUE
  380. 31 CONTINUE
  381. C
  382. IF(KK.EQ.KJ)GO TO 21
  383. A(KA)=A(KA)+AUX
  384. C
  385. 21 CONTINUE
  386. 2 CONTINUE
  387.  
  388. C?. ad=ad+aux
  389. C?. D(KJ)=D(KJ)+AUX
  390.  
  391. IF(KDPDQ.NE.0)THEN
  392. C OPERATEUR DPDQ
  393. C
  394. KJJ=NUNA(KJ)
  395. LPJ=LECT(MELEMK.NUM(1,KJJ))
  396. IF(LPJ.NE.0)THEN
  397. P1=BETA*IZPOC.VPOCHA(LPJ,1)
  398. D(KJ)=D(KJ)+ABS(P1)
  399.  
  400. DO 3819 JC=2,NBK
  401. NPC=MELSTB.NUM(JC,LPJ)
  402. P=BETA*IZPOC.VPOCHA(LPJ,JC)
  403. KPI=IZIPAK.LECT(NPC)
  404. KPJN=NUAN(KPI)
  405. IF(KPJN.GT.KJ)GO TO 3819
  406. IDECI=IDEBLK(KJ-KJD+1)
  407. LLI=IDEBLK(KJ-KJD+2)-IDEBLK(KJ-KJD+1)
  408. KJAA=LLI-KJ+KPJN+IDECI
  409.  
  410. A(KJAA)=A(KJAA)+P
  411.  
  412. 3819 CONTINUE
  413. ENDIF
  414. ENDIF
  415. C FIN DPDQ
  416.  
  417. 1 CONTINUE
  418. SEGDES IZA
  419. SEGDES IDBLK
  420. 100 CONTINUE
  421. SEGDES IDMAT
  422.  
  423.  
  424. IF(KDPDQ.NE.0)THEN
  425. SEGSUP IZIPAK,MLENTI
  426. ENDIF
  427.  
  428.  
  429. IF(KPIMP.EQ.1)THEN
  430. D(NIMP)=1.D30
  431. ELSEIF(KPIMP.EQ.2)THEN
  432. SEGACT IZA
  433. NELP=D(/1)
  434. LGLA=A(/1)
  435. LGLI=KZA(NIMP)
  436. CALL INITD(A(LGLA-LGLI+1),LGLI,0.D0)
  437. D(NELP)=1.D-10
  438. CALL LEKTAB(MTABD,'XXVOLUM',MCHPOI)
  439. CALL LICHT(MCHPOI,MPOVAL,TYPC,IGEOM)
  440. VOLT=0.D0
  441. DO 482 I=1,NELP
  442. VOLT=VOLT+VPOCHA(I,1)
  443. 482 CONTINUE
  444. DO 483 I=1,NELP
  445. XVOL=VPOCHA(NUNA(I),1)
  446. A(LGLA-LGLI+I)=-XVOL/VOLT
  447. 483 CONTINUE
  448. ENDIF
  449.  
  450. SEGSUP IZIPAD
  451.  
  452. DO 20 JIS=1,NBSOUS
  453. IF(NBSOUS.EQ.1)IPTJ=MELEME
  454. IF(NBSOUS.NE.1)IPTJ=LISOUS(JIS)
  455. C write(6,*)' On desactive JIS,IPTJ=',JIS,IPTJ
  456. SEGDES IPTJ
  457. IPMJ=LIZAFM(JIS)
  458. JKAM=IKAM0 (JIS)
  459. SEGDES IPMJ
  460. 20 CONTINUE
  461.  
  462. SEGDES MPOVAL,IZDV
  463. KCAC=1
  464.  
  465. TYPE=' '
  466. CALL ACMO(MTABP,'DIAGP',TYPE,IZDP)
  467. IF(TYPE.EQ.'CHPOINT ')THEN
  468. CALL LICHT(IZDP,IZDDP,TYPE,IGEOMI)
  469. IGEOM=KGEOC
  470.  
  471. SEGACT IZD
  472. SEGACT IGEOM,IGEOMI
  473.  
  474. NPT=D(/1)
  475. NPTI=IZDDP.VPOCHA(/1)
  476.  
  477. DO 51 I=1,NPTI
  478. XVALI=IZDDP.VPOCHA(I,1)
  479. IPOI=IGEOMI.NUM(1,I)
  480. DO 52 J=1,NPT
  481. IF(IGEOM.NUM(1,J).EQ.IPOI)THEN
  482. JJ=NUAN(J)
  483. D(JJ)=D(JJ)+XVALI
  484. GO TO 53
  485. ENDIF
  486. 52 CONTINUE
  487. 53 CONTINUE
  488. 51 CONTINUE
  489. SEGDES IZDP,IZDDP
  490. SEGDES IGEOM,IGEOMI
  491. ENDIF
  492.  
  493. DO 72 NS=1,LIZAFM(/1)
  494. IZAFM=LIZAFM(NS)
  495. SEGDES IZAFM
  496. 72 CONTINUE
  497.  
  498. SEGDES IZD
  499. SEGDES MATRAK
  500. SEGDES MELEME
  501. C WRITE(6,*)' APPEL A TRIAKS'
  502.  
  503. CALL TRIAKS(IZL)
  504. C WRITE(6,*)' RETOUR DE TRIAKS'
  505. 500 CONTINUE
  506. CALL LICHT(MCHB,IZB,TYPC,IGEOM)
  507. CALL LICHT(MCHR,IZR,TYPC,IGEOM)
  508.  
  509. CALL KAL2P(MTABP,MCHB)
  510.  
  511. C write(6,*)' APPEL A RESOCK'
  512. IF(KPIMP.NE.0)THEN
  513. SEGACT IZL
  514. CALL LICHT(MCHB,IZB,TYPC,IGEOM)
  515. IF(KPIMP.EQ.1)IZB.VPOCHA(NUNA(NIMP),1)=PIMP*1.D30
  516. IF(KPIMP.EQ.2)IZB.VPOCHA(NUNA(NIMP),1)=-PIMP
  517. ENDIF
  518.  
  519. CALL RESOCK(IZB,IZL,IZR)
  520. C write(6,*)' Retour de resock '
  521.  
  522. SEGDES MCHB,IZB
  523. SEGDES MCHR,IZR
  524. RETURN
  525. 90 CONTINUE
  526. WRITE(6,*)' ARRET ANORMAL DE KMDMT'
  527. RETURN
  528. 1002 FORMAT(10(1X,1PE11.4))
  529. 1001 FORMAT(20(1X,I5))
  530. END
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.  

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