Projet

Général

Profil

Anomalie #281

Erreur pilotage loi LOI_DES_MELANGES_EN_SIGMA avec 6.975

Ajouté par Frank Petitjean il y a presque 4 ans. Mis à jour il y a presque 4 ans.

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

100%

Temps estimé:
Temps passé:

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

modele.CVisu (8,9 ko) modele.CVisu Frank Petitjean, 18/01/2021 10:17
modele.info (12,2 ko) modele.info Frank Petitjean, 18/01/2021 10:17
maillage.her (1,15 Mo) maillage.her Frank Petitjean, 18/01/2021 10:17
fonctionsAtmo.dat (4,04 ko) fonctionsAtmo.dat Frank Petitjean, 18/01/2021 15:20
fonctions_1d_R28.template (2,21 ko) fonctions_1d_R28.template Frank Petitjean, 18/01/2021 16:39
#1

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 ?

#2

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

Le voici, désolé !

#3

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

il y a aussi le fichier fonctions_1d_R28.template qui manque...

#4

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

Décidément mon jeu de données est compliqué !
Je pense que c'est complet maintenant. Encore désolé

#5

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 :

% HZppD_Vn-1 -f modele

#######################################################################
  1. #
  2. | | ==== === ==== ==== | | | | #
  3. | | | | | | / | | | | #
  4. |====| |=== === |=== / |====| ------- ------- #
  5. | | | | \ | / | | | | #
  6. | | ==== | \ ==== ==== | | | | #
  7. # #######################################################################
  8. Copyright (c) 1997-2020 Gerard Rio, #
  9. All rights reserved. https://herezh.irdl.fr #
  10. Certification IDDN.FR.010.0106078.000.R.P.2006.035.20600 #
  11. # #######################################################################
  12. (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)
    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
    ----
    fin fonction Fonction_expression_litterale_nD -----

    • 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 tenseur

    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

    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 -----
    • 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++ | =============================================================

#6

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

#7

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

Frank,
est-ce que c'est ok maintenant ?

#8

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

oui tout est ok maintenant. Merci

#9

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,

Formats disponibles : Atom PDF

Redmine Appliance - Powered by TurnKey Linux