Projet

Général

Profil

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.

Statut:
Résolu
Priorité:
Normal
Assigné à:
-
Version cible:
-
Début:
05/01/2018
Echéance:
% réalisé:

100%

Temps estimé:
Temps passé:

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
#1

Mis à jour par Frank Petitjean il y a presque 7 ans

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 !

#2

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.

#3

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...

#4

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

#5

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

#6

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

#7

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

#8

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

#9

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

#10

Mis à jour par Gérard Rio il y a presque 7 ans

il me manque la fonction f_mh pour tester ?

#11

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

#12

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 !!!

#13

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).

#14

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

#15

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 !

#16

Mis à jour par Frank Petitjean il y a presque 7 ans

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

#17

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

#18

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...

#19

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.

#20

Mis à jour par Gérard Rio il y a presque 7 ans

peux-tu un peu détailler ton idée ?

#21

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

#22

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

#23

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.

#24

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 !

Formats disponibles : Atom PDF

Redmine Appliance - Powered by TurnKey Linux