1 : C ACCRO3 SOURCE BP208322 12/12/17 21:15:05 7615 2 : SUBROUTINE ACCRO3 3 : C======================================================================== 4 : C Cree la matrice de liaison entre le champ u et w 5 : C avec une formulation forte => On utilise les fonctions de forme 6 : C et on identifie le deplacement aux noeuds de la fissure 7 : c 8 : c On prend en compte les enrichissements XFEM 9 : c 10 : C Creation : BP, decembre 2012 11 : C Modifications : ... 12 : C 13 : C======================================================================== 14 : 15 : IMPLICIT INTEGER(I-N) 16 : IMPLICIT REAL*8 (A-H,O-Z) 17 : 18 : -INC CCREEL 19 : -INC CCOPTIO 20 : -INC SMCOORD 21 : -INC SMELEME 22 : -INC SMRIGID 23 : -INC SMLMOTS 24 : -INC CCHAMP 25 : -INC CCGEOME 26 : -INC SMMODEL 27 : -INC SMINTE 28 : -INC SMCHAML 29 : -INC SMLREEL 30 : 31 : 32 : C Segment contenant les informations sur un element 33 : SEGMENT INFO 34 : INTEGER INFELL(JG) 35 : ENDSEGMENT 36 : 37 : POINTEUR INFO1.INFO,INFO2.INFO 38 : POINTEUR MCHEX1.MCHELM 39 : external shape 40 : DATA EPSI/1.D-9/ 41 : DIMENSION ICOR(6),IMEL(6),imtt(10) 42 : DIMENSION QSI(3),XPO(3) 43 : 44 : C INITIALISATION DES INCONNUES obligatoires et facultatives 45 : PARAMETER (NOBL=3,NFAC=9) 46 : CHARACTER*4 DDLOBL(NOBL),DDLFAC(NFAC),MODDL,MODDL2 47 : CHARACTER*4 DUAOBL(NOBL),DUAFAC(NFAC) 48 : 49 : DATA DDLOBL/'UX ','UY ','UZ '/ 50 : DATA DDLFAC/'AX ','AY ','AZ ', 51 : >'B1X ','B1Y ','B1Z ', 52 : >'B2X ','B2Y ','B2Z '/ 53 : DATA DUAOBL/'FX ','FY ','FZ '/ 54 : DATA DUAFAC/'FAX ','FAY ','FAZ ', 55 : >'FB1X','FB1Y','FB1Z', 56 : >'FB2X','FB2Y','FB2Z'/ 57 : 58 : 59 : c----------------------------------------------------- 60 : c Segment de travail 61 : c----------------------------------------------------- 62 : SEGMENT MTRAV 63 : REAL*8 XE2(3,NBNN2) 64 : REAL*8 SHPP1(6,NBNN1) 65 : REAL*8 XE1(3,NBNN1) 66 : INTEGER IDEJVU(NBPTS) 67 : ENDSEGMENT 68 : 69 : c tableaux comptant le nbre d EF de chaque ddl 70 : PARAMETER(NDDLMAX=6) 71 : INTEGER NELDDL(NDDLMAX) 72 : 73 : if(iimpi.ge.2) then 74 : write(ioimp,*) '-----------------------------------------------' 75 : write(ioimp,*) ' ENTREE dans ACCRO3' 76 : write(ioimp,*) '-----------------------------------------------' 77 : endif 78 : 79 : c Preliminaires 80 : idim1 = idim + 1 81 : SEGACT,MCOORD*mod 82 : NBPTS = (XCOOR(/1)/idim1) 83 : 84 : c----------------------------------------------------- 85 : c RECUPERATION DU MAILLAGE MASSIF 86 : c----------------------------------------------------- 86 : CALL LIROBJ ('MMODEL',IPMODL,1,IRETOU) 87 : IF(IERR.NE.0) RETURN 88 : MMODE1=IPMODL 89 : segact,MMODE1 90 : c Récupération du nombre de zones du modèle 91 : N1 = MMODE1.KMODEL(/1) 92 : if(N1.gt.1) write(ioimp,*) 'attention 1 seule zone a ce jour!' 93 : IMODE1 = MMODE1.KMODEL(1) 94 : segdes,MMODE1 95 : C Récupération du maillage et du numéro d'élément du modèle 96 : segact,IMODE1 97 : nele1 = IMODE1.NEFMOD 98 : IPT1 = IMODE1.IMAMOD 99 : SEGACT IPT1 100 : C Récupération du numéro d'élément du maillage, du nombre de noeuds et d'éléments 101 : iele1 = IPT1.itypel 102 : nbnn1 = IPT1.num(/1) 103 : nbel1 = IPT1.num(/2) 104 : c récupération des caractéristique EF IPT1 104 : call elquoi(nele1,0,3,IPTR1,IMODE1) 105 : segdes,IMODE1 106 : INFO = IPTR1 107 : segact,INFO 108 : mele1 = INFELL(1) 109 : MINTE1 = INFELL(11) 110 : segdes,INFO 111 : 112 : c----------------------------------------------------- 113 : c RECUPERATION DU MAILLAGE INTERFACE 114 : c----------------------------------------------------- 115 : IPMAI2 = 0 115 : CALL LIROBJ ('MMODEL',IPMODL,0,IRETOU) 116 : IF(IERR.NE.0) RETURN 117 : if (IRETOU.EQ.1)then 118 : MMODE2=IPMODL 119 : segact,MMODE2 120 : N2 = MMODE2.KMODEL(/1) 121 : if(N2.gt.1) write(ioimp,*) 'attention 1 seule zone a ce jour!' 122 : IMODE2 = MMODE2.KMODEL(1) 123 : segdes,MMODE2 124 : segact,IMODE2 125 : nele2 = IMODE2.NEFMOD 126 : IPT2 = IMODE2.IMAMOD 127 : SEGACT IPT2 128 : c pour l'instant on dit que nele = iele (marche pour iele entre 2 et 26, voir bdata.eso) 129 : iele2 = IPT2.itypel 130 : nbnn2 = IPT2.num(/1) 131 : nbel2 = IPT2.num(/2) 132 : 133 : c recuperation des caracteritiques de l'element 134 : c write(ioimp,*) 'appel elquoi',iele2,nele2 134 : call elquoi(nele2,0,3,IPTR2,IMODE2) 135 : 1 segdes,IMODE2 136 : INFO = IPTR2 137 : segact,INFO 138 : MINTE2 = INFELL(11) 139 : ngau2 = INFELL(6) 140 : segdes,INFO 141 : else 142 : C Dans le cas où on a un maillage en entrée 142 : CALL LIROBJ('MAILLAGE',IPMAI2,1,IRETOU) 143 : IF(IERR.NE.0) RETURN 144 : IPT2 = IPMAI2 145 : SEGACT IPT2 146 : c pour l'instant on dit que nele = iele (marche pour iele entre 2 et 26, voir bdata.eso) 147 : iele2 = IPT2.itypel 148 : nele2 = iele2 149 : if (nele2.lt.2.or.nele2.gt.26) then 150 : write(ioimp,*)'element geometrique different de l element fini' 150 : call erreur(16) 151 : endif 152 : nbnn2 = IPT2.num(/1) 153 : nbel2 = IPT2.num(/2) 154 : c SEG2 155 : if (nele2.EQ.2) ngau2 = 2 156 : c SEG3 157 : if (nele2.EQ.3) ngau2 = 3 158 : c TRI3 159 : if (nele2.EQ.4) ngau2 = 1 160 : c TRI6 161 : if (nele2.EQ.6) ngau2 = 4 162 : c QUA4 163 : if (nele2.EQ.8) ngau2 = 4 164 : c QUA8 165 : if (nele2.EQ.10) ngau2 = 9 166 : endif 167 : 167 : call RESHPT(ngau2,nbnn2,iele2,nele2,0,IPTR2,IRET) 168 : MINTE2 = IPTR2 169 : segact,MINTE1,MINTE2 170 : 171 : 172 : c----------------------------------------------------- 173 : c RECHERCHE DU MCHAML ISSU MCHEX1 D ENRICHISSEMENT 174 : c----------------------------------------------------- 175 : MCHAM1=0 176 : NBENR2=0 177 : segact,IMODE1 178 : NOBMOD = IMODE1.IVAMOD(/1) 179 : IF (NOBMOD.NE.0) THEN 180 : DO 1002 iobmo1=1,NOBMOD 181 : if((IMODE1.TYMODE(iobmo1)).ne.'MCHAML') goto 1002 182 : MCHEX1 = IMODE1.IVAMOD(iobmo1) 183 : segact,MCHEX1 184 : if((MCHEX1.TITCHE).ne.'ENRICHIS') goto 1003 185 : MCHAM1 = MCHEX1.ICHAML(1) 186 : segact,MCHAM1 187 : NBENR2 = MCHAM1.IELVAL(/1) 188 : do ienr2=1,NBENR2 189 : MELVA1=MCHAM1.IELVAL(IENR2) 190 : if(MELVA1.ne.0) segact,MELVA1 191 : enddo 192 : 1003 continue 193 : segdes,MCHEX1 194 : 1002 CONTINUE 195 : ENDIF 196 : 197 : c------------------------------------- 198 : c INITIALISATION DES OBJETS DE TRAVAIL : MTRAV et ITYMAT 199 : c------------------------------------- 200 : segini,MTRAV 201 : *bp : NTYMAT = (U ou H ou HB1 ou HB1B2) 202 : * nbre de types de matrices = NRIGEL = NTYMAT * idim 203 : c NTYMAT = 4 204 : NTYMAT = 1+NBENR2 205 : 206 : c------------------------------------- 207 : c INITIALISATION DU MCOORD 208 : c------------------------------------- 209 : NBPTS0 = NBPTS 210 : NBPTS = NBPTS0 + ((nbel2 + 1)*idim*3) 211 : SEGADJ,MCOORD 212 : NBPTS = NBPTS0 213 : * on compte le vrai nombre de LX ajouté via NBPTS 214 : 215 : c-------------------------------------------------------------------- 216 : c INITIALISATION DU SEGMENT MRIGID 217 : c-------------------------------------------------------------------- 218 : NRIGEL = NTYMAT*idim 219 : segini,MRIGID 220 : IFORIG = IFOUR 221 : MTYMAT ='RIGIDITE' 222 : c -on prepare le meleme 223 : NBSOUS = 0 224 : NBREF = 0 225 : 226 : ityty=0 227 : c on initialise la taille matrice en fonction du type de matrice 228 : do ity=1,NTYMAT 229 : do iidim=1,idim 230 : 231 : ityty=ityty+1 232 : COERIG(ityty) = 1.D0 233 : 234 : * dim de la matrice RE elementaire 235 : * = 1 (LX) + 1 (UX) + nbnoeud (UX) 236 : * = 1 (LX) + 1 (AX) + nbnoeud (AX) 237 : * = 1 (LX) + 1 (AX) + 2*nbnoeud (AX+B1X) 238 : * = 1 (LX) + 1 (AX) + 3*nbnoeud (AX+B1X+B2X) 239 : nbno1 = nbnn1 240 : nenr1 = ity 241 : if(nenr1.le.2) then 242 : NLIGRP = 1 + 1 + nbno1 243 : else 244 : NLIGRP = 1 + 1 + ((nenr1-1)*nbno1) 245 : endif 246 : NLIGRD = NLIGRP 247 : 248 : c -creation du MELEME 249 : NBNN = 2 + nbno1 250 : NBELEM=0 251 : SEGINI,MELEME 252 : c ITYPEL=28 253 : ITYPEL=22 254 : IRIGEL(1,ityty) = MELEME 255 : 256 : c -remplissage du DESCR 257 : SEGINI,DESCR 258 : IRIGEL(3,ityty) = DESCR 259 : iddl=0 260 : c remplissage des ddl LX de la fissure 261 : iddl=iddl+1 262 : LISINC(iddl)='LX' 263 : LISDUA(iddl)='FLX' 264 : NOELEP(iddl)=1 265 : NOELED(iddl)=1 266 : c remplissage des ddl UX de la fissure (ici appelé WX) []*WX=TX 267 : iddl=iddl+1 268 : if (nenr1.eq.1) then 269 : LISINC(iddl)=DDLOBL(iidim) 270 : LISDUA(iddl)=DUAOBL(iidim) 271 : else 272 : LISINC(iddl)=DDLFAC(iidim) 273 : LISDUA(iddl)=DUAFAC(iidim) 274 : endif 275 : NOELEP(iddl)=2 276 : NOELED(iddl)=2 277 : c remplissage des ddl de la structure 278 : if (nenr1.eq.1) then 279 : do ino1=1,nbno1 280 : iddl=iddl+1 281 : LISINC(iddl)=DDLOBL(iidim) 282 : LISDUA(iddl)=DUAOBL(iidim) 283 : NOELEP(iddl)=2+ino1 284 : NOELED(iddl)=2+ino1 285 : enddo 286 : else 287 : do ini1=1,(nenr1-1) 288 : do ino1=1,nbno1 289 : iddl=iddl+1 290 : LISINC(iddl)=DDLFAC(iidim+(3*(ini1-1))) 291 : LISDUA(iddl)=DUAFAC(iidim+(3*(ini1-1))) 292 : NOELEP(iddl)=2+ino1 293 : NOELED(iddl)=2+ino1 294 : enddo 295 : enddo 296 : endif 297 : if(iimpi.ge.3) write(ioimp,*) ityty,(LISINC(iou),iou=1,NLIGRP) 298 : if(iimpi.ge.3) write(ioimp,*) ityty,(NOELEP(iou),iou=1,NLIGRP) 299 : SEGDES,DESCR 300 : 301 : c -initialisation du XMATRI 302 : NELRIG=0 303 : SEGINI,XMATRI 304 : IRIGEL(4,ityty) = XMATRI 305 : IRIGEL(5,ityty) = NIFOUR 306 : IRIGEL(6,ityty) = 0 307 : IRIGEL(7,ityty) = 0 308 : IRIGEL(8,ityty) = 0 309 : 310 : enddo 311 : enddo 312 : 313 : 314 : c---------------------------------------------------------------------- 315 : c 1. RECHERCHE DES ELEMENTS DE STRUCTURE CONTENANT DES POINTS DE GAUSS 316 : c DES ELEMENTS DE LA FISSURE 317 : c 2. REMPLISSAGE DU MRIGID (XMATRI et MELEME) 318 : c---------------------------------------------------------------------- 319 : iaccro=0 320 : NODES=0 321 : C 322 : c==== Boucle sur les elements de fissure ============================== 323 : DO 1100 iem2=1,nbel2 324 : 324 : call doxe(xcoor,idim,nbnn2,ipt2.num,iem2,xe2) 325 : nbenrj = 0 326 : 327 : c======= Boucle sur les noeuds de fissure ============================ 328 : DO 1132 ino2=1,nbnn2 329 : 330 : c on n'attache qu'une seule fois chaque noeud 331 : inode2 = IPT2.NUM(ino2,iem2) 332 : if(IDEJVU(inode2).ne.0) goto 1132 333 : IDEJVU(inode2)=1 334 : NODES=NODES+1 335 : 336 : c récupération des coordonnees du point de gauss dans le repère global 337 : XPO(1) = xe2(1,ino2) 338 : XPO(2) = xe2(2,ino2) 339 : XPO(3) = xe2(3,ino2) 340 : 341 : c---------- Boucle sur les elements de structure ---------------------- 342 : DO 1131 iem1=1,nbel1 343 : 344 : c si pas d'enrichissement, on travaille sur tous les elements 345 : if(MCHAM1.eq.0) goto 1133 346 : c on saute les elements non enrichi car a priori ne contiennent pas la fissure 347 : do ienr2=1,NBENR2 348 : MELVA1=MCHAM1.IELVAL(IENR2) 349 : if(MELVA1.ne.0) then 350 : do inode1=1,nbnn1 351 : if(MELVA1.IELCHE(inode1,iem1).ne.0) goto 1133 352 : enddo 353 : endif 354 : enddo 355 : goto 1131 356 : 1133 continue 357 : 358 : c recuperation des coordonnées des noeuds de IPT1 : xe1 (dans le repère x,y,z) 358 : call doxe(xcoor,idim,nbnn1,ipt1.num,iem1,xe1) 359 : 360 : c calcul des fonctions de formes de IPT1 au pt de Gauss de IPT2 360 : call QSIJS(xe1,iele1,nbnn1,idim,XPO,SHPP1,qsi,IRET) 361 : 362 : c test pour savoir si PG est dans EF de IPT1 363 : DO 1130 ino1=1,NBNN1 364 : if (SHPP1(1,ino1).LT.-1.01D-7) then 365 : go to 1131 366 : endif 367 : 1130 continue 368 : c ON a trouvé : l'iem1 élément de structure contient ce noeud de fissure 369 : IDEJVU(inode2)=10 370 : iaccro=iaccro+1 371 : 372 : c DETECTION DU TYPE D'ENRICHISSEMENT MAX DE CET ELEMENT = nbenrj 373 : DO 3001 IENR2=1,NBENR2 374 : MELVA1=MCHAM1.IELVAL(IENR2) 375 : IF(MELVA1.eq.0) GOTO 3001 376 : DO 3002 ino1=1,nbnn1 377 : MLREEL = MELVA1.IELCHE(ino1,iem1) 378 : c Test pour savoir si le noeud est enrichi 379 : IF(MLREEL.eq.0) GOTO 3002 380 : nbenrj=max(nbenrj,IENR2) 381 : 3002 continue 382 : 3001 continue 383 : 384 : if(iimpi.ge.3) write(ioimp,*) 'EF fissure ',iem2, 385 : & ' ptdeG ',ino2,' -> EF MASSIF ',iem1,' nbenrj=',nbenrj 386 : 387 : 388 : c Remplissage du MRIGID 389 : 390 : c ---Boucle sur la Partie standard et enrichie --- 391 : do 6000 ity=1,min(2,NTYMAT) 392 : c ---Boucle sur la dimension --- 393 : c rem : utile uniquement pour le meleme 394 : c (on pourrait garder le meme xmatri pour les differents iidim) 395 : do 6000 iidim=1,idim 396 : 397 : if(ity.eq.1) then 398 : ityty = iidim 399 : else 400 : ityty = (nbenrj*idim) + iidim 401 : endif 402 : MELEME = IRIGEL(1,ityty) 403 : XMATRI = IRIGEL(4,ityty) 404 : NBELEM = NUM(/2)+1 405 : NLIGRD = RE(/1) 406 : NLIGRP = RE(/2) 407 : NELRIG = RE(/3)+1 408 : segadj,MELEME 409 : segadj,XMATRI 410 : 411 : c Remplissage du MELEME 412 : c traitement du LX 413 : NBPTS = NBPTS + 1 414 : if(NBPTS.gt.(XCOOR(/1)/idim1)) then 415 : NBPTS0 = NBPTS 416 : NBPTS = NBPTS0 + (nbel2 + 1) 417 : SEGADJ,MCOORD 418 : NBPTS = NBPTS0 419 : endif 420 : NUM(1,NBELEM) = NBPTS 421 : XCOOR((NBPTS-1)*idim1 +1) = XCOOR((inode2-1)*idim1 +1) 422 : XCOOR((NBPTS-1)*idim1 +2) = XCOOR((inode2-1)*idim1 +2) 423 : if(idim.eq.3) 424 : & XCOOR((NBPTS-1)*idim1 +3) = XCOOR((inode2-1)*idim1 +3) 425 : c traitement du noeud de la fissure 426 : NUM(2,NBELEM) = inode2 427 : c traitement des noeuds de la structure 428 : inono=2 429 : cbp inutile do j2=1,max(1,nbenrj) 430 : cbp inutile car noelep boucle deja sur les enrichissement 431 : do ino1=1,nbnn1 432 : inono=inono+1 433 : NUM(inono,NBELEM) = IPT1.NUM(ino1,iem1) 434 : enddo 435 : c enddo 436 : 437 : c Remplissage du XMATRI 438 : c traitement du terme LX - ddl fissure 439 : RE(1,2,NELRIG)=1.d0 440 : RE(2,1,NELRIG)=1.d0 441 : c traitement des terme LX - ddl structure 442 : inono=2 443 : c UX = UX seulement 444 : if(ity.eq.1) then 445 : do ino1=1,nbnn1 446 : inono=inono+1 447 : RE(1,inono,NELRIG)=-1.d0*SHPP1(1,ino1) 448 : RE(inono,1,NELRIG)=-1.d0*SHPP1(1,ino1) 449 : enddo 450 : else 451 : c AX = AX ... 452 : if(nbenrj.ge.1) then 453 : MELVA1 = MCHAM1.IELVAL(1) 454 : do ino1=1,nbnn1 455 : MLREEL = MELVA1.IELCHE(ino1,iem1) 456 : inono=inono+1 457 : if(MLREEL.ne.0) then 458 : RE(1,inono,NELRIG)=-1.d0*SHPP1(1,ino1) 459 : RE(inono,1,NELRIG)=-1.d0*SHPP1(1,ino1) 460 : endif 461 : enddo 462 : endif 463 : c ... + B1X + B2X 464 : if(nbenrj.ge.2) then 465 : do jenrj=2,nbenrj 466 : c on ecrit B1X pour les nbnn1 noeuds, puis B2X ... 467 : MELVA1 = MCHAM1.IELVAL(jenrj) 468 : do ino1=1,nbnn1 469 : MLREEL = MELVA1.IELCHE(ino1,iem1) 470 : if(MLREEL.eq.0) then 471 : c pas d'enrichissement => on met 0 472 : RX05 = 0.d0 473 : else 474 : SEGACT,MLREEL 475 : PSIX = 0.d0 476 : do iii0 = 1,nbnn1 477 : PSIX = PSIX + (SHPP1(1,iii0) * PROG(iii0)) 478 : enddo 479 : SEGDES,MLREEL 480 : RX05= -1.d0*SQRT(ABS(PSIX)) 481 : endif 482 : inono=inono+1 483 : RE(1,inono,NELRIG)=RX05*SHPP1(1,ino1) 484 : RE(inono,1,NELRIG)=RX05*SHPP1(1,ino1) 485 : enddo 486 : enddo 487 : endif 488 : endif 489 : 490 : 6000 continue 491 : c ---fin de Boucle sur les XMATRI et MELEME 492 : c des Partie standard et enrichie et sur les dimensions --- 493 : 494 : c on a trouvé le iem1 élément et on a fait le travail : 495 : c on passe au point de gauss suivant 496 : goto 1132 497 : 498 : 1131 CONTINUE 499 : c---------- fin de la Boucle sur les elements de structure ------------- 500 : if(iimpi.ge.2) write(ioimp,*) 501 : 1 'Fin de la boucle sur les elements de structure' 502 : 503 : if(IDEJVU(inode2).ne.10) then 504 : write(ioimp,*) 'Attention le noeud ',inode2,' est hors support' 505 : endif 506 : 507 : 1132 CONTINUE 508 : c======= fin de la Boucle sur les noeuds de fissure =================== 509 : 510 : 511 : 512 : 1100 CONTINUE 513 : c==== fin de la Boucle sur les elements de fissure ===================== 514 : 515 : c MESSAGE : Nombre de points accrochés %i1 sur %i2 proposés 516 : INTERR(1)=iaccro 517 : INTERR(2)=NODES 517 : CALL ERREUR(-319) 518 : 519 : c------------------------------------ 520 : c AJUSTEMENT AVANT DE QUITTER 521 : c------------------------------------ 522 : 523 : if(iimpi.ge.2) write(ioimp,*) 'AJUSTEMENT AVANT DE QUITTER' 524 : c NBPTS est deja le vrai nomber de noeuds 525 : SEGADJ,MCOORD 526 : 527 : C BOUCLE SUR LES SOUS RIGIDITÉS 528 : ityok = 0 529 : DO 2000 ityty=1,(idim*NTYMAT) 530 : MELEME = IRIGEL(1,ityty) 531 : DESCR = IRIGEL(3,ityty) 532 : XMATRI = IRIGEL(4,ityty) 533 : NBELEM = NUM(/2) 534 : if(NBELEM.ne.0) then 535 : ityok = ityok + 1 536 : IRIGEL(1,ityok) = MELEME 537 : IRIGEL(3,ityok) = DESCR 538 : IRIGEL(4,ityok) = XMATRI 539 : segdes,MELEME,XMATRI 540 : else 541 : segsup,MELEME,DESCR,XMATRI 542 : endif 543 : 2000 continue 544 : NRIGEL = ityok 545 : segadj,MRIGID 546 : 547 : c------------------------------- 548 : c MENAGE AVANT DE QUITTER 549 : c------------------------------- 550 : 551 : segsup,MTRAV 552 : segdes IPT1,IPT2 553 : if(MCHAM1.ne.0) segdes,MCHAM1 554 : SEGDES,MRIGID 555 : 556 : if(iimpi.ge.3) write(ioimp,*) 'ecriture du MRIGID',MRIGID 556 : CALL ECROBJ('RIGIDITE',MRIGID) 557 : 558 : RETURN 559 : 560 : END 561 : 562 : 563 : 564 : 565 : 566 : 567 :
© Cast3M 2003 - All rights reserved.
Disclaimer