Anomalie #156
Erreur FONC_SCAL_COMBINEES_ND
Ajouté par Frank Petitjean il y a presque 7 ans. Mis à jour il y a presque 7 ans.
Description
Est-ce que tu as testé l'exemple 2 page 338 ? Cela conduit à une erreur chez moi (v6.819)
Erreur :
erreur en lecture du mot cle ident_interne
on a lue fct_base=Fonc_scal_combinees_nD::LectDonnParticulieres_Fonction_nD(( ...
passage dans la methode Sortie
erreur en lecture d'une fonction nD_
L'exemple 1 fonctionne bien. Merci d'avoir introduit cette possibilité, c'est très utile !
Fichiers
maillage.her (5,85 ko) maillage.her | Frank Petitjean, 05/01/2018 12:52 | ||
modele.CVisu (14,4 ko) modele.CVisu | Frank Petitjean, 05/01/2018 12:52 | ||
modele.info (4,42 ko) modele.info | Frank Petitjean, 05/01/2018 12:52 | ||
maillage.her (5,87 ko) maillage.her | Frank Petitjean, 12/01/2018 11:57 | ||
modele.CVisu (14,5 ko) modele.CVisu | Frank Petitjean, 12/01/2018 11:57 | ||
modele.info (6,61 ko) modele.info | Frank Petitjean, 12/01/2018 11:57 |
Mis à jour par Frank Petitjean il y a presque 7 ans
- Fichier maillage.her maillage.her ajouté
- Fichier modele.CVisu modele.CVisu ajouté
- Fichier modele.info modele.info ajouté
Problème avec les variables locales définies aux ddl
Le cas suivant ne fonctionne pas :
f_p0 FONCTION_EXPRESSION_LITTERALE_nD
deb_list_var_ temps_courant fin_list_var_
fct= 10
fin_parametres_fonction_expression_litterale_
f_pression FONC_SCAL_COMBINEES_ND
fct_base= f_p0
fin_fcts_interne_fonction_combinee_
deb_list_var_ X3 fin_list_var_
fct= f_p0
fin_parametres_fonction_combinee_
F_to PRESSION 1 Fonction_nD_CHARGE: f_pression
Si on remplace X3 par temps_courant ça fonctionne !
Mis à jour par Gérard Rio il y a presque 7 ans
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 50
oui effectivement il y a un problème dans le cas de l'utilisation de fonction combinées. Je viens d'en trouver l'explication et je vais corriger le problème.
Mis à jour par Gérard Rio il y a presque 7 ans
- % réalisé changé de 50 à 80
j'ai corrigé le problème. Par contre cela a des répercussions au niveau des fonctions de pondérations pour les lois combinées. J'ai essayé de mettre le tout en cohérence mais il est possible qu'il reste des pb de finition. Par contre la forme actuelle est plus robuste.
L'origine de pb est l'existence en // de variables locales et de variables globales. Actuellement, l'esprit de l'évolution d'Herezh est de ne pas indiquer spécialement les variables globales au niveau de l'utilisation des fonctions nD, compte tenu du fait que ces variables ont été déclarées au moment de la définition de la fonction.
Cependant, ce fonctionnement est différent de celui des courbes 1D, qui elles ont un argument dont le sens varie en fonction de l'utilisation de la courbe.
Les premiers développements des fct nD suivaient la logique des courbes 1D, au niveau des fonctions de pondérations donc on retrouve la définition des variables globales au niveau des pondérations.
Bon... cela va se régler petit à petit, mais il y aura sans doute des pb transitoires.
La version linux 6.820 est en compilation...
Mis à jour par Gérard Rio il y a presque 7 ans
la version 6.820 avec la correction du bug, est disponible sur le site pour linux et mac
Mis à jour par Frank Petitjean il y a presque 7 ans
YES !
Ça marche pour moi aussi
L'année 2018 démarre fort pour Herezh++ (et son papa)
Merci
Mis à jour par Frank Petitjean il y a presque 7 ans
Désolé mais je n'avais pas exploré toutes les situations et j'ai encore une erreur dans le cas où une ou plus des fonctions de base dépend de X. Dans ce cas Herezh s'arrête sans calculer et sans message.
Exemple :
f_p0 FONCTION_EXPRESSION_LITTERALE_nD
deb_list_var temps_courant fin_list_var_
fct= (-200-10)*temps_courant + 10
fin_parametres_fonction_expression_litterale_
f_p1 FONCTION_EXPRESSION_LITTERALE_nD
deb_list_var temps_courant fin_list_var_
deb_list_var_ X3 fin_list_var_
fct= 10
fin_parametres_fonction_expression_litterale_
f_pression FONC_SCAL_COMBINEES_ND
fct_base= f_p0
fct_base= f_p1
fin_fcts_interne_fonction_combinee
deb_list_var_ X3 fin_list_var_
fct= (f_p1-f_p0)/20*X3 +f_p0
fin_parametres_fonction_combinee_
Même problème si la fonction combinée ne dépend d'aucune variable.
Frank
Mis à jour par Frank Petitjean il y a presque 7 ans
Autre problème : les fonctions nD de type FONC_SCAL_COMBINEES_ND ne peuvent pas avoir comme variable une variable globale de type integrale_sur_volume_.
Message d'erreur
pb de nombre d'argument non coherentes !! on n'a pas assez d'arguments pour l'appel de la fonction globale
Alors que cette même variable est acceptée par les fonctions nD de type FONCTION_EXPRESSION_LITTERALE_nD.
Je suis un gros consommateur de fonctions nD en ce moment pour mettre en place mon modèle hydrostatique (gaz parfait + equ. d'équilibre). Cela permet de faire plein de tests :-)
Merci
Frank
Mis à jour par Gérard Rio il y a presque 7 ans
- Statut changé de En cours à Résolu
- % réalisé changé de 80 à 100
correction du dernier bug mentionné.
disponible dans les versions > 6.820
Mis à jour par Frank Petitjean il y a presque 7 ans
Il reste encore des petits problèmes avec les FONC_SCAL_COMBINEES_ND
J'ai ces 2 fonction :
f_Ch FONCTION_EXPRESSION_LITTERALE_nD
deb_list_var_ temps_courant fin_list_var_
fct= 4.0026/(8314.32*288.15)*28.964/4.0026
fin_parametres_fonction_expression_litterale_
et
inv_p0_he FONC_SCAL_COMBINEES_ND
fct_base= f_Ch
fct_base= f_mh
fin_fcts_interne_fonction_combinee_
deb_list_var_ X1 X2 X3 N_surf_1 N_surf_2 N_surf_3 fin_list_var_
fct= f_Ch/f_mh * exp(-f_Ch*9.8066*X3) * (-X1*N_surf_1-X2*N_surf_2-X3*N_surf_3)/3 * 72
fin_parametres_fonction_combinee_
et la variable globale int_vol_ballon_E_2D_fct_nD_inv_p0_he obtenue par l'intégrale
nom_mail= ballon E_2D une_fonction_nD_ inv_p0_air
Si je définis la fonction qui utilise la variable globale int_vol_ballon_E_2D_fct_nD_inv_p0_he :
p_he FONCTION_EXPRESSION_LITTERALE_nD
deb_list_var_ X3 int_vol_ballon_E_2D_fct_nD_inv_p0_he fin_list_var_
fct= 1/int_vol_ballon_E_2D_fct_nD_inv_p0_he * exp(-1.20855e-5*9.8066*X3)
fin_parametres_fonction_expression_litterale_
c'est OK
Mais si je veux réutiliser en plus la fonction de base f_Ch :
p_he FONC_SCAL_COMBINEES_ND
fct_base= f_Ch
fin_fcts_interne_fonction_combinee_
deb_list_var_ X3 int_vol_ballon_E_2D_fct_nD_inv_p0_he fin_list_var_
fct= 1/int_vol_ballon_E_2D_fct_nD_inv_p0_he * exp(-f_Ch*9.8066*X3)
fin_para
Herezh plante :
- pb de nombre d'argument non coherentes !! on n'a pas assez d'arguments pour l'appel de la fonction globale:
fonction composee : Fonc_scal_combinees_nD : nom_ref= p_he
Désolé !
Frank
Mis à jour par Gérard Rio il y a presque 7 ans
et oui, il restait un autre bug ...
réparé (enfin j'espère) -> version > 6.821
Mis à jour par Frank Petitjean il y a presque 7 ans
Le cas avec la fonction p_he ci-dessus fonctionne. Par contre si je définis la fonction FONC_SCAL_COMBINEES_ND
f_pression FONC_SCAL_COMBINEES_ND
fct_base= p_he
fin_fcts_interne_fonction_combinee_
fct= p_he
fin_parametres_fonction_combinee_
le résultats obtenu avec le chargement
F_to PRESSION 1 Fonction_nD_CHARGE: f_pression # tous les nœuds sont encastrés
donne NAN !!!
Mis à jour par Gérard Rio il y a presque 7 ans
- Statut changé de Résolu à En cours
- % réalisé changé de 100 à 90
En version non fast, Herezh indiquait que le passage de variable n'était pas correct au niveau d'une fonction nD. Par contre en version fast, il n'y avait pas cette vérification ce qui entraînait une erreur de calcul d'où un nan au bout d'un moment (rapide).
Ceci étant, il y avait un manque d'info au niveau de la séparation entre d'une part: les variables globales éventuelles des fonctions membres d'une fonction combinée, et d'autre part les variables globales éventuelles propres à la fonction globale d'une fonction combinée.
De coup j'ai retravaillé la répartition des infos.
J'ai repassé tous les tests de fonctions pression proposées dans la mise en données, et a priori avec la version 6.823, l'ensemble fonctionne (par contre je n'ai pas regardé la qualité des résultats).
Mis à jour par Frank Petitjean il y a presque 7 ans
Bonjour Gérard,
Tous mes tests sont bons et je confirme qu'avant cette dernière correction (opérationnelle sur la v6.823) Herezh pouvait faire des calculs erronées de fonctions nD sans pour autant signaler d'erreur. Situation périlleuse. J'ai perdu quelques touffes de cheveux dans cette affaire ;-)
Pour ma part tu peux clore le ticket (en attendant le prochain !)
Frank
Mis à jour par Gérard Rio il y a presque 7 ans
- Statut changé de En cours à Résolu
- % réalisé changé de 90 à 100
fin de ce ticket !! ouf !
Mis à jour par Frank Petitjean il y a presque 7 ans
- Fichier maillage.her maillage.her ajouté
- Fichier modele.CVisu modele.CVisu ajouté
- Fichier modele.info modele.info ajouté
Je réouvre le ticket, il y a encore du grabude chez les fonctions FONC_SCAL_COMBINEES_ND.
J'ai ma fonction finale
f_pression FONC_SCAL_COMBINEES_ND
fct_base= p_he
fct_base= p_air1
fin_fcts_interne_fonction_combinee_
fct= p_he - p_air1
fin_parametres_fonction_combinee_
qui fournit la valeur du chargement
F_to PRESSION 1 Fonction_nD_CHARGE: f_pression
La fonction donne une valeur juste et quasi uniforme sur le maillage. Pour voir sa valeur je bloque les nœuds et je sors la pression_ext en sortie Maple et Gmsh. C'est OK
Pourtant le calcul diverge après 20 itérations.
Si j'impose la même valeur directement avec la ligne
fct= valeur # p_he - p_air1
le calcul converge très vite. Il y a un blème...
Frank
Mis à jour par Gérard Rio il y a presque 7 ans
J'ai l'impression qu'il s'agit d'un problème de stabilité numérique.
Lorsque l'on se met en mode debug= 1, on voit nettement que le volume se met à osciller.
Je pense qu'il faut éviter d'avoir une mise à jour à tous les pas des différentes grandeurs.
Dans une première étape, une méthode pour analyser, serait d'utiliser la valeur de l'intégrale, calculée au pas précédent.
Remarque: ceci étant, il restait également un bug, qui ne change rien à ce que j'ai dit précédemment, mais je que j'ai corrigé -> version 6.824
Mis à jour par Frank Petitjean il y a presque 7 ans
En effet je n'avais pas du tout réalisé que l'intégrale pouvait fortement varier au cours des itérations surtout en RD. La solution d'une mise à jour par incrément me parait dans ce cas fort judicieux. Est-ce qu'il est possible donc d'ajouter cette option de mise à jour car sinon je ne sais pas comment faire converger mes calculs...
Mis à jour par Frank Petitjean il y a presque 7 ans
La version 6.824 corrige un bug repéré mais non signalé dans ce ticket. Dans la fonction FONC_SCAL_COMBINEES_ND précédente, lorsque j'ajoutais la variable globale temps_courant :
f_pression FONC_SCAL_COMBINEES_ND
fct_base= p_he
fct_base= p_air1
fin_fcts_interne_fonction_combinee_
deb_list_var_ X3 temps_courant fin_list_var_
fct= p_he - p_air1
fin_parametres_fonction_combinee_
Herezh marquait une erreur. Ce problème est corrigé. Merci
Reste mon soucis d'instabilité. Si tu peux mettre en place d'autres possibilités pour la mise à jour des variables globales de type "intégrale" c'est bien.
Mis à jour par Frank Petitjean il y a presque 7 ans
Ma première idée est d'introduire une option permettant, comme tu le suggères, de ne calculer l'intégrale de volume qu'à la fin de l'incrément et non à chaque itération. Ainsi lors des itérations d'équilibre c'est la valeur à l'incrément convergé précédent qui est utilisé. Reste la question de la valeur au 1er incrément. Je suggère de calculer l'intégrale sur le maillage non déformé.
Deuxième idée serait de proposer une mise à jour tous le N itérations ou peut être une valeur moyenne sur les N dernières itérations...
Je pense que dans un 1er temps, la solution 1 peut me dépanner car mon idée et de faire évoluer le calcul (i.e la pression dans la ballon) en jouant sur la masse d'hélium via une fonction nD dépendant du temps_courant. Je vais donc avoir une succession d'état d'équilibre, chacun obtenu par RD.
Qu'en penses-tu
Mis à jour par Gérard Rio il y a presque 7 ans
1) "Ma première idée est d'introduire une option permettant, comme tu le suggères, de ne calculer l'intégrale de volume qu'à la fin de l'incrément et non à chaque itération. Ainsi lors des itérations d'équilibre c'est la valeur à l'incrément convergé précédent qui est utilisé. "
Actuellement l'intégrale en cours est disponible mais également l'intégrale obtenue à l'incrément précédent.
Par exemple:
int_vol_ballon_E_2D_fct_nD_inv_p0_air
correspond à l'intégrale courante (calculée à l'itération précédente)
et
int_vol_ballon_E_2D_fct_nD_inv_p0_air_t_
correspond à l'intégrale obtenue à l'incrément prédédent
"Reste la question de la valeur au 1er incrément. Je suggère de calculer l'intégrale sur le maillage non déformé."
Il faut gérer le chargement pour avoir un premier incrément sans déformation, et dans ce cas en fin d'incrément l'intégrale sera calculée et disponible pour l'incrément suivant.
2) "Deuxième idée serait de proposer une mise à jour tous le N itérations ou peut être une valeur moyenne sur les N dernières itérations..."
Je vais réfléchir, pour l'instant je ne vois pas de solution simple ... mais à voir
Mis à jour par Frank Petitjean il y a presque 7 ans
Très bien, j'avais oublié que l'option existe déjà avec les variable _t. Pour l'initialisation j'ai plusieurs idées pour m'en sortir.
Suite demain pour moi.
Mis à jour par Frank Petitjean il y a presque 7 ans
Le choix de la variable indicée t permet la convergence. Pour ce faire je fais un premier incrément de mise en pression avec une pression imposée explicite. Le calcul avec une pression implicite (i.e. fonction de la forme) ne démarre qu'au 2e incrément via des TEMPS_MINI et MAXI.
La sortie avec mode_debug_= 1 permet de bien suivre l'évolution des variables globales au cours des itérations et comment les variables sont initialisées en début d'incrément.
Un grand merci pour ton soutien.
Reste le bon usage du modèle physique car la surpression p_he - p_air est très faible devant les pressions absolues en jeu et une petite variation relative de p_he entraine une grande variation de la surpression absolue. J'ai encore du taffe !