source: proiecte/NBody/Tree codes/treedefs.h @ 170

Last change on this file since 170 was 170, checked in by (none), 14 years ago
File size: 3.8 KB
Line 
1/****************************************************************************/
2/* TREEDEFS.H: include file for hierarchical force calculation routines.    */
3/* These definitions are needed for treeload.c and treegrav.c, but this     */
4/* file does not provide definitions for other parts of the N-body code.    */
5/* Copyright (c) 1999 by Joshua E. Barnes, Tokyo, JAPAN.                    */
6/****************************************************************************/
7
8#ifndef _treedefs_h
9#define _treedefs_h
10
11/*
12 * NODE: data common to BODY and CELL structures.
13 */
14
15typedef struct _node {
16    short type;                 /* code for node type */
17    bool update;                /* status in force calc */
18    real mass;                  /* total mass of node */
19    vector pos;                 /* position of node */
20    struct _node *next;         /* link to next force calc */
21} node, *nodeptr;
22
23#define Type(x)   (((nodeptr) (x))->type)
24#define Update(x) (((nodeptr) (x))->update)
25#define Mass(x)   (((nodeptr) (x))->mass)
26#define Pos(x)    (((nodeptr) (x))->pos)
27#define Next(x)   (((nodeptr) (x))->next)
28
29#define BODY 01                 /* type code for bodies */
30#define CELL 02                 /* type code for cells */
31
32/*
33 * BODY: data structure used to represent particles.
34 */
35
36typedef struct {
37    node bodynode;              /* data common to all nodes */
38    vector vel;                 /* velocity of body */
39    vector acc;                 /* acceleration of body */
40    real phi;                   /* potential at body */
41} body, *bodyptr;
42
43#define Vel(x)    (((bodyptr) (x))->vel)
44#define Acc(x)    (((bodyptr) (x))->acc)
45#define Phi(x)    (((bodyptr) (x))->phi)
46
47/*
48 * CELL: structure used to represent internal nodes of tree.
49 */
50
51#define NSUB (1 << NDIM)        /* subcells per cell */
52
53typedef struct {
54    node cellnode;              /* data common to all nodes */
55#if !defined(QUICKSCAN)
56    real rcrit2;                /* critical c-of-m radius^2 */
57#endif
58    nodeptr more;               /* link to first descendent */
59    union {
60        nodeptr subp[NSUB];     /* descendents of cell */
61        matrix quad;            /* quad. moment of cell */
62    } sorq;
63} cell, *cellptr;
64
65#if !defined(QUICKSCAN)
66#define Rcrit2(x) (((cellptr) (x))->rcrit2)
67#endif
68
69#define More(x)   (((cellptr) (x))->more)
70#define Subp(x)   (((cellptr) (x))->sorq.subp)
71#define Quad(x)   (((cellptr) (x))->sorq.quad)
72
73/*
74 * GLOBAL: pseudo-keyword for storage class.
75 */
76
77#if !defined(global)
78#  define global extern
79#endif
80
81/*
82 * Parameters for tree construction and force calculation.
83 */
84
85#if !defined(QUICKSCAN)
86global real theta;                      /* force accuracy parameter         */
87#endif
88
89global string options;                  /* various option keywords          */
90
91global bool usequad;                    /* use quadrupole corrections       */
92
93global real eps;                        /* density smoothing parameter      */
94
95global double einit;
96
97
98/*
99 * Tree construction.
100 */
101
102void maketree(bodyptr, int);            /* construct tree structure         */
103
104global cellptr root;                    /* pointer to root cell             */
105global real rsize;                      /* side-length of root cell         */
106global int ncell;                       /* count of cells in tree           */
107global int tdepth;                      /* count of levels in tree          */
108global real cputree;                    /* CPU time to build tree           */
109
110/*
111 * Force calculation.
112 */
113
114void gravcalc(void);                    /* update force on bodies           */
115
116global int actmax;                      /* maximum length of active list    */
117global int nbbcalc;                     /* total body-body interactions     */
118global int nbccalc;                     /* total body-cell interactions     */
119global real cpuforce;                   /* CPU time for force calc          */
120
121#endif /* ! _treedefs_h */
Note: See TracBrowser for help on using the repository browser.