Nombre de courant diffusif?

Nombre de courant diffusif?

by Carine Niyonkuru -
Number of replies: 18

Bonjour,

Dans la solutionnaire du TD2 "DiffFiniesPorb4explicite", il y a la constante "nombre de courant diffusif": où est-ce qu'on trouve cette valeur?

 

Merci

Attachment matlabdifffinieprob4.png
In reply to Carine Niyonkuru

Re: Nombre de courant diffusif?

by Rémi Démol -

Bonjour,
Cette constante, relative au terme diffusif, est aussi appelée nombre de Fourier : Fo = alpha*dt/dx^2

En maintenant Fo inférieur ou égal à 0.5, on garantie la stabilité numérique du schéma explicite. On doit alors ajuster le pas de temps dt pour satisfaire cette condition.

Rémi

In reply to Carine Niyonkuru

Re: Nombre de courant diffusif?

by David Vidal -

Bonjour Carine,

Allez voir les diapos correspondant au problème transitoire 3 ou 4 du cours. Nous avons défini le nombre de Courant (diffusif) pour une schéma explicite en temps. Il correspond à un coefficient d'amplification > zéro (stable sans oscillation)

En pratique, à cause des erreurs d'arrondi des calculs sur l'ordinateur, on le prend SOUVENT inférieur à 0,5. C'est le cas dans le devoir. Si vous prenez 0,5, vous pourriez finir par avoir des oscillations tout de même, en fonction de votre implantation du schéma... dans ce cas, essayez 0,4-0,499...

David.

In reply to David Vidal

Re: Nombre de courant diffusif?

by Carine Niyonkuru -

Est-ce que le nombre de courant diffusive est équivalent pour chaque sous section du problème. Voire, si on décide que pour la section "Sol", le nombre est 0.4, est-ce qu'il peut être 0.43 pour la section "Air"?

In reply to Carine Niyonkuru

Re: Nombre de courant diffusif?

by David Vidal -

La constante, une fois choisie, n'a pas de raison de varier d'un matériau à l'autre... c'est une vraie constante ! wink

Par contre, elle est utilisée pour choisir quelque chose de bien précis... le dt.... et le dt maximum menant à la stabilité du schéma varie d'un matériau à l'autre... toutefois, vous ne pouvez pas faire évoluer votre schéma global à différents dt... donc il vous faudra choisir un dt commun qui vérifie tous les nombres de Courant < 0,5 (ou la valeur choisie pour raison d'arrondi). De plus, à choisir le dt, choisissez un dt qui est une fraction entière d'une heure ou d'une journée... ce sera plus facile de tracer les profils tous les 30 jours.

David. 

In reply to David Vidal

Re: Nombre de courant diffusif?

by Thomas Jolicoeur -

Bonjour,

Je ne comprends pas pourquoi la constante ne change pas entre les matériaux. En effet, elle est définie par alpha*dt/dx^2.

Donc, puisque les alpha varient d'une zone à l'autre ainsi que les dx, comment pouvons-nous la considérer constante au lieu d'affirmer que c= [a_a * dt/dx_a^2 a_m * dt/dx_m^2 a_s * dt/dx_s^2 a_n*dt/dx_n^2] ?

In reply to Thomas Jolicoeur

Re: Nombre de courant diffusif?

by David Vidal -

Bonjour Thomas,

Si tu vas à la diapo 21, tu peux voir que le ½ découle de la condition de stabilité du schéma explicite. Il n’a donc rien de physique, mais est une constante numérique de stabilité. Il faut donc se servir de la valeur de ½ pour calculer le dt maximal à ne pas dépasser dans chacune des couches. Par après, tu dois parmi tous les dt_max trouvés choisir le plus petit d’entre tous min(dt_max) pour éviter que sur l’une des couches tu obtiennes un rapport a*dt/dx^2 > 0.5.

Autrement dit, il est sûr que si tu choisis min(dt_max), tu auras pour toutes les couches : a_couche * min(dt_max) / dx_couche^2 < 0.5, ce qui reste la condition de stabilité sur chacune des couches.

Après ça, on peut vouloir choisir 0.49 au lieu de 0.50 pour éviter des problèmes avec les erreurs d’arrondi sur les calculs numériques, puis on peut aussi choisir un dt < min(dt_max) qui se trouve être une fraction entière d’une journée pour faciliter le traçage des résultats à tous les 30 jours.

Est-ce plus clair ?

David.

In reply to David Vidal

Re: Nombre de courant diffusif?

by David Vidal -

NB: Le nombre de Courant diffusif pour le schéma explicite, pratiquement, sert à donner un seuil dimensionnel au-dessus duquel on observe une instabilité de calcul grandissant rapidement au fur et à mesure des calculs.

Plus le processus diffusif est important et/ou plus on prend un pas en espace petit, plus le pas de temps doit être faible pour éviter que l'information ne voyage plus vite sur la grille que le permet l'équation, autrement l'erreur grandit et envahit la solution physique.

In reply to David Vidal

Re: Nombre de courant diffusif?

by Caroline Safi -

Concernant cette section du code, dans le gabarit vous nous avez fourni des lignes permettant de déterminer les nombres de noeuds de chaque couche:

ex:

n_m=max([round(6*facteur) 3]); % nombre de noeuds

 

Nous voulions savoir si ce nombre de noeuds incluait les noeuds aux extrémités de  chaque couche (ceux associés à des conditions frontières.

Aussi, nous nous demandions d'où venait les constantes '6' et '15' dans ces lignes de code.

Merci!

In reply to Caroline Safi

Re: Nombre de courant diffusif?

by David Vidal -

Bonjour,

Oui, ils incluent les noeuds aux frontières et entre les couches. Vous pouvez modifier ces valeurs comme vous voulez. J'ai mis ces valeurs pour vous donner un ordre de grandeur qui est suffisant. Notez que le "facteur' permet de changer facilement le nombre de noeuds dans chaque couche. Le "3" permet de limiter le minimum de noeud dans une couche à 3. Si vous changez par exemple de facteur=1 à facteur=0.5, vous aurez deux fois moins de noeuds. Utile dans la question où l'on vous demande de déterminer l'ordre de convergence/précision de votre schéma. Faites seulement l'ordre de convergence en espace. Pour calculer l'erreur, utilisez, p.ex., la solution d'un maillage très fin comme solution de référence.

OU faites votre test de convergence sur une problème plus simple pour lequel vous auriez une solution analytique et avec lequel vous avez vérifié votre code. Bizarrement, j'ai eu très peu de monde qui m'ont questionné sur la question concernant la vérification du code......

Bonne continuation.

David.

 

In reply to David Vidal

Re: Nombre de courant diffusif?

by Sabrina Lachapelle -

Bonjour David,

J'éprouve des difficultés à vérifier mon code. J'ai tenté de faire un problème de tige stationnaire avec des conditions de Dirichlet. Toutefois, je ne sais pas quelles températures je dois prendre pour mes conditions. De plus, comment un problème simplifié valide notre code, puisque ce dernier possède aussi des pas de temps?

Merci beaucoup!

Sabrina

In reply to Sabrina Lachapelle

Re: Nombre de courant diffusif?

by David Vidal -

Bonjour Sabrina,

Je suis surpris que si peu de personnes m'ai posé de questions au niveau de la vérification du code... je ne sais pas si ça veut dire que tout le monde a compris ou que beaucoup ne sont pas avancés dans le devoir... 

La vérification consiste à s'assurer que votre algorithme numérique (code) résout bien l'équation mathématique (ici l'équation de la chaleur en transitoire/instationnaire) qu'il est sensé résoudre, comme vu dans le cours (partie introduction à la modélisation).

En général, on ne peut pas vérifier à l'aide du problème qui nous intéresse... pourquoi.. ? Parce que la vérification se fait en général à l'aide de la comparaison avec une solution analytique... or, si on peut facilement avoir une solution analytique du problème, il n'y a plus trop d'intérêt à programmer un algorithme numérique pour le résoudre, n'est-ce pas ! smile

Donc, si on suppose que notre problème n'a pas de solution analytique, on va utiliser notre code sur une problème le plus similaire possible, mais plus simple pour lequel on connait une solution analytique...

J'ai proposé à plusieurs d'utiliser votre code pour obtenir la solution STATIONNAIRE d'un problème de transfert de chaleur dans une barre fait d'un seul matériau, avec pour simplifier encore, des conditions de Dirichlet au deux bouts. On pourrait trouver d'autres problèmes que celui-ci qui pourraient faire aussi l'affaire. C'est une suggestion.

La solution STATIONNAIRE d'un problème de transfert de chaleur dans une barre se simplifie en un simple Laplacien en température = 0. Donc si la dérivée seconde par rapport à z est égale à zéro, comment devrait varier le profil de température par rapport à z (intégrez deux fois). Pour déterminer les constantes d'intégration, utilisez les conditions frontières choisies par vous.

Pour les conditions de Dirichlet que vous pourriez choisir, choisissez des températures qui font que votre code reste dans la même saison (de préférence l'hiver car vous avez alors vraiment 4 couches, donc,p.ex., -20 et 0oC) pour vous faciliter la vie.

A part les changements pour les conditions frontières de Dirichlet, utilisez votre code tel quel avec les 4 couches (pour pouvoir vérifier qu'il n'y a pas d'erreur dans ce que vous avez implanté, c'est le but je le rappelle!), mais égalez dans les 4 couches les conductivité et diffusivité thermiques (peu importe la valeur pour un régime stationnaire), transformant ainsi votre code pour la résolution d'un problème pour le cas d'une seule barre/couche (tout en gardant l'algorithme à 4 couches. Les noeuds entre les couches ne devrait pas poser de problèmes si implantés correctement et donc garder les dans votre algorithme. Travailler sur une copie de votre code, pas l'original pour ne rien perdre).

Alors après comme tu l'as noté, ton code résout l'équation de la chaleur en instationnaire... et on va s'en servir pour obtenir la solution stationnaire.... comme vu en TD, si les conditions frontières sont fixes, le profil de température en fonction du temps devrait atteindre l'état stationnaire au bout d'un certain temps... donc tout ce que tu as à faire, c'est de faire tourner ton code instationnaire, jusqu'à ce qu"il atteigne le régime permanent (stationnaire) et comparer la solution obtenue avec la solution analytique...

Tu comprends mieux ?

David.

In reply to David Vidal

Re: Nombre de courant diffusif?

by Sabrina Lachapelle -

Oui c'est plus clair. Merci beaucoup pour votre réponse, c'est très apprécié!

Sabrina

In reply to David Vidal

Re: Nombre de courant diffusif?

by Geneviève Simard-Gaudette -

Bonjour Monsieur,

Je ne comprend pas votre message, il y a beaucoup d'ambiguité. Vous avez dit: <J'ai proposé à plusieurs d'utiliser votre code pour obtenir la solution STATIONNAIRE d'un problème de transfert de chaleur dans une barre fait d'un seul matériau, avec pour simplifier encore, des conditions de Dirichlet au deux bouts. > Comment pouvons-nous verifier notre code qui est une solution en RÉGIME TRANSITOIRE et non stationnaire...?

De plus, plusieurs équipes ont le même problème soit les fameuses boucle (for) pour calculer les températures en espace et en temps et en ajoutant le flux de convection, comment la faire? (C'est un problème de programmation et non du cours).

Geneviève

In reply to Geneviève Simard-Gaudette

Re: Nombre de courant diffusif?

by David Vidal -

Lisez bien le message jusqu'au bout...

"Alors après comme tu l'as noté, ton code résout l'équation de la chaleur en instationnaire... et on va s'en servir pour obtenir la solution stationnaire.... comme vu en TD, si les conditions frontières sont fixes, le profil de température en fonction du temps devrait atteindre l'état stationnaire au bout d'un certain temps... donc tout ce que tu as à faire, c'est de faire tourner ton code instationnaire, jusqu'à ce qu"il atteigne le régime permanent (stationnaire) et comparer la solution obtenue avec la solution analytique..."

Vous comprenez ?

Pour la deuxième question... 

Il vous faut une boucle en temps et à l'intérieur de celle-ci, éventuellement (il n'y a pas une façon de faire), 1 boucle en espace pour chacune des couches (qui peuvent être vectorisées - voir corrigé prob.4 explicite du TD#2 MATLAB), puis vous finissez pas résoudre les conditions aux limites (incluant les noeuds entre les couches). Et vous marchez en temps (voir Probl.6.2 du cahier d'exercice).

Pour la boucle en temps, il ne sert à rien de conserver tous les pas de temps (prendrait trop de place en mémoire)... donc pas besoin d'avoir T(i,t). T(i) suffit. Vous avez juste besoin de conserver seulement deux itérations en temps à chaque itération... la nouvelle à t+1 et celle à t pour calculer la nouvelle... donc vous pouvez appeler les deux vecteurs T(i) et Tprécédent(i), p.ex,

Ça répond à vos questions ?

 

In reply to David Vidal

Re: Nombre de courant diffusif?

by Caroline Safi -

Bonjour!

Concernant la vérification, je suis un peu confuse, si c'est un problème stationnaire pourquoi faut-il conserver notre boucle 'for' itérant dans le temps? Pourquoi est-ce qu'on n'obtient pas directement la réponse après une itération (un seul calcul)?

Aussi, je ne sais pas si j'ai mal compris, mais comme on annule le terme instationnaire de l'équation de la chaleur, je me suis retrouvée avec une expression qui n'est plus de récurrence ce qui fait que je calcule des points avec d'autres points tous de la même colonne, or mes colonnes sauf la première sont initialisées en zéro! Alors tout me donne zéro.

De plus, j'ai posé deux conditions de Dirichlet (une à 0 et l'autre à -20 tel que discuté verbalement avec vous) afin d'obtenir 4 couches incluant une couche de neige, cependant je me demandais à quelle température il fallait initialiser 'To' (la température initiale de la barre). Une température sous zéro ou sans importance?

Enfin, puisque c'est la température moyenne de la fonction 'Température Montréal' qui détermine dans ma boucle 'if' si nous sommes en été ou en hiver, est-ce que je peux la fixer à une température sous zéro afin de toujours avoir une température cohérente avec mes conditions de Dirichlet?

 

Merci de votre temps!

In reply to Caroline Safi

Re: Nombre de courant diffusif?

by David Vidal -

Bonjour Caroline,

Dans l'ordre de tes questions:

1) parce que ce que nous voulons faire par la vérification, c'est vérifier votre code... pas trouver la solution à un autre problème !! Si votre code instationnaire convergence vers la bonne solution stationnaire, c'est qu'il doit bien marcher. (ce n'est pas une condition suffisante vous pourriez me rétorquer, mais elle est au moins nécessaire).

2) Si vous résolvez un problème stationnaire, une équation de récurrence n'est plus possible (Voir deuxième diapo du cours!) Attention de bien avoir compris ceci  pour l'examen! 

3) sans importance ! smile

4) fixez effectivement une température d'hiver.

David.

In reply to David Vidal

Re: Nombre de courant diffusif?

by David Vidal -

Je me suis trompé:

"Pour les conditions de Dirichlet que vous pourriez choisir, choisissez des températures qui font que votre code reste dans la même saison (de préférence l'été car vous avez alors vraiment 4 couches, donc,p.ex., 1 et 30oC) pour vous faciliter la vie."

 

Lire plutôt...

 

"Pour les conditions de Dirichlet que vous pourriez choisir, choisissez des températures qui font que votre code reste dans la même saison (de préférence l'hiver car vous avez alors vraiment 4 couches, donc,p.ex., -20 et 0oC) pour vous faciliter la vie."

 

Désolé.

 

PS: J'ai modifié le post où l'erreur était apparu...