Science Score: 57.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 3 DOI reference(s) in README -
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (1.9%) to scientific vocabulary
Repository
Gravidade, só que em Fortran.
Basic Info
- Host: GitHub
- Owner: Potalej
- Language: Fortran
- Default Branch: main
- Homepage: https://www.overleaf.com/read/vrxkkhqsxncq#ce41c6
- Size: 3.81 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 5
- Releases: 1
Metadata Files
README.md
🪐 gravidade-fortran 🪐
A mesma gravidade, só que em Fortran. Vamo que vamo :)
⚙️ Compilando
Para gerar uma build com o gerador desejado, basta rodar
cmake -B build -G "gerador"
Por exemplo, usando o Ninja:
cmake -B build -G 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
🚩 Flags
Há duas flags disponíveis. A primeira é a PRECISAO, que pode ser 32, 64 (padrão) ou 128, e todas as variáveis de tipo REAL(pf) terão a precisão desejada. Exemplo de uso:
cmake -B build -DPRECISAO=64 ...
A outra flag é a do gprof, que ativa o GNU Profiler, utilizado para análise de desempenho. Para ativar, basta usar:
cmake -B build -DGPROF=ON ...
Após rodar uma simulação com o programa compilado com gprof, será gerado um arquivo "gmon.out" que fornece um relatório usando o comando:
gprof gravidade.exe gmon.out > relatorio.txt
🧮 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.json
Há três modos para geração aleatória no momento, que geram valores iniciais aleatórios e os condicionam:
- sorteio_ip_iterativo: Condicionamento iterativo;
- sorteio_ip_direto: Condicionamento direto;
- sorteio_aarseth: Condiciona diretamente e depois aplica o proposto por (Aarseth, 2003) para obter o equilíbrio de virial.
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.json
Confira aqui um exemplo de arquivo de valores iniciais.
Visualizando 🧐
É possível visualizar as simulações de duas formas.
Gnuplot ou Matplotlib
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
Visualização em tempo real
Também podemos visualizar as simulações em tempo real via sockets, ativando a opção "exibir": true no arquivo de valores iniciais utilizado. Para isso, é preciso ter um servidor local aberto para receber as informações, que são enviadas via TCP.
Um exemplo de script em Python que recebe e exibe os dados em tempo real pode ser encontrado em aqui. Basta rodar este script e em seguida rodar sua simulação com a opção ativada. É importante observar que o envio de dados prejudica consideravelmente o desempenho, então não é bom usar isso para simulações grandes e sérias.

📈 Métodos
Os métodos de integração implementados são:
- Métodos gerais:
- Euler explícito e implícito;
- Métodos de Runge-Kutta:
- Euler explícito e implícito;
- Métodos simpléticos:
- Euler simplético;
- Velocity-Verlet;
- Ruth de 3ª Ordem (RUTH3);
- Ruth de 4ª Ordem (RUTH4).
- Runge-Kutta-Nystrom de 5ª Ordem e 5 passos (rkn551);
- Runge-Kutta-Nystrom de 6ª Ordem e 7 passos (rkn671);
- Stormer-Verlet Composto de 8ª Ordem e 15 Estágios (svcp8s15);.
- Stormer-Verlet Composto de 10ª Ordem e 35 Estágios (svcp10s35).
Também há três aplicações para modificar soluções:
- Um corretor numérico que aplica correções a partir dos desvios de energia total (e outras integrais primeiras). Bastante útil para simulações com muitos corpos;
- Colisões perfeitamente elásticas entre os corpos.
- 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.
📚 Bibliotecas utilizadas
- OpenBLAS: Rotinas numéricas de álgebra linear. Geralmente não é difícil de instalar, então está sendo importada manualmente.
- JSON-Fortran: Rotinas para manipulação de arquivos JSON. Esta teve o "src" de sua versão 9.0.3 (fev/2025) disponibilizado localmente para facilitar o uso em diferentes máquinas, e seus arquivos estão no diretório "lib/json-fortran".
Referências
- AARSETH, Sverre. Gravitational N-Body Simulations: Tools and Algorithms. Cambridge: Cambridge University Press, 2003.
- 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.
Owner
- Name: Potalej
- Login: Potalej
- Kind: user
- Location: São Paulo ☂
- Repositories: 7
- Profile: https://github.com/Potalej
🍕
Citation (CITATION.cff)
cff-version: 1.2.0
title: gravidade-fortran
message: >-
Se for usar pra alguma coisa, cita o repositorio
usando esse arquivo aqui.
type: software
authors:
- given-names: Octavio Augusto Potalej
email: oapotalej@usp.br
affiliation: Universidade de São Paulo
repository-code: 'https://github.com/Potalej/gravidade-fortran'
abstract: >-
Simulações do problema de N-corpos gravitacional em
Fortran.
GitHub Events
Total
- Issues event: 5
- Issue comment event: 3
- Push event: 37
- Create event: 1
Last Year
- Issues event: 5
- Issue comment event: 3
- Push event: 37
- Create event: 1