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

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