Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Simulaciones Gravitacionales de N cuerpos
1. Simulaciones Gravitacionales de N-Cuerpos
Eduardo Jeraldo D.
Departmento de Ciencias Físicas
Universidad Nacional Andrés Bello
16 de Diciembre de 2011
2. Esquema
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 2 / 22
3. Esquema
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 2 / 22
4. Esquema
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 2 / 22
5. Esquema
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 2 / 22
6. Introducción
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 3 / 22
7. Introducción Marco Teórico.
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 4 / 22
8. Introducción Marco Teórico.
Marco Teórico
• ¿Que es una simulación de N-Cuerpos?
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 5 / 22
9. Introducción Marco Teórico.
Marco Teórico
• ¿Que es una simulación de N-Cuerpos?
Definición
Una simulación de N-cuerpos es una simulación de un sistema
dinámico de las partículas, por lo general bajo la influencia de la
gravedad.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 5 / 22
10. Introducción Marco Teórico.
Marco Teórico
• ¿Para que sirve resolver este problema?
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 5 / 22
11. Introducción Marco Teórico.
Marco Teórico
• ¿Para que sirve resolver este problema?
Respuesta
Estas simulaciones se utilizan para estudiar la evolución dinámica de
los cúmulos estelares, los procesos de formación, como el proceso de
formación de filamentos de galaxias y los halos de galaxias de materia
oscura en la cosmología física.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 5 / 22
12. Desarrollo
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 6 / 22
13. Desarrollo Creación del Programa.
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 7 / 22
14. Desarrollo Creación del Programa.
Creación del Programa
Para realizar la simulación necesitamos:
• Resolver la ecuación:
• Leyes de Newton.
• Constantes Unitarias.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 8 / 22
15. Desarrollo Creación del Programa.
Creación del Programa
Para realizar la simulación necesitamos:
• Resolver la ecuación:
• Leyes de Newton.
La ecuación que debemos resolver es la ecuación de Newton.
F = ma
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 8 / 22
16. Desarrollo Creación del Programa.
Creación del Programa
Para realizar la simulación necesitamos:
• Resolver la ecuación:
• Leyes de Newton.
Además la fuerza F es la fuerza de interacción entre cuerpos que se
encuentran bajo potencial gravitatorio.
mi mj (ri − rj )
Fi = G 3
i=j ri − rj
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 8 / 22
17. Desarrollo Creación del Programa.
Creación del Programa
Para realizar la simulación necesitamos:
• Resolver la ecuación:
• Constantes Unitarias.
Para no tratar con tantos números, al momento del cálculo, definimos
una manera de que G sea igual a 1. Para esto usamos:
L = α m
M = β Kg
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 8 / 22
18. Desarrollo Creación del Programa.
Creación del Programa
Para realizar la simulación necesitamos:
• Resolver la ecuación:
• Constantes Unitarias.
Las siguientes ecuaciones las usamos para la siguiente relación:
3 3
L m
G =1 2
= 6, 693 ∗ 1011 2
M T Kg s
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 8 / 22
19. Desarrollo Creación del Programa.
Creación del Programa
Para realizar la simulación necesitamos:
• Resolver la ecuación:
• Constantes Unitarias.
Para dejar esto bien implementado, despejamos cuanto tendrá que
valer el tiempo para que G = 1.
1
α3 2 11
T = ∗ 10− 2 s
6, 693β
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 8 / 22
20. Desarrollo Implementación del Programa.
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 9 / 22
21. Desarrollo Implementación del Programa.
Implementaciación del Programa.
• Programa realizado en C.
• Usar un integrador de dos pasos.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 10 / 22
22. Desarrollo Implementación del Programa.
Implementaciación del Programa.
• Programa realizado en C.
• Usar un integrador de dos pasos.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 10 / 22
23. Desarrollo Implementación del Programa.
Implementaciación del Programa.
La parte principal del programa es:
for(j=0;j<N;j++){
aa[0][j] = aa[1][j] = aa[2][j] = r = 0.0;
for(k=0;k<N;k++){
if(k!=j){
rx = s[0][j]-s[0][k];
ry = s[1][j]-s[1][k];
rz = s[2][j]-s[2][k];
r1 = 1/(rx*rx + ry*ry + rz*rz);
r = sqrt(r1*r1*r1);
aa[0][j] -= G*m[k]*rx*r;
aa[1][j] -= G*m[k]*ry*r;
aa[2][j] -= G*m[k]*rz*r;
}
}
}
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 11 / 22
24. Desarrollo Optimización del Programa.
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 12 / 22
25. Desarrollo Optimización del Programa.
Optimización del Cálculo.
Para que la rutina de cálculo sea óptima debemos:
• Optimizar el cálculo:
• Cálculo Directo.
• Cálculo de parte de las aceleraciones.
• Cálculo usando Open MP.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 13 / 22
26. Desarrollo Optimización del Programa.
Optimización del Cálculo.
Para que la rutina de cálculo sea óptima debemos:
• Optimizar el cálculo:
• Cálculo Directo.
La primera rutina realiza un cálculo de manera directa.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 13 / 22
27. Desarrollo Optimización del Programa.
Optimización del Cálculo.
Para que la rutina de cálculo sea óptima debemos:
• Optimizar el cálculo:
• Cálculo de parte de las aceleraciones.
Solo calculamos una parte de la aceleraciones.
Gracias a que las aceleraciones representan una matriz de la forma:
0 a12 . . . a1n 0 a12 . . . a1n
a21 0 . . . a2n −a12 0 . . . a2n
= .
. . .
.
. . .
. . .
.
an1 an2 . . . 0 −a1n −a2n . . . 0
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 13 / 22
28. Desarrollo Optimización del Programa.
Optimización del Cálculo.
La programación para el cálculo de la parte superior de la matriz de
aceleracion:
for(j=0;j<N;j++){
r = 0.0;
for(k=j;k<N;k++) {
ax = ay = az = 0.0;
if(k!=j){
rx = x[0][j]-x[0][k]; ry = x[1][j]-x[1][k];
rz = x[2][j]-x[2][k]; r1 = 1 /(rx*rx + ry*ry + rz*rz);
r = sqrt(r1*r1*r1);
ax = -G*m[k]*rx*r; ay = -G*m[k]*ry*r; az = -G*m[k]*rz*r;
}
aa[0][j] += ax; aa[0][k] -= ax;
aa[1][j] += ay; aa[1][k] -= ay;
aa[2][j] += az; aa[2][k] -= az;
}
}
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 14 / 22
29. Desarrollo Optimización del Programa.
Optimización del Cálculo.
Para que la rutina de cálculo sea optima debemos:
• Optimizar el cálculo:
• Cálculo usando Open MP.
Open MP nos permite realizar el calcular de manera paralela en los
núcleos del computador en que se ejecuta el programa.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 15 / 22
30. Desarrollo Optimización del Programa.
Optimización del Cálculo.
Agregamos la linea que comienza con #pragma para realizar la
paralelización
#pragma omp parallel for private(x,y,z,ax,ay,az,k,
rx,ry,rz,r1,r2,r)
for(j=0;j<N;j++){
x = s[0][j]; y = s[1][j]; z = s[2][j];
ax = ay =az = 0.0;
for(k=0;k<N;k++){
if(k!=j){
rx = x-s[0][k]; ry = y-s[1][k]; rz = z-s[2][k];
r1 = rx*rx + ry*ry + rz*rz; r2 = r1*r1*r1;
r = 1/sqrt(r2);
ax -= G*m[k]*rx*r; ay -= G*m[k]*ry*r; az -= G*m[k]*rz*r;
}
}
aa[0][j] = ax; aa[1][j] = ay; aa[2][j] = az;
}
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 16 / 22
31. Desarrollo Optimización del Programa.
Optimización del Cálculo.
Para que la rutina de cálculo sea optima debemos:
• Optimizar el cálculo:
• Cálculo usando Open MP.
Open MP nos permite realizar el calcular de manera paralela en los
núcleos del computador en que se ejecuta el programa.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 17 / 22
32. Otra paralelización es posible usando la siguiente rutina:
#pragma omp parallel for
for(j=0;j<3*n;j++) aa[0][j] = aa[1][j] = aa[2][j] = 0.0;
#pragma omp parallel for reduction(+:bb) private(gmj,x,y,z
,ax,ay,az,k,rx,ry,rz,r,r1,r2,f)
for(j=1;j<(n/2);j++){
gmj = G*mj; x = s[0][j]; y = s[1][j]; z = s[2][j];
ax = ay =az = 0.0; for(k=(j+1);k<n;k++){
rx = x-s[0][k]; ry = y-s[1][k]; rz = z-s[2][k];
r1 = rx*rx + ry*ry + rz*rz;
r2 = r1*r1*r1; r = 1/sqrt(r2);
f = G*mj*r; ax += f*rx; ay += f*ry; az += f*rz; f = gmj*r;
aa[0][k] -= f*rx; aa[1][k] -= f*ry; aa[2][k] -= f*rz;
} aa[0][j] += ax; aa[1][j] += ay; aa[2][j] += az;
m = n - j; if(m!=j){
gmj = G*mj; ax = ay =az = 0.0;
for(k=m+j;k<n;k++){
rx = x-s[0][k]; ry = y-s[1][k]; rz = z-s[2][k];
r1 = rx*rx + ry*ry + rz*rz;
r2 = r1*r1*r1; r = 1/sqrt(r2);
f = G*mj*r; ax += f*rx; ay += f*ry; az += f*rz;
f = gmj*r; aa[0][k] -= f*rx; aa[1][k] -= f*ry; aa[2][k] -= f*rz;
} aa[1][m] += ax; aa[1][m] += ay; aa[2][m] += az;
}}}
33. Tiempos de Ejecución
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 19 / 22
34. Tiempos de Ejecución
Tiempos de Ejecución
Estos son los tiempos de ejecución para una maquina con dos
núcleos:
Figura: Tiempos de ejecución para mil, diez mil y cien mil cuerpos
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 20 / 22
35. Conclución
Contenido
1 Introducción
Marco Teórico.
2 Desarrollo
Creación del Programa.
Implementación del Programa.
Optimización del Programa.
3 Tiempos de Ejecución
4 Conclución
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 21 / 22
36. Conclución
Conclusión
• El tiempo del programa, usando Open MP, depende del
compilador y la version de este mismo.
• Se debe explorar bien cual es el integrador mas optimo, y que
entrege los resultados mas reales.
• Algunos calculos de la libreria matematica se demoran mas que
otros.
• El uso de pow(a,b) demora mas que multiplicar a veces a.
• Es mas facil multiplicar que dividir.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 22 / 22
37. Conclución
Conclusión
• El tiempo del programa, usando Open MP, depende del
compilador y la version de este mismo.
• Se debe explorar bien cual es el integrador mas optimo, y que
entrege los resultados mas reales.
• Algunos calculos de la libreria matematica se demoran mas que
otros.
• El uso de pow(a,b) demora mas que multiplicar a veces a.
• Es mas facil multiplicar que dividir.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 22 / 22
38. Conclución
Conclusión
• El tiempo del programa, usando Open MP, depende del
compilador y la version de este mismo.
• Se debe explorar bien cual es el integrador mas optimo, y que
entrege los resultados mas reales.
• Algunos calculos de la libreria matematica se demoran mas que
otros.
• El uso de pow(a,b) demora mas que multiplicar a veces a.
• Es mas facil multiplicar que dividir.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 22 / 22
39. Conclución
Conclusión
• El tiempo del programa, usando Open MP, depende del
compilador y la version de este mismo.
• Se debe explorar bien cual es el integrador mas optimo, y que
entrege los resultados mas reales.
• Algunos calculos de la libreria matematica se demoran mas que
otros.
• El uso de pow(a,b) demora mas que multiplicar a veces a.
• Es mas facil multiplicar que dividir.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 22 / 22
40. Conclución
Conclusión
• El tiempo del programa, usando Open MP, depende del
compilador y la version de este mismo.
• Se debe explorar bien cual es el integrador mas optimo, y que
entrege los resultados mas reales.
• Algunos calculos de la libreria matematica se demoran mas que
otros.
• El uso de pow(a,b) demora mas que multiplicar a veces a.
• Es mas facil multiplicar que dividir.
Eduardo Jeraldo (UNAB) Simulación de N-Cuerpos 16/11/2011 22 / 22