Assistance #382
ouvertOptimisation de simulation avec contact
0%
Description
Bonjour,
Depuis que l'on s'est croisé il y a 2 semaines, j'ai pu appliquer les différents conseils que vous m'aviez conféré quant à l'optimisation de mes simulations et surtout sur la partie contact (je ne me suis pas encore attelé à l'optimisation de mes fichiers pour la partie frottement que je ferai plus tard).
Pour rappeler le contexte, je réalise des simulations de joints encastrés en reprenant les travaux d'Emilie VIEIVILLE.
Maintenant j'ai repris sa loi de comportement (modèle HH) avec les paramètres matériaux issus de son manuscrit de thèse.
Aujourd'hui, je n'ai aucun soucis à réaliser ma simulation sans contact, mais avec cette loi de comportement, dès que je rajoute du contact ça commence à coincer.
Initialement, en reprenant les paramètres de contact que vous m'aviez conseillé précédemment (cf. assistance #376 | sur une loi ISOELAS pour cette précédente demande) le calcul ne voulait pas démarrer. En se basant sur le précédent ticket, j'ai modifié PENETRATION_CONTACT_MAXI de 0.01 à 0.001 et à partir de là, la charge se passait sans problème mais le calcul s'arrêtait pendant la décharge. Lors de la décharge j'avais les messages d'erreur suivants en répétition:
"
Erreur1 au niveau du pilotage de Runge Kutta, le nouvelle increment qu'il faudrait utiliser = 4.50666e-15 est plus petit que le minimum autorise: 5.77316e-15
Algo_edp::Pilotage_kutta(..
estime_erreur= 0 mail: 1, ele= 3, pti=1 --> probleme dans la resolution de l'equation constitutive avec Runge Kutta integration impossible, due aux precisions demandees, on doit augmenter ces precisions , (3) utilisation avec succes de la linearisation
warning il semble que l'on ait une inversion sur liste secondaire puis coïncidence avec liste principale avec
Hysteresis_bulk::Gestion_pointeur_coïncidence(...
"
Je pensais qu'il y avait un problème sur l'hystérésis (sans succès) mais après que l'on ait discuté, je me suis concentré sur les paramètres de simulation plutôt que ceux de loi de comportement (cette fois avec succès).
A partir de là, j'ai continué avec PENETRATION_CONTACT_MAXI en le passant à 0.0001 mais mon calcul ne finissait toujours pas. En me rappelant une conversation avec Julien sur une problématique liée aux pas de temps (premier point sur les courbes n'étant pas correct, en réduisant le pas de temps on peut minimiser cette erreur), j'ai commencé à lancer mes calculs en diminuant DELTAt et aussi DELTAtMAXI (car "à cause" de bonnes convergences avant que le calcul ne diverge, le dt augmentait ce qui faisait planter). Ces changement ont améliorer le calcul mais ne permettaient pas toujours d'aller au bout du calcul. J'ai ensuite utilisé suite_point_info pour réinitialiser/modifier DELTAt et DELTAtMAXI spécifiquement pour la décharge (après de nombreux tests, les paramètres suivant ont été atteint --> charge : dt = 0.001 & dtmax = 0.005 | décharge : dt = 0.0005 & dt max = 0.002) et là tout à fonctionné.
Cependant, pour faire correspondre l'écrasement numérique avec mon écrasement expérimental, j'ai passé l'écrasement de 0.95 à 0.94 et le calcul a planté de nouveau à la décharge. J'ai donc de nouveau joué sur mes paramètres de pas de temps à la décharge (charge : dt = 0.001 & dtmax = 0.005 | décharge : dt = 0.0001 & dt max = 0.001) et ça a de nouveau fonctionné
Mes questions :- Y'a-t-il d'autres paramètres à toucher pour "stabiliser" le calcul afin qu'un petit changement dans l'essai ne le fasse pas diverger ?
- Dans la continuité, est-ce que une optimisation des paramètres de fonctionnement des contributions dans loi de comportement n'aiderait pas à l'optimisation globale de la simulation ?
Merci pour votre aide
Fichiers
Mis à jour par Gérard Rio il y a environ un mois
- Statut changé de Nouveau à En cours
beau travail !!
Pour l'instant j'ai regardé globalement histoire de me mettre dans le bain, car c'est un peu complexe et je ne me rappelle plus de tous les détails.
Quelques remarques:
- je pense que c'est peut-être utile de regarder également ce que cela donne avec des éléments quadratiques à intégration complète car les éléments linéaires peuvent présenter des comportements de blocage (purement numérique). Les éléments quadratiques sont plus gourmands en temps de calcul mais j'ai plus confiance dans leur résultats. Ceci pour la chemise et pour le joint.
- lorsque je regarde l'évolution pendant la partie où il n'y a pas de pb, on voit que l'intensité de la contrainte de Mises globalement est en gros le tiers de l'intensité de la partie sphérique du tenseur des contraintes (c-a-d l'intensité de la presion qu'il y a dans le joint). Ça ne paraît pas déconnant. La variation de volume (V = vol(t)/vol(0)) semble évoluée correctement.
- globalement on a un comportement uniforme sur tout le maillage. C'est normal tant qu'il n'y a pas de frottement. En fait avec un seul élément on aurait quelque chose de similaire sauf au niveau du contact qui n'a lieu qu'au niveau des noeuds.
bon... je vais continuer
à suivre ...
Mis à jour par Gérard Rio il y a environ un mois
Je ne crois pas qu'il y ait de solution générale qui marche toujours. Par contre il y a des infos qui peuvent aider.
En regardant le déroulement du calcul je crois qu'il peut y avoir le pb suivant:
- avec un accroissement de la charge très petit cela conduit à des accroissement des ddl très très petit. Dans l'exemple fournit on observe des accroissement des ddl de l'ordre de 1.e-5 à 1.e-6 voir moins !
- au niveau de la loi les parties incrémentales, hystérésis, il y a une résolution de l'équation constitutive avec une précision :
erreurAbsolue_ 1.e-4 #1.e-5
erreurRelative_ 1.e-3 #1.e-4
Du coup la précision de la loi est plus grossière que l'accroissement des ddl ... ce qui va probablement rendre la convergence chaotique voir une divergence ...
Donc en regardant l'affichage des itérations (avec un paramètre supplémentaire au niveau de l'algorithme:
non_dynamique avec plus visualisation
PARA_TYPE_DE_CALCUL
permet_affichage_ 3
on obtient dans la sortie par exemple:
--- |max_var_DeltaDdl|= 0.00000286 , |max_deltaDdl|= 0.00436385
ce qui signifie que pour l'itération de newton, la variation de ddl est ici de 2e-6 et globalement sur l'incrément, le delta ddl est de 4e-3
On observe également que pour certaine divergence, on a un accroissement brutal de la variation de ddl (pour une itération). Je pense que c'est (souvent, voir très souvent) intéressant de limiter cette accroissement. Par exemple si on est sur un plateau de comportement, la dérivée va être proche de 0 et la méthode de Newton va préconiser un accroissement de ddl très grand. En général la direction est bonne mais pas l'intensité. Du coup une méthode est de limiter globalement l'accroissement de ddl. Pour ma part j'ai mis :
para_pilotage_equi_global ------------
NORME_MAXI_INCREMENT 0.004 #0.2 # defaut : +infini
J'ai remarqué que pour les différents incréments qui convergeaient bien on était dans cet ordre de grandeur. Mais ce paramètre est à adapter pour chaque cas de calcul, car il peut dépendre par exemple de la flexibilité de la structure, du pas de chargement que l'on se donne et de la raideur des matériaux.
S'il est trop grand, il ne sert à rien, s'il est trop petit il va limiter la vitesse de convergence.
En général ce que l'on veut c'est qu'il n'intervient "que si" on a un pb de convergence.
- PARAMETRE | VALEUR |
#---------------------------
DELTAt 0.0001 # defaut : 1.
DELTAtMAXI 0.004 # 0.001 # defaut : 1.
TEMPSFIN 2.0 # defaut : 1.
controle ------------
#---------------------------
J'ai également augmenté la précision de l'hystérésis bulk et là cela fonctionne bien ... mais uniquement après un restart ???
bon, à suivre ...