Page MenuHomec4science

Readme
No OneTemporary

File Metadata

Created
Mon, Jun 10, 03:39
This document is not UTF8. It was detected as ISO-8859-1 (Latin 1) and converted to UTF8 for display.
treelib.000.c : version avec peut-etre encore un peu de TopNodes
treelib.001.c : version épurée,
plus de topnodes
plus de pseudo particles
pas d'unequal softenning
pas de periodic box
pas de gravite adaptatif
treelib.c : on essaye d'ajouter le nombre de particules permises par noeuds
see end of the file...
but : avoir un tree minimal
domain_Decomposition
domain_findExtent ok
domain_determineTopTree
self->TopNodes[0]
domain_topsplit_local
domain_walktoptree
force_treeallocate
self->Nodes
force_treebuild
force_treebuild_single
*force_create_empty_nodes (no longer necessary)
* -- insert particles --
self->last = -1; /* pointe sur le dernier noeud fait */
*force_update_node_recursive
TOUT OK
implementation de la suite:
--------------------------
1) chaque cellule enregistre ca quantité de particules
--> on peut crée une routine pour vérifier...
la suite :
--------
- regarder un peu force_tree
- stoquer plusieurs particules par noeuds...
- construction
--> ok, on peut utiliser Nextnode pour cela
a) on pointe sur Node => fin de la liste
b) on pointe sur P => suite de la liste
-force_tree
--> si un noeud a plusieurs particules
=> il n'a pas de descendants
=> on calcul la somme de toutes les particules présentes
--> ok, facile...
- revoir la recherche des voisins
- enlever les branches vides... ???
- sur GPU :
--> on definit des cellules contenant des particules
--> avec GPU : pour chacune de ces cellules, c'est facile de calculer
l'accel de toutes sur toutes...
>>> chaque particules a les forces correspondant a ces voisins de cellules
a)
--> on calcul par la suite les autres contribution avec un arbre normal
b)
--> lorsque une cellule doit etre ouverte (et ne contiend que des particules)
l'interaction peut se faire sur gpu également
#####################################
how to remove topNodes ?
---> ok,done :-)
....> j'ai un treecode minmal...
#####################################
self->Father : non utilisé : utique que lorsque le tree est updated dynamically
self->Nextnode ???? utilité ?
* initialllisé dans :
force_update_node_recursive
* utilisé lors du tree walking,
que pour les particules et psudo-particules
######################################################
#
######################################################
-> arbre sur les particules triée avec peano
-> pas d'info sur la position... (si ce n'est peanokey StartKey)
TopNodes[no].Daughter == -1
--> pas cde cellules filles
struct topnode_data
{
int Daughter; /*!< index of first daughter cell (out of 8) of top-level node */
int Pstart; /*!< for the present top-level node, this gives the index of the first node in the concatenated list of topnodes collected from all processors */
int Blocks; /*!< for the present top-level node, this gives the number of corresponding nodes in the concatenated list of topnodes collected from all processors */
int Leaf; /*!< if the node is a leaf, this gives its number when all leaves are traversed in Peano-Hilbert order */
peanokey Size; /*!< number of Peano-Hilbert mesh-cells represented by top-level node */
peanokey StartKey; /*!< first Peano-Hilbert key in top-level node */
long long Count; /*!< counts the number of particles in this top-level node */
};
si une cellule contiend plus que
self->All.TotNumPart / (TOPNODEFACTOR * self->NTask * self->NTask) (dans topsplit local)
particules, on l'ouvre.
######################################################
extern int *DomainNodeIndex; /*!< this table gives for each leaf of the top-level tree the corresponding node of the gravitational tree */
???? quand est que DomainNodeIndex est remplis ?
######################################################
# count the number of part in a node
######################################################
struct NODE
int count[8]; /* number of particles contained by each daughter node*/
int first[8]; /* index of first particle inside the daughter node*/
int last[8]; /* index of last particle inside the daughter node*/
!!! this requires a lot of memory !!!
!!! should do this only if a daugher contains a list of particle !!!
!!! .first[subnode] should be equal to .u.suns[subnode]
!!! count is not necessary, can check if first=last
struct particle_data
int next;
actuellement:
------------
th est un index
si th pointe sur un noeud
on regarde ou la particule va
-> subnode
-> nn = self->Nodes[th].u.suns[subnode];
nn>=0 le noeud es occupé
parent=th
th=nn
--> on continue
nn = -1
le noeud est vide
--> on y attache la particule
self->Nodes[th].u.suns[subnode]
sinon
la cellule contient une particule
il faut generer des cellules filles
1) on lie la cellule parent a la cellule fille=next free
on pousse la particule qui réside déjà dans une des nouvelle cellule
th = nfree : on essaye d'incerer la particule dans la nouvelle cellule
Thu Oct 28 23:31:53 CEST 2010
need to test
if (self->Nodes[parent].count[subnode]>=1)
-->
if (self->Nodes[parent].count[subnode]>=2)

Event Timeline