Anomalie #265
utilisation coordonnée d'un noeud dans une fonction nD
Ajouté par Julien Troufflard il y a plus de 4 ans.
Mis à jour il y a environ 4 ans.
Description
Gérard,
est-il possible d'utiliser les coordonnées d'un noeud dans une fonction nD ? (noeud repéré par son numéro ou par une liste de référence)
J'ai mis un exemple en pièce jointe. J'ai défini un chargement de pression qui est gouverné par la fonction nD f_test. Cette fonction renvoie 1 si la coordonnée X1 est positive, sinon 0. Ensuite, on peut voir le résultat de ce traitement en regardant la variable pression_ext dans le résultat Gmsh.
Donc pour tester dans la fonction nD f_test, j'aimerais remplacer la ligne :
fct= X1 > 0 ? 1 : 0
par une ligne du genre :
> exemple de la coordonnée X1 du noeud 27 :
fct= X1 > X1_27 ? 1 : 0
> exemple de la coordonnée X1 du noeud défini par la liste de ref N_noeud_ref :
fct= X1 > X1_N_noeud_ref ? 1 : 0
voilà en gros.
merci
Fichiers
- Statut changé de Nouveau à En cours
- % réalisé changé de 0 à 50
Bonjour Julien,
dernièrement j'ai mis en place la notion de variables utilisateur (cf. doc: chap. 5). Tout n'est pas encore opérationnel mais ce qui existe doit a priori répondre à ta demande.
Il faut donc commencer, dans la mise en données, par déclarer une variable utilisateur qui correspond à la coordonnées X1 du noeud 27 (cf. la doc pour la syntaxe) et ensuite tu peux utiliser cette variable dans une fonction nD.
NB: les variables utilisateur sont des copies des grandeurs utilisées pendant le calcul. Elles sont mise à jour à chaque itération et/ou à chaque incrément.
Tiens moi au courant ...
ah oui j'étais passé complètement à côté. Je ne connaissais que les constantes.
Petite question pendant que je vérifie si ça fonctionne :
Il est marqué que les variables sont actualisées en début d'incrément. Est-ce que c'est également le cas pour les fonctions nD ? i.e est-ce que les fonctions nD ne sont pas réactualisées à chaque itération explicite en relaxation dynamique ?
voici une nouvelle version du fichier test.info
dans cet exemple, tous les noeuds sont bloqués selon X et Y et se déplacent selon la courbe 1D courbe_dpi.
Comme précédemment, je définis un chargement de pression mais cette fois selon la fonction nD f_test2. La fonction f_test2 est sensée renvoyer la coordonnée X3 du noeud 1, c'est-à-dire la coord X3 du centre du dome, soit :
incrément 1 : pression = X3 = 100 + 5
incrément 2 : pression = X3 = 100 + 20
incrément 3 : pression = X3 = 100 + 40
La pression devrait donc prendre successivement les valeurs 105, 120 et 140. Mais en affichage Gmsh j'ai une valeur de 0 dans la variable pression_ext.
NB : possibilité également de tester f_test2 sur un déplacement imposé via la seconde condition limite qui est commentée :
#N_tout UX UY 'UZ= Fonction_nD_CHARGE: f_test2 ECHELLE: 1'
- % réalisé changé de 50 à 60
En fait cela fonctionne mais... j'ai introduit (je ne me rappelle plus pourquoi !) la limitation suivante:
- si je suis à l'itération 0, alors je ne mets pas à jour les variables ...
du coup, dans ton cas, il n'y a pas d'itération (donc l'algo ne dépasse jamais l'itération 0, d'où -> pas de mise à jour des variables globales !
Si tu avais un calcul avec plusieurs itérations (en fait au moins une), alors la variable est bien mise à jour: j'ai vérifié.
Bon... la limitation n'est pas utile a priori, donc je la retire.
Modif ok pour la version: 6.969
regarde si c'est ok pour toi et tiens moi au courant,
- % réalisé changé de 60 à 50
ok ça fonctionne.
et quelle est la réponse à ma question précédente à propos des fonctions nD ?
c'est quoi exactement l'autre question ?
Il est marqué que les variables sont actualisées en début d'incrément. Est-ce que c'est également le cas pour les fonctions nD ? i.e est-ce que les fonctions nD ne sont pas réactualisées à chaque itération explicite en relaxation dynamique ?
plus j'y pense, plus je me dis que oui (réactualisation des fonctions nD à chaque itération). Mais j'aime autant une confirmation.
donc concrètement, je me pose la question du comportement d'une fonction nD utilisant une variable. Supposons que cette variable soit un ddl qui évolue au cours de incréments. Est-ce que cette évolution de ddl sera prise en compte dans le calcul de la fonction nD à chaque itération ?
- % réalisé changé de 50 à 60
Les fonctions nD ne fonctionnent pas sous forme d'actualisation.
À chaque appel de la fonction, celle-ci consulte les variables globales et donc utilise les valeurs qui sont en cours.
"donc concrètement, je me pose la question du comportement d'une fonction nD utilisant une variable. Supposons que cette variable soit un ddl qui évolue au cours de incréments. Est-ce que cette évolution de ddl sera prise en compte dans le calcul de la fonction nD à chaque itération ?
Citer Modifier Supprimer #6
"
À condition que tu indiques que le temps considéré pour la variable est "TEMPS_tdt", pendant toute l'itération, c-a-d durant les calculs intermédiaires entre l'itération i et i+1, la variable globale correspondante au ddl aura comme valeur celle obtenue à l'issue de l'itération i.
Donc par exemple si durant l'itération, le ddl change, la variable globale n'est pas modifiée.
Plus précisément, supposons que le ddl soit == une coordonnée d'un noeud noe, et qu'il y a une condition de contact sur le noeud noe.
Durant l'itération, le noeud peut éventuellement bouger du à la méthode de contact (dans herezh via la méthode de contact 1), mais cela ne changera pas la valeur de la variable globale correspondante. Celle-ci sera mise à jour uniquement après la résolution de l'équation d'équilibre global.
ok, merci de la réponse, c'est très clair.
intéressant de connaitre cette subtilité du contact intervenant avant la résolution du système. ça ne concerne pas ce que je compte faire mais c'est bon à savoir.
le ticket peut être clos.
- % réalisé changé de 60 à 100
- Statut changé de En cours à Résolu
Formats disponibles : Atom
PDF