Dev (Back & Front)ARTIGO

Kutta, um pequeno túnel de vento em Go

Kutta, um pequeno túnel de vento em Go
Imagem: Cesar Gimenes

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 24120012 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:

sh
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.

Trabalha com tecnologia desde a década de 90. Já atuou na área de educação e participou de projetos de mobilidade de grande volume para laboratórios farmacêuticos. Criou games tanto para PC, como para iOS. Hoje está direcionando seus esforços em plataformas de Sistemas Embarcados, IoT, microservices e cloud computing. É um entusiasta de tecnologias como Golang e Docker.

Ver perfil