Multigrid na grade "não perfeitamente retangular"


9

As apresentações multigrid normalmente usam uma grade retangular. A interpolação de valores é então direta: basta interpolar linearmente na aresta entre dois nós adjacentes da grade grossa para encontrar o valor do nó da grade fina nessa aresta.

Para um aplicativo FEM, tenho uma grade retangular "topologicamente", para que as conexões dos nós sejam como uma grade retangular. No entanto, os nós não estão perfeitamente alinhados em uma grade, mas podem percorrer pequenas distâncias para melhor ajustar a geometria, mantendo as conexões como em uma grade retangular perfeita.

A malha é mais ou menos assim: exemplo de malha . Você vê: As conexões são "retangulares regulares", mas as posições dos nós não.

Posso imaginar vários esquemas de interpolação geométrica "razoáveis" para esse cenário.

A questão geral é: o multigrid exige uma grade retangular perfeitamente alinhada ou também funcionará com a situação descrita acima, desde que a interpolação seja "boa"? Ou é melhor usar multigrid algébrico nesse caso? (O que eu não prefiro, pois não é tão intuitivo quanto o multigrid geométrico.)


Não sei ao certo o que você quer dizer com a grade ser topologicamente retangular, mas onde os nós não estão alinhados como em uma grade retangular. A grade é uma grade retangular estruturada? Você poderia esclarecer isso, talvez com um desenho? O problema é que você está usando elementos retangulares que não se alinham como aconteceria ao usar uma grade cartesiana estruturada?
James

@ James, eu interpretei a pergunta do OP para ser mais como: "O que acontece se eu tiver uma grade 'cartesiana-ish' dentro de um trapézio?".
Bill Barth

Respostas:


6

O Multigrid não precisa de uma grade uniforme cartesiana (retangular). O que é necessário é que você possa definir um nível fino e um grosso (possivelmente recursivamente, se desejar passar de um esquema de dois níveis para um multinível) e que você possa definir operadores de interpolação entre esses níveis. A maneira mais fácil de explicar isso é se você realmente possui uma grade cartesiana, mas na verdade pode começar com qualquer malha grossa, refiná-la uma vez e assim: você tem uma malha mais fina.

Em outras palavras, é mais fácil pensar em malhas multigrid-adequadas não como uma malha fina e como encontrar malhas mais grossas, mas para começar com uma malha grossa a partir da qual você obtém os níveis mais finos por refinamento uniforme (ou seja, todo quadrilátero é subdividida em quatro menores). Como o refinamento uniforme é sempre possível, isso rapidamente fornece uma hierarquia. Isso se opõe ao engrossamento, o que nem sempre é possível se você receber apenas uma malha específica e, portanto, torna a definição de uma hierarquia de malha muito mais complicada. (É por isso que as pessoas inventam métodos multigrid algébricos para definir os níveis aproximados com base apenas na matriz, sem pensar na malha subjacente a partir da qual ela foi criada.)


Editei um exemplo de imagem para a pergunta. Eu presumiria que o espessamento é extremamente fácil no meu caso, apenas pegando apenas cada segundo nó (por dimensão) e recalculando o FEM para essa grade para obter a matriz / operador grosso. O vetor de dados aproximado pode ser obtido apenas com o valor de cada segundo nó.
Michael

11
Isso pode ou não funcionar da maneira que você deseja (suponho que provavelmente funcionará, mas não tenho muita certeza). O fato é que, no seu exemplo, as células de malha grossa não cobrem a mesma área que os filhos e, portanto, não há propriedade de aninhamento dos espaços de elementos finitos: as funções que você pode representar na malha grossa não são um subconjunto de as funções que você pode representar na malha fina. Joe Pasciak e Jim Bramble escreveram artigos sobre esses casos, e acho que me lembro que eles podem ser feitos para funcionar. Mas não é imediatamente óbvio para mim.
Wolfgang Bangerth

4

Digamos que você tenha a seguinte grade composta por elementos retangulares:

insira a descrição da imagem aqui

Agora, se você executar sua interpolação assumindo uma grade retangular estruturada normal, estará apresentando erros associados a essa interpolação imprecisa. Em outras palavras, quando você restringe seu vetor residual e quando prolonga seu vetor de erro, haverá erros na interpolação.

Agora, se sua grade está "próxima" de ser uma grade cartesiana estruturada normal, isso pode funcionar, pelo menos a princípio, mas eu suspeito que uma das duas coisas acontecerá dependendo de quão longe você está da grade retangular:

1) Você pode achar que o multigrid começa a convergir primeiro. Afinal, inicialmente, seu erro é grande e sua interpolação "aproximada" realmente significa apenas que alguns nós estão um pouco super-representados, enquanto outros estão um pouco sub-representados. No entanto, você pode achar que a convergência estagna à medida que a solução se torna mais precisa e os erros de interpolação se tornam mais importantes.

2) Outra possibilidade é que o multigrid acabe convergindo, mas não tão rápido quanto deveria se você tivesse usado a interpolação correta.

Basicamente, desligando sua interpolação, você está ponderando a importância de certos nós de maneira imprecisa. Por exemplo, em 2D, se você estiver ponderando um determinado nó como:

[0,250,50,250,51.00,50,250,50,25]

quando na verdade, porque sua grade não é exatamente cartesiana, deve ser:

[0,250,550,250,551.00,490,280,520,30]

então isso resultará em algum erro. Se esse erro impede a convegência provavelmente dependerá da distância da sua grade de ser cartesiana.

Embora a AMG seja mais difícil de entender / implementar, parece que é o método correto para sua grade. A aplicação de multigrid geométrica a uma grade retangular "aproximada" pode funcionar, mas eu acho que é, na melhor das hipóteses, uma solução de band-aid. Espero que isto ajude.

Atualização : Eu acho que pode ter havido alguma confusão na minha resposta. Não estou dizendo que o multigrid geométrico funcionará apenas com malhas cartesianas, mas sim que é fácil definir interpolação (e, portanto, restrição) em malhas cartesianas, enquanto que em malhas não estruturadas isso pode ser difícil. Por exemplo, considere o caso de até mesmo um simples domínio 2D com uma malha triangular. É fácil refinar essa malha - pelo menos conceitualmente - mas como você definiria um operador de interpolação entre a malha grossa e fina? Eu prefiro o AMG simplesmente porque ele funciona mais como um solucionador de "caixa preta", ou seja, não precisa de informações sobre a malha subjacente, no entanto, essa é apenas a minha pessoa tendenciosa / peculiar. A multigrid geométrica pode funcionar desde que você possa fornecer operadores de interpolação precisos.


Eu posso ler isso como "depende de quão boa é a sua interpolação", correto? Então, se eu puder criar um esquema de interpolação "perfeito", eu devo ficar bem?
Michael

11
Penso que esta resposta é verdadeira, mas enganosa - diz que se você fingir que sua grade é cartesiana regular quando não é, receberá a resposta errada. Isso é verdade, mas você poderia dizer o mesmo sobre qualquer método numérico. O ponto é que o multigrid geométrico é preciso em malhas mais gerais quando implementado corretamente .
David Ketcheson

Concordo que o multigrid geométrico pode ser usado com malhas não cartesianas, desde que feito corretamente. Eu apenas peguei a pergunta do OP perguntando se o uso de uma malha cartesiana "aproximadamente", enquanto utilizava a interpolação projetada para uma malha cartesiana real, funcionaria.
James

@ Michael Basicamente, você precisa de alguma maneira de definir operadores de interpolação entre diferentes níveis de grade. Com malhas cartesianas, isso é fácil. Com malhas não cartesianas, isso pode rapidamente se tornar mais difícil, dependendo de como suas malhas não estão estruturadas. Como Wolfgang diz em sua resposta, você sempre pode criar uma malha mais refinada a partir de uma malha grossa, mas definir operadores de interpolação significativos pode ser difícil. A vantagem do AMG é que ele se comporta mais como um solucionador de "caixa preta", na medida em que você não precisa de dados de malha para definir operadores de interpolação. Tudo que você precisa é a matriz
James

@ MIchael Então, para responder à sua pergunta. Sim, se você conseguir operadores de interpolação precisos, o multigrid geométrico funcionará bem. Espero que isto ajude.
James
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.