Skip to content
Snippets Groups Projects
Verified Commit 5134b98b authored by orestis.malaspin's avatar orestis.malaspin
Browse files

ajout calcul de la force, début

parent 3433a3f2
No related branches found
No related tags found
No related merge requests found
...@@ -375,8 +375,6 @@ rien iteration_temporelle(étoiles, dt) ...@@ -375,8 +375,6 @@ rien iteration_temporelle(étoiles, dt)
+--------+-------+-------+-----------+ +--------+-------+-------+-----------+
| 10 | 10^2 | 1e-4 | | | 10 | 10^2 | 1e-4 | |
+--------+-------+-------+-----------+ +--------+-------+-------+-----------+
| 10^2 | 10^4 | 1e-2 | |
+--------+-------+-------+-----------+
| 10^4 | 10^8 | 1e+2 | ~1min | | 10^4 | 10^8 | 1e+2 | ~1min |
+--------+-------+-------+-----------+ +--------+-------+-------+-----------+
| 10^6 | 10^12 | 1e+6 | ~11j | | 10^6 | 10^12 | 1e+6 | ~11j |
...@@ -384,7 +382,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -384,7 +382,7 @@ rien iteration_temporelle(étoiles, dt)
| 10^9 | 10^18 | 1e+12 | ~30k ans | | 10^9 | 10^18 | 1e+12 | ~30k ans |
+--------+-------+-------+-----------+ +--------+-------+-------+-----------+
| 10^11 | 10^22 | 1e+16 | ~300M ans | | 10^11 | 10^22 | 1e+16 | ~300M ans |
+--------+-------+-------+ ----------+ +--------+-------+-------+-----------+
* Typiquement il y a des milliers-millions d'itérations. * Typiquement il y a des milliers-millions d'itérations.
* Il y a $10^{11}$ étoiles dans la galaxie. * Il y a $10^{11}$ étoiles dans la galaxie.
...@@ -483,7 +481,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -483,7 +481,7 @@ rien iteration_temporelle(étoiles, dt)
* 2: ID * 2: ID
* 3: SG * 3: SG
# Algorithme d'insertion # Exemple d'insertion
::: columns ::: columns
...@@ -497,7 +495,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -497,7 +495,7 @@ rien iteration_temporelle(étoiles, dt)
:::: {.column width=50%} :::: {.column width=50%}
## Arbre ## Arbre, niveau 1
![](figs/arbre1.png){width=100%} ![](figs/arbre1.png){width=100%}
...@@ -508,7 +506,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -508,7 +506,7 @@ rien iteration_temporelle(étoiles, dt)
::: :::
# Algorithme d'insertion # Exemple d'insertion
::: columns ::: columns
...@@ -522,7 +520,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -522,7 +520,7 @@ rien iteration_temporelle(étoiles, dt)
:::: {.column width=50%} :::: {.column width=50%}
## Arbre ## Arbre, niveau 1
![](figs/arbre2.png){width=100%} ![](figs/arbre2.png){width=100%}
...@@ -533,7 +531,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -533,7 +531,7 @@ rien iteration_temporelle(étoiles, dt)
::: :::
# Algorithme d'insertion # Exemple d'insertion
::: columns ::: columns
...@@ -547,7 +545,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -547,7 +545,7 @@ rien iteration_temporelle(étoiles, dt)
:::: {.column width=50%} :::: {.column width=50%}
## Arbre ## Arbre, niveau 1
![](figs/arbre3_1.png){width=100%} ![](figs/arbre3_1.png){width=100%}
...@@ -558,7 +556,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -558,7 +556,7 @@ rien iteration_temporelle(étoiles, dt)
::: :::
# Algorithme d'insertion # Exemple d'insertion
::: columns ::: columns
...@@ -572,7 +570,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -572,7 +570,7 @@ rien iteration_temporelle(étoiles, dt)
:::: {.column width=50%} :::: {.column width=50%}
## Arbre ## Arbre, niveau 2
![](figs/arbre3_2.png){width=100%} ![](figs/arbre3_2.png){width=100%}
...@@ -584,7 +582,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -584,7 +582,7 @@ rien iteration_temporelle(étoiles, dt)
::: :::
# Algorithme d'insertion # Exemple d'insertion
::: columns ::: columns
...@@ -598,7 +596,7 @@ rien iteration_temporelle(étoiles, dt) ...@@ -598,7 +596,7 @@ rien iteration_temporelle(étoiles, dt)
:::: {.column width=50%} :::: {.column width=50%}
## Arbre ## Arbre, niveau 3
![](figs/arbre3_3.png){width=100%} ![](figs/arbre3_3.png){width=100%}
...@@ -610,7 +608,11 @@ rien iteration_temporelle(étoiles, dt) ...@@ -610,7 +608,11 @@ rien iteration_temporelle(étoiles, dt)
::: :::
# Algorithme d'insertion # Exemple d'insertion
::: columns
:::: {.column width=50%}
## Que fait-on avec les noeuds intérieurs? ## Que fait-on avec les noeuds intérieurs?
...@@ -618,6 +620,161 @@ rien iteration_temporelle(étoiles, dt) ...@@ -618,6 +620,161 @@ rien iteration_temporelle(étoiles, dt)
* stocker la masse totale; * stocker la masse totale;
* stocker le centre de masse. * stocker le centre de masse.
## Les feuilles contiennent les étoiles. \begin{align}
m&=m_2+m_3,\\
\vec x &= \frac{m_2\vec x_2+m_3+\vec x_3}{m}.
\end{align}
## Chaque feuille contient **une étoile**
::::
:::: {.column width=50%}
## Arbre
![](figs/arbre3_3.png){width=100%}
::::
:::
# Résumé
* Insertion du corps `c` dans le noeud `n` en partant de la racine.
* Si le noeud `n`
* ne contient pas de corps, on y dépose `c`,
* est interne, on met à jour masse et centre de masse. `c` est inséré récursivement dans le bon quadrant.
* est est externe, on subdivise `n`, on met à jour la masse et centre de masse, on insère récursivement les deux noeuds dans les quadrants appropriés.
## Remarque
* Il faut stocker les coordonnées des quadrants.
* Un noeud a un comportement différent s'il est interne ou externe.
# Algorithme d'insertion
## Structure de données
```C
struct node
etoile e // externe: pour stocker
etoile sup_etoile // interne: pour stocker m, x
quadrant q // coordonnées du quadrant
node enfants[4]
```
## Remarque:
* On fait une simplification "moche": `sup_etoile` pourrait juste avoir une masse et une position.
# Algorithme d'insertion
\footnotesize
## Algorithme d'insertion, pseudo-code (15min, matrix)
. . .
```C
rien insertion_etoile(arbre, e)
si (!est_vide(arbre) && dans_le_quadrant(arbre.q, e.x)) {
si (est_feuille(arbre))
si (est_vide(arbre))
arbre.e = e
sinon
// on crée enfants et arbre.sup_etoile est initialisée
subdivision_arbre(arbre, e)
pour enfant dans arbre.enfants
insertion_etoile(enfant, arbre.e)
pour enfant dans arbre.enfants
insertion_etoile(enfant, e)
destruction(etoile)
sinon
maj_masse_cdm(arbre.sup_etoile, e)
pour enfant dans arbre.enfants
insertion_etoile(enfant, e)
```
# Utilisation de l'arbre
* L'arbre est rempli: comment on calcule la force sur le corps 1?
* Parcours de l'arbre:
* si la distance entre 1 et le centre de masse est suffisante, on utilise la masse totale et centre de masse pour calculer la force.
* sinon, on continue le parcours
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_1.png)
* Le cadrant ID ne contient que `1`, rien à faire.
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_2.png)
* Le cadrant SG ne contient `5` corps.
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_3.png)
* La distance entre `1` et le centre de masse de SG est `d`.
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_4.png)
* La distance entre `1` et le centre de masse de SG est `d`.
* Est-ce que `d` est assez grand?
* On va comparer avec la distance `d` avec la taille du quadrant `s`.
# Critère $\theta$
* On compare $d=||\vec x_1-\vec x_{cm}||$ avec $s$ la taille du quadrant.
* Le domain est assez éloigné si
$$
\frac{s}{d}<\theta,
$$
* $\theta$ est la valeur de seuil.
* Une valeur typique est $\theta=0.5$, donc la condition devient
$$
d>2s.
$$
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_4.png)
* Ici $d<2s$, domaine rejeté.
* ON descend dans l'arbre.
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_5.png)
* `s` est plus petit, mais....
* Cela ne suffit pas $d<2s$, domaine rejeté.
# Calcul de la force
## Calcul de la force sur `1`
![](figs/force_6.png)
* Les noeuds sont des feuilles, ils sont acceptés.
* On ajoute la force qu'ils exercent sur `1`.
slides/figs/force_1.png

104 KiB

slides/figs/force_2.png

105 KiB

slides/figs/force_3.png

111 KiB

slides/figs/force_4.png

116 KiB

slides/figs/force_5.png

114 KiB

slides/figs/force_6.png

113 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment