August 21, 2015

Linguagem de programação para desenvolvimento CFD

São vários os livros e sites que contém material sobre as metodologias de solução de um problema CFD. Em específico, os métodos numéricos aplicados para a solução de equações diferenciais parciais. Eu considero que isto é uma das mais importantes áreas na formação de um engenheiro que quer aprender bem CFD. Os problemas numéricos que podem ocorrer são muitos e estes devem ser conhecidos pelo profissional, tanto para evitá-los quanto para identificar sua ocorrência em meio a tantos detalhes que um resultado CFD fornece.

Apesar do conhecimento teórico estar disponível em várias fontes, muitas vezes falta a prática em desenvolvimento de códigos computacionais e, com isso, o aprendizado fica afetado. Pensando em conhecer mais essa área, tenho algumas sugestões para vocês.

Linguagem de programação

Temos uma alta oferta de linguagens de programação à disposição e a dúvida se limita a escolher uma delas para iniciar o aprendizado. Para começar a conversar, temos que definir a diferença entre linguagem de baixo (compilada) e alto (interpretada) nível.

Em linguagens de baixo nível, o código fonte precisa ser compilado, traduzindo os comandos implementados no código em linguagem de máquina e construindo um arquivo executável. Vale ressaltar que a linguagem de máquina se refere a um conjunto de instruções pré-definidos a ser executado diretamente pelo processador. Desta forma este processo visa primordialmente a eficiência na execução das instruções implementadas no código. Com a construção do aplicativo executável, os comandos implementados estão diretamente ligados ao hardware e ao processador, facilitando seu controle pelo programador. Dentre as linguagens de baixo nível disponíveis gratuitamente temos as mais conhecidas, C, C++, Basic, Pascal, Fortran etc.

Por sua vez, as linguagens de alto nível são interpretadas ao invés de compiladas. Isto significa que as instruções são executadas por um programa que interpreta os comandos implementados no código-fonte. Portanto, nesta abordagem o código não é transformado (ou traduzido) para linguagem de máquina e, assim, perde eficiência em sua execução. Mesmo assim, o interpretador fornece muito mais flexibilidade e facilidades ao programador, permitindo uma evolução muito maior no desenvolvimento do código. Para cálculos científicos, a linguagem interpretada gratuita com maior capacidade e popularidade é o Python. Em relação aos pacotes computacionais comerciais, temos uma ampla oferta, como MatLab, Maple, Mathematica, MathCad etc.

Bem, voltando ao assunto… Qual linguagem escolher?? Eu recomendo que escolha duas linguagens básicas, sendo uma compilada e outra interpretada. O motivo é bastante simples. Para o aprendizado, use as linguagens interpretadas para maior flexibilidade. Para implementações de códigos e problemas a nível profissional, use linguagem compilada. Em relação à linguagem compilada, minha recomendação seria aprender C (ou C++). Esta linguagem contém os conceitos básicos propagados e difundidos em várias outras linguagens de programação, como o uso de ponteiros por exemplo. Deixo algumas referências para quem quiser começar a aprender C (ou C++):

  • Linguagem de programação C, da Profa. Isabel Massour (clique aqui): um curso completo da linguagem C, mas com fins voltados à aplicações de informática.
  • Curso de C, da Intelectuale (clique aqui): apesar de ser um curso pago, o site tem várias dicas sobre conceitos básicos da linguagem e tutoriais sobre a instalação do compilador.
  • Wikilivros, Programar em C (clique aqui) e Programar em C++ (clique aqui): clique e faça bom uso.
  • Programação descomplicada (clique aqui): video aulas e muito material!!

Sem dúvida alguma, Python é a linguagem interpretada mais indicada para quem quer aprender a realizar cálculos científicos. Já existem diversos códigos implementados em Python para o desenvolvimento científico, como o NumPy e o SciPy, construção de gráficos, Matplotlib, etc. Como referência para o aprendizado de Python, deixo as referências abaixo:

  • Codeacademy (clique aqui): um site para aprendizado de diferentes linguagens de programação (Python, inclusive). A aboradagem é bem didática e foi neste site que eu comecei a aprender Python. Não cheguei a terminar as lições pois, como já tinha conhecimento de outras linguagens, me senti confiante a tentar códigos mais avançados e aplicados à computação científica.
  • Learn Python the hard way (clique aqui): esta referência é um livro virtual com várias lições sobre o uso básico da linguagem. Não é o mais didático, mas tem bastante material.
  • Learn Python (clique aqui): um site bem interessante para quem quer aprender os conceitos da linguagem.
  • Scientific Python Lectures Notes (clique aqui): um curso bem voltado para o desenvolvimento científico, explicando comandos para implementação de operações com NumPy, SciPy e Matplotlib. Vale a pena, mas é preciso algum conhecimento prévio.

A parte ruim das referências para o aprendizado de Python é que os cursos básicos são mais voltados para desenvolvimento Web. Mas servem para o aprendizado básico.

Sem dúvida alguma existem outras fontes de informação e tutoriais sobre estas linguagens. Se você tem alguma sugestão, por favor, deixe nos comentários do post.

Aprendendo desenvolvimento CFD

Invariavelmente, quando falamos em desenvolvimento CFD envolvemos a implementação de modelos fenomenológicos aplicando os métodos numéricos de solução. Em CFD, normalmente são usados os métodos das diferenças finitas ou volumes finitos e, portanto, seria interessante ler e estudar a metodologia.

Uma ótima fonte de informação e material para estudo são os softwares CFD de código aberto, como o OpenFOAM e o Elmer. Você pode abrir os códigos e estudar a implementação (e alterar o que quiser). Mas abrir pela primeira vez os códigos-fonte sem conhecimento de algoritmos e detalhes numéricos pode ser assustador para os iniciantes. Mas pudera, são códigos maduros e de alta capacidade. Por isso, vou focar em dicas para os iniciantes.

De modo geral, vocês podem encontrar bastante material sobre CFD no site CFD Revolutions. Muitas referências, inclusive para iniciantes em códigos CFD.

Contudo, de longe, a melhor dica para desenvolvimento de códigos é seguir o site da Profa. Lorena Barba. Ela montou um curso de CFD com as aulas invertidas. Neste âmbito, ela gravou em vídeo todas as suas aulas, que ficam disponíveis gratuitamente em seu canal no YouTube (veja aqui).

Com esta visão, a Profa. Barba também criou um site chamado CFD Python: 12 steps to Navier-Stokes. O site apresenta os fundamentos da discretização das equações de transporte e a sua implementação em Python para diferentes casos. Ela começa com casos simples 1D e vai aumentando a complexidade até chegar à solução 2D de escoamentos simples (fluido incompressível e newtoniano). Seguindo a mesma linha, ela também criou o site AeroPython para aulas de aerodinâmica. Também vale a visita.

Os códigos em Python ficam disponíveis para estudar e modificar à vontade. Como o site tem comentários sobre a teoria e a implementação, é uma ótima fonte de informação para quem está començando a aprender sobre desenvolvimento CFD.

Espero que as dicas ajudem aos interessados no tema. Qualquer dúvida ou discussão, não hesite em deixar um comentário!