Anomalie #302
problème écart entre calcul Herezh et calcul Umat Herezh
Description
Gérard,
suite à notre discussion sur l'écart entre Herezh pur et Abaqus/Herezh, j'ai fouillé ce problème et plusieurs choses sont remontées.
J'ai d'abord constaté que ce n'est pas un pur problème Abaqus/Herezh. Je vois également un écart quand on fait un dialogue entre 2 processus Herezh par rapport à un calcul Herezh pur. Et les problèmes ont l'air analogue. Donc tant mieux, il y a moyen de regarder ça en utilisant uniquement Herezh. A vérifier plus tard sur Abaqus.
J'ai regardé 14 lois de comportements pour essayer d'y voir clair. Dans l'archive jointe, il s'agit d'un cube en traction charge/décharge dans la direction X. Le pas de temps est fixe.
Il y a un fichier Readme qui explique la procédure pour changer de loi, faire le calcul Herezh pur et faire le calcul Herezh/Umat Herezh. Il y a un fichier gnu qui permet de voir le résultat (contrainte 11 et déformation 22 en fonction de la déformation 11, et ensuite idem en fonction du temps; NB : j'affiche en déformation log).
Comme indiqué dans le fichier Readme, j'obtiens les résultats suivants :
loi 0 : ISOELAS => OK
loi 1 : ISOHYPER3DFAVIER3 => gros ecart sur contrainte, leger ecart en deformation
loi 2 : ISOHYPER3DORGEAS1 => gros ecart sur contrainte, leger ecart en deformation
loi 3 : HYPO_ELAS3D => => gros ecart sur contrainte, OK en déformation
loi 4 : MOONEY_RIVLIN_3D => OK
loi 5 : ISOHYPERBULK3 + ISOHYPER3DFAVIER3 => idem loi 1
loi 6 : ISOHYPERBULK3 + ISOHYPER3DORGEAS1 => idem loi 2
loi 7 : ISOHYPERBULK3 + MOONEY_RIVLIN_3D(dev) => OK
loi 8 : ISOHYPERBULK3 + HYSTERESIS_3D => OK
loi 9 : ISOHYPERBULK3 + MAHEO_HYPER => OK
loi 10 : HYPO_ELAS3D(sph) + ISOHYPER3DORGEAS1 => gros ecart sur contrainte, leger ecart en deformation
loi 11 : HYPO_ELAS3D(sph) + MOONEY_RIVLIN_3D(dev) => tres leger ecart
loi 12 : HYSTERESIS_BULK + MOONEY_RIVLIN_3D(dev) => non convergence avec Umat a l increment 1
loi 13 : ISOHYPER3DFAVIER3 + MOONEY_RIVLIN_3D(dev) => OK (infime ecart a cause des coef deviatoriques favier non nul)
j'ai mis aussi une idée de la forme des résultats que j'ai obtenu dans le répertoire graphes/ (forcément ça sera plus clair quand tu pourras zoomer dans gnuplot).
quand c'est marqué OK, ça veut dire que les résultats sont exactement superposés ou extremement proches. Quand c'est marqué (dev), ça veut dire partie déviatorique, et (sph) pour partie sphérique.
donc r.a.s pour les lois 0, 4, 7, 8, 9, 13, c'est-à-dire la loi élastique, les lois en invariants de B, de V et la loi d'hystérésis déviatorique.
Le fait que les lois 4 et 7 sont OK montrent que ISOHYPERBULK3 est OK. Et d'après loi 13, la partie sphérique de favier aussi. Certainement aussi la partie sphérique Orgéas mais je n'ai pas pu tester.
ça donne donc une idée des quelques lois "sûres" qui peuvent servir pour mettre en évidence les pb sur les autres lois.
Et donc ça conduit aux conclusions :
1) loi 1,2,5,6 : problème sur la partie déviatorique des lois ISOHYPER3DFAVIER3 et ISOHYPER3DORGEAS1. Il doit y avoir une erreur dans le calcul de Qeps dans l'Umat. Le calcul converge très bien. Mais on dirait que le potentiel prend une très grande valeur à mesure que la déformation augmente, la contrainte s'écarte rapidement au-delà de def Log=0.2 ou 0.3. Je pense que c'est Qeps qui est en cause car le calcul Umat a l'air de faire une erreur aussi sur le moment de la transition entre la pente 2 et 3 dans le cas de Orgéas.
2) loi 3 : problème curieux sur la loi Hypoélastique. Pourtant, elle est dans la même logique que l'hystérésis (intégrale de D), c'est-à-dire la loi 8. Si la loi 8 est OK, alors je ne comprends pas pourquoi la loi 3 ne l'est pas. Peut-être sera-t-il facile de cerner le pb par comparaison...
avec la loi 11, on obtient également un léger écart. Il y a donc également un léger pb sur la partie sphérique de HYPO_ELAS3D.
pour ce cas-ci, c'est vraiment étonnant. Comment le résultat Hypoélastique peut être aussi faux en contrainte 11 tout en étant très bon en déformation 22 ??? Le comportement n'est pas incompressible (cette loi Hypo est sensée correspondre à une loi élastique E=200, nu=0.3). ça peut être intéressant de voir si ce n'est pas juste un bug de sortie de résultat.
3) loi 10 : c'est juste une combinaison des deux pb de HYPO_ELAS3D et ISOHYPER3DORGEAS1 énoncé précédemment.
4) loi 12 : La loi HYSTERESIS_BULK converge très bien avec Herezh pur. Dans le cas de l'Umat, ça plante dès le premier incrément. Et comme j'ai imposé un pas de temps fixe, ça arrête tout de suite. ça reste intéressant de voir la différence entre les 2 manières d'appeler la loi HYSTERESIS_BULK, il y a forcément une erreur (sur l'opérateur tangent ?).
voilà, ça fait pas mal de choses. Forcément, ma priorité est la loi HYSTERESIS_BULK et ISOHYPER3DORGEAS1.
a+
Julien
Fichiers
Mis à jour par Julien Troufflard il y a environ 3 ans
la loi hart-smith est OK.
loi testée :
HART_SMITH3D
C1= 2. C2= 0.5 C3= 0.1 K= 50.
ps : oups, je m'aperçois que ce ticket est dans le projet Herezh++_test. Je ne sais pas si on peut déplacer un ticket. Il devrait être dans le projet Herezh++.
Mis à jour par Gérard Rio il y a environ 3 ans
- % réalisé changé de 0 à 10
Bonjour Julien,
- j'ai commencé par étudier le cas d'une loi hypo.
- J'ai mis en place une sortie supplémentaire d'info dans herezh non fast, conditionnelle à un niveau local de commentaire.
- Il est possible de simuler une umat interne à Herezh sans faire de pipe, c'est plus facile pour le debug (cf. doc chap. 58.18, mot clé: utilisation_umat_interne ), je me suis mis dans ce cas d'utilisation.
En comparant les calculs sur 1 incrément, entre la loi en direct et la loi via umat interne, je constate qu'il y a une petite différence sur les paramètres d'entrée de la loi. Cette différence va donc se cumuler au cours des incréments.
Je vais donc rechercher la cause !!
Mis à jour par Julien Troufflard il y a environ 3 ans
ah oui c'est pas mal l'option umat interne.
attention cependant, parce que pour les lois additives, il y aura un petit bug à régler car actuellement ça ne fonctionne pas. Message d'erreur :
LoiAdditiveEnSigma::HsurH0(.. , methode non implante pour l'instant
Mis à jour par Julien Troufflard il y a environ 3 ans
- Fichier rep_test_traction_X.tar rep_test_traction_X.tar ajouté
j'ai testé aussi une loi des mélanges, et j'obtiens le même pb avec umat interne.
donc au final, j'ai ajouté une loi hart-smith et une loi des mélanges pour test.
Attention, j'ai mis Hart-Smith en loi 5, ça décale le reste des numéros de lois.
La loi des mélanges est la loi 15.
j'ai joint une nouvelle archive qui permet de tester loi classique, Umat externe et Umat interne.
J'ai modifié le Readme et le fichier gnu.
je vais aussi ajouter une loi n°16 qui sera une loi avec fonction de pondération.
Et je mettrai une dernière loi 17 qui sera un peu compliquée (une combinaison d'un peu de tout).
actuelement j'en suis à ces observations (cf Readme et graphes/ dans l'archive) :
message erreur et impossible de faire calcul avec Umat interne pour :
toutes les lois additives :
=> LoiAdditiveEnSigma::HsurH0(.. , methode non implante pour l'instant
toutes les lois des melanges :
=> LoiDesMelangesEnSigma::HsurH0(.. , methode non implante pour l'instant
loi 0 : ISOELAS => OK
loi 1 : ISOHYPER3DFAVIER3 => gros ecart sur contrainte, leger ecart en deformation
loi 2 : ISOHYPER3DORGEAS1 => gros ecart sur contrainte, leger ecart en deformation
loi 3 : HYPO_ELAS3D => => gros ecart sur contrainte, OK en déformation
loi 4 : MOONEY_RIVLIN_3D => OK
loi 5 : HART_SMITH3D => OK
loi 6 : ISOHYPERBULK3 + ISOHYPER3DFAVIER3 => idem loi 1
loi 7 : ISOHYPERBULK3 + ISOHYPER3DORGEAS1 => idem loi 2
loi 8 : ISOHYPERBULK3 + MOONEY_RIVLIN_3D(dev) => OK
loi 9 : ISOHYPERBULK3 + HYSTERESIS_3D => OK
loi 10 : ISOHYPERBULK3 + MAHEO_HYPER => OK
loi 11 : HYPO_ELAS3D(sph) + ISOHYPER3DORGEAS1 => gros ecart sur contrainte, leger ecart en deformation
loi 12 : HYPO_ELAS3D(sph) + MOONEY_RIVLIN_3D(dev) => tres leger ecart
loi 13 : HYSTERESIS_BULK + MOONEY_RIVLIN_3D(dev) => non convergence avec Umat externe a l increment 1
loi 14 : ISOHYPER3DFAVIER3 + MOONEY_RIVLIN_3D(dev) => OK (infime ecart a cause des coef deviatoriques favier non nul)
loi 15 : melange ISOELAS-ISOELAS via def_duale_mises => non convergence Umat externe
Mis à jour par Gérard Rio il y a environ 3 ans
- Fichier Hypo_umatinterne_loidirecte.pdf Hypo_umatinterne_loidirecte.pdf ajouté
concernant la loi hypo-élastique seule:
- si je compare le cas umat interne et loi directe j'observe un écart (cf. figure jointe) sur la contrainte.
En fait cette écart est "a priori" logique compte tenu du fonctionnement actuel d'Herezh.
Explication "a priori" :
Chaque loi d'Herezh incrémentale gère en interne le type de transport qu'elle utilise éventuellement.
Lorsque l'on calcul la contrainte et l'opérateur tangent / aux déformations il y a deux type de calcul, soit on suppose que l'on se trouve dans un repère orthonormé, soit on suppose que l'on est dans un repère curviligne. Dans le premier cas on ne prend pas en compte la variation du repère tandis que dans le second cas on prend en compte la variation du repère curviligne.
Le cas d'une loi calculée en tant qu'Umat a été développé pour interfacer avec un programme externe : ici Abaqus. Dans le cas de la spécification de l'interface umat avec abaqus, on se trouve dans la première configuration, a savoir que l'on doit calculer la loi dans un repère ortho et pas intégrer la prise en compte de la variation du repère.
Lorsqu'on utilise une loi umat par Herezh, on a donc en retour la contrainte et l'opérateur tangent en absolue. Mais il n'y a pas de notion de transport car pour Herezh cette notion fait partie de la loi. Du coup après plusieurs incréments on peut avoir un décalage due à un transport inexistant (ou plutôt de type 2 fois covariants arbitrairement).
Donc, Herezh ne joue pas "exactement" le rôle d'Abaqus qui lui "a priori" intègre un transport corotationnel par défaut, et celui-ci est en dehors de la loi de comportement.
En particulier l'interface Herezh-Herezh permet de valider les calculs d'umat sur quelques incréments par rapport à Abaqus. Mais si on veut valider sur un grand nombre d'incrément il faut comparer Herezh tout seul avec Abaqus - Herezh_Umat. Et cette comparaison ne peut fonctionner que pour des lois incrémentales qui disposent dans Herezh d'un transport cohérent avec la dérivée de Jauman.
Voilà pour l'instant mon investigation mais ça demande confirmation ...
Mis à jour par Julien Troufflard il y a environ 3 ans
- Fichier compression_uniaxiale_ISOELAS.png compression_uniaxiale_ISOELAS.png ajouté
- Fichier loi_cpt.hz_loi loi_cpt.hz_loi ajouté
- Fichier loi_16.png loi_16.png ajouté
ok merci pour les investigations.
ça reste quand même un mystère de voir que ça fonctionne parfaitement pour la loi d'hystérésis et pas la loi hypo-élastique. Pourtant, la notion de transport est la même pour ces 2 lois.
J'ai ajouté une loi 16 en pièce jointe dans le fichier de loi loi_cpt.hz_loi. C'est une loi élastique avec fonction de pondération de def_duale_mises. Donc cette loi, comme elle passe par une loi additive, ne fonctionne pas avec Umat interne pour l'instant. Et comme montré sur le graphe pièce jointe loi_16.png, elle ne donne pas le bon résultat avec Umat externe (gros écart sur la contrainte).
Il y a je pense, peut-être même au-delà des lois de comportement, un problème de fond sur le fonctionnement Herezh-Umat. Car si je prends une loi élastique simple (loi 0 => MAT_0), j'obtiens un comportement incohérent voire une non convergence avec Umat interne et externe en compression uniaxiale (essaye par exemple un déplacement imposé de -0.39346934 => ça donne le graphe pièce jointe : compression_uniaxiale_ISOELAS.png).
Donc rien que un changement de condition limite, ça peut mettre en défaut les Umat sur la loi la plus basique de Herezh.
Je vais en rester là pour l'instant, je verrai plus tard pour la loi 17 qui sera le challenge final (combinaison de tout : loi additive + mélange + pondération + lois diverses).
Mis à jour par Gérard Rio il y a environ 3 ans
oui je suis d'accord avec ta remarque: on devrait également avoir une différence avec la loi d'hystérésis.
Je pense que mon analyse est juste sur le fond du fonctionnement mais ce n'est peut-être pas l'explication de la différence observée d'où la nécessité d'investigation plus poussée.
J'ai utilisé une dérivée deux fois covariantes avec la loi hypo, je pensais améliorer le résultat et bien ... c'est pire !!
donc je vais continuer à creuser !!
Mis à jour par Gérard Rio il y a environ 3 ans
- Fichier transport_2fois_contravariant.pdf transport_2fois_contravariant.pdf ajouté
- Fichier transport_2fois_covariant.pdf transport_2fois_covariant.pdf ajouté
- Fichier transport_mixtes.pdf transport_mixtes.pdf ajouté
Bon, j'ai quelque chose d'intéressant dans le cas de l'utilisation d'une Umat interne:
si j'utilise une dérivée deux fois contravariantes, donc un transport 2 fois contravariants pour la contrainte et bien... j'ai les mêmes résultats !! cf. figures jointe
En fait je crois que c'est normal car dans le cas d'un transport contravariant il y seulement recopie des coordonnées du tenseur à t vers tdt donc le transport est transparent. C'est aussi le cas avec l'umat (c'est Abaqus qui fait le transport) donc le résultat est logique.
Cela semble aussi montrer qu'il n'y a pas d'erreur ici.
En comparant les 3 transports on en conclue:
1) si on veut obtenir les mêmes résultats il faut utiliser le transport 2 fois contravariants
2) si on utilise un transport cohérent avec Jauman, on n'a les mêmes résultats que pour les premiers incréments, en gros ici jusqu'à 10% de déformation. Un peu du même ordre de grandeur que la différence entre la mesure log et la mesure d'Almansi ou la mesure de Green-Lagrange
3) le transport 2 fois covariants entraîne la plus grande différence.
Tout ça montre l'importance du type de transport. De plus il faut garder à l'esprit qu'un transport de type Jauman entraîne une déformation logarithmique cumulée qui peut aussi être différente de la déformation log suivant les pas de temps que l'on utilise.
@suivre ...
NB: la petite différence que j'avais noté (cf. réponse #1) sur les paramètres d'entrée de la loi hypo était due à une fausse manip de ma part ! en fait il n'y a pas de différence.