Projet

Général

Profil

Actions

Anomalie #388

ouvert

compréhension de LOI_DES_MELANGES_EN_SIGMA type_melange= 2

Ajouté par Julien Troufflard il y a environ un mois. Mis à jour il y a environ un mois.

Statut:
En cours
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
17/09/2025
Echéance:
% réalisé:

20%

Temps estimé:
Temps passé:

Description

Gérard,

suite discussion, j'ai testé une loi de mélange type_melange= 2. Les résultats étaient assez étonnants. Donc pour comprendre, je suis reparti d'une version très simple.

en pièce jointe, calcul de traction sur un cube avec au choix un mélange de 2 lois HYPOELAS ou 2 lois ISOELAS.

Sur un intervalle de temps de 0 à 1, la fonction mélange est : 1. - 0.6*temps. Donc le mélange passe de 100% la loi 1 à t=0 à une proportion 40%-60% à t=1.

J'ai écrit 2 programmes python sensés reproduire le calcul Herezh pour ces 2 cas (inclus dans l'archive jointe). Ils lisent le résultat hz++ .maple, exploitent les valeurs de EPS pour calculer la contrainte 11 et afficher dans le terminal 4 colonnes :
temps - contrainte SIG11 herezh++ - contrainte SIG11 "méthode 1" - contrainte SIG22 "méthode 2"

J'entends par "méthode 1 ou 2" les cas suivants :
méthode 1) :
contrainte calculée selon la formule indiquée dans la doc hz++. Normalement ça devrait être à peu près la formule (89) page 280 de la doc : sigma_finale_t+dt = sigma_loi_1_t + sigma_loi_2_t + mélange incréments

j'ai tenté le calcul suivant pour chaque loi :
1) SIG_t => calcul de la loi à t
2) INCREMENT => calcul de l'incrément entre t et t+dt
3) INCREMENT_propor => application de la proportion : alpha*INCREMENT (ou (1-alpha) si loi 2)
4) ajout de " SIG_t + INCREMENT_propor " à la contrainte mélange

c'est très certainement pas le bon calcul car la proportion n'est pas appliqué à SIG_t

donc autre tentative avec méthode 2

méthode 2) :
j'ai regardé le fichier source .cc de la loi de mélange. Je crois comprendre que le "type_melange= 2" est traité à la ligne 1918 du fichier :

else  // cas == 2
             { (*deltaSigHH) = sigHH - (*(*isig_t)); (*deltaSigHH) *= facteur_multiplicatif;
               (*(*jsig))=(*(*jsig_t)) + (*deltaSigHH); // on sauvegarde la contrainte partielle proportionalisée
               (*sigtotalHH) += (*(*jsig)); // cumule
             };

ce code me donne l'impression que dans hz++, le calcul serait le suivant :
sigma_finale_t+dt = sigma_loi_1_t+dt + sigma_loi_2_t+dt
où sigma_loi_1_t+dt et sigma_loi_2_t+dt serait l'accumulation des lois en tenant compte de la proportion de mélange

dans mon prog python, je fais pour chaque loi :
1) SIG_t => calcul de la loi à t
2) SIG_t_dt => calcul de la loi à t+dt
3) INCREMENT => différence entre SIG_t_dt et SIG_t
4) INCREMENT_propor => application de la proportion : alpha*INCREMENT (ou (1-alpha) si loi 2)
5) ajout de INCREMENT_propor à la contrainte mélange (qui accumule ainsi les incréments avec proportion)

NB : ce n'est pas exactement écrit comme ça dans mes programmes, mais dans l'idée c'est ça.

Au final, aucun de mes calculs ne donne le résultat fourni par Herezh.

Par exemple, si on prend le mélange MAT_ISOELAS des 2 lois suivantes :
loi 1 => ISOELAS E=100, NU=0.3
loi 2 => ISOELAS E=200, NU=0.45

le programme python verif_th_ISOELAS.py donne :

#[1]temps  [2]SIG11 hz++  [3]SIG11 python v1  [4]SIG11 python v2
0.01 0.9946254710068 0.9946254710068124 0.9946254710068124
.
. etc...
.
0.98 24.04093313668 137.19963493212614 45.06712401751332
0.99 23.71666775864 137.56469461065063 45.261879036196376
1.0 23.38314309983 137.9236398880391 45.4542492662177

donc, soit une méthode 1 (v1) largement au-dessus, ou une méthode 2 (v2) un peu plus proche mais pas bon non plus


Fichiers

test_melange_type_2.tar (28,5 ko) test_melange_type_2.tar Julien Troufflard, 17/09/2025 18:31

Mis à jour par Gérard Rio il y a environ un mois

  • Statut changé de Nouveau à En cours
  • % réalisé changé de 0 à 20

j'ai regardé le fichier source .cc de la loi de mélange. Je crois comprendre que le "type_melange= 2" est traité à la ligne 1918 du fichier :

oui

dans mon prog python, je fais pour chaque loi :
1) SIG_t => calcul de la loi à t
2) SIG_t_dt => calcul de la loi à t+dt
3) INCREMENT => différence entre SIG_t_dt et SIG_t
4) INCREMENT_propor => application de la proportion : alpha*INCREMENT (ou (1-alpha) si loi 2)
5) ajout de INCREMENT_propor à la contrainte mélange (qui accumule ainsi les incréments avec proportion)

oui,

Dans Herezh SIG_t non proportionné et SIG_t proportionné sont sauvegardés pour chaque loi d'un incrément à l'autre. A chaque incrément seules les nouvelles contraintes sont calculées.

(deltaSigHH) = sigHH - ((isig_t)); : calcul de l'incrément de containte non proportionné
(*deltaSigHH) *= facteur_multiplicatif; application de la proportion uniquement à l'incrément
(
(jsig))=((*jsig_t)) + (*deltaSigHH); ajout de l'incrément proportionné à la contrainte précédente proportionné

les pointeurs pointent directement dans les infos qui sont stockées et donc la dernière ligne par exemple, met à jour la valeur stockée à t+dt

J'ai l'impression que ce que tu fais et ce qui est dans herezh est identique ???

Je ne vois pas trop où ça bug. Un truc étonnant c'est que dès le premier incrément, la contrainte calculée par herezh est différente de celle calculée par le prog python ?

bon ...je vais être obligé de laisser un peu ce pb de coté, je veux finir la partie théorique des def log, ensuite je reviendrai pour tirer l'affaire au clair !

Mis à jour par Julien Troufflard il y a environ un mois

ok, je vais continuer à réfléchir de mon côté.

Et en fait essayer de définir ce que je veux. C'est-à-dire, il y a peut-être un debug à faire sur cette loi, mais supposons que ça fonctionne, est-ce que ça va correspondre à ce que je cherche.

à suivre donc...

Actions

Formats disponibles : Atom PDF

Redmine Appliance - Powered by TurnKey Linux