void Tree::Build()
//Provádí stavbu stromu, vyžaduje předpočítaný kořen se zavěšeným seznamem částic
{
Kvadrant *cell;
Kvadrant *kvad;
cell=root; //začneme v kořeni
cell->way=0;
Split_List(cell);
do{
while(cell->way<4)
{ //všichni potomci jsou hotovi
cell->way++;
if (cell->mass[cell->way]>1) //je potřeba dále dělit
{
kvad=New_Kvadrant(); //alokace nového kvadarntu
kvad->child[0]=cell->child[cell->way];
cell->child[cell->way]=kvad;
kvad->parent=cell;
kvad->level=cell->level+1;
//******* Datový výstup ******** Maximální úroveň stromu
if (simul.step%simul.graph_refresh==0)
if (kvad->level>simul.data[7]) simul.data[7]=kvad->level;
Calcul_Center(kvad,cell,cell->way);
cell=cell->child[cell->way]; //vstup do nového potomka
cell->way=0;
Split_List(cell);
}
if (cell->mass[cell->way]==1)
{
Add_To_Particle_List(cell->child[cell->way]);
cell->child[cell->way]->level=cell->level+1;
cell->child[cell->way]->parent=cell;
Calcul_Center(cell->child[cell->way],cell,cell->way);
}
}
Calcul_Momentum(cell);
cell=cell->parent;
}while(cell!=NULL);
}