optio norm auto; * fichier : xfem04.dgibi ************************************************************************ ************************************************************************ ************************************************************************ * * Mots-clés : Mécanique de la rupture, XFEM, contact, frottement, LATIN * * Etude de reponse d'une plaque en compression avec fissure inclinee * via une formulation mixte a trois champs. Le contact frottant et la * resolution par la LATIN sont pris en compte par des procedures perso. * test des operateurs : RELA ACCRO FAIBLE, G_THETA * creation : 2013-02-13, Benoit Trolle (these SNCF-Lamcos) * integration dans Cast3m : 2013-12-17, Benoit Prabel (#) * ************************************************************************ * Masquer lignes excutées * 'OPTION' echo 0; ************************************************************************ * PROCEDURES INTERNES * ************************************************************************ *----------------------------------------------------------------------- * PLOTITER : Affichage des champs locaux au cours des itérations de la LATIN *---------------------------------------------------------------------- 'DEBPROC' PLOTITER Tplus*CHPOINT Tmoins*CHPOINT Wplus*CHPOINT Wmoins*CHPOINT meshint*MAILLAGE; fac2 = 20; fac1 = 1E-12; def3 = def1 'ET' def2; 'TRACER' def3 'NCLK'; 'FINPROC'; *---------------------------------------------------------------------- * LATIN : contient les étapes du solveur non linéaires LATIN * * ENTREE : * - crack : maillage de l'interface * - RHS0 : Chargement mécanique * - K1tot : matrice totale sans Kuwt (avec C.L.) * - Kuwt : matrice issu de RELA ACCRO FAIBLE * - Ktot1 : Kuwt et K1tot * - mod1tot : modele de tout le massif * - WPglo, WMglo, WPglo, WMglo : w+,w-,t+,t- solution du pas précédent * - f_crack : Coefficient de frottement entre les lèvres de la fissure * - ItMax : Nombre d'itération maximum * - eps1 : Précision demandée * * SORTIE : * - (U, W, T) * - erreur à chaque itération *---------------------------------------------------------------------- 'DEBPROC' LATIN Tdisplay*TABLE crack*MAILLAGE K1tot*RIGIDITE mod1tot*MMODEL RHS0*CHPOINT IdPasT*ENTIER Ktot1*RIGIDITE Kuwt*RIGIDITE cht1*CHPOINT chn*CHPOINT ItMax*ENTIER eps1*FLOTTANT k*FLOTTANT f_crack*FLOTTANT mai1tot*MAILLAGE cht2/CHPOINT TPglo/CHPOINT TMglo/CHPOINT WPglo/CHPOINT WMglo/CHPOINT; * initialisation avec second menbre incomplet uniquement pour le premier pas de de temps * pour les suivants on initialise avec les champs locaux du pas précédents *'SI' ((IdPasT 'EGA' 1) 'OU' ouv1); 'SI' (IdPasT 'EGA' 1); *-----------------------------< Résolution initiale: étape globale ma1 = 'EXTRAIRE' mod1 'MAIL'; cl2 = ('BLOQUE' 'AX'ma1) 'ET' ('BLOQUE' 'B1X'ma1) 'ET' ('BLOQUE' 'C1X'ma1) 'ET' ('BLOQUE' 'D1X'ma1) 'ET' ('BLOQUE' 'E1X'ma1) 'ET' ('BLOQUE' 'AY'ma1) 'ET' ('BLOQUE' 'B1Y'ma1) 'ET' ('BLOQUE' 'C1Y'ma1) 'ET' ('BLOQUE' 'D1Y'ma1) 'ET' ('BLOQUE' 'E1Y'ma1) 'ET' ('BLOQUE' 'AZ'ma1) 'ET' ('BLOQUE' 'B1Z'ma1) 'ET' ('BLOQUE' 'C1Z'ma1) 'ET' ('BLOQUE' 'D1Z'ma1) 'ET' ('BLOQUE' 'E1Z'ma1) ; ktot2 = ktot1 'ET' cl2; * u1 = RESO Ktot2 RHS0; *-----------------------------< extrait w et t fissure de u1 * (dans leur formalisme global = moyenne + saut) wsauv fsauv = EXTCRACK u1 crack dim1; *-----------------------------< recuperation champ + et - Wmoins Wplus Tmoins Tplus = SPLIT crack fsauv wsauv; 'SI' (Tdisplay.iteration); 'TITRE' 'apres etape GLOBALE INITIALE'; PLOTITER Tplus Tmoins Wplus Wmoins crack; 'FINSI'; *-----------------------------< Projection dans la base locale xxx_b = xxx_before (local step) TlocP_b TlocM_b WlocP_b WlocM_b = GLO2LOC cht1 chn Tplus Tmoins Wplus Wmoins cht2; 'SINON' ; TlocP_b TlocM_b WlocP_b WlocM_b = GLO2LOC cht1 chn Tplus Tmoins Wplus Wmoins ; 'FINSI'; *-----------------------------< Etape locale pour la première itération TlocP TlocM WlocP WlocM = LOCSTEPI k f_crack crack TlocP_b TlocM_b WlocP_b WlocM_b; *-----------------------------< Projection des w+- et t+- (i +1/2) dans le repère global WMglo WPglo TMglo TPglo = LOC2GLO cht1 chn TlocP TlocM WlocP WlocM crack cht2; 'SINON'; WMglo WPglo TMglo TPglo = LOC2GLO cht1 chn TlocP TlocM WlocP WlocM crack; 'FINSI'; 'FINSI'; *---> initialisation itérations it1 = 1 ; * utlise solutions locales au pas de temps précédent pour initialiser 'SI' (IdPasT > 1); * 'SI' (idpasT < 6); itmax = 10; 'FINSI'; *-----------------------------< Projection dans la base locale xxx_b = xxx_before (local step) TlocP_b TlocM_b WlocP_b WlocM_b = GLO2LOC cht1 chn TPglo TMglo WPglo WMglo cht2; 'SINON' ; TlocP_b TlocM_b WlocP_b WlocM_b = GLO2LOC cht1 chn TPglo TMglo WPglo WMglo ; 'FINSI'; TlocP = TlocP_b; TlocM = TlocM_b; WlocP = WlocP_b; WlocM = WlocM_b; 'FINSI'; * sauvegarde champ locaux après étape locale ttlocp = table; ttlocm = table; twlocp = table; twlocm = table; ttlocp.it1 = tlocp_b; ttlocm.it1 = tlocm_b; twlocp.it1 = wlocp_b; twlocm.it1 = wlocm_b; 'SI' (Tdisplay.iteration); 'TITRE' 'apres etape LOCALE'; PLOTITER TPglo TMglo WPglo WMglo crack; 'FINSI'; *-----------------------------< Recombine les champs Wglo Tglo = LIPSRECO WMglo WPglo TMglo TPglo; *-----------------------------< Mise à jour du second membre rhs1 = UPDATRHS Kuwt Tglo Wglo crack it1 rhs0; *-----------------------------< Etape globale u1 = 'RESOUD' ktot1 rhs1; *-----------------------------< extrait w et t fissure de u1 * (dans leur formalisme global = moyenne + saut) wfiss fcon = EXTCRACK u1 crack dim1; *-----------------------------< recuperation champ + et - Wmoins Wplus Tmoins Tplus = SPLIT Crack fcon wfiss; 'SI' (Tdisplay.iteration); 'TITRE' 'apres etape GLOBALE'; PLOTITER Tplus Tmoins Wplus Wmoins crack; 'FINSI'; *---< Projection dans la base locale TlocP_n TlocM_n WlocP_n WlocM_n = GLO2LOC cht1 chn Tplus Tmoins Wplus Wmoins cht2; 'SINON' ; TlocP_n TlocM_n WlocP_n WlocM_n = GLO2LOC cht1 chn Tplus Tmoins Wplus Wmoins ; 'FINSI'; 'REPETER' blo7 (Itmax); it1 = it1 '+' 1; TlocP_b = TlocP_n; TlocM_b = TlocM_n; WlocP_b = WlocP_n; WlocM_b = WlocM_n; *-----------------------------< Etape locale (_a = after ; _b = before) TlocP_a TlocM_a WlocP_a WlocM_a ouv1 = LOCSTEP1 k f_crack crack TlocP_b TlocM_b WlocP_b WlocM_b it1 (twlocp.(it1-1)) (twlocm.(it1-1)); 'SI' (ouv1 'ET' (it1 > 15)); 'QUITTER' blo7; 'FINSI'; *-----------------------------< Projection des des w+- et t+- (i +1/2) dans le repère global WMglo WPglo TMglo TPglo = LOC2GLO cht1 chn TlocP_a TlocM_a WlocP_a WlocM_a crack cht2; 'SINON'; WMglo WPglo TMglo TPglo = LOC2GLO cht1 chn TlocP_a TlocM_a WlocP_a WlocM_a crack; 'FINSI'; 'SI' (Tdisplay.iteration); 'TITRE' 'apres etape LOCALE'; PLOTITER TPglo TMglo WPglo WMglo crack; 'FINSI'; *-----------------------------< Recombine les champs Wglo Tglo = LIPSRECO WMglo WPglo TMglo TPglo; *-----------------------------< Mise à jour du second membre rhs1 = UPDATRHS Kuwt Tglo Wglo crack it1 rhs0; *-----------------------------< Etape globale u1 = 'RESOUD' ktot1 rhs1; *-----------------------------< extrait w et t fissure de u1 * (dans leur formalisme global = moyenne + saut) wfiss fcon = EXTCRACK u1 crack dim1; *-----------------------------< recuperation champ + et - Wmoins Wplus Tmoins Tplus = SPLIT crack fcon wfiss; 'SI' (Tdisplay.iteration); 'TITRE' 'apres etape GLOABLE'; PLOTITER Tplus Tmoins Wplus Wmoins crack; 'FINSI'; *-----------------------------< Projection dans la base locale TlocP_n TlocM_n WlocP_n WlocM_n = GLO2LOC cht1 chn Tplus Tmoins Wplus Wmoins cht2; 'SINON' ; TlocP_n TlocM_n WlocP_n WlocM_n = GLO2LOC cht1 chn Tplus Tmoins Wplus Wmoins ; 'FINSI'; * sauvegarge de l'histoire au cours des itérations * ttlocp.it1 = tlocp_n; * ttlocm.it1 = tlocm_n; * twlocp.it1 = wlocp_n; * twlocm.it1 = wlocm_n; ttlocp.it1 = tlocp_a; ttlocm.it1 = tlocm_a; twlocp.it1 = wlocp_a; twlocm.it1 = wlocm_a; 'SI' (it1 'EGA' 2); *-----------------------------< Calcul de l'indicateur d'erreur INITIAL TotalErr denN denT etaT etaN = ERRORINI TlocP_n TlocM_n WlocP_n WlocM_n TlocP TlocM WlocP WlocM k; 'SINON'; *-----------------------------< Calcul de l'indicateur d'erreur (dénominateur fixé) TotalErr etaT etaN = GETERROR TlocP_n TlocM_n WlocP_n WlocM_n TlocP_a TlocM_a WlocP_a WlocM_a denN denT k; lerror = lerror'ET'TotalErr;letaT=letaT'ET'etaT; letaN=letaN'ET'etaN; 'FINSI'; * 'MESSAGE' ''; * 'MESSAGE' 'denN =' denN; * 'MESSAGE' 'denT =' denT; * 'MESSAGE' ''; SI (TotalErr < eps1) ; MESS 'La precision demandee a ete atteinte'; QUITTER blo7 ; FINSI ; SI (TotalErr > 1000000) ; 'MESSAGE' ' '; 'MESSAGE' ' '; 'MESSAGE' ' '; MESS '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'; MESS '!!! !!!'; MESS '!!! !!!'; MESS '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'; 'MESSAGE' ' '; 'MESSAGE' ' '; 'MESSAGE' ' '; QUITTER blo7 ; FINSI ; MESS ' '; MESS ' '; MESS 'Erreur :' totalerr; 'FIN' blo7; * fin de la boucle sur les itération du solveur non-linéaire 'MESSAGE' 'fin du cas fermeture'; * 'FINSI'; * fin du cas fermeture * cas fissure complètement ouverte -> résoluion directe -> w = u sur la fissure et t = 0 'SI' ouv1; 'MESSAGE' ' ' ; 'MESSAGE' 'Fisssure COMPLETEMENT ouverte -> résolution DIRECTE'; 'MESSAGE' ' ' ; u2 = 'RESOUD' k1tot RHS0; 'SINON'; 'FINSI'; 'FINPROC' u2 TPglo TMglo WPglo WMglo lerror; *---------------------------------------------------------------------- * * SAVFIELD : sauvegarde les champs dans les tables * *---------------------------------------------------------------------- 'DEBPROC' SAVFIELD u1*CHPOINT tplus*CHPOINT tmoins*CHPOINT wplus*CHPOINT wmoins*CHPOINT it1*ENTIER; 'SI' (it1 'EGA' 0); ttplus = 'TABLE'; ttmoins = 'TABLE'; twplus = 'TABLE'; twmoins = 'TABLE'; tu = 'TABLE'; 'FINSI'; ttplus.it1 = tplus; ttmoins.it1 = tmoins; twplus.it1 = wplus; twmoins.it1 = wmoins; tu.it1 = u1; 'FINPROC' ttplus ttmoins twplus twmoins tu; *---------------------------------------------------------------------- * * EXTCRACK : extrait les inconnus relatives à la fissure de u1 * *---------------------------------------------------------------------- 'DEBPROC' EXTCRACK u1*CHPOINT meshint*MAILLAGE dim1*ENTIER; 'SI' (dim1 'EGA' 2); 'SINON'; 'FINSI'; 'FINPROC' wsauv fsauv; *---------------------------------------------------------------------- * * SPLIT : Différencie les champs locaux sur les lèvres de la fissure * à partir des inconnus XFEM issus de l'étape globale * *---------------------------------------------------------------------- 'DEBPROC' SPLIT MeshInt*MAILLAGE fint1*CHPOINT uint1*CHPOINT; 'SINON'; 'FINSI'; *-----------------------------< Déplacement usup = umoy '+' uH; uinf = umoy '-' uH; *-----------------------------< Effort tsup = tmoy '+' tH; tinf = tmoy '-' tH; 'FINPROC' uinf usup tinf tsup; *---------------------------------------------------------------------- * * LOCABA3D : Définit une lèvre plus et moins pour tous les éléments * d'interface à partir de la normale orienté dans le sens * de parcours des éléments d'interface * *---------------------------------------------------------------------- 'DEBPROC' LOCABA3D MeshInt*MAILLAGE mod_int*MMODEL; cht1 = 0. * chn; * creation des tangentes arbitrairement orienté à partir de la normale 'SI' ((('MAXIMUM' xt1) 'EGA' 0) 'ET' (('MAXIMUM' yt1) 'EGA' 0)); 'FINSI'; cht1 = xt1 '+' yt1 '+' zt1; * on norme cht1 cht1 = cht1 '/' (('PSCAL' cht1 cht1 m1 m1)**0.5); * creation de la dernière tangente comme résultat du produit vectoriel * pvec ne fonctionne pas avec les CHPO contrairement à ce qui est dit dans l'aide * on le fait à la main xt2 = (yn1 '*' zt1 myn1 mzt1 mxt2) '-' (zn1 '*' yt1 mzn1 myt1 mxt2); yt2 = (zn1 * xt1 mzn1 mxt1 myt2) '-' (xn1 * zt1 mxn1 mzt1 myt2); zt2 = (xn1 * yt1 mxn1 myt1 mzt2) '-' (yn1 * xt1 myn1 mxt1 mzt2); cht2 = xt2 '+' yt2 '+' zt2; 'FINPROC' chn cht1 cht2; *---------------------------------------------------------------------- * * LOCABASE : Définit une lèvre plus et moins pour tous les éléments * d'interface à partir de la normale orienté dans le sens * de parcours des éléments d'interface * utiliser chn = vsur modele_interface 'NORM'; pour la création des normales *---------------------------------------------------------------------- 'DEBPROC' LOCABASE MeshInt*MAILLAGE; * 'SI' (nbe1em '>EG' 6); 'SI' (nbe1em '>EG' 6E6); * Mise à zéro des normales pour le premier et dernier noeud chp3 = chp1 'ET' chp2; idnode = 2; 'REPETER' blo1 (nbn1 '-' 2); chp3 = chp3 'ET' chp1; idnode = idnode '+' 1; 'FIN' blo1; cht = chp3 * cht; chn = chp3 * chn; * Cas du premier et dernier noeud de l'interface * Premier noeud x1 = 'COORDONNEE' 1 po1; y1 = 'COORDONNEE' 2 po1; x2 = 'COORDONNEE' 1 po2; y2 = 'COORDONNEE' 2 po2; (y1 '+' ((y2 '-' y1) '/' 2)); Lseg = (((x1 '-' x2) '**' 2) '+' ((y1 '-' y2) '**' 2 )) '**' (0.5); a = (x2 '-' x1) '/' Lseg; b = (y2 '-' y1) '/' Lseg; b2 = -1. * b; cht = cht '+' chp1; chn = chn '+' chp2; * Dernier noeud x1 = 'COORDONNEE' 1 po1; y1 = 'COORDONNEE' 2 po1; x2 = 'COORDONNEE' 1 po2; y2 = 'COORDONNEE' 2 po2; (y1 '+' ((y2 '-' y1) '/' 2)); Lseg = (((x1 '-' x2) '**' 2) '+' ((y1 '-' y2) '**' 2 )) '**' (0.5); a = (x2 '-' x1) '/' Lseg; b = (y2 '-' y1) '/' Lseg; b2 = -1. * b; cht = cht '+' chp1; chn = chn '+' chp2; * cas avec moins de 5 éléments (@frenet ne fonctionne avec moins de 5 éléments) 'SINON'; idnode = 1; 'REPETER' blo1 (Nbnode); 'SI' ((idnode 'EGA' 1) 'OU' (idnode 'EGA' Nbnode)); 'SI' (idnode 'EGA' 1); 'SINON'; 'FINSI'; po1 = (ele1 point 1); x1 = 'COORDONNEE' 1 po1; y1 = 'COORDONNEE' 2 po1; po2 = (ele1 point 2); x2 = 'COORDONNEE' 1 po2; y2 = 'COORDONNEE' 2 po2; Lseg = (((x1 '-' x2) '**' 2) '+' ((y1 '-' y2) '**' 2 )) '**' (0.5); a = (x2 '-' x1) '/' Lseg; b = (y2 '-' y1) '/' Lseg; b2 = -1. * b; 'SI' (idnode 'EGA' 1); 'SINON'; 'FINSI'; 'SINON'; po1 = (MeshInt point (idnode '-' 1)); x1 = 'COORDONNEE' 1 po1; y1 = 'COORDONNEE' 2 po1; po2 = (MeshInt point idnode); x2 = 'COORDONNEE' 1 po2; y2 = 'COORDONNEE' 2 po2; po3 = (MeshInt point (idnode '+' 1)); x3 = 'COORDONNEE' 1 po3; y3 = 'COORDONNEE' 2 po3; Lseg1 = (((x1 '-' x2) '**' 2) '+' ((y1 '-' y2) '**' 2 )) '**' (0.5); Lseg2 = (((x3 '-' x2) '**' 2) '+' ((y3 '-' y2) '**' 2 )) '**' (0.5); a1 = (x2 '-' x1) '/' Lseg1; b1 = (y2 '-' y1) '/' Lseg1; a2 = (x3 '-' x2) '/' Lseg2; b2 = (y3 '-' y2) '/' Lseg2; Lseg3 = (((a1 '+' a2)**2) '+' ((b1 '+' b2)**2)) '**' (0.5); ((b1 '+' b2) '/' Lseg3) ; 'NY ' ((a1 + a2) '/' Lseg3); 'FINSI' ; cht = cht '+' chp1; chn = chn '+' chp2; idnode = idnode '+' 1; 'FIN' blo1; 'FINSI'; 'FINPROC' chn cht; *---------------------------------------------------------------------- * * GLO2LOC : Projection des champs de l'interface du repère global * vers le repère local * *---------------------------------------------------------------------- 'DEBPROC' GLO2LOC cht1*CHPOINT chn*CHPOINT Tplus*CHPOINT Tmoins*CHPOINT Wplus*CHPOINT Wmoins*CHPOINT cht2/CHPOINT; 'SI' (dim1 'EGA' 3); 'FINSI' ; TlocP = a '+' b; TlocM = a '+' b; WlocP = a '+' b; WlocM = a '+' b; TlocP = TlocP '+' c; TlocM = TlocM '+' c; WlocP = WlocP '+' c; WlocM = WlocM '+' c; 'FINSI'; 'FINPROC' TlocP TlocM WlocP WlocM; *---------------------------------------------------------------------- * * LOCSTEP1 : Etape locale pour le premier par de temps * *---------------------------------------------------------------------- 'DEBPROC' LOCSTEP1 Klatin*FLOTTANT f_crack*FLOTTANT MeshInt*MAILLAGE TlocP*CHPOINT TlocM*CHPOINT WlocP*CHPOINT WlocM*CHPOINT it1*ENTIER WlocPOld*CHPOINT WlocMOld*CHPOINT; meshloc = 'CHANGER' POI1 meshint; wdiffold= wlocmold '-' wlocpold; wdiff= wlocm '-' wlocp; tdiff= tlocm '-' tlocp; k_tan = klatin; k_nor = klatin; * initialisation booleen pour détecter fissure complètement ouverte ouv1 = vrai; TMta2 = 0. * TlocMta2;TPta2 = 0. * TlocPta2; WMta2 = 0. * WlocMta2;WPta2 = 0. * WlocPta2; B3D = vrai; 'SINON'; B3D = faux; 'FINSI'; * * Cacul des indicateur de contact et de frottement initial * btrolle le 5 novembre pour coller avec ceux qui est écrit dans NewlocalStepOnInterface dans ELFE (0.5 * K_tan * w1old); 'SI' B3D; (0.5 * K_tan * w2old); GliIni = ((gliIni1**2)'+'(gliIni2**2))'**'(0.5); 'SINON'; GliIni = GliIni1; 'FINSI' ; * seuil pour le glissement GSeuil = f_crack * ('ABS' (K_nor * ConIni)); * Initialisation des champs correspondant à l'itération i + 1/2 TMnor = 0. * TlocMnor; TMta1 = 0. * TlocMta1; TPnor = 0. * TlocMnor; TPta1 = 0. * TlocPta1; WMnor = 0. * WlocMnor; WMta1 = 0. * WlocMta1; WPnor = 0. * WlocMnor; WPta1 = 0. * WlocPta1; * initialisation des compteurs Ncon = 0; Nouv = 0; * * Loi de comportement local i --> i + 1/2 avec Contact with friction (coulomb) *--- idnode = 1; * boucle sur les noeuds de l'interface 'REPETER' blo1 (Nbn1); ValCI = 'EXTRAIRE' ConIni 'SCAL' ptemp; * Valeur à l'itération i wpn = 'EXTRAIRE' WlocPnor 'SCAL' ptemp; wmn = 'EXTRAIRE' WlocMnor 'SCAL' ptemp; wpt1 = 'EXTRAIRE' WlocPta1 'SCAL' ptemp; wmt1 = 'EXTRAIRE' WlocMta1 'SCAL' ptemp; tpn = 'EXTRAIRE' TlocPnor 'SCAL' ptemp; tmn = 'EXTRAIRE' TlocMnor 'SCAL' ptemp; tpt1 = 'EXTRAIRE' TlocPta1 'SCAL' ptemp; tmt1 = 'EXTRAIRE' TlocMta1 'SCAL' ptemp; wpo1 = 'EXTRAIRE' wp1old 'SCAL' ptemp; wmo1 = 'EXTRAIRE' wm1old 'SCAL' ptemp; 'SI' B3D; tpt2 = 'EXTRAIRE' TlocPta2 'SCAL' ptemp; tmt2 = 'EXTRAIRE' TlocMta2 'SCAL' ptemp; wpt2 = 'EXTRAIRE' WlocPta2 'SCAL' ptemp; wmt2 = 'EXTRAIRE' WlocMta2 'SCAL' ptemp; wpo2 = 'EXTRAIRE' wp2old 'SCAL' ptemp; wmo2 = 'EXTRAIRE' wm2old 'SCAL' ptemp; 'FINSI'; * Si ouverture : >EG 0. pour le cas ou on bloque les sauts passe par là ;-) 'SI' (ValCI '>EG' 0.); Nouv = Nouv '+' 1; * 'MESSAGE' '---> Ouvert'; * calcul des nouveaux déplacemtents (t= 0) WPnor = WPnor '+' chp1; WMnor = WMnor '+' chp2; WPta1 = WPta1 '+' chp3; WMta1 = WMta1 '+' chp4; 'SI' B3D; WPta2 = WPta2 '+' chp5; WMta2 = WMta2 '+' chp6; 'FINSI'; * Si contact 'SINON'; Ncon = Ncon '+' 1; * Pas de test d'ouverture pour le premier et le dernier noeud.. il faudrait le faire juste pour le ou les fronts pour faire les choses correctements... 'SI' ((idnode > 1) 'ET' (idnode < Nbn1)); ouv1 = faux; 'FINSI'; * problème normal * w ((tpn '+' tmn) '/' K_nor))); WPnor = WPnor '+' chp1; WMnor = WMnor '+' chp1; * t TPnor = TPnor '+' chp2; TMnor = TMnor '-' chp2; * extrait les valeurs pour tester adhérence ou glissement ValGI = 'EXTRAIRE' GliIni 'SCAL' ptemp; G = 'EXTRAIRE' GSeuil 'SCAL' ptemp; ValGI1 = 'EXTRAIRE' GliIni1 'SCAL' ptemp; si B3D; ValGI2 = 'EXTRAIRE' GliIni2 'SCAL' ptemp; 'FINSI'; * Adhérence 'SI' (('ABS' ValGI) '<' G); * 'MESSAGE' '---> ADHERENCE'; * 'MESSAGE' 'ValGI1 = ' ValGI1 'G =' G 'ValCI =' ValCI; * t TPta1 = TPta1 '+' chp31; TMta1 = TMta1 '-' chp31; * w tpt1) '/' K_tan)); 'SI' B3D; * t TPta2 = TPta2 '+' chp32; TMta2 = TMta2 '-' chp32; * w tpt2) '/' K_tan)); 'FINSI'; * Glissement 'SINON'; * 'LISTE' ptemp; * 'MESSAGE' '---> Glissement'; * 'MESSAGE' 'ValGI = ' ValGI 'G =' G 'ValCI =' ValCI; * t 'SI' (valGI 'EGA' 0.); * chp31 = 'MANUEL' chpo ptemp 'SCAL' 0.; 'SINON' ; * chp31 = 'MANUEL' chpo ptemp 'SCAL'(G*valGI1'/'(2*('ABS' valGI))); 'FINSI'; TPta1 = TPta1 '+' chp31; TMta1 = TMta1 '-' chp31; * w * newlocalstep oninterface chp41 = 'MANUEL' chpo ptemp 'SCAL' (wpt1 '-' wpo1 '+'( ( (G*valGI1'/'('ABS' valGI)) '-' tpt1) '/' K_tan)); chp51 = 'MANUEL' chpo ptemp 'SCAL' (wmt1 '-' wmo1 '+'(((-1.*G*valGI1'/'('ABS' valGI))'-'tmt1) '/' K_tan)); 'SI' B3D; 'SI' (valGI 'EGA' 0.); 'SINON' ; 'FINSI'; chp42 = 'MANUEL' chpo ptemp 'SCAL' ((wpt2 '- 'wpo2) '+' ( ( (G*valGI2'/'('ABS' valGI))'-'tpt2)'/'K_tan)); chp52 = 'MANUEL' chpo ptemp 'SCAL' ((wmt2 '-' wmo2)'+'(((-1.*G*valGI2'/'('ABS' valGI))'-'tmt2)'/'K_tan)); TPta2 = TPta2 '+' chp32; TMta2 = TMta2 '-' chp32; 'FINSI'; 'FINSI'; 'FINSI'; idnode = idnode '+' 1; 'FIN' blo1; TlocP_a = TPta1 'ET' TPnor; TlocM_a = TMta1 'ET' TMnor; WlocP_a = WPta1 'ET' WPnor; WlocM_a = WMta1 'ET' WMnor; 'SI' B3D; TlocP_a = TlocP_a 'ET' Tpta2; TlocM_a = TlocM_a 'ET' Tmta2; WlocP_a = WlocP_a 'ET' WPta2; WlocM_a = WlocM_a 'ET' WPta2; 'FINSI' ; 'MESSAGE' ' '; 'MESSAGE' 'Nombre de noeud en contact = ' Ncon; 'MESSAGE' 'Nombre de noeud ouvert = ' Nouv; 'MESSAGE' ' '; 'FINPROC' TlocP_a TlocM_a WlocP_a WlocM_a ouv1; *---------------------------------------------------------------------- * * LOC2GLO : Projetion des champs à l'interface du repère local vers * le repère global * *---------------------------------------------------------------------- 'DEBPROC' LOC2GLO cht1*CHPOINT chn*CHPOINT TlocP*CHPOINT TlocM*CHPOINT WlocP*CHPOINT WlocM*CHPOINT MeshInt*MAILLAGE cht2/CHPOINT; B3D = vrai; 'SINON'; B3D = faux; 'FINSI'; chx = a '+' b; 'SI' B3D; chx = chx '+' c; 'FINSI'; chy = a '+' b; 'SI' B3D; chy = chy '+' c; chz = a '+' b '+' c; 'FINSI'; TPglo = b '+' a; TMglo = b '+' a; WPglo = b '+' a; WMglo = b '+'a; 'SI' B3D; TPglo = TPglo '+' c; TMglo = TMglo '+' c; WPglo = WPglo '+' c; WMglo = WMglo '+' c; 'FINSI'; 'FINPROC' WMglo WPglo TMglo TPglo; *---------------------------------------------------------------------- * * LIPSRECO : Recombine les champs locaux des 2 lèvres de la fissure * issus de l'étape locale * sur les maillages de l'étape globale en différenciant * et en calculant les inconnus XFEM correspondantes * *---------------------------------------------------------------------- 'DEBPROC' LIPSRECO Wmoins*CHPOINT Wplus*CHPOINT Tmoins*CHPOINT Tplus*CHPOINT; Tmoy = (Tmoins '+' Tplus) '/' 2; Wmoy = (Wmoins '+' Wplus) '/' 2; 'SINON'; 'FINSI'; Tglo = Tmoy '+' Tsaut; Wglo = Wmoy '+' Wsaut; 'FINPROC' Wglo Tglo; *---------------------------------------------------------------------- * * UPDATRHS : Mise à jour du second membre du sytème linéaire * *---------------------------------------------------------------------- 'DEBPROC' UPDATRHS Kuwt*RIGIDITE Tglo*CHPOINT Wglo*CHPOINT meshint*MAILLAGE it1*ENTIER f1*CHPOINT; f5 = f3 '+' f2 '+' f4; RHS1 = f1 '+' f5; 'FINPROC' rhs1; *---------------------------------------------------------------------- * * ERRORINI : Calcul de l'indicateur d'erreur INITIALE * basé sur les quantités w et t sur l'interface * dans les bases locales * entre la solition i + 1/2 et i + 1 * fixe les dénominateurs pour les appels suivant -> GETERROR *---------------------------------------------------------------------- 'DEBPROC' ERRORINI TlocP_n*CHPOINT TlocM_n*CHPOINT WlocP_n*CHPOINT WlocM_n*CHPOINT TlocP*CHPOINT TlocM*CHPOINT WlocP*CHPOINT WlocM*CHPOINT Klatin*FLOTTANT; *-> i + 1/2 : TlocP TlocM WlocP WlocM *-> i + 1 : TlocP_n TlocM_n WlocP_n WlocM_n ( _n = new ) * ---> NUMERATEUR * problème normal numN = 'MAXIMUM' ( ((((TPnor_n '-' TPnor)**2)'+' ((TMnor_n '-' TMnor)**2)) '/' Klatin) '+' ((((WPnor_n '-' WPnor)**2)'+' ((WMnor_n '-' WMnor)**2)) '*' Klatin)); * problème tangentiel numT= 'MAXIMUM' ( ((((TPta1_n '-' TPta1)**2)'+' ((TMta1_n '-' TMta1)**2)) '/' Klatin) '+' ((((WPta1_n '-' WPta1)**2)'+' ((WMta1_n '-' WMta1)**2)) '*' Klatin)); * ---> DENOMINATEUR * problème normal SNor_n = (((TPnor_n * TPnor_n) '+' (TMnor_n * TMnor_n) ) '/' Klatin) '+' (Klatin * ((WPnor_n * WPnor_n) '+' (WMnor_n * WMnor_n))); SNor = (((TPnor * TPnor) '+' (TMnor * TMnor) ) '/' Klatin) '+' (Klatin * ((WPnor * WPnor) '+' (WMnor * WMnor))); denN = ('MAXIMUM' SNor_n ) '+' ('MAXIMUM' SNor ); * problème tangentiel STa1_n = (((TPta1_n * TPta1_n) '+' (TMta1_n * TMta1_n) ) '/' Klatin) '+' (Klatin * ((WPta1_n * WPta1_n) '+' (WMta1_n * WMta1_n))); STa1 = (((TPta1 * TPta1) '+' (TMta1 * TMta1) ) '/' Klatin) '+' (Klatin * ((WPta1 * WPta1) '+' (WMta1 * WMta1))); denT = ('MAXIMUM' STa1_n ) '+' ('MAXIMUM' STa1 ); * ---> ERREUR *-> erreur normale etaN = numN '/' denN; *-> erreur tangentielle etaT = numT '/' denT; *-> erreur totale : ComputeLatinErrorNew dans ELFE-3D totalErr = ((etaN) '+' (etaT )) '**' 0.5; *-> erreur totale : publi récente (= manuscrit Epierres) *ler1 = 'PROG' (etaT**0.5) (etaN**0.5); *totalerr = 'MAXIMUM' ler1; * 'SI' (etaT > etaN); * totalErr = etaT; * 'SINON'; * totalErr = etaN * 'FINSI'; 'FINPROC' totalErr (denN) (denT) (etaT**0.5) (etaN**0.5); *---------------------------------------------------------------------- * * GETERROR : Calcul de l'indicateur d'erreur * basé sur les quantités w et t sur l'interface * dans les bases locales * entre la solition i + 1/2 et i + 1 * Les DENOMINATEURS DOIVENT ETRE FOURNIT EN ENTREE ! *---------------------------------------------------------------------- 'DEBPROC' GETERROR TlocP_n*CHPOINT TlocM_n*CHPOINT WlocP_n*CHPOINT WlocM_n*CHPOINT TlocP*CHPOINT TlocM*CHPOINT WlocP*CHPOINT WlocM*CHPOINT den_N*FLOTTANT den_T*FLOTTANT Klatin*FLOTTANT ; * exclusion des points anciennement et actuellement extrémités * de la fissure pour le calcul de l'erreur *-> i + 1/2 : TlocP TlocM WlocP WlocM *-> i + 1 : TlocP_n TlocM_n WlocP_n WlocM_n ( _n = new ) * ---> NUMERATEUR * problème normal numN = 'MAXIMUM' ( ((((TPnor_n '-' TPnor)**2)'+' ((TMnor_n '-' TMnor)**2)) '/' Klatin) '+' ((((WPnor_n '-' WPnor)**2)'+' ((WMnor_n '-' WMnor)**2)) '*' Klatin)); * problème tangentiel numT= 'MAXIMUM' ( ((((TPta1_n '-' TPta1)**2)'+' ((TMta1_n '-' TMta1)**2)) '/' Klatin) '+' ((((WPta1_n '-' WPta1)**2)'+' ((WMta1_n '-' WMta1)**2)) '*' Klatin)); * ---> ERREUR *-> erreur normale etaN = numN '/' den_N; *-> erreur tangentielle etaT = numT '/' den_T; *-> erreur totale : ComputeLatinErrorNew dans ELFE-3D totalErr = ((etaN) '+' (etaT )) '**' 0.5; *-> erreur totale : publi récente (= manuscrit Epierres) *ler1 = 'PROG' (etaT**0.5) (etaN**0.5); *totalerr = ('MAXIMUM' ler1)'**'(0.5); *'SI' (etaT > etaN); * totalErr = etaT; * 'SINON'; * totalErr = etaN * 'FINSI'; 'FINPROC' totalerr (etaT**0.5) (etaN**0.5); *---------------------------------------------------------------------- * * LOCSTEPI : Etape locale pour le premier par de temps * *---------------------------------------------------------------------- 'DEBPROC' LOCSTEPI Klatin*FLOTTANT f_crack*FLOTTANT MeshInt*MAILLAGE TlocP*CHPOINT TlocM*CHPOINT WlocP*CHPOINT WlocM*CHPOINT; meshloc = 'CHANGER' POI1 meshint; wdiff= wlocm '-' wlocp; tdiff= tlocm '-' tlocp; k_tan = klatin; k_nor = klatin; TlocP = 1.*TlocP; TlocM = 1.*TlocM; WlocP = 1.*WlocP; WlocM = 1.*WlocM; * initialisation booleen pour détecter fissure complètement ouverte ouv1 = vrai; TMta2 = 0. * TlocMta2;TPta2 = 0. * TlocPta2; WMta2 = 0. * WlocMta2;WPta2 = 0. * WlocPta2; B3D = vrai; 'SINON'; B3D = faux; 'FINSI'; * * Cacul des indicateur de contact et de frottement initial 'SI' B3D; GliIni = ((gliIni1**2)'+'(gliIni2**2))'**'(0.5); 'SINON'; GliIni = GliIni1; 'FINSI' ; * seuil pour le glissement GSeuil = f_crack * ('ABS' (K_nor * ConIni)); * Initialisation des champs correspondant à l'itération i + 1/2 TMnor = 0. * TlocMnor; TMta1 = 0. * TlocMta1; TPnor = 0. * TlocMnor; TPta1 = 0. * TlocPta1; WMnor = 0. * WlocMnor; WMta1 = 0. * WlocMta1; WPnor = 0. * WlocMnor; WPta1 = 0. * WlocPta1; * initialisation des compteurs Ncon = 0; Nouv = 0; * * Loi de comportement local i --> i + 1/2 avec Contact with friction (coulomb) *--- idnode = 0; 'REPETER' blo1 (Nbn1); idnode = idnode '+' 1; ValCI = 'EXTRAIRE' ConIni 'SCAL' ptemp; * Valeur à l'itération i wpn = 'EXTRAIRE' WlocPnor 'SCAL' ptemp; wmn = 'EXTRAIRE' WlocMnor 'SCAL' ptemp; wpt1 = 'EXTRAIRE' WlocPta1 'SCAL' ptemp; wmt1 = 'EXTRAIRE' WlocMta1 'SCAL' ptemp; tpn = 'EXTRAIRE' TlocPnor 'SCAL' ptemp; tmn = 'EXTRAIRE' TlocMnor 'SCAL' ptemp; tpt1 = 'EXTRAIRE' TlocPta1 'SCAL' ptemp; tmt1 = 'EXTRAIRE' TlocMta1 'SCAL' ptemp; 'SI' B3D; tpt2 = 'EXTRAIRE' TlocPta2 'SCAL' ptemp; tmt2 = 'EXTRAIRE' TlocMta2 'SCAL' ptemp; wpt2 = 'EXTRAIRE' WlocPta2 'SCAL' ptemp; wmt2 = 'EXTRAIRE' WlocMta2 'SCAL' ptemp; 'FINSI'; * Si ouverture : >EG 0. pour le cas ou on bloque les sauts passe par là ;-) 'SI' (ValCI '>EG' 0.); * 'MESSAGE' 'OUVERTURE pour le noeud' idnode; Nouv = Nouv '+' 1; * calcul des noueaux déplacemtents (t= 0) WPnor = WPnor '+' chp1; WMnor = WMnor '+' chp2; WPta1 = WPta1 '+' chp3; WMta1 = WMta1 '+' chp4; 'SI' B3D; WPta2 = WPta2 '+' chp5; WMta2 = WMta2 '+' chp6; 'FINSI'; * Si contact 'SINON'; Ncon = Ncon '+' 1; * 'MESSAGE' 'CONTACT pour le noeud' idnode; 'SI' ((idnode > 1) 'ET' (idnode < Nbn1)); ouv1 = faux; 'FINSI'; * problème normal * w ((tpn '+' tmn) '/' K_nor))); WPnor = WPnor '+' chp1; WMnor = WMnor '+' chp1; * t TPnor = TPnor '+' chp2; TMnor = TMnor '-' chp2; * extraction seuil adhérence ValGI = 'EXTRAIRE' GliIni 'SCAL' ptemp; G = 'EXTRAIRE' GSeuil 'SCAL' ptemp; ValGI1 = 'EXTRAIRE' GliIni1 'SCAL' ptemp; si B3D; ValGI2 = 'EXTRAIRE' GliIni2 'SCAL' ptemp; 'FINSI'; * Adhérence 'SI' (('ABS' ValGI) '<' G); * t TPta1 = TPta1 '+' chp31; TMta1 = TMta1 '-' chp31; * w WPta1 = WPta1 '+' chp41; WMta1 = WMta1 '+' chp41; 'SI' B3D; TPta2 = TPta2 '+' chp32; TMta2 = TMta2 '-' chp32; WPta2 = WPta2 '+' chp42; WMta2 = WMta2 '+' chp42; 'FINSI'; * Glissement 'SINON'; * 'LISTE' ptemp; * 'MESSAGE' '---> Glissement'; * t 'SI' (valGI 'EGA' 0.); * chp31 = 'MANUEL' chpo ptemp 'SCAL' 0.; 'SINON' ; 'FINSI'; TPta1 = TPta1 '+' chp31; TMta1 = TMta1 '-' chp31; * w chp41 = 'MANUEL' chpo ptemp 'SCAL' (wpt1 '+'( ( (G*valGI1'/'('ABS' valGI)) '-' tpt1) '/' K_tan)); chp51 = 'MANUEL' chpo ptemp 'SCAL' (wmt1 '+'(((-1.*G*valGI1'/'('ABS' valGI))'-'tmt1) '/' K_tan)); WPta1 = WPta1 '+' chp41; WMta1 = WMta1 '+' chp51; 'SI' B3D; 'SI' (valGI 'EGA' 0.); 'SINON' ; 'FINSI'; chp42 = 'MANUEL' chpo ptemp 'SCAL' (wpt2 '+'( ( (G*valGI2'/'('ABS' valGI)) '-' tpt2) '/' K_tan)); chp52 = 'MANUEL' chpo ptemp 'SCAL' (wmt2 '+'(((-1.*G*valGI2'/'('ABS' valGI))'-'tmt2) '/' K_tan)); TPta2 = TPta2 '+' chp32; TMta2 = TMta2 '-' chp32; WPta2 = WPta2 '+' chp42; WMta2 = WMta2 '+' chp52; 'FINSI'; 'FINSI'; 'FINSI'; 'FIN' blo1; TlocP_a = TPta1 'ET' TPnor; TlocM_a = TMta1 'ET' TMnor; WlocP_a = WPta1 'ET' WPnor; WlocM_a = WMta1 'ET' WMnor; 'SI' B3D; TlocP_a = TlocP_a 'ET' Tpta2; TlocM_a = TlocM_a 'ET' Tmta2; WlocP_a = WlocP_a 'ET' WPta2; WlocM_a = WlocM_a 'ET' WPta2; 'FINSI' ; 'MESSAGE' ' '; 'MESSAGE' 'Nombre de noeud en contact = ' Ncon; 'MESSAGE' 'Nombre de noeud ouvert = ' Nouv; 'MESSAGE' ' '; 'FINPROC' TlocP_a TlocM_a WlocP_a WlocM_a; ************************************************************************ * AFFICHAGE * ************************************************************************ GRAPH = vrai; COMPLET = faux; * opti debug 1; * Gestion de l'affichage au cours d'un calcul* * Affichage des levels set en début de cycle Tdisplay . levelset = GRAPH; * Affichage du repère locale Tdisplay . rep_local = GRAPH; * Affichage des déplacement, déformés, contraintes, au cours de itérations de la LATIN * (pour chaque pas de temps !) Tdisplay . Iteration = faux; * Affichage des pressions de contact sur déforméee locale Tdisplay . PasTemps = GRAPH; * Affichage de la convergence de la LATIN * (pour chaque pas de temps !) Tdisplay . convergence = GRAPH; * Affichage des FICS Tdisplay . fics = GRAPH; * Affichage du champ de déplacement global Tdisplay . dep_global = vrai; ************************************************************************ * PARAMETRES DU CALCUL * ************************************************************************ dim1 = 2; *----------------- < Précision pour solveur non-linéaire si COMPLET; * eps1 = 1E-6; eps1 = 1E-8; sino; eps1 = 1E-3; fins; *----------------- < Nombre d'itéraion max Itmax = 1000; *----------------- < Materiau Ey1 = 2.06E11; nu1 = 0.3; rho1 = 7800.0; *----------------- < Frottement des levres de la Fissure f_crack = 0.1; *----------------- < Chargement f_ext = -1.0E9; *----------------- < facteur d'amplification pour les tracés * effort * fac1 = 0; fac1 = 0.05 /(('ABS' f_ext)); * déformée fac2 = 0.01*('ABS' (Ey1 '/' f_ext)); *----------------- < Paramètre géométrique Hammouda L = 0.4; W = 0.2; a = 0.02; beta = 45.; *----------------- < Maillage structure N1 = 10; * taille élément den4 = a '/' N1; *----------------- < Taille élément interface den3 = den4 '/' 1; ************************************************************************ * MAILLAGE * ************************************************************************ *----------------- < Maillage structure 1 *----< surface fine de propagation p2 = (W '+' (2 * a)) (W '+' (2*a)); p3 = (W '+' (2 * a)) (W '-' (2*a)); p4 = (W '-' (2 * a)) (W '+' (2*a)); p5 = (W '-' (2 * a)) (W '-' (2*a)); l5 = 'DROIT' p2 p3 'DINI' den4 'DFIN' den4; l6 = 'DROIT' p3 p5 'DINI' den4 'DFIN' den4; l7 = 'DROIT' p5 p4 'DINI' den4 'DFIN' den4; l8 = 'DROIT' p4 p2 'DINI' den4 'DFIN' den4; lfi1 = l5 'ET' l6 'ET' l7 'ET' l8; s2 = 'DALLER' l5 l6 l7 l8 'PLAN'; *----< contour grossier p0 = 0. 0.; p1 = (2*W) 0.; p9 = (2*W) L; p8 = 0. L; l1 = 'DROIT' p0 N1 p1 ; l2 = 'DROIT' p1 (N1) p9 ; l3 = 'DROIT' p9 N1 p8 ; l4 = 'DROIT' p8 (N1) p0 ; lco1 = l1 'ET' l2 'ET' l3 'ET' l4; lto1 = lco1 'ET' lfi1; s1 = 'SURFACE' lto1 'PLANE'; linbas1 = l1; linhaut = l3; ling = l2; lind = l4; s3 = s1 'ET' s2; *----------------- < Maillage interface (fissure) (si 1 seule front, * définir tip1 comme le front) tip2 = (W '+' (a * ('COS' beta))) (W '+' (a * ('SIN' beta))); tip1 = (W '-' (a * ('COS' beta))) (W '-' (a * ('SIN' beta))); crack = 'DROIT' tip2 tip1 'DINI' den3 'DFIN' den3 'COULEUR' viol; stot1 = s3 'ET' crack; * Creation des Levels Sets *--------------- psi0 phi0 = PSIPHI s2 crack 'DEUX' tip1 tip2; si( Tdisplay.levelset); finsi; ************************************************************************ * MODELE, ENRICHISSEMENT, MATÉRIAU, MATRICE, RELATIONS * ************************************************************************ *----------------- < Modele * Il faut d'abord donner le modèle X-FEM pour qu'il soit défini en * premier dans le modèle totale mod1 = mod1b 'ET' mod1a; *----------------- < Enrichissement * Che1X . 0 = TRIE mod1 psi0 phi0 saut; * constructionsion des blocages des ddl X-fem non actifs dans * les éléments de transition. *----------------- < Matériau *----------------- < Latin Klatin = 1*(Ey1/('MESURE' crack)) ; *----------------- < Stabilisation xi = 1*(-1) '/' (Klatin); *'OPTION' donn 5; *-----------------------------< Creation des differentes matrices blocs * du système * multiplication par facteur 2 à cause de l'utilisation d'enrichissement * saut sur l'interface kuwt = 2 * kuwt; *-----------------------------< Rigidité formulation XFEM 1 champ k1 = 'RIGIDITE' mod1 mat1; *-----------------------------< Condition aux limites *-----------------------------< Matrice globale 1 champ K1tot = k1 'ET' cl1 'ET' (Rel1X.0); *-----------------------------< Matrice globale 3 champs Ktot1 = K1tot 'ET' Kuwt; *-----------------------------< Effort imposé *-----------------------------< Construction repère local mod_int = 'MODELISER' crack 'MECANIQUE' 'ZCO2'; chn cht1 = LOCABASE crack ; chn = -1.*chn; cht1 = -1.*cht1; *-----------------------------< Affichage repère local 'SI' Tdisplay.rep_local; 'FINSI'; ************************************************************************ * CALCUL * ************************************************************************ *-----------------------------< Calcul avec un unique pas de temps, * seule la solution du problème de rupture nous interresse ici IdPasT = 1; *-----------------------------< Resolution 'SI' (IdPasT 'EGA' 1); u0 Tplus Tmoins Wplus Wmoins err = LATIN Tdisplay crack K1tot mod1 RHS0 IdPasT ktot1 kuwt cht1 chn ItMax eps1 klatin f_crack s3; 'SINON' ; u0 Tplus Tmoins Wplus Wmoins err = LATIN Tdisplay crack K1tot mod1 RHS0 IdPasT ktot1 kuwt cht1 chn ItMax eps1 klatin f_crack v1 cht2 Tplus Tmoins Wplus Wmoins; 'FINSI'; ************************************************************************ * POST-TRAITEMENTS * ************************************************************************ *-----------------------------< Affichage de la pressions de contact * sur la déformée 'SI'(Tdisplay.PasTemps); def3 = def1 'ET' def2 'ET' def0; 'TRACER' def3 TITR 'deformee'; 'FINSI'; *-----------------------------< Convergence 'SI' (Tdisplay.convergence); * Réglage de la fenêtre de tracé min1 = ('MINIMUM' err); * Erreur DESS evo1 'GRIL' 'POIN' 'GRIS' 'LOGX' 'XBOR' 1 abs2 'TITX' 'Iterations' POSX CENT 'LOGY' 'YBOR' min1 max1 'TITY' 'Erreur' POSY CENT TITR 'Convergence de la LATIN'; 'FINSI'; *-----------------------------< Ajout des termes de contacts dans le * calcul des FICs wsaut = wplus '-' wmoins; *-----------------------------< Calcul des FICs : front 1 'MESSAGE' ' ';'MESSAGE' '----------------------------'; 'MESSAGE' 'Calcul des FICs : front 1'; 'MESSAGE' '----------------------------';'MESSAGE' ' '; KTAB1 . 'PSI' = psi0; KTAB1 . 'PHI' = phi0; KTAB1 . 'FRONT_FISSURE' = tip1; KTAB1 . 'MODELE' = mod1; KTAB1 . 'CARACTERISTIQUES' = mat1; KTAB1 . 'SOLUTION_RESO' = u0; KTAB1 . 'CHARGEMENTS_MECANIQUES' = RHS0; KTAB1 . 'COUCHE' = 2; KTAB1 . 'MODELE_FISSURE' = mod_int; KTAB1 . 'DEPLACEMENT_FISSURE' = wsaut; KTAB1 . 'PRESSION_FISSURE' = TPglo ; G_THETA KTAB1; K1G_1 = KTAB1 . 'RESULTATS' . 'I'; K2G_1 = KTAB1 . 'RESULTATS' . 'II'; GK1K2_1 = Ey1 * ((K1G_1**2) + (K2G_1**2)) ; * * pas de valeur négative pour KI * 'SI' (K1G_1 < 0.); * K1G_1 = 0.; * 'FINSI' ; *-----------------------------< Calcul des FICs : front 2 'MESSAGE' ' ';'MESSAGE' '----------------------------'; 'MESSAGE' 'Calcul des FICs : front 2'; 'MESSAGE' '----------------------------';'MESSAGE' ' '; KTAB2 . 'PSI' = psi0; KTAB2 . 'PHI' = phi0; KTAB2 . 'FRONT_FISSURE' = tip2; KTAB2 . 'MODELE' = mod1; KTAB2 . 'CARACTERISTIQUES' = mat1; KTAB2 . 'SOLUTION_RESO' = u0; KTAB2 . 'CHARGEMENTS_MECANIQUES' = RHS0; KTAB2 . 'COUCHE' = 2; KTAB2 . 'MODELE_FISSURE' = mod_int; KTAB2 . 'DEPLACEMENT_FISSURE' = wsaut; KTAB2 . 'PRESSION_FISSURE' = TPglo ; G_THETA KTAB2; K1G_2 = KTAB2 . 'RESULTATS' . 'I'; K2G_2 = KTAB2 . 'RESULTATS' . 'II'; GK1K2_2 = Ey1 * ((K1G_2**2) + (K2G_2**2)) ; * * pas de valeur négative pour KI * 'SI' (K1G_2 < 0.); * K1G_2 = 0.; * 'FINSI' ; 'SI' (Tdisplay.fics); * Affichage de la nouvelle fissure 'MESSAGE' ' ';'MESSAGE' ' ';'MESSAGE' ' '; 'MESSAGE' '----------------------------'; 'MESSAGE' 'K1 front1 = ' K1G_1; 'MESSAGE' 'K2 front1 = ' K2G_1; 'MESSAGE' '----------------------------'; 'MESSAGE' ' ';'MESSAGE' ' ';'MESSAGE' ' '; 'MESSAGE' '----------------------------'; 'MESSAGE' 'K1 front2 = ' K1G_2; 'MESSAGE' 'K2 front2 = ' K2G_2; 'MESSAGE' '----------------------------'; 'FINSI'; 'SI' (Tdisplay . dep_global); *-----------------------------<AFfichage champ de déplacement uxy2 = 1.*(((ux2 **2)'+'(uy2 **2))); 'TRACER' uxy2 s3 10; 'FINSI'; 'MESSAGE' '----------------------'; 'MESSAGE' 'FIN DES POST-TRAITEMENTS'; ************************************************************************ *** TEST DE BON FONCTIONNEMENT *** ************************************************************************ * valeur de reference obtenue en 2013 : K2ref = -11.5E7; xtol = 0.10; err21 = abs ((K2G_1 - K2ref) / K2ref); err22 = abs ((K2G_2 - K2ref) / K2ref); mess 'ecart relatif sur K2:' err21 err22; si ((err21 >eg xtol) ou (err22 >eg xtol)); fins; * OPTI donn 5 trac X; fin ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales