Cấu trúc dữ liệu của cây

Một phần của tài liệu Song song hoá thuật toán Bames hut với OpenMP (Trang 41 - 45)

Cấu trúc dữ liệu chính được sử dụng trong treecode là cây Octree, bao gồm các body và các cell. Lá của cây lưu trữ thông tin của body. Các nút trong của cây là các cell. Tiến hành duyệt toàn bộ cây bắt đầu từ gốc của cây.

Lê Thị Lan Phương 36

Hình 15: Cấu trúc dữ liệu cây trong treecode (1)

Cấu trúc node biểu diễn các thông tin chung của body và cell. Theo lý thuyết, mỗi một thành phần của cây có thểđược biểu diễn là tổ hợp của body và cell. Nhưng cách biểu diễn đó là không hiệu quả, vì cấu trúc của body và cell đòi hỏi không gian bộ nhớ

khác nhau. Do vậy người ta sử dụng cấu trúc node để biểu diễn chung cho body và cell. Việc ép kiểu được sử dụng để chuyển con trỏ có kiểu tùy ý thành con trỏ trỏ tới node, body và cell.

typedef struct _node {

short type;

bool update;

real mass;

vector pos; struct _node *next; } node, *nodeptr;

#define Type(x) (((nodeptr) (x))->type) #define Update(x) (((nodeptr) (x))->update) #define Mass(x) (((nodeptr) (x))->mass) #define Pos(x) (((nodeptr) (x))->pos) #define Next(x) (((nodeptr) (x))->next)

Lê Thị Lan Phương 37

Type(q) trả lại kiểu của node q, có giá trị là CELL hoặc BODY

Update(q) có giá trị là boolean, cho biết q có cần cập nhật lực tương tác không?

Next(q) là con trỏ, trỏ tới node tiếp theo của q, sau khi tất cả các con của q đã được duyệt.

Mass(q) là khối lượng của hạt q hoặc là khối lượng của tất cả các hạt có trong cell q

Pos(q) là vị trí của hạt q hoặc vị trí của tâm khối trong cell q Cấu trúc body biểu diễn các hạt. typedef struct { node bodynode; vector vel; vector acc; real phi; } body, *bodyptr;

#define Vel(x) (((bodyptr) (x))->vel) #define Acc(x) (((bodyptr) (x))->acc) #define Phi(x) (((bodyptr) (x))->phi)

Trong đó:

Vel(b) là vận tốc của hạt b

Acc(b) là gia tốc của hạt b

Phi(b) là thế năng của hạt b

Cấu trúc cell biểu diễn các nút trong của cây

#define NSUB (1 << NDIM) typedef struct {

Lê Thị Lan Phương 38 #if !defined(QUICKSCAN) real rcrit2; #endif nodeptr more; union { nodeptr subp[NSUB]; matrix quad; } sorq; } cell, *cellptr; #if !defined(QUICKSCAN)

#define Rcrit2(x) (((cellptr) (x))->rcrit2) #endif

#define More(x) (((cellptr) (x))->more)

#define Subp(x) (((cellptr) (x))->sorq.subp) #define Quad(x) (((cellptr) (x))->sorq.quad)

Trong đó:

Subq(c) là mảng các con trỏ trở tới các con của c

More(c) là con trỏ trỏ tới con đầu tiên trong các con của c (adsbygoogle = window.adsbygoogle || []).push({});

Quad(c) là ma trận quadrupole moments

Rcrit2(c) là bình phương bán kính mà nếu nằm ngoài bán kính đó, ô cell c được coi như là một cell interaction.

Lê Thị Lan Phương 39

Hình 16: Cấu trúc dữ liệu cây trong treecode (2)

Một phần của tài liệu Song song hoá thuật toán Bames hut với OpenMP (Trang 41 - 45)