Anomalie #263
pb syntaxe et constante utilisateur dans fonction litterale 1D
Ajouté par Julien Troufflard il y a plus de 4 ans. Mis à jour il y a plus de 4 ans.
Description
Gérard,
dans l'exemple test_1D.info ci-joint, j'ai rencontré une erreur de syntaxe sur le symbole "<". Herezh++ s'attend à devoir lire un fichier exterieur au lieu de le traiter comme le symbole "inférieur". cf fonction f_epsAl
dans l'archive jointe, j'ai également écrit l'exemple test_1D_CteU.info. C'est le même calcul mais en utilisant des constantes utilisateur dans la fonction f_epsAl. J'ai constaté que les constantes utilisateur ne sont pas utilisables dans les fonctions littérales (et peut-être plus généralement dans toute fonction 1D). Tu dois le savoir déjà. Personne n'a dû en faire la demande. Personnellement, je n'ai pas de besoin immédiat à ce sujet. Mais on sent bien que ça peut être utile.
a+
Fichiers
pb_fonction_litterale.tar (103 ko) pb_fonction_litterale.tar | Julien Troufflard, 30/09/2020 15:28 | ||
loi_litterale.maple (101 ko) loi_litterale.maple | Julien Troufflard, 12/10/2020 15:27 | ||
loi_tabulee.maple (91 ko) loi_tabulee.maple | Julien Troufflard, 12/10/2020 15:27 | ||
loi_litterale.log (88,2 ko) loi_litterale.log | Julien Troufflard, 12/10/2020 15:29 | ||
loi_tabulee.log (66,3 ko) loi_tabulee.log | Julien Troufflard, 12/10/2020 15:29 | ||
test_1D.log (6,73 ko) test_1D.log | Julien Troufflard, 12/10/2020 18:44 | ||
test_1D.info (7,29 ko) test_1D.info | Gérard Rio, 14/10/2020 12:56 |
Mis à jour par Gérard Rio il y a plus de 4 ans
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 90
Bonjour Julien,
effectivement quand je lisais la fonction ou ses dérivées il y avait un pb si on incluait le signe "<" . Par contre c'était ok pour les fonction nD !! car j'avais introduit une lecture particulière que j'ai donc également mise en place pour les courbes. Donc c'est ok maintenant.
dis moi si c'est ok pour toi avec la nouvelle version.
Pour l'utilisation des constantes utilisateurs, c'est exacte que ces constantes ne sont utilisables qu'avec les fonction nD. Cela provient du fait que la construction de l'appel de la fonction nD est beaucoup plus complexe et ... a priori riche, que celle d'une courbe. Dans le cas d'une fonction nD, l'utilisateur à le choix entre: des constantes, des fonctions globales, des grandeurs globales, des grandeurs locales. Du coup, il y a un mécanisme que permet d'accéder à ces grandeurs diverses. Dans le cas d'une courbes, il n'y a pas ce mécanisme: la construction de l'appel est direct. A priori l'utilisation de courbes est peut-être en ce sens un peu plus rapide (?) mais pas sûr, car dans le cas d'une fonction nD, le recours aux données complexes dépend évidemment de leurs tailles: s'il n'y en a pas, la scrutation est immédiate.
Bon... sachant que l'utilisateur à le choix entre:
- des courbes 1D, donc très simples et avec des limitations dont celles de ne pas disposer de grandeurs externes,
- des fonctions nD, qui elles sont complètes, et qui dans leur formes simples peuvent être équivalentes à une courbe.
En fait j'ai l'impression, qu'il n'y a rien de limitatif, l'utilisateur peut choisir la forme la plus adéquate à son utilisation: s'il peut faire sans données externes et qu'une courbe 1D lui suffit, alors il peut choisir une courbe 1D, sinon il a toujours la possibilité de choisir une fonction nD.
j'ai donc envie de laisser les choses dans l'état, mais je vais marquer cette différence dans la doc pour éviter un questionnement éventuel.
Mis à jour par Julien Troufflard il y a plus de 4 ans
- Fichier loi_litterale.maple loi_litterale.maple ajouté
- Fichier loi_tabulee.maple loi_tabulee.maple ajouté
- Fichier loi_litterale.log loi_litterale.log ajouté
- Fichier loi_tabulee.log loi_tabulee.log ajouté
ok pour l'aspect loi nD. Effectivement, pas la peine d'étoffer les lois 1D étant donné les possibilités des lois nD.
désormais ça tourne informatiquement sur mon pb de loi littérale avec symbole "<"
J'obtiens les performances suivantes :
(NB : dans les itérations, je tiens compte de toutes les itérations y compris bien sûr les incréments non convergés. Je compte une itération pour chaque affichage "ITERATION" et chaque affichage "INCREMENT" dans les fichiers .log)
- calcul avec loi tabulée : 212 itérations, temps CPU : 90s (soit 0.425 s/iteration)
- calcul avec loi littérale : 287 itérations, temps CPU : 112s (soit 0.39 s/iteration)
Le rendement en s/iteration a l'air en faveur de la loi littérale, mais à mon avis, il ne faut pas s'y fier à la lettre. J'ai tenu compte de l'utilisation processeur pour pondérer le temps CPU, mais je ne connais pas la fiabilité de ces calculs de temps CPU par la commande time. Je dirais plutôt que les rendement sont équivalents entre ces deux fonctions (loi tabulée en 50 points).
à noter quand même que j'ai un résultat très instable en bout de barre (élément 5000) avec loi littérale (voir résultats des fichiers .maple en pièce jointe : EPS11 = col 30, SIG11 = col 29)
Au cours du calcul avec loi littérale, je vois des "nan" dans "max puissance interieurs" de l'affichage terminal (cf fichier log des 2 calculs en pièce jointe). Certains incréments ont divergé aussi bien avec loi tabulée que loi littérale. Par contre, le pas de temps a eu un peu plus de mal à augmenter avec loi littérale car il y a plus d'incréments qui ont eu du mal à converger.
bon bref, je ne comprends pas la raison de ces différences de convergence et de ces "nan". J'arrête là de mon côté.
Mis à jour par Gérard Rio il y a plus de 4 ans
je ne comprends pas tes nan.
J'ai repris ton fichier que j'ai fait tourné avec chaque fonction nD, en fast ou non, pas de nan ?? mais a priori ce n'est pas le même calcul que toi.
est-ce que tu peux mettre ta mise en données pour que je regarde
Mis à jour par Julien Troufflard il y a plus de 4 ans
- Fichier test_1D.log test_1D.log ajouté
je n'ai pas changé la mise en données.
Au cas où, j'ai retéléchargé la toute première version de l'archive .tar de ce ticket. J'ai lancé le calcul test_1D.info tel quel avec la version 6.966 fast et j'obtiens des nan comme montré dans le fichier .log ci-joint.
Mis à jour par Gérard Rio il y a plus de 4 ans
OK, je n'utilisais pas le même fichier: j'utilisais le fichier: test_fct_litterales.info
Bon... ceci étant j'ai donc également des nan mais qu'avec la version fast, avec la version non fast, pas de nan ???
et le déroulement du non fast semble identique au fast (en tout cas sur les premiers incréments).
Je vais essayer de comprendre ce qui se passe.
Mis à jour par Gérard Rio il y a plus de 4 ans
J'ai rajouté plusieurs sorties de commentaires de manière à tracer les calculs.
1) on peut ajouter un niveau de commentaire sur la courbe analytique, si > 2, il y a affichage du x, de f(x), f'(x) et f"(x), dans certains cas uniquement une ou deux des trois valeurs, cela dépend de l'appel de la fonction
2) dans la loi de comportement "Iso_elas_expo1D" , on peut ajouter un niveau de commentaire, si > 4, on a l'affichage des def, gij,sig et fct :
Dans ton calcul j'obtiens après l'itération 0
-- fin calcul second membre et raideur
MatBand resolution PMIN= 1 PMAX= 2.80555e+06
MatBand resolution PMIN= 3.56436e-07 PMAX= 1
--- maxDeltaDdl= 0.0239579
-- debut calcul second membre et raideur
puis (je recopie ici uniquement une partie de la sortie) :
- Norme Residu/Reaction --> 4.40661e-09
-- Iso_elas_expo1D::Calcul_DsigmaHH_tdt(.. epsBB(1,1)= 2.39655e-08 epsBH(1,1)= 0.00023954 gijHH(1,1)= 9995.21 x= epsb= 0.00023954 fct(x) = 27805.2 sigBH(1,1)= 6.66047 sigHH(1,1)= 66572.8
retour courbe f_epsAl x= 0.00023954 valeur= 27805.2 derivee= 1.03869e+06
- Iso_elas_expo1D::Calcul_DsigmaHH_tdt(.. epsBB(1,1)= 2.39655e-08 epsBH(1,1)= 0.00023954 gijHH(1,1)= 9995.21 x= epsb= 0.00023954 fct(x) = 27805.2 sigBH(1,1)= 6.66047 sigHH(1,1)= 66572.8
retour courbe f_epsAl x= 183.653 valeur= nan derivee= nan
-- Iso_elas_expo1D::Calcul_DsigmaHH_tdt(.. epsBB(1,1)= 4.98642e-05 epsBH(1,1)= -183.653 gijHH(1,1)= 3.68306e+06 x= epsb= 183.653 fct(x) = nan sigBH(1,1)= nan sigHH(1,1)= nan
- fin calcul second membre et raideur
ITERATION : 1
(assemblage 1) reaction maxi : 6.66047, du ddl X1, du noeud/maillage 1/1
max puissance exterieure = 0
max puissance interieurs = nan
max des reactions = 6.66047
max du residu total = 2.93501e-08
donc un gijHH(1,1)= 3.68306e+06 !! et une déformation en compression de epsBH(1,1)= -183.653
Du coup j'ai mis un message d'erreur qui permet de déclencher un affichage si on observe un rapport entre 0 et t+dt , > 1000 ou < 0.001, concernant gijHH et gijBB, c-a-d si on a des déformations de plus de 1000 ! J'espère que cela sera suffisent...
Dans ce cas maintenant j'ai l'affichage:
-- deformation: ---
nb noeud concerne = 2 numInteg= 1
-- information concernant les noeuds:
- Norme Residu/Reaction --> 4.4066072651780842e-09
--noeud --
Numero : 5000, du maillage: 1
Coordonnee(s) initiale(s) du noeud :
{ 99.98 0 0 }
Coordonnee(s) a l'instant t :
{ 99.98 0 0 }
Coordonnee(s) a l'instant t+dt :
{ 100.004 0 0 }
Degre(s) de liberte lie(s) au noeud :
Taille du tableau : 6 , a 0, a t ( et t+dt ?)
99.98 X1 = 99.98 val_libre, 100.004 0 X2 = 0 val_fixe, 0 0 X3 = 0 val_fixe, 0 0 R_X1 = 0 lisible_fixe, 0 0 R_X2 = 0 lisible_fixe, 0 0 R_X3 = 0 lisible_sur_fixe, 0
ddl_quelconque: XI_ITER_0 Coordonnee dim= 3 99.979999999997247 0 0
-- fin noeud --
--noeud --
Numero : 5001, du maillage: 1
Coordonnee(s) initiale(s) du noeud :
{ 99.999999999997243 0 0 }
Coordonnee(s) a l'instant t :
{ 99.999999999997243 0 0 }
Coordonnee(s) a l'instant t+dt :
{ 100.00499999999724 0 0 }
Degre(s) de liberte lie(s) au noeud :
Taille du tableau : 6 , a 0, a t ( et t+dt ?)
99.999999999997243 X1 = 99.999999999997243 val_fixe, 100.00499999999724 0 X2 = 0 val_fixe, 0 0 X3 = 0 val_fixe, 0 0 R_X1 = 0 lisible_fixe, 0 0 R_X2 = 0 lisible_sur_fixe, 0 0 R_X3 = 0 lisible_sur_fixe, 0
ddl_quelconque: XI_ITER_0 Coordonnee dim= 3 100.00499999999724 0 0
-- fin noeud --
-- information concernant la metrique actuelle au pti --
-- info elements de base de la metrique --
giB_0:
BaseB dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeB dim= 3 0.0099999999999980105 0 0
giB_t:
BaseB dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeB dim= 3 0.0099999999999980105 0 0
giB_tdt:
BaseB dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeB dim= 3 0.00052106914910154956 0 0
giH_0:
BaseH dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeH dim= 3 100.00000000001988 0 0
giH_t:
BaseH dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeH dim= 3 100.00000000001988 0 0
giH_tdt:
BaseH dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeH dim= 3 1919.1310821687373 0 0
gijBB_0: Tenseur1BB 9.9999999999960215e-05
gijBB_t: Tenseur1BB 9.9999999999960215e-05
gijBB_tdt: Tenseur1BB 2.715130581454129e-07
gijHH_0: Tenseur1HH 10000.000000003978
gijHH_t: Tenseur1HH 10000.000000003978
gijHH_tdt: Tenseur1HH 3683064.1105461488
jacobien_0= 0.0099999999999980105 jacobien_t= 0.0099999999999980105 jacobien_tdt= 0.00052106914910154956
-- fin info elements de metrique --
-- fin calcul second membre et raideur
ITERATION : 1
(assemblage 1) reaction maxi : 6.6604743814852796, du ddl X1, du noeud/maillage 1/1
max puissance exterieure = 0
max puissance interieurs = nan
max des reactions = 6.6604743814852796
max du residu total = 2.9350094798985538e-08
Je pense que c'est toujours la même même raison du fait du maillage dont la taille fait que le premier élément sur lequel on applique la condition limite, est complètement écrabouillé après l'itération 0. Du coup la fonction que tu as mise retourne nan , j'ai vérifié avec octave, c'est a priori normal vue le log que tu utilises).
--> pour voir ces messages il faut mettre un niveau de commentaire particulier pour l'algo. Je te joins ma mise en données pour info, si tu veux récupérer les mêmes affichages
Donc a priori, effectivement on peut obtenir des nan, tout dépend de la mise en données et aussi... de la convergence au cours des itérations successives !
si on impose un déplacement de 5mm avec un pas de 1.e-4, on a encore des nan, mais pas dès les premières itérations.
On obtient:
INCREMENT DE CHARGE : 1 intensite 0.0001 t= 0.0001 dt= 0.0001 ======================================================================
-- debut calcul second membre et raideur
-- fin calcul second membre et raideur
--- |max_var_DeltaDdl|= 0 , |max_deltaDdl|= 0.0005
MatBand resolution PMIN= 1 PMAX= 2.80555e+06
MatBand resolution PMIN= 3.56436e-07 PMAX= 1
- Norme Residu/Reaction --> 1.00108
MatBand resolution PMIN= 1 PMAX= 2.80241e+06
MatBand resolution PMIN= 3.56835e-07 PMAX= 1
(assemblage 1) delta maxi: -0.00635961, ddl X1, noeud/mail 5000/1 , var total:0.00143523, sur:99.9814autres ddl R_X1 0 var 0;
- Norme Residu/Reaction --> 1.00296
MatBand resolution PMIN= 1 PMAX= 2.79563e+06
MatBand resolution PMIN= 3.57701e-07 PMAX= 1
(assemblage 1) delta maxi: 0.0248548, ddl X1, noeud/mail 5000/1 , var total:-0.00492438, sur:99.9751autres ddl R_X1 0 var 0;
- Norme Residu/Reaction --> 3.53725e-09
-- debut calcul second membre et raideur
-- fin calcul second membre et raideur
ITERATION : 3
(assemblage 1) reaction maxi : 5.5495, du ddl X1, du noeud/maillage 1/1
--- |max_var_DeltaDdl|= 0.0248548 , |max_deltaDdl|= 0.0199304
max puissance exterieure = 0
max puissance interieurs = nan
max des reactions = 5.5495
max du residu total = 1.963e-08
donc à l'avant dernière itération, on a un déplacement maxi de 0.0199304 alors que la longueur de l'élément est de 0.02, donc on part dans les choux à l'itération suivante.
On voit que cela dépend du type de convergence...
Je recopie pour info les infos aux 2 noeuds du dernier élément:
-- information concernant les noeuds:
--noeud --
Numero : 5000, du maillage: 1
Coordonnee(s) initiale(s) du noeud :
{ 99.979999999997247 0 0 }
Coordonnee(s) a l'instant t :
{ 99.979999999997247 0 0 }
Coordonnee(s) a l'instant t+dt :
{ 99.999930440011426 0 0 }
Degre(s) de liberte lie(s) au noeud :
Taille du tableau : 6 , a 0, a t ( et t+dt ?)
99.979999999997247 X1 = 99.979999999997247 val_libre, 99.999930440011426 0 X2 = 0 val_fixe, 0 0 X3 = 0 val_fixe, 0 0 R_X1 = 0 lisible_fixe, 0 0 R_X2 = 0 lisible_sur_fixe, 0 0 R_X3 = 0 lisible_sur_fixe, 0
ddl_quelconque: XI_ITER_0 Coordonnee dim= 3 99.979999999997247 0 0
-- fin noeud --
--noeud --
Numero : 5001, du maillage: 1
Coordonnee(s) initiale(s) du noeud :
{ 99.999999999997243 0 0 }
Coordonnee(s) a l'instant t :
{ 99.999999999997243 0 0 }
Coordonnee(s) a l'instant t+dt :
{ 100.00049999999725 0 0 }
Degre(s) de liberte lie(s) au noeud :
Taille du tableau : 6 , a 0, a t ( et t+dt ?)
99.999999999997243 X1 = 99.999999999997243 val_fixe, 100.00049999999725 0 X2 = 0 val_fixe, 0 0 X3 = 0 val_fixe, 0 0 R_X1 = 0 lisible_sur_fixe, 0 0 R_X2 = 0 lisible_sur_fixe, 0 0 R_X3 = 0 lisible_sur_fixe, 0
ddl_quelconque: XI_ITER_0 Coordonnee dim= 3 100.00049999999725 0 0
-- fin noeud --
-- information concernant la metrique actuelle au pti --
-- info elements de base de la metrique --
giB_0:
BaseB dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeB dim= 3 0.0099999999999980105 0 0
giB_t:
BaseB dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeB dim= 3 0.0099999999999980105 0 0
giB_tdt:
BaseB dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeB dim= 3 0.00028477999290998923 0 0
giH_0:
BaseH dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeH dim= 3 100.00000000001988 0 0
giH_t:
BaseH dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeH dim= 3 100.00000000001988 0 0
giH_tdt:
BaseH dimension: 3 nombre de vecteurs : 1
les vecteurs de la base: Tableau :taille= 1 CoordonneeH dim= 3 3511.4826353551848 0 0
gijBB_0: Tenseur1BB 9.9999999999960215e-05
gijBB_t: Tenseur1BB 9.9999999999960215e-05
gijBB_tdt: Tenseur1BB 8.1099644361813522e-08
gijHH_0: Tenseur1HH 10000.000000003978
gijHH_t: Tenseur1HH 10000.000000003978
gijHH_tdt: Tenseur1HH 12330510.298400996
jacobien_0= 0.0099999999999980105 jacobien_t= 0.0099999999999980105 jacobien_tdt= 0.00028477999290998923
-- fin info elements de metrique --
Maintenant si je mets un déplacement de 3mm là plus de nan.
Lorsqu'il y a une convergence avec nan, à mon avis ce n'est pas bon, il faut revoir la mise en données.
Mis à jour par Gérard Rio il y a plus de 4 ans
- Fichier test_1D.info test_1D.info ajouté
avec la mise en données que j'ai oubliée !
à utiliser avec version >= 6.967
Mis à jour par Julien Troufflard il y a plus de 4 ans
une solution serait aussi de produire une divergence de l'incrément en cas de NaN.
Comme ça, le pas de temps va se réduire de lui-même jusqu'à ce que le déplacement imposé soit suffisamment petit pour pouvoir traiter la perturbation en bout de barre.
Enfin, je propose ça parce que je me méfie beaucoup des problèmes silencieux. Là, je comprends pas qu'un calcul puisse tourner avec des NaN et produire un résultat. Si on ne scrute pas le fichier log, on passe à coté de l'erreur.
Mis à jour par Gérard Rio il y a plus de 4 ans
oui tout à fait d'accord,
je test normalement certains nan, mais visiblement il faut faire mieux, je vais regarder comment améliorer !
Mis à jour par Gérard Rio il y a plus de 4 ans
donc voici les nouveaux ajouts (V 6.967) :
1) si on a un nan ou infini sur les puissances ext ou int ou totale -> une divergence de boucle globale de newton imposée
2) si sur la loi Iso_elas_expo1D on a une fonction qui renvoie un nan ou infinie -> divergence de loi d'où divergence de boucle de newton.
NB: dans le cas du test, c'est la divergence d'Iso_elas_expo1D qui est tout d'abord repérée, mais avec une autre loi où il n'y a pas de divergence de loi, c'est le 1) qui repère.
Bon... il y aura sans doute des trous dans la raquette mais cela permet d'améliorer le traitement automatique de certaines erreurs
Peux-tu vérifier ? pour que je ferme le ticket (qui dérive et n'a plus grand chose à voir avec le titre)
Mis à jour par Julien Troufflard il y a plus de 4 ans
ça fonctionne parfaitement. Le déroulement du calcul se passe comme prévu : subdivision du pas de temps jusqu'à ce que ça converge normalement. Les contraintes et déformations sont parfaitement homogènes dans toute la barre à tous les incréments ayant convergés.
Mis à jour par Julien Troufflard il y a plus de 4 ans
et résultat strictement identique au cas avec la loi tabulée
Mis à jour par Gérard Rio il y a plus de 4 ans
- Statut changé de En cours à Résolu
- % réalisé changé de 90 à 100
bonne nouvelle, je clos le ticket