DEV Community

Cover image for Dia 1 - Jornada à física computacional
Matheus Gomes
Matheus Gomes

Posted on • Edited on

1

Dia 1 - Jornada à física computacional

Sou desenvolvedor web a aproximadamente 2 anos, e a pouco tempo me fascinei por física computacional, mais especificamente (pelo menos por enquanto) a CFD (Computational Fluid Dynamics).

Atualmente tenho o conhecimento voltado a tudo que envolve desenvolvimento web com ênfase nas linguagens Python, GoLang e TypeScript e estou no terceiro semestre do bacharelado em Engenharia de Software.

O interesse a CFD veio por conta desse vídeo: https://www.youtube.com/watch?v=y9hhHIzg_QM e também pela vontade de mexer com programação de baixo nível.

O desafio dessa jornada é o seguinte:

  • Não lembro de nada de física, nem o que aprendi no ensino médio.
  • Basicamente minha matemática se resume a contas de padaria.
  • Só sei me comunicar em inglês por texto. Isso é um problema pois imagino que (como a maioria das coisas no Brasil) o mercado de trabalho para desenvolvedores no ramo de física computacional deve ser escasso.
  • Vi que comumente é utilizado as linguagens C++, Fortran e Python. Desses três só tive contato com Python.

Na busca de um roadmap, utilizei o ChatGPT. Basicamente pedi que gerasse um plano de estudo para codar um solver CFD do zero utilizando C++ e foi isso que ele me retornou:

Roadmap para Criar um Solver de CFD em C++

1. Aprender Fundamentos de C++
• Focar em conceitos essenciais como ponteiros, alocação dinâmica, templates e funções inline.
• Entender classes, objetos, polimorfismo e herança para estruturar o solver.
• Aprender o uso de bibliotecas padrão como a Standard Template Library (STL), especialmente contêineres como `vector`, `deque` e iteradores.

2. Revisar Fundamentos de Matemática Numérica
• Estudar álgebra linear numérica (decomposição LU, métodos iterativos como Gradiente Conjugado).
• Entender discretização de equações diferenciais parciais (EDPs) usando métodos como Diferenças Finitas (FDM) e Volumes Finitos (FVM).
• Revisar métodos de integração numérica e discretização temporal (métodos explícitos e implícitos, como Euler e Runge-Kutta).

3. Estruturas de Dados para CFD
• Implementar malhas (2D e 3D) para representar o domínio espacial. Escolher entre malhas estruturadas ou não estruturadas, dependendo da aplicação.
• Implementar estruturas de dados eficientes para armazenar variáveis de estado (pressão, velocidade, temperatura) associadas a cada célula da malha.
• Estudar algoritmos de interpolação e tratamento de fronteiras (condições de contorno de Dirichlet, Neumann, etc.).

4. Implementação dos Solvers Numéricos
• Começar implementando um solver de Diferenças Finitas (FDM) para problemas simples (como condução de calor 1D e 2D).
• Expandir para o Método dos Volumes Finitos (FVM) para resolver escoamentos incompressíveis, usando as equações de Navier-Stokes.
• Implementar esquemas numéricos para tratamento de advecção e difusão, como UPWIND e Lax-Friedrichs.

5. Solvers Iterativos para Sistemas Lineares
• Implementar métodos iterativos como Gradiente Conjugado (CG) e GMRES para resolver sistemas lineares grandes, que surgem da discretização das equações de Navier-Stokes.
• Explorar a utilização de pré-condicionadores para acelerar a convergência dos métodos iterativos.

6. Modelos de Turbulência
• Estudar e implementar modelos de turbulência como o RANS (Reynolds-Averaged Navier-Stokes) para simulações mais realistas.
• Explorar Large Eddy Simulation (LES) para capturar mais detalhes de escoamentos turbulentos.

7. Paralelismo e Otimização
• Aprender sobre paralelismo em C++ usando OpenMP para dividir a computação em múltiplos núcleos.
• Explorar o uso de MPI (Message Passing Interface) para distribuir a carga de trabalho entre múltiplos nós em clusters de computadores.
• Otimizar o uso de memória e CPU, ajustando estruturas de dados e algoritmos para melhorar a performance do solver.

8. Visualização dos Resultados
• Integrar bibliotecas para visualização de dados científicos, como VTK ou Paraview, para analisar os resultados das simulações.
• Aprender a exportar os dados gerados pelo solver em formatos compatíveis com ferramentas de visualização, como VTK ou CSV.

9. Validação e Testes
• Validar o solver implementando testes com casos benchmark conhecidos de CFD (como escoamento ao redor de um cilindro ou condução de calor em uma placa).
• Comparar os resultados com soluções analíticas ou simulações feitas por software comercial (ANSYS Fluent, OpenFOAM).

10. Expansões Futuras
• Considerar a implementação de simulações de escoamentos compressíveis e o uso de esquemas numéricos para ondas de choque.
• Explorar acoplamento fluido-estrutura para modelar interações entre fluidos e sólidos, usando métodos como Immersed Boundary.
• Iniciar a implementação de um solver baseado em malha não estruturada para simular geometria complexa.
Enter fullscreen mode Exit fullscreen mode

Bem... começarei por C++ então 🤷.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (0)

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay