Por "o mais simples", quero dizer o mais simples de aprender e implementar do zero. Espero que minha pergunta possa ser mais ou menos respondida.
Por "o mais simples", quero dizer o mais simples de aprender e implementar do zero. Espero que minha pergunta possa ser mais ou menos respondida.
Respostas:
Em duas dimensões, a formulação velocidade-vorticidade é a mais simples de implementar porque as variáveis são colocadas, mas as condições de contorno podem ser complicadas e é uma afirmação menos direta do problema. Para formulações variáveis primitivas, o método da diferença finita de grade escalonada de Harlow e Welch (1965) é um ótimo ponto de partida.
Você pode encontrar uma implementação totalmente documentada de um método de solução muito simples, mas bastante eficiente (método de divisão de Chorin) aqui .
Para uma seleção de outros métodos populares, dê uma olhada no Capítulo 21 deste livro .
Disclaimer: Eu sou o (co) autor do programa de demonstração e do livro. O livro pode ser baixado gratuitamente.
O mais simples sempre será relativo aos seus interesses e necessidades particulares. Concordo com Anders que, para o fluxo incompressível em domínios com geometria simples, você seria pressionado a vencer o método de projeção (isto é, o método de divisão de Chorin) se priorizar a facilidade de uso e a precisão.
Para entrar um pouco mais detalhadamente, o método é questão é introduzida em [1]. O método de projeção aproximado mais moderno, de segunda ordem, é bem explicado em [2]. A motivação é que a solução das equações de Navier-Stokes incompressíveis e completas exige a solução simultânea do campo de velocidade e da pressão, e o sistema linear resultante está bastante condicionado. O método de projeção elimina esse problema, dividindo cada etapa do tempo em uma resolução de velocidade, usando a pressão do passo anterior, seguida por uma atualização de pressão, que essencialmente impõe que o campo de velocidade permaneça incompressível.
Para implementar isso, você precisará de alguns outros componentes, mas todos podem ser aprendidos e programados com bastante facilidade.
Para resolver a pressão, supondo que você esteja interessado em sistemas com densidade constante, será necessário resolver a equação de Poisson. Obviamente, existem dezenas de algoritmos para abordar esse problema, mas de longe o mais fácil de implementar - se não o entender completamente - é o algoritmo de gradiente conjugado (CG). Uma das melhores explicações sobre CG que li foi escrita por Jonathan Shewchuk e pode ser encontrada aqui . Você certamente não precisa ler o artigo inteiro, no entanto, para poder simplesmente implementar o algoritmo.
Você precisará de outro algoritmo para lidar com o termo de advecção em Navier-Stokes. Em várias dimensões, programar implementações robustas dos métodos mais flexíveis, por exemplo, Godunov, pode ser bastante desafiador. No entanto, desde que você esteja interessado em fluxos com número de Reynolds relativamente modesto (ou seja, com viscosidade não desprezível), um dos métodos essencialmente não oscilatórios (ENO) se encaixa perfeitamente na conta em termos de facilidade de implementação. Há uma excelente visão geral da teoria e da implementação em [3].
Você precisará lidar com o termo viscoso usando um método implícito, geralmente Crank-Nicolson. Isso é explicado em detalhes nos documentos do método de projeção, e você pode usar facilmente o CG para resolver a matriz, desde que a viscosidade seja constante.
[1] AJ Chorin, solução numérica das equações de Navier-Stokes , J. Math. Comput., 22 (1968), pp. 745-762
[2] A. Almgren, JB Bell e W. Szymczak, Um método numérico para as equações incompressíveis de Navier-Stokes com base em uma projeção aproximada , SIAM J. Sci. Comput. 17 (1996), pp. 258-369.
[3] S. Osher e R. Fedkiw, Métodos de definição de nível e superfícies dinâmicas implícitas . Springer-Verlag Nova York ,. Ciências Matemáticas Aplicadas, 153, 2002
Gráficos e jogos de computador viram uma enorme explosão de interesse na simulação de fluidos nos últimos anos. Aqui está um excelente artigo de Jos Stam que discute a implementação de um solucionador para aplicações em tempo real. Ele vem com um código-fonte muito fácil de entender. Não sei o quão preciso é, mas pode ser o que você está procurando.
Outro método realmente agradável e simples é usar autômatos celulares para discretização. Existem muitos desses modelos, incluindo LBA, FHP e muito mais. Eles são realmente legais, pois podem fornecer uma simulação em tempo real em computadores modernos e também podem ser paralelizados e executados em GPUs. Eles também têm algumas desvantagens e os resultados são fortemente dependentes do formato da rede aplicada. A treliça quadrada é insuficiente porque falta liberdade de rotação e, por exemplo, os vórtices de von kaarman terão formato quadrado, o que não é bom :)