Algoritmo di Barnes-Hut

L'algoritmo di Barnes–Hut, proposto da Josh Barnes e Piet Hut[1], è un algoritmo di approssimazione per eseguire la simulazione a n-corpi. È noto per avere complessità , al contrario del metodo esaustivo che ha ordine .[2]

Una simulazione a 100-corpi con l'albero di Barnes–Hut rappresentato visualmente dai riquadri blu.

Lo spazio della simulazione è di solito diviso in celle cubiche attraverso un octree (nello spazio tridimensionale), in modo che solo le particelle dalle celle vicine vengono trattate individualmente, mentre quelle distanti possono essere considerate come una grande particella situata nel centro di massa della cella (o come un troncamento dello sviluppo in multipoli). In questo modo si riduce drammaticamente il numero di interazioni tra le coppie di particelle che si devono calcolare.

Alcuni dei progetti ad alte prestazioni che richiedono un grosso sforzo computazionale utilizzano l'algoritmo ad albero di Barnes-Hut nell'astrofisica computazionale,[3] come DEGIMA.

Algoritmo

modifica

L'albero di Barnes–Hut

modifica

In una simulazione a n-corpi, l'algoritmo di Barnes–Hut suddivide ricorsivamente gli   corpi in gruppi e li memorizza in un octree (o un quad-tree in due dimensioni). Ogni nodo dell'albero rappresenta una regione dello spazio tridimensionale. La radice rappresenta l'intero spazio, e i suoi otto figli indicano gli otto ottanti del volume. Lo spazio è diviso ricorsivamente in ottanti finché ogni suddivisione non contiene al massimo un corpo (qualche regione non possiede alcun corpo in nessuno dei suoi ottanti). Ci sono due tipi di nodi nell'octree: i nodi interni e le foglie. Le foglie non hanno figli e rappresentano un singolo corpo oppure sono vuoti. Ogni nodo interno invece descrivono il gruppo di corpi al di sotto di esso, memorizzando il centro di massa e la massa totale di tutti i suoi corpi figli.

Galleria d'immagini

modifica

Calcolare la forza agente su un corpo

modifica

Per calcolare la forza risultante su di un particolare corpo, si visitano i nodi dell'albero, partendo dalla radice. Se il centro di massa di un nodo interno è abbastanza lontano dal corpo, tutte le particelle contenute in quella parte dell'albero vengono trattate come una sola, la cui posizione e massa sono rispettivamente il centro di massa e la massa totale del nodo. Se invece il nodo interno è sufficientemente vicino, si ripete il processo su ognuno dei suoi figli.

Se un nodo è o non è abbastanza lontano da un corpo dipende dal quoziente  , dove   è la larghezza dell'ottante rappresentato dal nodo interno, e   è la distanza tra il corpo e il centro di massa del nodo. Il nodo è abbastanza lontano se questo rapporto è minore di un valore soglia  . Il parametro   determina la precisione dell'algoritmo; valori maggiori di   aumentano la velocità della simulazione ma diminuiscono la sua precisione. Se  , nessun nodo interno viene trattato come una particella unica e l'algoritmo degenera nel metodo esaustivo di somma diretta.

Implementazione

modifica

Struttura albero scritta su C utilizzando i costrutti typedef e struct.

typedef struct barnes {
    //coordinate del nodo
    double x, y;
    //massa del nodo
    double massa;
    //puntatori ai sottoalberi
    struct barnes * NW, *NE, *SE, *SW;
} barnes_t;
  1. ^ J. Barnes e P. Hut, A hierarchical O(N log N) force-calculation algorithm, in Nature, vol. 324, n. 4, dicembre 1986, pp. 446-449, Bibcode:1986Natur.324..446B, DOI:10.1038/324446a0.
  2. ^ Susanne Pfalzner e Paul Gibbon, Many-body tree methods in physics, Cambridge Univ. Press, 1996, pp. 2-3, ISBN 978-0-521-49564-6.
  3. ^ T. Hamada et al., A novel multiple-walk parallel algorithm for the Barnes-Hut treecode on GPUs – towards cost effective, high performance N-body simulation, in Comp. Sci. Res. Dev, vol. 24, n. 1-2, 2009, pp. 21–31, DOI:10.1007/s00450-009-0089-1.

Bibliografia

modifica

Voci correlate

modifica

Collegamenti esterni

modifica
  Portale Fisica: accedi alle voci di Wikipedia che trattano di fisica