Anomalie #197
convergence loi 2D vs contraintes planes
Description
Gérard,
j'ai un calcul très classique de coussin carré. Le but est d'appliquer une loi pli. J'ai rencontré des difficultés de convergence. Avant d'aborder la loi pli, j'aimerais bien déjà comprendre ce qu'il se passe sans loi pli. J'en suis donc arrivé à juste comparer le déroulement du calcul entre une loi simple (ISOELAS2D_C) et une loi identique en contrainte planes (LOI_CONTRAINTES_PLANES + ISOELAS).
Je me demande pourquoi le cas CP a tant de mal à converger. En particulier :
- amortissement cinétique intempestif malgré un gros lambda (5 fois la valeur critique de 0.5)
- fortement contre-indiqué de réactualiser la matrice masse (avec option_recalcul_mass= 1) sous peine d'amortissement cinétique encore plus intempestif
J'ai joué avec les divers paramètres (NEWTON_LOCAL avec_parametres_de_reglage_) sans réel impact.
As-tu une idée sur ce qu'il se passe ?
Fichiers
Mis à jour par Gérard Rio il y a presque 6 ans
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 30
oui, le problème existe effectivement.
Hugo a fait des tests et il a déduit qu'il y avait une variation un peu étrange de l'épaisseur et cela m'a mis la puce à l'oreille.
En fait, je pense avoir trouvé la raison, mais pas vraiment la solution ... ou en tout cas il faut que je réfléchisse.
Lorsqu'on utilise la loi contrainte plane + une loi 3D, le module de compressibilité est utilisé en sortie pour mettre à jour l'épaisseur de la membrane (ou de la plaque). Dans le cas de la loi élastique, ce module est calculé à l'aide de la variation de volume constaté au pti et à l'aide de la trace des contraintes calculées. Dans le cas où la variation de volume est nulle, on bifurque sur le module de compressibilité valable pour des def infinitésimales : E/(3(1-2 nu)). Par contre pour les déformations finies j'utilise: module_compressibilite = sigBH.Trace() * untiers / log_var_vol;
Dans le cas du test proposé:
-> E/(3(1-2 nu)) = 833.33
et avec les variations de volume: -> cela oscille entre 730 et 830
Une des raisons est que je calcule via la def log (mais ensuite c'est aussi la def log qui est utilisé pour la mise à jour de l'épaisseur).
Lorsque j'impose de toujours utiliser E/(3(1-2 nu)), là j'ai la même convergence qu'avec la loi en contrainte plane en dur, donc c'est bien là qu'il y a un pb.
Du coup il faut que je réfléchisse un peu plus ... car j'ai plusieurs fois modifié cette partie et je vois bien que le choix que j'ai adopté n'est pas le meilleur ...
Mis à jour par Julien Troufflard il y a plus de 5 ans
j'ai du mal à comprendre le calcul de variation d'épaisseur que ce soit en 2D_C ou 3D CP. Quand je regarde la doc théorique, j'arrive à la conclusion opposée à ton observation (i.e c'est en 2D_C qu'il devrait y avoir des problèmes si Ks ou Kt fluctue au gré de la variation de volume).
dans la doc théorie Herezh, il est marqué à la section "Contraintes planes->Lois de contraintes planes->Méthode de Newton (implicite)" (section 11.2 dans la version actuelle du pdf) que la déformation eps_33 ne dépend que de sigma_n et (d sigma / d eps)_n au cours d'un processus itératif visant à annuler sigma_33. Dans le cas ISOELAS, (d sigma / d eps)_n est constante et ne fait a priori pas appel à K_s. Après itération, on obtient eps_33. Or, eps_33 est une déformation principale. Si eps_33 est de type Almansi, il ne reste plus qu'à convertir cette déformation en déformation log. Et on obtient directement :
eps_33 = ln(h/h_0) => h = h_0.exp(eps_33).
Dans le cas d'une loi 2D_C, cette fois, on n'a pas la loi 3D et on souhaite remonter à eps_33. Là, je comprend que pour avoir une formule générale à tout type de loi, on passe par "module_compressibilite = sigBH.Trace() * untiers / log_var_vol"... et ensuite la formule 255 ou 260 page 75.
J'en arrive à conclure que c'est plutôt dans le cas contrainte plane en dur qu'il devrait y avoir des problèmes si Ks fluctue. Mais ce n'est pas ce qu'on observe en simulation.
Mis à jour par Gérard Rio il y a plus de 5 ans
Dans l'implémentation actuelle dans Herezh++ l'épaisseur (qui est une donnée moyenne sur tout l'élément) est calculée à l'aide du module de compressibilité tangent (via la linéarisation : chap: 10.1 de la doc théorique V 6.874 : formule 260). Cela pourrait également être fait avec la déformation d'épaisseur calculée avec la loi de contrainte plane. Ce n'est pas le choix que j'ai retenu pour plusieurs raisons:
- particularité d'implémentation: l'équilibre de surface (contrainte ou def plane) s'effectue dans une méthode générique 2D, et ensuite il y a une spécialisation en fonction de def ou C P et du type de découpage (triangle ou quadrangle)
- le fait de travailler avec la compressibilité et la variation de volume me permettait d'avoir une séparation entre la loi de compt+ choix de def, car si on a des combinaisons complexes de lois élémentaires qui conduisent à plusieurs def d'épaisseurs différentes (voir des morceaux de def ou d'incréments de def, dans le cas d'une décomposition additive de la def ou incrément) cela peut devenir assez compliqué à gérer (dans certains cas de lois de compt, la def d'épaisseur peut se comprendre comme une variable interne)
Mais c'est quand même un peut suggestif et il serait possible a priori d'utiliser une def d'épaisseur (?), bon... ce n'est pas le choix que j'ai fait. Mais a priori le fait d'utiliser la compressibilité n'est pas non plus un mauvais choix.
Ceci étant, il y a un manque actuel, car en fait je ne récupère qu'un seul module de compressibilité... et ce n'est pas toujours le module tangent !! (la preuve en élasticité).
Du coup il va falloir que je revoie cet aspect. Mais en attendant, je vais spécialiser le module de compressibilité en module tangent et donc je mets à jour ce point dans la loi isotrope 3D de Hooke, avec le module tangent = E/(3*(1.-2.*nu))
Je mets à jour dans la version test 6.877
Avec le test fourni: précision de convergence 1.e-4, cela donne au niveau des convergences:
1) loi 2D isoelas codée en CP -> 1056 itérations
2) loi 3D isoelas + contrainte plane -> 1063 itérations
3) loi pli pilotee en loi de melange via norme_de_convergence -> 1296 itérations
4) loi pli sans pilotage -> 1296 itérations