• Aucun résultat trouvé

anisotropic .1 0. 0. .5 0. .1 % valeur de c de type anisotrope

*var Yeff3 % nom de la troisieme variable non locale

isotropic .5 % valeur de c de type isotrope

*layer layer2 % nom du second pli (methode de differenciation)

C.4

Implantation des lois de comportements non locales

C.4.1

Principe

L’écriture d’une loi de comportement consiste à fournir à l’élément fini la variable de type FLUX et la matrice jacobienne associée en fonction d’une variable de type GRAD. Dans le cas du calcul local, la variable d’entrée est le tenseur des déformationsε. La variable de sortie est le tenseur des contraintes σ. La

jacobienne associée est la dérivée deδσ par rapport à δε.

Dans le cas du calcul non local, les informations fournies sont un vecteur contenant la valeur du tenseur des déformationsε mais aussi des variables non locales fi

nl. En retour la loi de comportement nous renvoie la valeur du tenseur des contraintesσ et des variables locales associées fi

l, ainsi que les dérivées deδσ par rapport àδε, de δσ par rapport à δfi

nl, et deδfilpar rapport àδε. Les dérivées δfli par rapportδfnli sont directement calculées par l’élément fini puisqu’elles sont indépendantes de la loi de comportement.

Au final, la nature des lois de comportement non locales n’est pas si différente de celle des lois lo- cales. Leurs implantations restent similaires et ne nécessitent pas de développer de nouvelles méthodes. Les classes comportant les lois de comportement non locales dérivent donc de la même classe que les lois locales, à savoir BEHAVIOR (fig. C.9). L’ensemble des classes utilisées dans ce travail et figurant sur la figure C.9 sont résumées dans le tableau C.7.

C.4.2

Exemples de fichier matériau

Nom de la classe Signification

BEHAVIOR Classe de base des lois de comportement

ELASTIC_LOCAL_DAMAGE Loi élastique isotrope endommageable locale

ELASTIC_NON_LOCAL_DAMAGE Loi élastique isotrope endommageable non locale sur l’endommagement

ELASTIC_NON_LOCAL_DAMAGE_NRJ Loi élastique isotrope endommageable non locale sur l’énergie

ANI_DAMAGE Loi élastique anisotrope endommageable locale

ANI_DAMAGE_NL Loi élastique anisotrope endommageable non locale

CMO_BEHAVIOR Loi locale CMO

CMO_BEHAVIOR_NL Loi non locale CMO

TAB. C.7 – Signification des noms de classe utilisés sur la figure C.9

***behavior ani_damage_nl % nom de la loi

**elasticity orthotropic % tenseur de rigidite

y1111 190000. y1122 33500. y3311 33500. y2222 95000. y2233 33500. y3333 95000. y1212 65000. y2323 65000. y3131 65000.

**damage % coefficients de la cinetique d’endommagement

Yo 0.018 0.018 0.018 Yeff_max 10. 5. 5. s .5 .5 .5

d_lim 0.999 0.999 0.999 ***return

Dans le cadre non local, seul le nom de la loi change, puisque les informations sur le caractère non local sont directement fournies à l’élément par les objets ANISOROPIC_GEOM_INFO et NON_LOCAL_

LAYERED_GEOM_INFO :

***behavior ani_damage % nom de la loi

**elasticity orthotropic % tenseur de rigidite

y1111 190000. y1122 33500. y3311 33500. y2222 95000. y2233 33500. y3333 95000. y1212 65000. y2323 65000. y3131 65000.

**damage % coefficients de la cinetique d’endommagement

Yo 0.018 0.018 0.018 Yeff_max 10. 5. 5. s .5 .5 .5

d_lim 0.999 0.999 0.999 ***return

Implantation des différents solveurs Chapitre C.

C.5

Implantation des différents solveurs

C.5.1

Stratégie d’intégration

Il existe un grand nombre d’algorithmes à longueurs d’arc. Ceux-ci diffèrent par le choix de la fonction de pilotage et par les méthodes de sélection, l’algorithme de base restant toujours le même. Dans ce travail, nous avons souhaité avoir un schéma de résolution le plus ouvert possible en vue de futurs enrichissements. Cela nous a conduit à developper un algorithme fonctionnant à l’aide de six classes :

– MECANICAL_RIKS dérive de la classe MECHANICAL_ALGORITHM (classe mère de tous les solveurs de ZéBuLoN) et effectue la résolution à proprement dite,

– RIKS_CRITERION gère le calcul de l’intensitéλ du chargement,

– RIKS_CHOICE se charge de sélectionner les points pilotant le chargement,

– RIKS_DECIDE sélectionne la valeur de lambda optimum lorsque le choix n’est pas unique, – RIKS_TEST sert à faire une présélection avant de choisir la bonne valeur de lambda à l’aide de

méthode plus pragmatique que celle contenue dans RIKS_DECIDE,

– NG_RIKS_CLIENT gère le parallélisme (cette classe n’est pas abordée dans ce paragraphe mais dans la prochaine partie portant sur l’aspect parallèlisme des calculs).

A partir de ce schéma, présenté sur la figure C.10, la résolution s’effectue en 6 étapes : (i) le code fournit aux solveurs le problème à résoudre (par exemple les conditions aux limites, . . .), (ii) la classe

MECHANICAL_RIKS calcule les déplacementsδ ˆu et ˇu, (iii) la classe RIKS_CRITERION choisit les

points à piloter à l’aide de la classe RIKS_CHOICE et calcule la valeur desλ admissibles, (iv) ces valeurs

sont triées à l’aide des classes RIKS_TEST et RIKS_DECIDE, (v) la classe RIKS_CRITERION renvoie à la classe MECHANICAL_RIKS, la valeur deλ optimale et (vi) cette classe calcule la valeur des degrés

de liberté, si la solution est convergée, elle est renvoyée au code, sinon on itère.

Dans la suite de ce chapitre, une description de ces différentes classes et de leurs dérivées est proposée. Toutes les fonctions et classes implantées dans le code de calcul ne sont pas présentées dans ce document. Un seul exemple est fourni par classe afin de décrire la philosophie d’implantation. On notera seulement que toutes les grandes familles de méthode à longueurs d’arc ont fait l’objet d’un travail d’implantation dans ZéBuLoN.

C.5.2

Classe MECHANICAL_RIKS

Cette première classe est la brique maîtresse de notre algorithme. Elle se compose de la fonction conver-

gence_loop devant résoudre pour chaque incrément l’équation d’équilibre de notre problème. Les calculs

des différentes longueurs s’effectuent par des appels aux fonctions membres des classes annexes dérivées de RIKS_CRITERION.

Nous avons choisi lors de l’implantation du solveur de différencier l’étape de prédiction et les étapes de correction. De plus, la possibilité de choisir entre plusieurs solutions à l’aide d’une minimisation du résidu a été directement intégrée dans le code. Ce choix a été contraint par la nécessité de faire appel à des fonctions spécifiques de MECHANICAL_ALGORITHM indisponibles dans les autres classes.

L’implantation de l’algorithme s’effectue suivant le tableau C.8. Le code s’articule autour de trois types de fonctions :

– les fonctions init_1 et update_L consistant à mettre à jour la valeur de la longueur d’arcl en fonction

de la convergence du code (augmentation en cas de convergence et diminution en cas de divergence), – les fonctions compute_lambda_iteration_* consistant à appeler la fonction init ou compute appar- tenant aux classes dérivées de la classe RIKS_CRITERION et permettant le calcul deλ en fonction

deδ ˆu et ˇu,

– les fonctions compute_[pre-next]solution_1 calculant la valeur dep en fonction de λ, δ ˆu et ˇu, la

fonction compute_[pre-next]solution_N effectuant le calcul des différentes solutions lorsqu’il existe plus d’une valeur admissible pourλ et choisissant celle qui minimise le résidu.

C.5.3

Classe RIKS_CRITERION

Cette classe est le prototype des classes permettant le pilotage du chargement. Les fonctions de base de cette classe sont init(. . .) et compute(. . .). La première calcule la valeur deλ à l’étape de prédiction, la

Implantation des différents solveurs Chapitre C. ... ... ... ... ... MECHANICAL_ ALGORITHM RIKS_ CRITERION RIKS_ DECIDE RIKS_ TEST RIKS_ CHOICE HØritage Classe parent Nouvelle classe Utilisation NG_RIKS_ CLIENT RIKS_ MECHANICAL_ CLIENT

Documents relatifs