Modélisation B : X-FEM 3D ========================= Le problème considéré est le même que celui étudié dans la partie II. Cependant, contrairement à la partie précédente où la fissure était maillée, on considère dans cette partie un maillage sain. La fissure n’est donc pas maillée. Pour cela, on utilise la méthode X-FEM. Déroulement du TP ----------------- Raffinement du maillage ~~~~~~~~~~~~~~~~~~~~~~~~ L'objectif de cette première étape est d'utiliser HOMARD pour obtenir un maillage raffiné à partir d’un maillage sain relativement grossier. Vous pouvez créer le maillage grossier avec Salomé (¼ de la structure est modélisée) ou utiliser celui fourni: forma07b.mmed Afin de réaliser le raffinement du maillage, il est nécessaire d'utiliser une boucle python. Le fichier de commande de cette partie n'est donc pas éditable graphiquement avec AsterStudy. On va donc utiliser le mode texte d'AsterStudy pour la première étape du calcul. .. csv-table:: "Lancez Salome-Meca puis choisissez AsterStudy. Allez dans les préférences (File → Preferences → AsterStudy) et décochez External editor. Créez une nouvelle étape pour votre calcul (New Stage) que vous pouvez renommer (Raffinement) si vous le souhaitez. Faites un clic gauche sur cette nouvelle étape et cliquez sur Edit. Une fenêtre apparaîtrasur la gauche et vous pourrez éditer votre fichier de commande." "Dans un premier temps, il va falloir calculer le nombre d'itérations nécessaires pour obtenir le maillage raffiné. Pour cela, il faut tout d'abord importer la bibliothèque math: import math Renseignez les informations suivantes: * Taille de maille dans la zone d'insertion de la fissure h0 * Taille de maille cible hc (a/20.) Calcul du nombre d'itérations pour atteindre hc: * n=(ln(h0)+ln(hc))/ln(2.) * nb_raff=E(n) (partie entière de n: int(n)) * nb_iter=nb_raff+1 Calcul de la taille finale des éléments proches du front de fissure: * h=h0/2^nb_raff" "Initialisez l'ensemble des vecteurs qui seront utilisés dans la boucle de raffinement: * MA = [None]*(nb_iter+1) (Maillage) * CHERR = [None]*nb_iter (Erreur) * FISS = [None]*nb_iter (Fissure)" "Lire le maillage au format MED (**LIRE_MAILLAGE** ): MA[0]= LIRE_MAILLAGE(UNITE=20, FORMAT='MED'); Choisirle maillage forma07b.mmed qu'il faudra ajouter dans l'onglet **Data Files** sous l'unité 20." "Réalisez la boucle de raffinement: for i_raff in range(nb_raff) : * **Définition de la fissure** FISS[i_raff]=DEFI_FISS_XFEM(MAILLAGE=MA[i_raff], TYPE_DISCONTINUITE='FISSURE', DEFI_FISS=_F(FORM_FISS='ELLIPSE', DEMI_GRAND_AXE=a, DEMI_PETIT_AXE=a, CENTRE=(0,0,0,), VECT_X=(1.,0., 0.,), VECT_Y=(0.,1.,0.,),),); * **Calcul du critère de raffinement** CHERR[i_raff]=RAFF_XFEM(FISSURE=FISS[i_raff],TYPE='ZONE',RAYON=r_raff) avec r_raff=5*h * **Définition du type du maillage n+1 --> pour dire que MAILLAGE_NP1 est un type 'maillage'** MA[i_raff+1]=CO('MA_%d' % (i_raff+1)) * **Adaptation du maillage** MACR_ADAP_MAIL(ADAPTATION = 'RAFFINEMENT', CHAM_GD = CHERR[i_raff], CRIT_RAFF_ABS = 0.5, DIAM_MIN = hc, MAILLAGE_N = MA[i_raff], MAILLAGE_NP1= MA[i_raff+1],);" "Pour visualiser le nouveau maillage, imprimez-le au format MED: IMPR_RESU(FORMAT='MED',UNITE=80,RESU=_F(MAILLAGE=MA[nb_raff])); Choisirle maillage forma07b_raff.mmed qu'il faudra ajouter dans l'onglet **Data Files** sous l'unité 80." Si vous souhaitez passer cette étape, vous pouvez aussi utiliser directement le maillage raffiné fourni: forma07b.41 Dans les maillages fournis (visualisez-les dans Salomé), les noms des groupes de mailles sont les suivants: * groupe de nœuds: D, * groupes de faces: FACE_AV, FACE_LAT, FACE_SUP, FACE_INF, * groupe de volumes: CUBE. .. image:: images/100000000000038E0000035EB10402CB656459A8.png :width: 3.7917in :height: 3.5902in .. _RefImage_100000000000038E0000035EB10402CB656459A8.png: **Figure** 4.1.1-a **: Groupes définis sur le maillage fourni** Création du fichier de commande sans post-traitement de la rupture ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lecture du maillage sain raffiné et définition du modèle non enrichi ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. csv-table:: "LancezSalome-Meca, puis choisissez le module AsterStudy. Ajoutez les étapes suivantes à votre cas." "**Read a mesh** (**LIRE_MAILLAGE** ). Sélectionnez le maillage raffiné que vous avez crééet le format MED" "**Modify a mesh** (**MODI_MAILLAGE** ). Choisissez le maillage lu précédemment et sélectionnez le reuse. Sélectionnez l'action ORIE_PEAU_3D pour réorienter les normales aux facesvers l'extérieur du maillage (groupes d'éléments FACE_AV, FACE_LAT, FACE_SUP, FACE_INF)" "**Assign finite element (** **AFFE_MODELE** **)** . Choisissez le phénomène mécanique et la modélisation des milieux continus 3D" Définition de la fissure et des éléments X-FEM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. csv-table:: "Dans l'onglet **Fracture and Fatigue** :Définition de la fissure **DEFI_FISS_XFEM** . Utilisez de préférence le catalogue des fissures (FORM_FISS='ELLIPSE')" "Dans l'onglet **Fracture and Fatigue** : Modification du modèle pour prendre en compte les éléments X-FEM(**MODI_MODELE_XFEM** )" Définition du matériau, des conditions et résolution du problème mécanique ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. csv-table:: "Définition et affectation du matériau: **Define a material (** **DEFI_MATERIAU** **)** et **Assign a material (** **AFFE_MATERIAU** **)**" "Définition des conditions limites et chargements sur le modèle enrichi. **Assign mechanical load** **(** **AFFE_CHAR_MECA** **)** : * Symétrie sur le plan de symétrie 'FACE_LAT'(**Enforce DOF** ); * Symétrie sur le plan de symétrie 'FACE_AV'(**Enforce DOF** ); * Blocage des modes rigides (**Enforce DOF** sur 'D') * Application de la e la traction sur 'FACE_SUP' et 'FACE_INF' **(** **PRES_REP** **)**" "Résolution du problème élastique: **Static mechanical analysis** **(** **MECA_STATIQUE** ) avec le modèle enrichi" Post-traitement des déplacements et des contraintes avec X-FEM et visualisation avec Paravis ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Afin de séparer le calcul et le post-traitement, vous pouvez ajouter une nouvelle étape (New stage) à votre cas d'étude (Case). .. csv-table:: "Dans l'onglet **Fracture and Fatigue** : Création d'un maillage de visualisation (**POST_MAIL_XFEM** )" "Dans l'onglet **Finite Element** : Création d'un modèle pour la visualisation (**AFFE_MODELE** ) sur le maillage créé pour la visualisation" "Dans l'onglet **Fracture and Fatigue** : Création d'un champ de résultats sur le maillage de visualisation X-FEM (**POST_CHAM_XFEM** )" "Pour visualisation avec Paravis: * Calcul du champ de contraintes extrapoléaux noeuds ( CALC_CHAMP, option 'CONTRAINTE'avec le champ'SIGM_NOEU') * Calcul du champ de contraintes équivalentes (CALC_CHAMP, option 'CRITERES' avec le champ'SIEQ_NOEU') Pour cela, on enrichira le concept issu de **POST_CHAM_XFEM** enreprenant le même nom de concept." "Impression des résultats au format MED: **Results output** (IMPR_RESU)." Ajout des étapes de post traitement en mécanique de la rupture ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pour le post-traitement de la rupture vous pouvez également ajouter une nouvelle étape (New stage) à votre cas d'étude en cours. Pour l'ensemble des étapes suivantes, il faudra aller dans l'onglet **Fracture and Fatigue** . 1. **Calcul de G avec CALC_G_** XFEM Calculer le taux de restitution d’énergie G et les facteurs d'intensité des contraintesavec CALC_G_XFEM (OPTION='CALC_K_G') et le lissage de Legendre de degré 5. Utiliser le résultat du calcul statique à ne pas confondre avec le résultat créé pour la visualisation avec **POST_CHAM_XFEM** (RESULTAT). Compléter les informations sur le champ THETA: * le fond de fissure FISSURE * les rayons de la couronne du champ theta(R_INF, R_SUP), à définir en fonction du maillage utilisé. Imprimer les valeurs de la table G ( **IMPR_TABLE** dans l'onglet **Output** ). 1. **Calcul de K et G avec POST_K1_K2_K3** Calculer K et G avec POST_K1_K2_K3: * utiliser le résultat du MECA_STATIQUE (RESULTAT) * renseigner la fissure * renseigner le paramètre ABSC_CURV_MAXI * imprimer les résultats dans une table. Comparez les résultats à la solution analytique. Comparez les temps entre les 2 commandes. Essayer le lissage LAGRANGE. Qu’observe t-on? Afin d’améliorer les résultats, essayer la répartition uniforme de :math:`n` points le long du fond de fissure (CALC_G_XFEM/THETA/NB_POINT_FOND) avec diverses valeurs de :math:`n` . Autres pistes: raffinement / enrichissement sur plusieurs couches. Grandeurs testées et résultats ------------------------------ .. csv-table:: "**Identification**", "**Référence**", "**% tolérance**" ":math:`{K}_{I}` de POST_K1_K2_K3", "1,5957 106", "1%"