Kutta, um pequeno túnel de vento em Go

Dá pra explicar sustentação com um diagrama e uma equação. Quase nunca gruda. Ver a esteira descolar da traseira de uma asa enquanto você gira o ângulo de ataque gruda na hora. É essa distância que faz o Kutta existir.

É um pequeno túnel de vento 2D escrito em Go, renderizado com Ebitengine, rodando como um único aplicativo desktop.

Kutta rodando

A ideia nunca passou do primeiro rascunho: escoar ar por um aerofólio e deixar o escoamento visível. Muda o ângulo de ataque e o campo reage. Alterna entre velocidade, vorticidade e um campo tipo pressão. Desenha sua própria forma. Corta uma asa em asa e flap, anima o flap, e vê a esteira ficar instável quando a geometria ou o ângulo passam do ponto.

É um brinquedo, e digo isso como elogio. Pequeno o bastante pra cutucar, sério o bastante pra ensinar algo.

Vem com geração de perfis NACA de 4 e 5 dígitos: você digita 2412, 0012 ou 23012 e recebe a forma sem carregar nada do disco. Também tem um aerofólio neko. Ele voa como um tijolo. É essa a graça.

Qualitativo, não CFD validado

Essa é a parte que eu quero dizer em voz alta: o Kutta não é uma ferramenta de CFD validada.

Ele roda em unidades de rede (lattice), não físicas. Acerta o formato do escoamento (estagnação no bico, a esteira, sucção em cima, separação conforme o ângulo sobe) e erra os números de propósito. Use pra intuição, pra ensinar, pra curiosidade de aeromodelismo, pra uma demo bonita no projetor. Não use pra dimensionar uma asa de verdade.

Essa linha é traçada de propósito. Confio mais numa ferramenta honesta sobre o que é do que numa que finge ser mais.

Como funciona

O solver é um método Lattice-Boltzmann 2D, D2Q9 com colisão BGK. Um fluxo livre entra pela esquerda; o corpo é uma parede no-slip feita com bounce-back de meio caminho; as forças saem da integral da pressão sobre as faces do corpo. Então ele pega arrasto de forma e sustentação, mas não tudo. O atrito de pele é ignorado, então o arrasto sai baixo. Limitação conhecida, não bug escondido.

O código se divide em alguns pacotes sem peso de renderização, que testam sem tela: lbm é o solver, foil gera as formas NACA, scene e sceneio guardam as cenas editáveis, viz faz os mapas de cor e as partículas de fumaça. Em cima fica o app: o loop do Ebitengine, o editor, entrada e menus. Tem também uma ferramenta de snapshot que renderiza os campos direto pra PNG, que é como eu confiro a física sem abrir janela.

O editor

O Kutta tem um editor de formas simples. Desenha uma forma fechada, arrasta vértices, puxa uma alça Bézier pra curvar uma aresta. Corta e junta as formas de novo, que é o que deixa dividir um aerofólio em dois: uma asa e um flap, cada um mantendo o perfil de verdade.

Depois tem o modo de animação: percorre uma linha do tempo, solta keyframes, anima a pose de cada parte enquanto o escoamento continua rodando por baixo. As cenas salvam como .afoil, um formato textual pequeno em s-expressions. Gosto de formato que você abre, lê, faz diff e commita sem ferramenta especial.

Por que Go

Go não é a linguagem que as pessoas pegam quando querem um brinquedo visual, e metade do motivo de eu insistir nela pra isso é justamente esse. No Kutta ela me dá build rápido, cross-compile sem drama, código legível e velocidade suficiente pra uma simulação qualitativa em tempo real. O Ebitengine cuida da janela e do loop. O que sai é um app desktop comum: baixa um executável e roda.

Tem um segundo motivo, mais quieto. Um projeto open source que produz uma imagem, um som ou uma animação é muito mais fácil de compartilhar do que uma biblioteca que só faz sentido depois de ler a API. Isso não torna o projeto visual melhor. Torna ele legível pra quem tem três segundos e uma rolagem de mouse. O Kutta é uma ideia com cara de biblioteca vestida de algo que dá pra assistir.

Rodando

Binários prontos e um cask do Homebrew estão no repositório. Do fonte é o de sempre:

go run .

No Linux, o Ebitengine quer os pacotes de dev de Cgo/OpenGL/áudio de sempre; macOS e Windows não precisam de nada a mais.

O Kutta é MIT: github.com/crgimenes/kutta. Se ferramenta visual pequena em Go é a sua praia, uma estrela me diz qual experimento vale alimentar.


Cesar Gimenes

Última modificação
Projetos:
Tags: