assem1
C ASSEM1 SOURCE MB234859 26/07/31 21:15:01 12613 & ITOPOY,IPOY,IITOPY,INCTRY, & ITOPOD,IPOD,IITOPD,INCTRD) C----------------------------------------------------------------------- c Preparation de l'assemblage des matrices de rigidites elementaires c Effectuer une renumerotation par la nested dissection ou reverse c cuthill mckee (subroutine numopt) C C Entrees : C --------- C IPOIRI : Pointeur sur la rigidite totale C INSYM : Entier valant 0 si matrices symetriques C 1 si matrices non symetriques C C Sorties : C --------- C MMATRX : Pointeur sur le segment MMATRI C INUINY : Pointeur sur le segment INUINV C C ITOPOY : Pointeur sur le segment ITOPO C IPOY : Pointeur sur le segment IPOS C IITOPY : Pointeur sur le segment IITOP C INCTRY : Pointeur sur le segment INCTRR C C En cas de matrice non symetrique sont egalement renseignes C ITOPOD : Pointeur sur le segment ITOPOB C IPOD : Pointeur sur le segment IPOSB C IITOPD : Pointeur sur le segment IITOPB C INCTRD : Pointeur sur le segment INCTRS C C Remarques : C 1/ Les elements modifies dans le segment mmatri future matrice C triangularisee sont : C NENS : Entier valant 0 C IGEOMA : Pointeur sur le segment IPT1 C IIDUA : Pointeur sur le segment MIDUA C IINCPO : Pointeur sur le segment MINCPO C IIMIK : Pointeur sur le segment MIMIK C IHARK : Pointeur sur le segment MHARK C En cas de matrice non symetrique sont egalement renseignes C IDUAPO : Pointeur sur le segment MIPO1 C IHARDU : Pointeur sur le segment MHAR1 C 2/ Les segments autres que mmatri sont des objets de travail C servant a l'assemblage et seront supprimes en fin d'assemblage C ou de triangularisation. C----------------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCHAMP -INC SMELEME -INC SMCOORD -INC CCREEL SEGMENT,IMIN(NNOE) SEGMENT,IMINB(NNOE) SEGMENT ICPR(nbpts) -INC SMRIGID -INC SMMATRI C SEGMENT,INUINV(NNGLOB) SEGMENT,ITOPO(IENNO) SEGMENT,ITOPOB(IENNO) SEGMENT,IITOP(NNOE+1) SEGMENT,IITOPB(NNOE+1) SEGMENT,IMINI(INC) SEGMENT,IPOS(NNOE1) SEGMENT,IPOSB(NNOE1) SEGMENT,INCTRR(NIRI) SEGMENT,INCTRS(NIRI) SEGMENT,INCTRA(NLIGRE) SEGMENT DIATMP(maxt,NNOE) SEGMENT STRV INTEGER ITRV1(MAXT) INTEGER ITRV2(MAXT) REAL*8 DTRV1(MAXT) REAL*8 DTRV2(MAXT) ENDSEGMENT segment mondu character*(lochpo) mondua(nnn) integer ipris(nnn),inosel(nnn) endsegment CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C **** CES TABLEAUX SERVENT AU REPERAGE DE LA MATRICE POUR L'ASSEMBLAG C **** IL SERONT TOUS SUPPRIMES EN FIN D'ASSEMBLAGE. C C **** MAXINC= MAXIMUM DE COMPOSANTES CONCERNANT UN NOEUD C C **** IITOP(K)=I LE 1ER ELEMENT TOUCHANT LE NOEUD K SE TROUVE EN C IEME POSITION DANS ITOPO C **** ITOPO(I)=L: LE 1ER ELEMENT TOUCHANT LE K EME NOEUD DE LA C ITOPO(I+1)=M MATRICE EST LE LIEME DE L'OBJET GEOMETRIE C DEFINI PAR LE POINTEUR M C **** IPOS(I)=J : LA 1 ERE INCONNUE DU NOEUD I EST EN J+1 EME C POSITION C **** IMINI(I)=J LA PLUS PETITE INCONNUE QUI EST RELIEE A LA IEME C EST L'INCONNUE J. C **** INUINV(I)=J J EST LE NOUVEAU NUMERO DU NOEUD I C C **** INCTRR(NIRI) - NIRI=NRIGEL du IPOIRI (objet MRIGID passé en argument) C pointeurs sur INCTRA C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC CHARACTER*4 CNOHA,lisi integer*4 noha equivalence (cnoha,noha) DATA CNOHA/'NOHA'/ DATA IPOIN/1/ LOGICAL bNONSYM C bNONSYM=(INSYM.EQ.1) C NNGLOB=nbpts MRIGID=IPOIRI C C Quelquefois, les points de IRIGEL(1,I) ne sont pas C tous references par le segment DESCR (cas des QUAFs notamment). C Dans ce cas, on fait une reduction du MELEME et on le stocke dans C IRIGEL(2,I) C CALL RDSCRM(MRIGID) IF (IERR.NE.0) RETURN C SEGACT,MRIGID NNVA=IRIGEL(/2) C DO IR=1,NNVA MELEME=IRIGEL(1,IR) DESCR =IRIGEL(3,IR) SEGACT,MELEME,DESCR ENDDO C NIRI=NNVA SEGINI,INCTRR IF (bNONSYM) SEGINI,INCTRS IF (NNVA.EQ.0) GOTO 801 MELEME=IRIGEL(1,1) C ... ITYPEL = 27 correspond aux éléments 'ATTA' ... IF (ITYPEL.NE.27) GOTO 801 C C **** ASSEMBLAGE DANS LE CAS DE L'ANALYSE MODALE. ON COMPTE LES POINTS C **** DANS ICPR C SEGINI INUINV,ICPR IKI=0 DO 700 I=1,NNVA MELEME=IRIGEL(1,I) NBNN=NUM(/1) NBELEM=NUM(/2) DO I1=1,NBELEM IF(ICPR(IP1).NE.0) GOTO 701 IKI=IKI+1 ICPR(IP1)=IKI 701 CONTINUE ENDDO 700 CONTINUE C C **** FABRICATION DU TABLEAU INUINV C NNOE=IKI NBETA=0 DO 710 I=1,NNVA MELEME=IRIGEL(1,I) NBNN=NUM(/1) NBELEM=NUM(/2) DO I1=1,NBELEM IF(ICPR(IP1).EQ.0) GOTO 711 NBETA=NBETA+1 IKI=NNOE-NBETA+1 INUINV(IP1)=IKI ICPR(IP1)=0 711 CONTINUE ENDDO 710 CONTINUE SEGSUP,ICPR ICDOUR=NNOE GOTO 800 C C **** ON FABRIQUE UN NOUVEL OBJET GEOMETRIE CONTENANT TOUTES LES C **** GEOMETRIES ELEMENTAIRES. CET OBJET CONTIENT NNVA OBJETS C **** GEOMETRIQUES ELEMENTAIRES. PUIS ON ENVOIE DANS NUMOPT QUI C **** FOURNIT EN RETOUR INUINV(NUM(I,J))=K DONNE LE NOUVEAU C **** NUMERO LOCAL DU POINT NUM(I,J).K VARIE DE 1 A ICDOUR. C **** LE PREMIER NOEUD DE L'OBJET GEOMETRIQUE EST LE PREMIER NOEUD C **** DE LA MATRICE, ETC... C 801 CONTINUE IKK=1 C 722 CONTINUE IF(IKK.GT.NNVA) GOTO 723 MELEME=IRIGEL(1,IKK) DESCR =IRIGEL(3,IKK) NLIGRE=LISINC(/2) DO 720 K=1,NLIGRE IF(LISINC(K).NE.'LX ') GOTO 721 720 CONTINUE IKK=IKK+1 IF(IKK.LE.NNVA) GOTO 722 C 723 CONTINUE DO 4862 I=1,NNVA MELEME= IRIGEL(1,I) if (num(/2).eq.0) goto 4862 IF (ITYPEL.EQ.49) THEN K=3 if (num(/2).le.2) k=num(/2) GOTO 721 ENDIF 4862 CONTINUE K=1 do ir=1,nnva MELEME= IRIGEL(1,ir) if (num(/2).ne.0.and.itypel.ne.49) goto 4864 enddo 4864 CONTINUE DESCR= IRIGEL(3,ir) C ... I1 = numéro (absolu) du noeud concerné par le DDL No K, C Ce noeud sera mis dans un MELEME dont le pointeur est stocké dans IMELP ... 721 CONTINUE I1=NUM(NOELEP(K),1) NBSOUS=0 NBNN=1 NBREF=0 NBELEM=1 SEGINI,MELEME ITYPEL=1 NUM(1,1)=I1 IMELP=MELEME C C ... Le MELEME créé ici est un MELEME composé qui contiendra le MELEME C pointé par IMELP et tous les MELEME pointés par IRIGEL(1,*) ... NBSOUS=NNVA+1 NBREF=0 NBNN=0 NBELEM=0 SEGINI,MELEME LISOUS(1)=IMELP INCMOY = 0 NOEMOY = 0 DO 12 I=1,NNVA IPT1 =IRIGEL(1,I) DESCR=IRIGEL(3,I) C NLIGRE=LISINC(/2) INCMOY = INCMOY + NLIGRE*ipt1.num(/2) NOEMOY = NOEMOY + ipt1.num(/1)*ipt1.num(/2) * cas du frottement, on met -49 dans itypel pour le savoir dans numopt IF (IRIGEL(6,i).eq.2) then IPT8=ipt1 if (ipt8.itypel.eq.49) then segact IPT8*mod ipt8.itypel=-49 endif ipt2=ipt8 else ipt2=irigel(2,i) if (ipt2.eq.0) ipt2=ipt1 ENDIF LISOUS(I+1)=ipt2 12 CONTINUE INCMOY = INCMOY/NOEMOY ** write(6,*) 'ASSEM1 incmoy noemoy ',incmoy,noemoy ICDOUR=0 SEGINI,INUINV SEGDES,INUINV C segact meleme do i=1,lisous(/1) ipt8=lisous(i) segact ipt8 if (ipt8.itypel.eq.-49) then segact ipt8*mod ipt8.itypel=49 endif enddo SEGACT INUINV SEGSUP,MELEME * MELEME=IMELP * SEGSUP,MELEME C C **** CREATION D'UN OBJET GEOMETRIE QU'IL FAUDRA CHANGER EN CAS DE C **** RENUMEROTATION GENERALE.ON PROFITE DE LA BOUCLE POUR CREE LE C **** TABLEAU IMIN(I)=J QUI DIT QUE J ELEMENTS TOUCHE LE NOEUD I(NU- C **** MEROTATION LOCALE). C 800 CONTINUE NNOE=ICDOUR SEGINI,IMIN NNOE1=NNOE+1 SEGINI,IPOS IF (bNONSYM) SEGINI,IMINB,IPOSB NBSOUS=0 NBREF=0 NBNN=1 NBELEM=ICDOUR SEGINI,IPT1 IPT1.ITYPEL=IPOIN DO 16 IRI=1,NNVA MELEME=IRIGEL(1,IRI) DESCR =IRIGEL(3,IRI) N2=NUM(/2) DO 17 I=1,N2 DO 171 J=1,NOELEP(/1) K=NUM(NOELEP(J),I) M=INUINV(K) IF (IPOS(M).NE.I) THEN IMIN(M)=IMIN(M)+1 IPT1.NUM(1,M)=K IPOS(M)=I ENDIF 171 CONTINUE IF (.NOT.bNONSYM) GOTO 17 DO 172 J=1,NOELED(/1) K=NUM(NOELED(J),I) M=INUINV(K) IF (IPOSB(M).NE.I) THEN IMINB(M)=IMINB(M)+1 IPOSB(M)=I ENDIF 172 CONTINUE 17 CONTINUE DO 15 I=1,N2 DO J=1,NOELEP(/1) K=NUM(NOELEP(J),I) M=INUINV(K) ipos(m)=0 ENDDO IF (.NOT.bNONSYM) GOTO 15 DO J=1,NOELED(/1) K=NUM(NOELED(J),I) M=INUINV(K) IPOSB(m)=0 ENDDO 15 CONTINUE 16 CONTINUE C C **** INITIALISATION DE ITOPO. ON UTILISE IMIN POUR SE POSITIONNER C **** DANS ITOPO . C ... ITOPO contiendra pour chaque noeud et chaque élément contenant C ce noeud 2 nombres : C 1. numéro de l'élément dans son maillage C 2. numéro du maillage (dans IRIGEL) de cet élément C SEGINI,IITOP IF (bNONSYM) SEGINI,IITOPB IITOP(1)=1 DO 18 I=1,NNOE IITOP(I+1)=IMIN(I)* 2 + IITOP(I) IF (bNONSYM) IITOPB(I+1)=IMINB(I)* 2 + IITOPB(I) 18 CONTINUE DO I=1,NNOE IMIN(I)=0 IF (bNONSYM) IMINB(I)=0 enddo IENNO=IITOP(NNOE+1) SEGINI,ITOPO IF (bNONSYM) THEN IENNO=IITOPB(NNOE+1) SEGINI ITOPOB ENDIF DO 21 IRI=1,NNVA MELEME=IRIGEL(1,IRI) DESCR =IRIGEL(3,IRI) N2=NUM(/2) DO 22 I=1,N2 DO 221 J=1,NOELEP(/1) M=INUINV(NUM(NOELEP(J),I)) IF (IPOS(M).NE.I) THEN IMIN(M)=IMIN(M)+1 IUY= 2* ( IMIN(M)-1 ) + IITOP(M) ITOPO(IUY)=I ITOPO(IUY+1)=IRI IPOS(M)=I ENDIF 221 CONTINUE IF (.NOT.bNONSYM) GOTO 22 DO 222 J=1,NOELED(/1) M=INUINV(NUM(NOELED(J),I)) IF (IPOSB(M).NE.I) THEN IMINB(M)=IMINB(M)+1 IUY= 2* ( IMINB(M)-1 ) + IITOPB(M) ITOPOB(IUY)=I ITOPOB(IUY+1)=IRI IPOSB(M)=I ENDIF 222 CONTINUE 22 CONTINUE DO 210 I=1,N2 DO J=1,NOELEP(/1) M=INUINV(NUM(NOELEP(J),I)) IPOS(M)=0 ENDDO IF (.NOT.bNONSYM) GOTO 210 DO J=1,NOELED(/1) M=INUINV(NUM(NOELED(J),I)) IPOSB(M)=0 ENDDO 210 CONTINUE 21 CONTINUE C C RECHERCHE DE LA VALEUR PAR DEFAUT DE L'HARMONIQUE DANS LE CAS C DE L'UTILISATION DE " OPTION MODE FOUR NOHAR " C DO 230 IRI=1,NNVA IHARIR=IRIGEL(5,IRI) IF (IHARIR . NE. NOHA) THEN IARDEF = IHARIR GOTO 231 ENDIF 230 CONTINUE c CALL ERREUR (21) c RETURN cbp: si toutes ont pour valeur NOHA, ce n'est a priori pas une erreur... 231 CONTINUE DO 232 IRI=1,NNVA IF (IRIGEL(5,IRI).EQ.NOHA ) GOTO 232 IF (IRIGEL(5,IRI).EQ.IARDEF) GOTO 232 if (iimpi.ne.0) then write(ioimp,*) 'IRIGEL(5,:)=',(IRIGEL(5,iou),iou=1,NNVA) endif RETURN 232 CONTINUE C C **** RECHERCHE DE LA VALEUR MAXINC QUI PERMET DE DIMENSIONNER INCPOS C SEGINI,MIDUA SEGINI,MIMIK SEGINI,MHARK IF (bNONSYM) SEGINI,MHAR1 DESCR=IRIGEL(3,1) IAAR =IRIGEL(5,1) IF(IAAR.EQ.NOHA) IAAR = IARDEF IMIK(**)=LISINC(1) IHAR(**)= IAAR IDUA(**)=LISDUA(1) IF (bNONSYM) MHAR1.IHAR(**)= IAAR MAXINC=1 DO 23 IRI=1,NNVA DESCR=IRIGEL(3,IRI) IHARIR=IRIGEL(5,IRI) IF(IHARIR. EQ.NOHA ) IHARIR = IARDEF NLIGRE=LISINC(/2) DO 26 I=1,NLIGRE DO 24 J=1,MAXINC IF (IMIK(J).NE.LISINC(I)) GOTO 24 IF (.NOT.bNONSYM) THEN IF (IDUA(J).NE.LISDUA(I)) THEN MOTERR(1:4)=IMIK(J) MOTERR(5:8)=IDUA(J) MOTERR(9:12)=LISDUA(I) RETURN ENDIF ENDIF IF (IHAR(J).EQ.IHARIR) GOTO 26 C 24 CONTINUE MAXINC=MAXINC+1 IHAR(**)=IHARIR IMIK(**)=LISINC(I) IF (.NOT.bNONSYM) IDUA(**)=LISDUA(I) 26 CONTINUE 23 CONTINUE C MAXI=MAXINC SEGINI,MINCPO MAXT=MAXINC IF (.NOT.bNONSYM) GOTO 555 C MAXDUA=1 DO 2322 IRI=1,NNVA DESCR=IRIGEL(3,IRI) IHARIR=IRIGEL(5,IRI) IF(IHARIR. EQ.NOHA ) IHARIR = IARDEF NLIGRE=LISDUA(/2) DO 262 I=1,NLIGRE DO 242 J=1,MAXDUA IF (IDUA(J).NE.LISDUA(I)) GOTO 242 IF (MHAR1.IHAR(J).EQ.IHARIR) GOTO 262 C 242 CONTINUE MAXDUA=MAXDUA+1 MHAR1.IHAR(**)=IHARIR IDUA(**)=LISDUA(I) 262 CONTINUE 2322 CONTINUE * write(6,*) ' imik' * write(6,*) ( imik(iu),iu=1,imik(/2)) * write(6,*) ' idua avant' * write(6,*) ( idua(iu),iu=1,idua(/2)) nnn = idua(/2) nqq = imik(/2) if (nnn.ne.nqq) then * on verra plus tard return endif * petit travail pour mettre dans le meme ordre les inconnues segini mondu do 476 iu=1,imik(/2) lisi=imik(iu) IF (idx.NE.0) THEN lisi=NOMDU(idx) ENDIF do 477 io=1,idua(/2) if(idua(io).eq.lisi) go to 478 477 continue inosel(iu)=1 go to 476 478 continue mondua(iu)= idua(io) ipris(io)=1 476 continue do 472 iu=1,inosel(/1) if (inosel(iu).eq.0) go to 472 do 473 io=1,ipris(/1) if (ipris(io).eq.1) go to 473 ipris(io)=1 mondua(iu)=idua(io) go to 472 473 continue 472 continue do 479 iu=1,idua(/2) idua(iu)=mondua(iu) 479 continue segsup mondu * write(6,*) ' idua apres' * write(6,*) ( idua(iu),iu=1,idua(/2)) C MAXI=MAXDUA SEGINI,MIPO1 maxt=max(maxinc,maxdua) C C **** INITIALISATION DE INCPOS ET DE INCTRA. C 555 CONTINUE SEGINI DIATMP,strv DO 29 IRI=1,NNVA IHARIR=IRIGEL(5,IRI) IF(IHARIR.EQ.NOHA ) IHARIR = IARDEF DESCR=IRIGEL(3,IRI) NLIGRE=LISINC(/2) NLIGRF=LISDUA(/2) SEGINI,INCTRA INCTRR(IRI)=INCTRA MELEME=IRIGEL(1,IRI) N2=NUM(/2) XMATRI=IRIGEL(4,IRI) SEGACT XMATRI DO 34 J=1,NLIGRE DO 33 K=1,MAXINC IF (IMIK(K).NE.LISINC(J)) GOTO 33 IF (IHAR(K).EQ.IHARIR) GOTO 32 33 CONTINUE C 32 CONTINUE INCTRA(J)=K DO 31 I=1,N2 IJ=INUINV(NUM(NOELEP(J),I)) INCPO(K,IJ)=1 * terme diagonal if ((bNONSYM.AND.(j.le.nligrf)).OR.(.NOT.bNONSYM)) & diatmp(K,IJ)=diatmp(k,ij)+re(j,j,i)*coerig(iri) 31 continue 34 CONTINUE SEGDES,INCTRA IF (.NOT.bNONSYM) GOTO 30 C NLIGRF=LISINC(/2) NLIGRE=LISDUA(/2) SEGINI,INCTRA INCTRS(IRI)=INCTRA DO 342 J=1,NLIGRE DO 332 K=1,MAXDUA IF (IDUA(K).NE.LISDUA(J)) GOTO 332 IF (MHAR1.IHAR(K).EQ.IHARIR) GOTO 322 332 CONTINUE C 322 CONTINUE INCTRA(J)=K DO I=1,N2 IJ=INUINV(NUM(NOELED(J),I)) MIPO1.INCPO(K,IJ)=1 * terme diagonal if (j.le.nligrf) diatmp(K,IJ)=diatmp(k,ij)+ > re(j,j,i)*coerig(iri) enddo 342 CONTINUE SEGDES,INCTRA C 30 CONTINUE SEGDES XMATRI 29 CONTINUE C C **** INITIALISATION DE IPOS C IPOS(1)=0 NA=0 IF (bNONSYM) THEN IPOSB(1)=0 ND=0 ENDIF DO 37 I=1,NNOE nad=na diamax=0.d0 DO 35 K=1,MAXINC IF(INCPO(K,I).EQ.0) GOTO 35 NA=NA+1 INCPO(K,I)=NA itrv1(na-nad)=k dtrv1(na-nad)= -diatmp(k,i) diamax=max(diamax,abs(dtrv1(na-nad))) 35 CONTINUE diaref = diamax * xszpre do k=1,na-nad if (abs(dtrv1(k)).lt.diaref) then ** write (6,*) ' terme diag petit ',dtrv1(k) dtrv1(k)=dtrv1(k)+diamax endif enddo * trier incpo suivant les val de diatmp do 351 k=1,na-nad incpo(itrv1(k),i)=k+nad 351 continue IPOS(I+1)=NA C IF (.NOT.bNONSYM) GOTO 37 C ndd=nd diamax=0.d0 DO 352 K=1,MAXDUA IF(MIPO1.INCPO(K,I).NE.0) THEN ND=ND+1 C ... MIPO1.INCPO(K,I) = numéro de l'équation ... MIPO1.INCPO(K,I)=ND itrv1(nd-ndd)=k dtrv1(nd-ndd)= -diatmp(k,i) diamax=max(diamax,abs(dtrv1(nd-ndd))) ENDIF 352 CONTINUE diaref = diamax * xszpre do k=1,nd-ndd if (abs(dtrv1(k)).lt.diaref) then ** write (6,*) ' terme diag petit ',dtrv1(k) dtrv1(k)=dtrv1(k)+diamax endif enddo do k=1,nd-ndd mipo1.incpo(itrv1(k),i)=k+ndd enddo IPOSB(I+1)=ND 37 CONTINUE C DO IR=1,NNVA MELEME=IRIGEL(1,IR) DESCR =IRIGEL(3,IR) SEGDES,MELEME,DESCR ENDDO C SEGDES,MIDUA,MIMIK,MHARK C IF (bNONSYM) THEN IF(NA.NE.ND) THEN RETURN ENDIF C DO 567 IINO=1,NNOE1 IF (IPOS(IINO).NE.IPOSB(IINO)) THEN WRITE(*,*) 'ERREUR dans ASNS1 !!! IPOS != IPOSB !!!' RETURN ENDIF 567 CONTINUE ENDIF C SEGINI,MMATRI MMATRX=MMATRI NENS=0 IGEOMA=IPT1 IIDUA=MIDUA IINCPO=MINCPO IIMIK=MIMIK IHARK=MHARK C INUINY=INUINV ITOPOY=ITOPO IPOY=IPOS INCTRY=INCTRR IITOPY=IITOP SEGDES,ITOPO,IPOS,INCTRR,IITOP SEGDES,MINCPO,MHARK SEGSUP,IMIN C IF (bNONSYM) THEN IDUAPO=MIPO1 IHARDU=MHAR1 ITOPOD=ITOPOB IPOD=IPOSB INCTRD=INCTRS IITOPD=IITOPB SEGDES,ITOPOB,IPOSB,INCTRS,IITOPB SEGDES,MIPO1,MHAR1 SEGSUP,IMINB ENDIF C SEGSUP,DIATMP,STRV SEGDES,INUINV SEGDES,MMATRI SEGDES,MRIGID END
© Cast3M 2003 - Tous droits réservés.
Mentions légales