Erreur particulière lors de la résolution de l'équation de Poisson sur une méthode de volume fini à maillage non uniforme (1D uniquement)

9

J'ai essayé de déboguer cette erreur ces derniers jours, je me suis demandé si quelqu'un avait des conseils sur la façon de procéder.

Je résous l'équation de Poisson pour une distribution de charge par étapes (un problème courant en électrostatique / physique des semi-conducteurs) sur un maillage de volume fini non uniforme où l'inconnu est défini sur les centres des cellules et les flux sur les faces des cellules.

0=(ϕx)x+ρ(x)

le profil de charge (le terme source) est donné par:

ρ(x)={1,if 1x01,if 0x10,otherwise

et les conditions aux limites sont,

ϕ(xL)=0ϕx|xR=0

et le domaine est .[10,10]

J'utilise du code développé pour résoudre l'équation d'advection-diffusion-réaction (je me suis écrit voir mes notes ici, http://danieljfarrell.github.io/FVM ). L'équation advection-diffusion-réaction est un cas plus général de l'équation de Poisson. En effet, l'équation de Poisson peut être récupérée en mettant la vitesse d'advection à zéro et en supprimant le terme transitoire.

Le code a été testé contre un certain nombre de situations pour des grilles uniformes, non uniformes et aléatoires et produit toujours des solutions raisonnables ( http://danieljfarrell.github.io/FVM/examples.html ) pour l'équation d'advection-diffusion-réaction.

Pour montrer où le code tombe en panne, j'ai fait l'exemple suivant. J'ai installé un maillage uniforme de 20 cellules, puis je l'ai rendu non uniforme en supprimant une seule cellule. Dans la figure de gauche, j'ai supprimé la cellule et dans la droite a été supprimée. La neuvième cellule couvre la région où le terme source (c'est-à-dire la charge) change de signe. Le bogue apparaît lorsque la grille n'est pas uniforme dans une région où le terme de réaction change de signe . Comme vous pouvez le voir ci-dessous.Ω 9Ω8Ω9

Des idées, quelle pourrait être la cause de ce problème? Faites-moi savoir si de plus amples informations concernant la discrétisation seraient utiles (je ne voulais pas ajouter trop de détails à cette question).

Erreur particulière lors de la résolution de l'équation de Poisson

boyfarrell
la source
Pouvez-vous spécifier comment vous imposez la condition de Dirichlet à , et ce que vous entendez par comme condition initiale (n'est-ce pas l'équation que vous avez spécifiée en régime permanent)? x=0ρ=1
Jesse Chan
À quoi ressemble le terme de réaction?
Jan
Quel schéma utilisez-vous pour approximer les intégrales du terme source? Ce comportement peut également être dû à un échantillonnage insuffisant de la source. (Ce qui, sans doute, est le même mécanisme mentionné dans la réponse de @JLC.)
Jan
J'ai mis à jour la question pour utiliser la terminologie standard. J'ai un terme source ( ) pas un terme de réaction car comme vous l'avez souligné, nous avons juste besoin de la valeur en régime permanent. La dépendance spatiale correcte de est maintenant donnée (la valeur initiale était incorrecte). ρρ
boyfarrell
@JLC les BC Dirichlet sont imposés en utilisant une approche de cellule fantôme (mes notes en ligne sont obsolètes concernant ce détail d'implémentation), voir ici comment je le fais, scicomp.stackexchange.com/questions/8538/…
boyfarrell

Réponses:

9

En passant, votre documentation github est fantastique.

Ce n'est qu'une supposition des méthodes DG, qui peuvent avoir des problèmes similaires si les flux numériques ne sont pas choisis avec soin (je suppose que les méthodes FV sont un sous-ensemble des méthodes DG). Si vous utilisez l'interpolation à partir des centres cellulaires pour définir vos flux, cela devrait être équivalent à utiliser la moyenne comme flux numérique dans DG et à utiliser une base constante par morceaux. Pour les méthodes DG standard pour Poisson, cela conduit à des solutions numériquement non uniques - vous pouvez obtenir un espace nul non trivial pour l'opérateur discret, ce qui, à mon avis, est à l'origine de vos problèmes dans le deuxième exemple. Voir ce document DG pour leur théorie à ce sujet du côté DG.

Je vais essayer de simuler un exemple pour FV qui montre comment cela entre en jeu.

Edit: voici donc un petit exemple de ce qui se passe. Considérez les cellules 1-9 et 11-20 dans lesquelles . Du côté droit (11-20), nous avons raison de la condition de Neumann, qui nous indique par conservation pour cette cellule que . Puisque le flux est la moyenne des valeurs des cellules, cela nous indique que est constant sur toutes ces cellules.ρ(x)=0f(x20)=0f(x19)==f(x11)=0ϕ(x)

Du côté gauche (1-9), nous avons . Si et que nous utilisons des cellules fantômes, alors . La conservation sur les quelques cellules suivantes donne que (c'est-à-dire pente constante). Cependant, notez que cela peut être n'importe quelle pente, juste constante.f(xi+1)f(xi)=0f(10)=0f(10)=ϕ9.5ϕghost=ϕ9.5f(xi)=f(10)=ϕ9.5

Le problème survient dans la cellule du milieu. Comme Jan l'a mentionné, vous sous-échantillonnez le forçage dans le deuxième maillage. Cela jette les équations d'équilibre à ce point, vous donne une erreur dans , qui se propage ensuite vers l'arrière et gâche à la fois la pente dans la moitié gauche du domaine ainsi que la valeur de .f(10)ϕ(9.5)

Cette sensibilité aux erreurs de forçage est ce qui pose problème - contrairement aux méthodes FEM ou FD qui appliquent explicitement la condition de Dirchlet à , FV l'applique faiblement en utilisant des nœuds fantômes. Intuitivement, l'imposition faible du nœud fantôme revient à définir également une condition Neumann à votre limite gauche. Si vous avez deux conditions Neumann pour un problème de diffusion, votre problème est mal posé et a une solution non unique (vous pouvez ajouter n'importe quelle constante à ce problème et toujours avoir une solution). Vous n'obtenez pas tout à fait cela au niveau discret ici, mais vous obtenez un comportement très sensible et dépendant du maillage comme vous le voyez dans vos expériences.x=10

Jesse Chan
la source
De l'expérimentation, je peux démontrer que la méthode FVM n'est stable que lorsque les cellules de chaque côté de la discontinuité (changement de signe) de la fonction source ont des volumes égaux. Votre analyse serait-elle d'accord avec cela? Cela signifie que je dois faire plus attention à générer une grille sensible de mes problèmes que j'ai fait auparavant. Peut-être devrais-je envisager d'apprendre la méthode FEM ensuite?
boyfarrell
Un article pertinent, bien que je ne suive pas tous les détails, jstor.org/discover/10.2307/2157873
boyfarrell
La méthode FVM n'est stable dans ce cas que lorsque la grille est en quelque sorte alignée avec la fonction source. Si votre fonction source change, vous devrez à nouveau régler votre grille. Je ne pense pas que générer une grille sensible soit la bonne approche à ce problème - vous avez une méthode instable.
Jesse Chan
Voilà une bonne trouvaille. Suli est un solide analyste. Je dirais que l'apprentissage FEM peut être amusant, mais FD devrait également fonctionner pour tous les problèmes elliptiques 1D. Vous pouvez également voir ce que les gens FV font (peut-être augmenter leurs flux avec des termes de pénalité) pour obtenir une convergence pour les problèmes elliptiques de second ordre sur les grilles générales. La sagesse populaire mathématique dit généralement que FV / FD au vent est idéal pour les problèmes hyperboliques tandis que FEM / diff diff central est idéal pour les elliptiques.
Jesse Chan
Je révise ce problème. En relisant votre réponse, je dois dire que c'est fantastique! Je vois votre point que la méthode devrait changer parce que c'est la racine du problème (pas la grille). Avez-vous des suggestions ou des choses que je pourrais suivre (qui sont accessibles à un non expert) sur la meilleure façon d'approcher le flux dans ce cas. C'est-à-dire d'une manière qui pourrait le rendre plus stable. Si possible, je voudrais trouver un meilleur FVM pour cette équation.
boyfarrell
0

La première chose à noter est vos conditions aux limites. Comme vous pouvez modifier la pente et la valeur, vous n'avez ni conditions de Dirichlet, ni Neumann.

Ensuite, chaque ligne droite est une solution où le côté droit est nul. Vous avez cette partie.

Vos flux dépendent probablement de . Utilisez-vous le bon où vous éliminez une cellule?hhh

Guido Kanschat
la source
1
Non, ce n'est pas correct. Le problème est bien posé. Pour le cas seulement est une solution, il n'y a aucune autre fonction linéaire qui est nulle à un point et qui a une pente nulle à un deuxième point. ϕ 0ρ0ϕ0
Jan