Skip to content

Potalej/gravidade-fortran

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🪐 gravidade-fortran 🪐

A mesma gravidade, só que em Fortran. Vamo que vamo :)

⚙️ Compilando

Para gerar uma build, basta rodar

cmake -B build -G Ninja

e para compilar com o ninja:

ninja -C build

Um executável será gerado no diretório raiz.

Outra possibilidade é com o uso dos helpers. Use:

sh helpers/build.sh

para compilar o programa. Se quiser compilar e rodar um exemplo de preset, use:

sh helpers/compilar_gerar.sh

🧮 Simulando

Presets para geração

É possível utilizar presets (i.e., arquivos com configurações pré-definidas) para gerar valores iniciais aleatórios com determinadas condições, como com uma energia total desejada, por exemplo.

Com base em um preset modelo disponível em "presets/", escreva seu preset e rode com:

./gravidade -s SEU_ARQUIVO.txt

Há dois modos para geração aleatória no momento:

  • modo sorteio: Gera valores aleatórios no intervalo desejado e os condiciona conforme as integrais primeiras;
  • modo sorteio_henon: Gera valores aleatórios no intervalo desejado, mas aplica as condições iniciais de Henón, ignorando as integrais primeiras informadas. Para mais informações, veja a wiki.

Confira aqui um exemplo de arquivo de valores para sorteio.

Valores iniciais

Se já tiver os valores iniciais do problema e quiser utilizá-los, é possível através da opção -vi. Um modelo de valores iniciais de um problema de três corpos com trajetória em formato de lemniscata está disponível no diretório PRESETs.

Para rodar este caso, utilize:

./gravidade -vi SEU_ARQUIVO.txt

Confira aqui um exemplo de arquivo de valores iniciais.

Visualizando

Além disso, é possível também visualizar as simulações feitas através da opção -e ou --exibir. É uma visualização simples das trajetórias, mas pode ajudar a conferir resultados rapidamente.

./gravidade -e SEU_ARQUIVO.csv

Métodos

Os métodos de integração implementados são:

Também há três aplicações para modificar soluções:

  1. Um corretor numérico baseado na condição de 1ª ordem de Karush-Kuhn-Tucker. Bastante útil para simulações com muitos corpos;
  2. Colisões perfeitamente elásticas entre os corpos. Interessante para casos com poucos corpos e baixas velocidades;
  3. Um amortecedor no potencial, que impede aproximações muito intensas. Para poucos corpos pode gerar instabilidades, mas é útil para grandes quantidades de corpos.

As massas, posições e momentos lineares são armazenados em arquivos .csv no diretório "data". Para evitar sobreescrita de dados, o nome do arquivo captura a data corrente no formato "aaaammdd_vv.csv", onde "v" se refere à versão do dia, iniciando em 001 e indo até 999.

A análise dos dados pode ser feita com Python através de gravidade-analise.

Referências

  • VOLCHAN, Sérgio. Uma Introdução à Mecânica Celeste. Rio de Janeiro: Instituto Nacional de Matemática Pura e Aplicada - IMPA, 2007.
  • BERTSEKAS, Dmitri Panteli. Nonlinear Programming. 3ed. Nashua: Athena Scientific, 2016.
  • HAIRER, Ernst; WANNER, Gerhard; LUBICH, Christian. Geometric Numerical Integration: Structure-Preserving Algorithms for Ordinary Differential Equations. Heidelberg: Springer-Verlag, 2006. DOI: 10.1007/3-540-30666-8. Disponível em: https://doi.org/10.1007/3-540-30666-8.
  • ROMA, Alexandre et al. Métodos para a solução numérica de equações diferenciais ordinárias a valores iniciais. São Paulo: Notas de aula, 2019.
  • OKUNBOR, D. I.; SKEEL, R. D. Canonical Runge—Kutta—Nyström methods of orders five and six. Journal of Computational and Applied Mathematics, v. 51, n. 3, p. 375–382, jun. 1994.

About

Gravidade, só que em Fortran.

Resources

Stars

Watchers

Forks