Códigos de Python para resolver y animar la dinámica de masas y resortes. El script principal es code/simulation.py
, que simula la evolución de un sistema de masas y resortes usando un integrador temporal tipo leapfrog. El script code/animation.py
puede utilizarse para generar una animación de los resultados obtenidos utilizando PyGame. El script code/utils.py
contiene algunas funciones útiles y code/ui/
contiene scripts para la interfaz gráfica de PyGame. Todas las unidades están en el sistema internacional.
Para correr estos códigos es necesario instalar las siguientes librerías: NumPy, PyGame, pandas, tqdm y PyYAML, lo cual puede hacerse mediante el comando:
pip install numpy pygame-ce pandas tqdm pyyaml
Para tener una copia de este repositorio en tu sistema, podés clonar el mismo usando
git clone https://github.com/ffiza/mass-and-spring.git
o bien descargar el repositorio comprimido en formato ZIP
yendo a Code > Download ZIP
.
Para animar las simulaciones inlcuidas en este repositorio (cuyos resultados están almacenados en el directorio results/
, en una archivo CSV
por simulación) sólo es necesario ejecutar
python code/animation.py --result [nombre_resultados]
Por ejemplo, para animar los resultados dentro del directorio run_05
, ejecutar
python code/animation.py --result run_05
La simulación incia pausada y puede activarse presionando P
. Además, R
resetea la animación y D
muestra o esconde el panel del debugger.
Para ejecutar tus propias simulaciones, es necesario que crees una nueva carpeta dentro del directorio configs/
y agregues archivos de configuración según se describe en la sección siguiente. Luego, simplemente podés correr
python code/simulation.py --config [nombre_carpeta_config]
Python va a correr toda la simulación (tené en cuenta que cuantas más partículas haya más lenta va a ser la ejecución) y guardar los resultados en el directorio results/
, en un archivo CSV
con el mismo nombre de la carpeta donde pusiste los archivos de configuración.
Finalmente, para animar tus resultados, podés correr
python code/animation.py --result [nombre_carpeta_config]
Para correr tus propias simulaciones tenés que crear una nueva carpeta en configs/
que debe contener varios archivos relacionados con la configuración. Los mismos son los siguientes.
physics.yml
: Archivo que contiene el paso temporal de la simulación (TIMESTEP
), la cantidad de pasos (N_STEPS
), la aceleración de la gravedad (GRAV_ACCELERATION
) y el coeficiente de fricción (FRICTION_COEF
).ic.csv
: Archivo que contiene la condición inicial de cada partícula (posiciones y velocidades) y su masa. Además, el campoDynamicParticle
indica si la partícula es dinámica (1
) o estática (0
), en cuyo caso se mantendrá fija durante toda la simulación.elastic_constants.csv
: Archivo que contiene la constante elástica de cada resorte. En esta matriz, el par(i, j)
indica el valor de la constante elástica del resorte que une la partículai
con la partículaj
. Tanto la diagonal como el triángulo inferior deben ser nulos porque la fuerza elástica es antisimétrica.natural_lengths.csv
: Archivo que contiene la longitud natural de cada resorte. En esta matriz, el par(i, j)
indica el valor de la longitud natural del resorte que une la partículai
con la partículaj
. Tanto la diagonal como el triángulo inferior deben ser nulos porque la fuerza elástica es antisimétrica.
El repositorio incluye algunos ejemplos, sus condiciones iniciales y los resultados. A continuación se muestran algunas imagenes de las simulaciones incluidas.