Eu tenho tentado debugar este erro nos últimos dias que eu quis saber se alguém tem o conselho em como proceder.
Estou resolvendo a equação de Poisson para uma distribuição de carga escalonada (um problema comum em física eletrostática / semicondutora) em uma malha de volume finito não uniforme, onde o desconhecido é definido nos centros celulares e os fluxos nas faces das células.
o perfil de cobrança (o termo de origem) é fornecido por,
e as condições de contorno são,
e o domínio é .
Estou usando o código desenvolvido para resolver a equação advecção-difusão-reação (eu mesmo escrevi, veja minhas anotações aqui, http://danieljfarrell.github.io/FVM ). A equação de advecção-difusão-reação é um caso mais geral da equação de Poisson. De fato, a equação de Poisson pode ser recuperada ajustando a velocidade de advecção para zero e removendo o termo transitório.
O código foi testado em várias situações para grades uniformes, não uniformes e aleatórias e sempre produz soluções razoáveis ( http://danieljfarrell.github.io/FVM/examples.html ) para a equação de reação de advecção-difusão.
Para mostrar onde o código se decompõe, fiz o seguinte exemplo. Eu configurei uma malha uniforme de 20 células e depois a tornei não uniforme removendo uma única célula. Na figura esquerda, removi a célula e, à direita, foi removida. A nona célula abrange a região onde o termo de origem (ou seja, a carga) muda de sinal. O erro aparece quando a grade não é uniforme em uma região onde o termo da reação muda de sinal . Como você pode ver abaixo.
Alguma idéia do que poderia estar causando esse problema? Deixe-me saber se mais informações sobre a discretização seriam úteis (eu não quis incluir muitos detalhes nesta questão).
fonte
Respostas:
Apenas como um aparte, sua documentação do github é fantástica.
Isso é apenas um palpite dos métodos DG, que podem ter problemas semelhantes se os fluxos numéricos não forem escolhidos com cuidado (eu acho que os métodos FV são um subconjunto dos métodos DG). Se você estiver usando a interpolação dos centros celulares para definir seus fluxos, isso deve ser equivalente a usar a média como fluxo numérico no DG e usar a base constante por partes. Para métodos DG padrão para Poisson, isso leva a soluções numericamente não exclusivas - você pode obter um espaço nulo não trivial para o operador discreto, que eu acho que é o que está causando seus problemas no segundo exemplo. Veja este documento da DG para a sua teoria do lado da DG.
Vou tentar simular um exemplo para FV, que mostra como isso entra em jogo.
fonte
A primeira coisa a notar são suas condições de contorno. Como você pode alterar a inclinação e o valor, não possui condições de Dirichlet nem Neumann.
Então, toda linha reta é uma solução em que o lado direito é zero. Você conseguiu essa parte.
fonte