* fichier : xfem01.dgibi ************************************************************************ ************************************************************************ ******************************************************************* * * xfem01.dgibi * * calcul avec elements xfem (XQ4R) * d'une plaque elastique en traction * avec fissure inclinée * * création : bp, le 24.09.2009 * ajout g_theta : bp, 08.06.2010 * solution de reference pour g,k1 et k2 donne par : * [TADA, STRESS ANALYSIS HANDBOOK,1973] * [ISIDA,IJF(7),301-316,1971] -> facteur de forme * propagation elementaire ******************************************************************** *** Traces *graph = faux; *graph = vrai; *** finesse du maillage (=flfin) et cas test complet (=fllong) *flfin = faux; flfin = vrai; fllong = faux; *fllong = vrai; ******************************************************* *** Options de calcul : 2D ******************************************************* *** Maillage : Plaque rectangulaire saine * dimension et finesse *La1 = 0.1 ; La1 = 0.15 ; Lb1 = 0.5 ; na1 = 20; si(flfin); La1 = 0.2 ; na1 = 40; *na1 = 100; * na1 = 200; * na1 = 400; fins; dx1 = (2.*La1) / (flot na1) ; nb1 = na1 / 2; dx2 = (2.*Lb1) / (flot nb1) ; * zone centrale pa1 = (-1.*La1) (-1.*La1) ; pa2 = ( La1) (-1.*La1) ; pa3 = ( La1) ( La1) ; pa4 = (-1.*La1) ( La1) ; * zone exterieure (pour avoir un milieu quasi-infini) nb1 = na1 / 2; dx2 = (2.*Lb1) / (flot nb1) ; pb1 = (-1.*Lb1) (-1.*Lb1) ; pb2 = ( Lb1) (-1.*Lb1) ; pb3 = ( Lb1) ( Lb1) ; pb4 = (-1.*Lb1) ( Lb1) ; pb11 = (-1.*La1) (-1.*Lb1) ; pb12 = ( 1.*La1) (-1.*Lb1) ; pb21 = ( Lb1) (-1.*La1) ; pb22 = ( Lb1) ( 1.*La1) ; pb31 = ( La1) ( Lb1) ; pb32 = (-1.*La1) ( Lb1) ; pb41 = (-1.*Lb1) ( La1) ; pb42 = (-1.*Lb1) (-1.*La1) ; sabtot= sa1b1 et sa2b2 et sa3b3 et sa4b4; *1er coin dsb2 = dc2ext et dd1ext et dc2 et dd1; *2eme coin dsb3 = dc3ext et dd2ext et dc3 et dd2; *3eme coin dsb4 = dc4ext et dd3ext et dc4 et dd3; *4eme coin dsb1 = dc1ext et dd4ext et dc1 et dd4; sbtot = sb1 et sb2 et sb3 et sb4; *petite modif pour propager + loin si(flfin); sa1 = sa1 et sa2b2 et sa4b4; sb1 = sa1b1 et sa3b3 et sbtot; sino; * attention on reutilise sb1 !!! sb1 = sabtot et sbtot ; fins; stot1 = sa1 et sb1; mess 'maillage central ext total' ; *opti donn 5; ******************************************************* *** Maillage de la fissure * longueur et angle de la fissure *a0 = 0.1; a0 = 0.05; *alpha0 = 0.; alpha0 = 20.; *alpha0 = 40.; *alpha0 = 45.; *alpha0 = 50.; * finesse du maillage de la fissure *na0 = 10; *da0 = a0 / (flot na0) ; da0 = dx1 / 10.; na0 = enti (a0 / da0); * maillage ptip1 = (a0 * (cos alpha0)) (a0 * (sin alpha0)); ptip2 = (-1.*a0 * (cos alpha0)) (-1.*a0 * (sin alpha0)); * table (+ pratique pour gérer la propa) TXFEM . 0 . 'POINTE1' = ptip1; TXFEM . 0 . 'POINTE2' = ptip2; TXFEM . 0 . 'FISSURE' = lcrack0; * creation des level set psi0 phi0 = PSIPHI sa1 lcrack0 'DEUX' ptip1 ptip2; si(graph); *opti isov lign; *opti isov surf; finsi; *opti donn 5 ; ******************************************************* *** Modeles et materiaux * definition des models elementaires * apres cela on assemble mod1tot = mod1a et mod1b; * enrichissement * constructionsion des blocages des ddl X-fem non actifs dans * les éléments de transition. * on crée le ou les materiau et on les assemble Ey1 = 2.E11 ; nu1 = 0.3; rho1 = 7800.; ******************************************************* *** Matrices + CL * on bloque les depl de corps rigides cl1tot = cl1x et cl1y; K1tot = Rig1tot et cl1tot et (Rel1X . 0); syy0 = 1.E9; dbup = dc4ext et db3 et dd2ext; dbdo = dd4ext et db1 et dc2ext; si(graph); finsi; ******************************************************* *** RESOlution avec RESO ******************************************************* *** Post traitement * verif du fonctionnement des principaux operateurs ddef0 = def0 - defel0; * calcul du residu Res0 = Fint0 - (Freac0 + pre1); * * calcul energie elastique = energie exterieure * wdefel0= 0.5 * (ENER sig0 defel0 mod1tot); * Iwdef0 = INTG wdefel0 mod1tot; * wext = 0.5 * (PSCA u0 pre1 (mots UY) (mots FY)); * Iwext = maxi (RESU wext); * * travail des efforts internes de deformations * wdef0 = WORK mod1tot sig0 gru0; * messages * mess 'erreur relative / Energie =' ((Iwdef0-Iwext) / (abs Iwext)); * traces si(graph); TRAC sig0 mod1tot def0; TRAC def0; * trac defel0 mod1tot (lcrack0); * TRAC svm0 mod1tot (stot1 et lcrack0); * TRAC wdefel0 mod1tot (stot1 et lcrack0); * TRAC gru0 mod1tot (stot1 et lcrack0); * test de l'option CHAN CHPO SUPP : finsi; * OPTI DONN 5 echo 1 trac X; ******************************************************* * calcul de l integrale J, de K1, de K2 *** valeur theorique de J,K1,K2 *** k0th1 = syy0 * ((a0 * pi) ** 0.5) * (cos alpha0); Estar1 = (1. - (nu1**2)) / Ey1; Gth1 = Estar1 * (k0th1 ** 2); * facteur de forme pour a/b=0.1 et h/b=Inf *facfor1 = 1.006; * facteur de forme pour a/b=0.1 et h/b=1 facfor1 = 1.014; Gth1 = (facfor1 ** 2) * Gth1; K1ref = k0th1 * (cos alpha0) * facfor1; K2ref = k0th1 * (sin alpha0) * facfor1; *** G_THETA -> J *** SUPTAB.'PSI' = psi0; SUPTAB.'PHI' = phi0; SUPTAB.'FRONT_FISSURE' = ptip1 ; SUPTAB.'MODELE' = mod1tot; SUPTAB.'CARACTERISTIQUES' = mat1tot; SUPTAB.'SOLUTION_RESO' = u0; SUPTAB.'CHARGEMENTS_MECANIQUES' = pre1; *on teste toutes les options si(fllong); SUPTAB.'COUCHE' = 0; G_THETA SUPTAB; * on teste l'option ou l on choisit soi meme le champ theta q7 = (SUPTAB . 'CHAMP_THET1') ; si(graph); finsi; OTER SUPTAB 'COUCHE'; SUPTAB . 'CHAMP_THETA' = q7; G_THETA SUPTAB; * on calcule J pour differents contours si(flfin); fins; sino; fins; jmoy1 = 0.; repe BCOU1 ncou1; SUPTAB.'COUCHE' = icou1; G_THETA SUPTAB; jmoy1=jmoy1 + (SUPTAB . 'RESULTATS'); fin BCOU1; * extraction d un J moyen jmoy1 = jmoy1 / ncou1; *cas rapide (on ne teste poas toutes les options) sino; si(flfin); ncou1 = 3; sino; ncou1 = 1; fins; SUPTAB.'COUCHE' =ncou1; G_THETA SUPTAB; jmoy1 = SUPTAB . 'RESULTATS'; fins; *erreur relative / J errG1 = abs (1. - (jmoy1 / Gth1)); *** Calcul des FIC par methode integrale G_THETA *** KTAB .'PSI' = psi0; KTAB .'PHI' = phi0; KTAB .'FRONT_FISSURE' = ptip1 ; KTAB .'MODELE' = mod1tot; KTAB .'CARACTERISTIQUES' = mat1tot; KTAB .'SOLUTION_RESO' = u0; KTAB .'CHARGEMENTS_MECANIQUES' = pre1; ncou1 = 1; KTAB . 'COUCHE' = ncou1; G_THETA KTAB; K1G = KTAB . 'RESULTATS' . 'I'; K2G = KTAB . 'RESULTATS' . 'II'; errK1G = ABS (1 - (ABS ( K1G/K1ref))); errK2G = ABS (1 - (ABS ( K2G/K2ref))); GK1K2 = Estar1 * ((K1G**2) + (K2G**2)) ; ******************************************************* *** erreur? *** *OPTI DONN 5 echo 1 trac X; * Si (errG1 < 0.05); * Erre 0; * Sinon; * Erre 5; * Finsi; *OPTI DONN 5 echo 1 trac X; lcrack1 = lcrack0; ******************************************************* * BOUCLE TEMPORELLE POUR FAIRE PROPAGER LA FISSURE ******************************************************* it1 = 0 ; si(flfin); si(fllong); nt1 = 18; sino; nt1 = 3; fins; sino; si(fllong); nt1 = 7; sino; nt1 = 3; fins; fins; REPE BT1 nt1; it1 = it1 + 1; ******************************************************* * propagation élémentaire de fissure *** Increment et angle de propagation *** * increment manuel * da1 = 1.5 * dx1; * increment auto da1 = 1.5 * dx1tip; * angle si((abs K2G) <eg (1.E-6*(abs K1G))); tet1c = 0.; sino; tet0c = K1G / K2G; tet8c = (tet0c**2) + 8.; tet1c = 2. * (atg (0.25 * tet1c)); fins; mess 'propagation avec l angle ' tet1c; * les calculs ont été réalisés sur la pointe ptip1 * on recupere la direction du repere local de la fissure (CHPOINT) ETIP1 = KTAB . 'UTILTET1' . 'DIRECTION1'; ETIP2 = KTAB . 'UTILTET1' . 'DIRECTION2'; * on fait tourner de l'angle critique DA1VEC = ((cos tet1c) * ETIP1) + ((sin tet1c) * ETIP2); DA1VEC = da1 * DA1VEC; * par symetrie on en deduit ptip2 * propagation du front de fissure *stockage TXFEM . it1 . 'POINTE1' = ptip1; TXFEM . it1 . 'POINTE2' = ptip2; TXFEM . it1 . 'FISSURE' = lcrack1; *** Actualisations *** * des level set psi1 phi1 = PSIPHI sa1 lcrack1 'DEUX' ptip1 ptip2; si(graph); *opti isov lign; *opti isov surf; finsi; * du modele, de la rigidite,... (inutile pour le materiau) * des blocages des ddl X-fem non actifs dans * les éléments de transition. K1tot = Rig1tot et cl1tot et ( Rel1X . it1); *** resolution *** si(graph); TRAC sig1 mod1tot def1; TRAC def1; finsi; *** Calcul des FIC par methode integrale G_THETA *** KTAB .'PSI' = psi1; KTAB .'PHI' = phi1; KTAB .'FRONT_FISSURE' = ptip1 ; KTAB .'MODELE' = mod1tot; KTAB .'CARACTERISTIQUES' = mat1tot; KTAB .'SOLUTION_RESO' = u1; KTAB .'CHARGEMENTS_MECANIQUES' = pre1; KTAB . 'COUCHE' = ncou1; * repe bcou 6; * KTAB . 'COUCHE' = (&bcou) - 1; G_THETA KTAB; K1G = KTAB . 'RESULTATS' . 'I'; K2G = KTAB . 'RESULTATS' . 'II'; * mess (KTAB . 'COUCHE') K1G K2G; si(graph); q7 = KTAB . CHAMP_THET1; finsi; * fin bcou; *si on a des nan, on arrete tout c'est qu'on est à coté de la plaque si (non (((abs K1G) < 1.E16) et ((abs K2G) < 1.E16) )); quit BT1; finsi; FIN BT1; ******************************************************* * OPTI DONN 5 echo 1 trac X; ******************************************************* *** erreur? (apres propa elementaire) *** ******************************************************* pref1 = 9.10932E-02 1.10838E-02; Si (errptip1 < (1.E-2 * dx1)); Sinon; Finsi; ******************************************************* *** autres tests divers relatifs aux XFEM *** ******************************************************* *** test de la syntaxe 2 de TRIELE *** mod0tot = mod0a et mod1b; K0tot = Rig0tot et cl1tot et Rel0; si(graph); fins; * OPTI DONN 5 echo 1 trac X; fin; *** test de la sauvegarde des xfem (a prevoir) *** * opti sauv 'XFEM01.sauv'; * sauv; * * opti rest 'XFEM01.sauv'; * rest;
© Cast3M 2003 - Tous droits réservés.
Mentions légales