1. Algoritmo Tree Code
Aproximando el c´lculo de la fuerza, en el problema de n-cuerpos.
a
Cristi´n D. Maureira Fredes
a
cmaureir@hpc.cl
Universidad T´cnica
e
Federico Santa Mar´
ıa
19 de septiembre de 2011
2. Algoritmo Tree Code
Introducci´n
o
Problema de n-cuerpos
Definici´n
o
Predecir el movimiento de un grupo de objetos celestes, que van
interactuando unos con otros gravitacionalmente.
2 of 31
Cristi´n D. Maureira Fredes
a
3. Algoritmo Tree Code
Introducci´n
o
Secciones cr´
ıticas
Posiciones iniciales.
Random.
C´lculo de las fuerzas.
a
Plummer Model.
Particle-Particle. O(n2 )
M´todo de integraci´n.
e o
Particle-Mesh. O(n + ng log ng )
Euler. Treecode. O(n log n)
Leapfrog. Multipole. O(n)
Runge Kutta. etc.
Two step Adams-Bashworth.
etc.
3 of 31
Cristi´n D. Maureira Fredes
a
4. Algoritmo Tree Code
Introducci´n
o
Algoritmo General
C´lculo de la fuerza.
a
Posiciones iniciales xi .
Velocidades iniciales vi .
1≤i ≤N
mi · mj rij
fij = G · 2
·
||rij || ||ri j||
mi y mj masas de los cuerpos i y j.
rij = (xj − xi ) vector de distancia entre los cuerpos i y j.
G , constante gravitacional. (6, 67428 × 10−11 m3 kg −1 s −2 )
4 of 31
Cristi´n D. Maureira Fredes
a
5. Algoritmo Tree Code
Introducci´n
o
Tree-code
“A Hierarchical O(N log N) Force Calculation Algorithm”, Josh
Barnes & Piet Hut, 1986. Nature 324, 446.
Joshua Edward Barnes
Faculty member at the Institute for Astronomy (IfA), University of
Hawaii.
Piet Hut
Professor of Interdisciplinary Studies, Institute for Advanced Study.
5 of 31
Cristi´n D. Maureira Fredes
a
6. Algoritmo Tree Code
Barnes-Hut Tree Code
Idea
“Agrupar cuerpos cercanos y aproximarlos en un solo cuerpo”
6 of 31
Cristi´n D. Maureira Fredes
a
7. Algoritmo Tree Code
Barnes-Hut Tree Code
Idea
“Agrupar cuerpos cercanos y aproximarlos en un solo cuerpo”
Si el grupo est´ muy lejos, se aproximan los efectos gravitacionales
a
utilizando el centro de masa.
6 of 31
Cristi´n D. Maureira Fredes
a
8. Algoritmo Tree Code
Barnes-Hut Tree Code
Idea
“Agrupar cuerpos cercanos y aproximarlos en un solo cuerpo”
Si el grupo est´ muy lejos, se aproximan los efectos gravitacionales
a
utilizando el centro de masa.
Centro de masa, promedio de las posiciones de un cuerpo en un
grupo, ponderado por la masa.
6 of 31
Cristi´n D. Maureira Fredes
a
9. Algoritmo Tree Code
Barnes-Hut Tree Code
Idea
Centro de Masa
Formalmente si dos cuerpos con posiciones (x1 , y1 ), (x2 , y2 ) y masas
m1 , m2 , la masa total del centro de masa (x, y ) est´ dada por:
a
m = m1 + m2
(x1 · m1 + x2 · m2 )
x =
m
(y1 · m1 + y2 · m2 )
y =
m
7 of 31
Cristi´n D. Maureira Fredes
a
10. Algoritmo Tree Code
Barnes-Hut Tree Code
Algoritmo
Esquema inteligente para agrupar cuerpos suficientemente lejos.
8 of 31
Cristi´n D. Maureira Fredes
a
11. Algoritmo Tree Code
Barnes-Hut Tree Code
Algoritmo
Esquema inteligente para agrupar cuerpos suficientemente lejos.
Recursivamente divide el conjunto de cuerpos en grupos
guard´ndolos en un “quad-tree”.
a
8 of 31
Cristi´n D. Maureira Fredes
a
12. Algoritmo Tree Code
Barnes-Hut Tree Code
Algoritmo
Esquema inteligente para agrupar cuerpos suficientemente lejos.
Recursivamente divide el conjunto de cuerpos en grupos
guard´ndolos en un “quad-tree”.
a
Cada nodo representa una regi´n en un espacio de dos dimensiones.
o
8 of 31
Cristi´n D. Maureira Fredes
a
13. Algoritmo Tree Code
Barnes-Hut Tree Code
Algoritmo
Esquema inteligente para agrupar cuerpos suficientemente lejos.
Recursivamente divide el conjunto de cuerpos en grupos
guard´ndolos en un “quad-tree”.
a
Cada nodo representa una regi´n en un espacio de dos dimensiones.
o
El nodo m´s alto representa todo el espacio, y sus cuatro hijos
a
representan cuatro cuadrantes en el espacio,
8 of 31
Cristi´n D. Maureira Fredes
a
15. Algoritmo Tree Code
Barnes-Hut Tree Code
Aproximaci´n
o
Cada nodo externo, representa un unico cuerpo.
´
10 of 31
Cristi´n D. Maureira Fredes
a
16. Algoritmo Tree Code
Barnes-Hut Tree Code
Aproximaci´n
o
Cada nodo externo, representa un unico cuerpo.
´
Cada nodo interno, representa el grupo de cuerpos debajo de ella,
(guarda “centro de masa” y “masa total”).
10 of 31
Cristi´n D. Maureira Fredes
a
17. Algoritmo Tree Code
Barnes-Hut Tree Code
Aproximaci´n
o
*
NO A NE SO SE H
D E F G
NO NE SO SE
B C
NO NE SO SE
Cuerpo Regi´n con > 1 cuerpo
o Cuadrante vac´
ıo
11 of 31
Cristi´n D. Maureira Fredes
a
18. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza
a
En un cuerpo particular.
Recorrer los nodos del ´rbol, partiendo de la ra´
a ız.
Centro de masa de un nodo interno:
Si lo suficientemente lejos del cuerpo.
Se aproximan los cuerpos contenidos. (con centro de masa y masa total)
No lo suficientemente lejos del cuerpo.
Recorrer los sub-´rboles recursivamente.
a
12 of 31
Cristi´n D. Maureira Fredes
a
19. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza
a
¿C´mo determinarlo?
o
ancho regi´n nodo (s)
o
Cociente = distancia Cuerpo-CM (d)
Despu´s, comparar con un valor umbral θ.
e
s
Si d < θ, entonces el nodo interno esta lo suficiente lejos.
Ajustando θ, podemos cambiar la velocidad y la precisi´n de la
o
simulaci´n.
o
Se suele utilizar θ = 0,5. Si θ = 0, degenera (fuerza bruta).
13 of 31
Cristi´n D. Maureira Fredes
a
20. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
14 of 31
Cristi´n D. Maureira Fredes
a
21. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
2. Si el nodo x es un nodo interno, actualizar el CM y M.
(Recursivamente inserta el cuerpo b en el cuadrante apropiado).
14 of 31
Cristi´n D. Maureira Fredes
a
22. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
2. Si el nodo x es un nodo interno, actualizar el CM y M.
(Recursivamente inserta el cuerpo b en el cuadrante apropiado).
3. Si el nodo x es un nodo externo, digamos que contiene un cuerpo
c, entonces hay dos cuerpos, b y c en la misma regi´n.
o
14 of 31
Cristi´n D. Maureira Fredes
a
23. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
2. Si el nodo x es un nodo interno, actualizar el CM y M.
(Recursivamente inserta el cuerpo b en el cuadrante apropiado).
3. Si el nodo x es un nodo externo, digamos que contiene un cuerpo
c, entonces hay dos cuerpos, b y c en la misma regi´n.
o
Subdivide la regi´n creando cuatro hijos.
o
14 of 31
Cristi´n D. Maureira Fredes
a
24. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
2. Si el nodo x es un nodo interno, actualizar el CM y M.
(Recursivamente inserta el cuerpo b en el cuadrante apropiado).
3. Si el nodo x es un nodo externo, digamos que contiene un cuerpo
c, entonces hay dos cuerpos, b y c en la misma regi´n.
o
Subdivide la regi´n creando cuatro hijos.
o
Entonces, recursivamente inserta ambos cuerpos, b y c, en el
cuadrante apropiado.
14 of 31
Cristi´n D. Maureira Fredes
a
25. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
2. Si el nodo x es un nodo interno, actualizar el CM y M.
(Recursivamente inserta el cuerpo b en el cuadrante apropiado).
3. Si el nodo x es un nodo externo, digamos que contiene un cuerpo
c, entonces hay dos cuerpos, b y c en la misma regi´n.
o
Subdivide la regi´n creando cuatro hijos.
o
Entonces, recursivamente inserta ambos cuerpos, b y c, en el
cuadrante apropiado.
Recursividad!
14 of 31
Cristi´n D. Maureira Fredes
a
26. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Si queremos ingresar el cuerpo b en el ´rbol con ra´ en el nodo x.
a ız
1. Si el nodo x no contiene un cuerpo, poner el nuevo cuerpo b ah´
ı.
2. Si el nodo x es un nodo interno, actualizar el CM y M.
(Recursivamente inserta el cuerpo b en el cuadrante apropiado).
3. Si el nodo x es un nodo externo, digamos que contiene un cuerpo
c, entonces hay dos cuerpos, b y c en la misma regi´n.
o
Subdivide la regi´n creando cuatro hijos.
o
Entonces, recursivamente inserta ambos cuerpos, b y c, en el
cuadrante apropiado.
Recursividad!
Finalmente, actualizar el CM y M de x.
14 of 31
Cristi´n D. Maureira Fredes
a
27. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Ejemplo, 5 cuerpos.
Convenci´n ramas, de izquierda a derecha (NO, NE, SO y SE).
o
B
A
C D
E
NO NE SO SE
15 of 31
Cristi´n D. Maureira Fredes
a
28. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Agregar cuerpo A.
Encaja en el cuadrante NO de la ra´
ız.
NO NE 1
SO SE
A
masa: 1 NO NE SO SE
16 of 31
Cristi´n D. Maureira Fredes
a
29. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Agregar cuerpo B.
Encaja en el cuadrante NE de la ra´
ız.
NO NE 2
SO SE
A B
masa: 2 NO NE SO SE
17 of 31
Cristi´n D. Maureira Fredes
a
30. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Agregar cuerpo C.
Cuadrante NE ocupado por B, se crea rama y se insertan los dos.
NO NE 3
SO SE
masa: 2 A 2
NO SO SE
B C
masa: 3 NO NE SO SE
18 of 31
Cristi´n D. Maureira Fredes
a
31. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Agregar cuerpo D.
Encaja en el cuadrante SE de la rama.
NO NE 4
SO SE
masa: 3 A 3
NO SO SE
B C D
masa: 4 NO NE SO SE
19 of 31
Cristi´n D. Maureira Fredes
a
32. Algoritmo Tree Code
Barnes-Hut Tree Code
Construyendo un ´rbol
a
Agregar cuerpo E.
Encaja en el cuadrante SE de la ra´
ız.
5
NO NE A 3 E
SO SE NO SO SE
B C D
masa: 5 NO NE SO SE
20 of 31
Cristi´n D. Maureira Fredes
a
33. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
Calcular la fuerza que ejerce la red sobre un cuerpo b, comenzando
con la raiz:
1. Si el nodo actual es un nodo externo (y no b).
Calcular y agregar fuerza.
21 of 31
Cristi´n D. Maureira Fredes
a
34. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
Calcular la fuerza que ejerce la red sobre un cuerpo b, comenzando
con la raiz:
1. Si el nodo actual es un nodo externo (y no b).
Calcular y agregar fuerza.
s s
2. Si no, calcular d . Si d < θ, nodo interno como un unico cuerpo.
´
Calcular y agregar fuerza.
21 of 31
Cristi´n D. Maureira Fredes
a
35. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
Calcular la fuerza que ejerce la red sobre un cuerpo b, comenzando
con la raiz:
1. Si el nodo actual es un nodo externo (y no b).
Calcular y agregar fuerza.
s s
2. Si no, calcular d . Si d < θ, nodo interno como un unico cuerpo.
´
Calcular y agregar fuerza.
3. Si no, recursividad del procedimiento en cada hijo del nodo actual.
21 of 31
Cristi´n D. Maureira Fredes
a
36. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
Ejemplo, calcular la fuerza de la red sobre el cuerpo a.
Comenzaremos en la ra´ (nodo interno).
ız
Representa CM de los 6 cuerpos.
a, b, c, d, e y f, con masas 1, 2, 3, 4, 5 y 6 Kg.
El calculo de fuerza procede de la siguiente forma.
22 of 31
Cristi´n D. Maureira Fredes
a
37. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
1. El primer nodo examinado es la ra´
ız.
s 100
Cociente entre A y CM. d = 43,1 > θ = 0,5
→ Proceso recursivo dentro.
B C
D
A F
A
E
E
F
B C D
23 of 31
Cristi´n D. Maureira Fredes
a
38. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
2. El primer hijo es el cuerpo A
No ejerce fuerza sobre si mismo.
→ No hacemos nada.
A F
E
B C D
24 of 31
Cristi´n D. Maureira Fredes
a
39. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
3. Hijo representante NE (contiene b, c, d y e).
s 50
d = 62,7 > θ.
→ Proceso recursivo dentro.
A F
E
B C D
25 of 31
Cristi´n D. Maureira Fredes
a
40. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
4. Hijo representante NE del padre (contiene b, c y d).
s
d = 25/66,9 < θ.
→ Se calcula la fuerza como un s´lo nodo.
o
A F
E
B C D
26 of 31
Cristi´n D. Maureira Fredes
a
41. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
5. El siguiente hijo es el que contiene el cuerpo e.
Este es un nodo externo.
→ Calculamos fuerza entre a y e.
A F
E
B C D
27 of 31
Cristi´n D. Maureira Fredes
a
42. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
6. Volvemos al nivel anterior, para ver otro hijo.
Este es un nodo externo.
→ Calculamos fuerza entre a y f.
A F
E
B C D
28 of 31
Cristi´n D. Maureira Fredes
a
43. Algoritmo Tree Code
Barnes-Hut Tree Code
C´lculo de la fuerza sobre un cuerpo
a
7. Finalmente, en cada paso vamos sumando las fuerzas calculadas,
para obtener la fuerza total de la red sobre el cuerpo a.
29 of 31
Cristi´n D. Maureira Fredes
a
45. Algoritmo Tree Code
Conclusiones
Muestra nuevo enfoque para abordar el problema.
Es m´s r´pido, pues no recorre todos los cuerpos.
a a
30 of 31
Cristi´n D. Maureira Fredes
a
46. Algoritmo Tree Code
Conclusiones
Muestra nuevo enfoque para abordar el problema.
Es m´s r´pido, pues no recorre todos los cuerpos.
a a
Disminuye el orden del algoritmo de O(n2 ) a O(n log n).
30 of 31
Cristi´n D. Maureira Fredes
a
47. Algoritmo Tree Code
Conclusiones
Muestra nuevo enfoque para abordar el problema.
Es m´s r´pido, pues no recorre todos los cuerpos.
a a
Disminuye el orden del algoritmo de O(n2 ) a O(n log n).
Generamos errores, lo que nos lleva a tener una menor precisi´n.
o
30 of 31
Cristi´n D. Maureira Fredes
a
48. Algoritmo Tree Code
Conclusiones
Muestra nuevo enfoque para abordar el problema.
Es m´s r´pido, pues no recorre todos los cuerpos.
a a
Disminuye el orden del algoritmo de O(n2 ) a O(n log n).
Generamos errores, lo que nos lleva a tener una menor precisi´n.
o
Podemos controlar la precisi´n, modificando θ.
o
30 of 31
Cristi´n D. Maureira Fredes
a
49. Algoritmo Tree Code
Conclusiones
Muestra nuevo enfoque para abordar el problema.
Es m´s r´pido, pues no recorre todos los cuerpos.
a a
Disminuye el orden del algoritmo de O(n2 ) a O(n log n).
Generamos errores, lo que nos lleva a tener una menor precisi´n.
o
Podemos controlar la precisi´n, modificando θ.
o
Desarrollo multipolar (Multipole expansions) lo corrige!.
30 of 31
Cristi´n D. Maureira Fredes
a
50. Algoritmo Tree Code
Aproximando el c´lculo de la fuerza, en el problema de n-cuerpos.
a
Cristi´n D. Maureira Fredes
a
cmaureir@hpc.cl
Universidad T´cnica
e
Federico Santa Mar´
ıa
19 de septiembre de 2011