Assistance #217
Non convergence loi HH
Ajouté par Frank Petitjean il y a environ 5 ans. Mis à jour il y a presque 5 ans.
Description
Bonjour Gérard,
Voici un cas "simple" d'un BSO avec loi HH qui ne converge pas.
Le déploiement se passe bien (inc1) ainsi que le passage à la loi HH+plis (inc2). La non convergence apparait à la 1ere itération de l'inc3 lorsque j'applique les CLL sur la loi HH+plis. C'est sûr que c'est brutal mais ça passe avec HE, HEf et HEo
Frank
Fichiers
modele.CVisu (7,88 ko) modele.CVisu | Frank Petitjean, 22/11/2019 18:07 | ||
maillage.her (56,5 ko) maillage.her | Frank Petitjean, 22/11/2019 18:07 | ||
modele.info (7,71 ko) modele.info | Frank Petitjean, 22/11/2019 19:52 | ||
modele.info (8,58 ko) modele.info | Frank Petitjean, 23/11/2019 09:26 | ||
exemple_loi.txt (1,71 ko) exemple_loi.txt | Julien Troufflard, 23/11/2019 10:43 | ||
test1.CVisu (7,88 ko) test1.CVisu | Julien Troufflard, 25/11/2019 22:30 | ||
test1.info (9,69 ko) test1.info | Julien Troufflard, 25/11/2019 22:30 | ||
test1.info (9,72 ko) test1.info | Julien Troufflard, 25/11/2019 23:08 | ||
test2.info (9,8 ko) test2.info | Julien Troufflard, 25/11/2019 23:08 | ||
test4.info (9,49 ko) test4.info | Julien Troufflard, 26/11/2019 07:11 |
Mis à jour par Julien Troufflard il y a environ 5 ans
Frank,
je me permets une première réponse avant Gérard. Il n'y a pas le .info du calcul, donc je n'ai pas pu voir tes conditions limites. Mais néanmoins, si tu appliques des CLL ou tout autre changement intermédiaire de conditions limites, je pense qu'il vaut mieux les appliquer alors que la loi matériau est réversible. Sinon, il y a un fort risque de générer ponctuellement des trajets de chargements coriaces pour la loi d'hystérésis.
une autre stratégie serait peut-être d'utiliser une loi HE pour établir pli + CLL. Le tout a un niveau de chargement qui normalement n'est pas sensé engendrer des grandes déf ou des cycles, ou autre chose de compliqué pour la loi. Ensuite, toujours avec la loi HE+pli, réduire le chargement jusqu'à un niveau assez faible pour conserver l'état plissé mais établir un état de départ très peu chargé. Puis enclencher loi HH+pli. Normalement, l'état plissé obtenu avec la loi HE devrait être équivalent à celui HH. Puis augmenter le chargement => la loi HH commencera à accumuler une vraie histoire.
a+
Mis à jour par Frank Petitjean il y a environ 5 ans
- Fichier modele.info modele.info ajouté
Je réponds à Julien,
J'ai bien conscience de la brutalité de la chose et en ce moment un calcul tourne avec, comme tu le proposes une loi simple pour appliquer les CLL+plis puis bascule en HH.
Avec le .info pour correspondant à la 1ere proposition
Frank
Mis à jour par Frank Petitjean il y a presque 5 ans
- Fichier modele.info modele.info ajouté
J'ai lancé un calcul avec un premier équilibre avec une loi HEo + plis et CLL. A l'incrément suivant j'active la loi HH par une loi des mélanges. Le calcul plante à la 1ere itération :
erreur de loi de comportement element= 1 point d'integration= 1
Pourtant à l'incrément convergé précédent (HEo+plis+CLL) les résultats sont correctes et identiques au cas HEo seul.
Mais à quoi bon cette stratégie puisque avec une loi des mélanges les 2 lois sont simultanément calculées donc la loi HH mémorise bien l'histoire du matériaux même si le choix du alpha ne la rend pas active dans la contrainte combinée.
Je ne vois donc pas de "stratégie" pour faire tourner la loi HH dans le cas de BSO !
Je joins la mise en données, seul le .info est différent du fichier précédent.
Mis à jour par Julien Troufflard il y a presque 5 ans
- Fichier exemple_loi.txt exemple_loi.txt ajouté
Frank,
dans ta loi de mélange, il faut mettre l'un mot-clé suivant après chaque loi de comportement du mélange :
demarre_a_prop_non_nulle_puis_strictement_decroissante_
calcule_si_prop_non_nulle_
L'un ou l'autre empêchera de calculer toutes les lois dans le mélange.
ci-joint un exemple de loi de comportement. Choisis l'un ou l'autre (j'ai mis demarre_a_prop_non_nulle_puis_strictement_decroissante_ et ensuite en commentaire calcule_si_prop_non_nulle_).
Dans ton cas, si le mélange est gouverné par le temps, alors il n'y a pas de risque que cette grandeur décroit.
Donc je pense => calcule_si_prop_non_nulle_ suffira
si c'est le critère d'arrêt par exemple qui gouverne le mélange, alors il vaut mieux mettre demarre_a_prop_non_nulle_puis_strictement_decroissante_
Mis à jour par Frank Petitjean il y a presque 5 ans
Julien,
Oui en effet, avec l'option calcule_si_prop_non_nulle_, ou équivalent, et qui est bien présente dans mes jeux de données la loi HH n'est pas calculée. Donc ma remarque précédente "A qui bon..." n'a plus lieu d'être.
Il n'empêche que le calcul diverge dès l'introduction de la loi HH !
Merci pour ton commentaire qui m'a incité de relire la doc !
Frank
Mis à jour par Julien Troufflard il y a presque 5 ans
dommage que ça n'ait pas fonctionné.
je testerai de mon côté pour voir si je comprends mieux le souci. A voir les propositions de Gérard
Mis à jour par Julien Troufflard il y a presque 5 ans
- Fichier test1.CVisu test1.CVisu ajouté
- Fichier test1.info test1.info ajouté
Frank,
je suis en train de tester ça (cf pièces jointes) :
temps 1 => deploiement en isoelas sans pli (critere arret 1e-3)
temps 2 => application des CLL en isoelas sans pli (critere arret 1e-3)
temps 3 => application loi HE sans pli (critere arrêt à 1e-4)
temps 4 => applciation loi HH + plis (critere arrêt à 1e-4)
temps 5 => tous les noeuds bloques
à noter qu'au temps 4, la loi HH avec pli a une fonction f_critere qui dépend de la norme de convergence. C'est une faille dans mon calcul car cette norme va osciller. d'où la demande suivante à Gérard :
-------------------------------------
POUR GERARD :
-------------------------------------
ça serait vraiment utile d'avoir une grandeur de nom "norme_de_convergence_mini" (norme de convergence minimum atteinte au cours des itérations). Le but serait de toujours utiliser la meilleure convergence atteinte dans une fonction 1D ou nD. Par exemple, ça permettrait de piloter un avecNiveauSigmaI_mini_pour_plis_ dans la loi pli sans revenir en arrière.
voilà, à voir si mon calcul converge... et si oui quand? car mon ordi n'est pas très puissant.
Mis à jour par Julien Troufflard il y a presque 5 ans
j'ai changé les précisions. Mon message précédent n'est pas exact. Le fichier calcul test1.info a finalement des précisions un peu moins sévères en étape 1, 2 et 3.
Mis à jour par Julien Troufflard il y a presque 5 ans
- Fichier test1.info test1.info ajouté
- Fichier test2.info test2.info ajouté
erreur dans test1.info précédent (la loi HH n'était jamais activée)
ci-joint une version corrigée de test1.info et un fichier test2.info qui est le même calcul mais avec une fonction f_critere échelonnée différemment.
a priori, c'est parti pour calculer toute la nuit. Les itérations en loi HH s'égrenne au rythme de 1 itération toutes les 2 secondes. ça plante pas pour l'instant mais il va falloir être patient.
à suivre...
Mis à jour par Julien Troufflard il y a presque 5 ans
- Fichier test4.info test4.info ajouté
j'obtiens des erreurs avec les 2 fichiers précédents.
Finalement, c'est le fichier pièce jointe (test4.info) qui a l'air d'aller le plus loin. J'ai mis une fonction f_critere constante et égale à -1e-4. J'ai changé les paramètres d'hystérésis :
nb_iteration_maxi_ => 30
nb_dichotomie_maxi_ => 10
nb_maxInvCoinSurUnPas_ => -20
si tu veux le tester chez toi. J'ai été obligé de l'arrêter, il avait atteint 0.05 en précision.
je n'ai pas de raison particulière à ce test. Je me suis dit qu'il pouvait y avoir pas mal d'inversion avec la loi pli. Mais je n'en sais rien. Difficile de savoir quoi faire quand on ne sait pas d'où vient l'erreur. Je sais juste que l'erreur vient de l'élément 1 qui est un des éléments d'un pole.
Mis à jour par Gérard Rio il y a presque 5 ans
- Statut changé de Nouveau à En cours
Bonjour à tous,
quelques commentaires:
- l'idée de julien d'appliquer les CLL sur une loi simple tout d'abord puis HE avec plis puis loi finale, me paraît effectivement astucieuse, car les CLL sont actuellement appliquées de manière exacte (= des multiplicateurs de Lagrange condensés) du coup c'est tout sauf progressif, donc effectivement avec une loi HH la convergence peut-être difficile.
- les mots clé demarre_a_prop_non_nulle_puis_strictement_decroissante_ et calcule_si_prop_non_nulle_ ont effectivement été mis en place pour éviter de calculer systématiquement toutes les lois.
- "ça serait vraiment utile d'avoir une grandeur de nom "norme_de_convergence_mini" (norme de convergence minimum atteinte au cours des itérations). Le but serait de toujours utiliser la meilleure convergence atteinte dans une fonction 1D ou nD. Par exemple, ça permettrait de piloter un avecNiveauSigmaI_mini_pour_plis_ dans la loi pli sans revenir en arrière."
J'ai en prévision de pouvoir stocker au niveau des fonction nD, des grandeurs que l'utilisateur choisis. Je ne sais pas trop encore dans le détail comment cela fonctionnera mais l'idée serait:
. l'utilisateur définit en plus de la fonction initiale, une seconde qui donne un booleen : si valide la valeur calculée par la fonction est stocké, sinon rien.
. La clé permettant d'accéder ensuite à la valeur stockée est également définit par l'utilisateur via une variable dont la valeur au moment du stockage, sert de clé : si la valeur de la clé est identique à une valeur déjà stockée, l'ancienne valeur est écrasée
. le stockage s'effectuerait via une table de hachage ou ou une map C++
Dans le contexte de cette nouvelle possibilité des fonctions nD, l'utilisateur pourrait, je pense, lui-même définir la norme_de convergence mini. En fait il pourrait définir n'importe quelle grandeur mini...via une fonction ad hoc
Je vais aussi regarder les tests...
@suivre !
Mis à jour par Gérard Rio il y a presque 5 ans
- % réalisé changé de 0 à 10
Suit à la remarque justifiée de Julien, j'ai introduit dans la loi isoelas2D_C une sortie conditionnelle d'infos à l'écran via le paramètre permet_affichage_ de manière à avoir plus d'infos sur les grandeurs calculées.
Cette option n'est dispo qu'avec la version non fast (pour limiter les tests).
J'ai repris le test4 et sauvegardé le résultat à t=1, puis fait un restart à 1 pour aller à 2s, avec comme paramètre de la loi élastique les mêmes que ceux initiales + permet_affichage_ ->:
#-- loi 1 melange principal (isoelas)
ISOELAS2D_C calcule_si_prop_non_nulle_
800.e6 0.45
permet_affichage_ 5
et voici un extrait de ce que j'obtiens:
1) cas sans pb:
...
--- loi de comportement iso elas 2D CP --- mail: 1 ele: 23 npti: 1
module_compressibilite= 2.66667e+09 module cisaillement= 2.75862e+08 eps33= -0.00206603 ener_elas= 3199.54
Ieps 2D = 0.00252514 Isig= 3.67293e+06
...
...
--- loi de comportement iso elas 2D CP --- mail: 1 ele: 13 npti: 3
module_compressibilite= 2.66667e+09 module cisaillement= 2.75862e+08 eps33= 10.1419 ener_elas= 7.70862e+10
Ieps 2D =
--
module_compressibilite= 2.66667e+09 module cisaillement= 2.75862e+08 eps33= 39.4869 ener_elas= 1.16832e+12
Ieps 2D = -48.2617 Isig= -7.01989e+10
- pb dans le calcul de la nouvelle epaisseur: le coef de compressibilite moyen = 2.66667e+09 est par rapport a delta la trace de sigma = -4.39271e+10 10 fois inferieur !! ce n'est pas normal a priori on continue sans changer l'epaisseur ...
QuadraMemb::CalEpaisseurMoyenne_et_vol_pti(...)
...
L'élément 13 est tout près du bord inférieur.
On obtiens une def mécanique d'épaisseur de 39.5 !! là on est complètement en dehors des clous de la loi isoelas... d'où le pb
Donc l'introduction des CLL de manière exacte introduit un choc numérique vraiment brutal !!
Actuellement, comme le message d'erreur l'indique, quand un comportement anormal est détecté, l'épaisseur de la membrane n'est pas remise à jour. Mais il y a tous les cas où l'erreur n'est pas forcément très visible et qui ne doivent pas être très bons pour la qualité du calcul...
En élasticité, la convergence arrive à ce faire, par contre en HH, cela doit entraîner pas mal de difficultés.
bon... je continue à réfléchir
NB: Julien je mets la version 6.918 en osX sur le serveur si tu veux t'en servir
Mis à jour par Frank Petitjean il y a presque 5 ans
Je reviens avec un peu de retard sur les tentatives du Julien (les notifications de Redmine m'ont échappé !).
Je pense qu'il est préférable de passer les étapes déploiement puis CLL+plis avec une loi élastique (ISOELAS2D_C puis ISOELAS). Car la situation physique réelle n'arrive qu'après ces 2 étapes préliminaires. L'état de contrainte "élastique" après ces 2 étapes est très propre en apparence.
Après l'idée serait de basculer "progressivement" vers une loi complexe. J'ai essayé ce scenario avec une loi HH, comme expliqué au début du fil, mais la loi HH plante dès le début.
J'ai aussi essayé avec une loi HE dans l'idée de faciliter la convergence par rapport à la stratégie CLL+plis avec loi HE direct, mais le calcul n'a pas convergé...
Est-ce que cela signifie que l'état de contrainte-déformation obtenu en élastique après l'étape CLL+plis n'est pas aussi clean que ce que ça ?
Mis à jour par Julien Troufflard il y a presque 5 ans
pour ma part, j'avais essayé :
- CLL en isoelas
- HE sans pli
- HH avec pli avec un sigma_mini de 1e-4
je n'ai pas attendu la fin du calcul mais ça n'avait pas planté.
je n'ai pas testé :
- CLL en isoelas
- HE sans pli
- HE avec pli avec un sigma_mini de 1e-4
- HH avec pli avec un sigma_mini de 1e-4
En tout cas, je ne pense pas que le problème soit un état de contrainte clean ou pas en isoelas. L'état obtenu en isoelas est trop éloigné de celui en loi non linéaire. Le passage de isoelas à HH direct ne me parait pas possible.
A tout ça s'ajoute le fait que la loi HH n'est pas utilisée comme dans un calcul classique. Dans un calcul classique de loi élastoplastique, on applique le chargement progressivement. Dans ce cas de BSO, la loi HH est activée à un moment où le chargement est appliqué totalement et les CLL établies. C'est-à-dire que le calcul avec loi HH se fait entre un instant initial et un instant final assez éloigné.
Il faudrait établir les conditions limites dans un premier temps avec un chargement faible et peut-être un peu fictif. Ensuite, appliquer la loi HH et augmenter le chargement par pas.
Mis à jour par Frank Petitjean il y a presque 5 ans
Je suis content de lire vos suggestions et commentaires sur ces calculs de BSO qui m'occupent depuis plusieurs années !
L'état d'équilibre d'un BSO est en effet très délicat à obtenir puisque les 2 forces antagonistes sont : la pression, dont la résultante dépend de la forme du ballon, et le poids de la structure (force volumique pour film et rubans + forces nodales pour la pièce polaire).
Pour le déploiement (phase 1) il est difficile (et non physique) de passer par des états intermédiaires qui soient aussi en équilibre. Donc c'est du rien au tout en une passe !
Cette étape de déploiement se passe assez bien en fait et les contraintes sont modérées. Elle pourrait être menée avec une loi complexe si nécessaire. C'est l'étape suivante dans laquelle on impose le respect des conditions de symétrie qui pose problème.
Pour éviter l'utilisation des "brutales" conditions limites linéaires j'avais essayé d'utiliser des conditions de contact plan avec un pilotage des plans pour une application progressive.
Je me suis heurté en particulier au réglage des conditions de pénétration. En effet la largeur du fuseau étant très différente aux extrémités et au milieu la raideur est aussi très différente. De plus le contact doit parfois "repousser" les bords du fuseau (lobage) et parfois mettre le fuseau en tension circonférentielle. Pas simple à régler tout ça...
Le mieux serait de pouvoir appliquer "progressivement" ces CLL au cours d'un incrément de charge comme le propose Gérard depuis un moment.
Avec le ballon complet (cf. les derniers calculs du ballon sous largueur) il n'y a plus de CLL et j'ai obtenu de bons résultats avec la loi plis activée. Si je peux avoir des rabais chez EDF je pourrais lancer un calcul complet avec loi HH pour voir ce qui se passe ;-)