Anomalie #281
Erreur pilotage loi LOI_DES_MELANGES_EN_SIGMA avec 6.975
Description
Bonjour Gérard,
Le pilotage de a loi LOI_DES_MELANGES_EN_SIGMA par ma fonction nD entraine une erreur de syntaxe depuis la version V6.975.
Ci-joins mon jeu de donnée (non minimal)
Merci,
Frank
Fichiers
Mis à jour par Gérard Rio il y a presque 4 ans
- Statut changé de Nouveau à En cours
pourrais-tu compléter avec le fichier fonctionsAtmo.dat ?
Mis à jour par Frank Petitjean il y a presque 4 ans
- Fichier fonctionsAtmo.dat fonctionsAtmo.dat ajouté
Le voici, désolé !
Mis à jour par Gérard Rio il y a presque 4 ans
il y a aussi le fichier fonctions_1d_R28.template qui manque...
Mis à jour par Frank Petitjean il y a presque 4 ans
- Fichier fonctions_1d_R28.template fonctions_1d_R28.template ajouté
Décidément mon jeu de données est compliqué !
Je pense que c'est complet maintenant. Encore désolé
Mis à jour par Gérard Rio il y a presque 4 ans
- % réalisé changé de 0 à 60
bonjour Frank,
en fait j'ai réagi un peu vite à ton précédent ticket concernant la différence entre "TEMPS" et "temps_courant".
Ce sont effectivement les mêmes grandeurs mais :
- la première est utilisée dans les fonctions 1D (donc les courbes) et elle est utilisée comme indicateur de lecture pour reconnaitre l'utilisation d'une courbe spécifique dépendant du temps
- la seconde est utilisée pour repérer une grandeur globale ...
J'avais fait une modif pour combiner ces deux grandeurs (cf. ma réponse dans le précédent ticket), mais c'était une erreur, j'ai donc remis les choses comme auparavant et la lecture s'effectue maintenant correctement.
Ceci étant, il y avait un second pb. Dans les dernières versions j'ai introduit un calcul de normale moyenne aux noeuds. Dans ton cas, compte tenu de ta géométrie initiale, il y avait un pb due au fait que la somme des normales à un noeud, venant des normales calculées sur tous les éléments entourant le noeuds ===> donnait un vecteur nul !!
Du coup j'ai modifié l'algo de manière à tenir compte de ce cas: à partir d'une précédente somme si la nouvelle normale à ajouter est de sens inverse (choix via un produit scalaire) alors j'inverse la direction de la nouvelle normale...
Dans ce cas le calcul démarre ...
Par contre au bout d'un moment il stop car il détecte un nan dans le calcul de fonction nD: f_R_bulle
Comme l'enchainement de toutes les fonctions nD n'est pas très clair à décripter pour moi, peut-être que c'est plus simple que ce soit toi qui regarde en fonction du l'affichage d'erreur que je joints ici pour info en attendant de mettre une nouvelle version avec les modifs :
gerardrio@lg2m-2017.local% HZppD_Vn-1 -f modele
#######################################################################- #
- | | ==== === ==== ==== | | | | #
- | | | | | | / | | | | #
- |====| |=== === |=== / |====| ------- ------- #
- | | | | \ | / | | | | #
- | | ==== | \ ==== ==== | | | | #
- # #######################################################################
- Copyright (c) 1997-2020 Gerard Rio, gerard.rio@univ-ubs.fr #
- All rights reserved. https://herezh.irdl.fr #
- Certification IDDN.FR.010.0106078.000.R.P.2006.035.20600 #
- # #######################################################################
- (version avec le plus de verifications pendant le calcul et les I/O )
version 6.976
-- initialisation de l'entree des donnees racine du nom de fichier principal = modele======== fin de la lecture, Projet::Lecture( ...===========
matrice masse principale:
stockage initial matrice masse --> diagonal, nbddl= 18210
matrice masse secondaire:
stockage initial matrice masse --> diagonal, nbddl= 18210
modification de lambda 1 --> 0.6 (delta=0.4)fin fonction Fonction_expression_litterale_nD -----
probleme dans le calcul de la fonction on obtient en norme euclidienne: nan
Fonction_expression_litterale_nD::Valeur_FnD_interne(...
parametres d'appel: para(1)= -2.64372e-15 para(2)= 88.6114
>>> arbre d'appel : fonction this : Fonction_expression_litterale_nD f_R_bulle
arguments= Tableau :taille= 0
variables_globales_en_enumere= taille 0
variables_globales_en_string= taille 2 int_vol_E_quad_fct_nD_f_V V__X3PoleN
taille vecteur de retour: 1
f(x)= (3*int_vol_E_quad_fct_nD_f_V/(4*3.14))^(1/3)
type_de_fonction: FONCTION_EXPRESSION_LITTERALE_nD nom_ref= f_R_bulle
les_variables_lues: Tableau :taille= 0
noms_variables_globales:_taille 2 int_vol_E_quad_fct_nD_f_V V__X3PoleN
il y a 1 valeur(s) en retour de la fonction
derniers parametres d'appel: para(1)= -2.64372e-15 para(2)= 88.6114
dernieres valeurs de retour de la fonction: Tableau :taille= 1 nan
----- erreur dans l'appel de la fonction f_R_bulle d'expression (3*int_vol_E_quad_fct_nD_f_V/(4*3.14))^(1/3)
xi= 0x7fd58db43ae8 Fonction_expression_litterale_nD f_R_bulle
arguments= Tableau :taille= 0
variables_globales_en_enumere= taille 0
variables_globales_en_string= taille 2 int_vol_E_quad_fct_nD_f_V V__X3PoleN
taille vecteur de retour: 1
f(x)= (3*int_vol_E_quad_fct_nD_f_V/(4*3.14))^(1/3)
----- fin fonction Fonction_expression_litterale_nD -----
Fonction_expression_litterale_nD::Valeur_FnD_interne(... - erreur dans l'appel de la fonction f_ponderation_loi_melange d'expression: (X3 >= V__X3PoleN - 2*f_R_bulle && temps_courant >= 34) ? 0 : 1
xi= Tableau :taille= 1 0.32381548852728947
fonction composee : Fonc_scal_combinees_nD : nom_ref= f_ponderation_loi_melange
fonction de base: 1 f_R_bulle
-- vue d'ensemble des variables: ---
arguments= Tableau :taille= 1 X3
variables_globales_en_enumere= taille 1 temps_courant
variables_globales_en_string= taille 2 V__X3PoleN int_vol_E_quad_fct_nD_f_V
taille vecteur de retour: 1
f(x)= (X3 >= V__X3PoleN - 2*f_R_bulle && temps_courant >= 34) ? 0 : 1
type_de_fonction: FONC_SCAL_COMBINEES_ND nom_ref= f_ponderation_loi_melange
les_variables_lues: Tableau :taille= 1 X3
enumeres_globaux:_taille 1 temps_courant
noms_variables_globales:_taille 2 V__X3PoleN int_vol_E_quad_fct_nD_f_V
enum_etendu_locaux:_taille 1 X3 type coordonnees: valeur actuelle= 0
il y a: 0 scalaire(s) 1 coordonnee(s) 0 composante(s) de tenseuril y a 1 valeur(s) en retour de la fonction
il y a 1 valeur(s) en retour de la fonction
la fonction depend du temps, la fonction depend du point M : courant,
derniers parametres d'appel: para(1)= 0 para(2)= 88.286916791905043 para(3)= 0 para(4)= 88.611401410939933
dernieres valeurs de retour de la fonction: Tableau :taille= 1 1
----- fin affichage fonction Fonc_scal_combinees_nD -----
Fonc_scal_combinees_nD::Valeur_FnD_interne(...
fonction composee : Fonc_scal_combinees_nD : nom_ref= f_ponderation_loi_melange
fonction de base: 1 f_R_bulle
-- vue d'ensemble des variables: ---
arguments= Tableau :taille= 1 X3
variables_globales_en_enumere= taille 1 temps_courant
variables_globales_en_string= taille 2 V__X3PoleN int_vol_E_quad_fct_nD_f_V
taille vecteur de retour: 1
f(x)= (X3 >= V__X3PoleN - 2*f_R_bulle && temps_courant >= 34) ? 0 : 1
type_de_fonction: FONC_SCAL_COMBINEES_ND nom_ref= f_ponderation_loi_melange
les_variables_lues: Tableau :taille= 1 X3
enumeres_globaux:_taille 1 temps_courant
noms_variables_globales:_taille 2 V__X3PoleN int_vol_E_quad_fct_nD_f_V
enum_etendu_locaux:_taille 1 X3 type coordonnees: valeur actuelle= 0
il y a: 0 scalaire(s) 1 coordonnee(s) 0 composante(s) de tenseur
la fonction depend du temps, la fonction depend du point M : courant,
derniers parametres d'appel: para(1)= 0 para(2)= 88.286916791905043 para(3)= 0 para(4)= 88.611401410939933
dernieres valeurs de retour de la fonction: Tableau :taille= 1 1
----- fin affichage fonction Fonc_scal_combinees_nD ------ erreur
Valeur_FnD_Evoluee(...
fonction composee : Fonc_scal_combinees_nD : nom_ref= f_ponderation_loi_melange
fonction de base: 1 f_R_bulle
-- vue d'ensemble des variables: ---
arguments= Tableau :taille= 1 X3
variables_globales_en_enumere= taille 1 temps_courant
variables_globales_en_string= taille 2 V__X3PoleN int_vol_E_quad_fct_nD_f_V
taille vecteur de retour: 1
f(x)= (X3 >= V__X3PoleN - 2*f_R_bulle && temps_courant >= 34) ? 0 : 1
----- fin affichage fonction Fonc_scal_combinees_nD -----
erreur inconnue de loi de comportement, element= 1 point d'integration= 1======== erreur detectee ======
temps_user:0/00:00:19.70 system:0/00:00:00.64 reel:0/00:00:22.08
============================================================= | fin HEREZH++ | =============================================================
- erreur dans l'appel de la fonction f_R_bulle d'expression (3*int_vol_E_quad_fct_nD_f_V/(4*3.14))^(1/3)
Mis à jour par Frank Petitjean il y a presque 4 ans
Merci Gérard pour ces précisions et le temps passé à lire mon jeu de données, qui est assez complexe, et à comprendre le problème.
Lors de la "descente" du ballon et la formation de la bulle, l'excès de matière qui apparait conduit à la formation de lobes inversés en l’absence d'auto contact. J'ai proposé une solution assez efficace que Julien a encore améliorée. Cette méthode nécessite à calculer de la normale extérieure à l'enveloppe théorique du ballon. En comparant cette normale à la normale de l'élément on peut déterminer son degré de retournement et, par suite, agir sur la valeur et le signe de la pression.
Le calcul de cette normale nécessite de distinguer la partie haute du ballon en forme de bulle de la partie basse de forme plutôt cylindrique.
En utilisant les incroyables fonctions nD Julien et moi avons pu définir de façon implicite cette zone frontière au cours du calcul. Connaissant le volume V du ballon on peut calculer son rayon R. Par ailleurs en utilisant une variable utilisateur on peut récupérer la hauteur du ballon Hb. La zone frontière est alors à l'altitude Hb - 2*R. C'est simple et très efficace !
La partie basse du ballon en forme de traine se comporte comme un élément 1D. L'utilisation dans cette zone d'une loi de comportement plane complexe avec pli ne présente pas d'intérêt d'un point de vue mécanique et pause de grandes difficultés de convergence. Lorsque la ballon arrive au sol (dernier incrément de calcul) je bascule maintenant, avec une loi des mélanges, de la loi ISOELAS2D_c à la loi complexe avec pli. Ce bascule intervient que pour les pti situés au dessus de Hb-2*R (partie supérieure du ballon). Cela fonctionne très bien.
Je fais pareil dans la cas du ballon sous largeur avec un incrément ISOELAS2D_c et le second avec la loi complexe mais que dans la bulle (et non dans la traine). J'ai pour l'instant de très bons résultats...
Le calcul de rayon nécessite donc le calcul du volume. Sans y prendre garde j'ai fait démarrer ce calcul de volume dès le début du calcul alors que ce volume est quasiment nul ou difficile à calculer. Je vais ajouter une condition sur le nombre d'itérations (au 1er incrément) pour éviter ce problème.
Frank
Mis à jour par Gérard Rio il y a presque 4 ans
- Statut changé de En cours à Résolu
- % réalisé changé de 60 à 100
merci Frank,