source: trunk/GDE/TREEPUZZLE/src/ppuzzle.h

Last change on this file was 19480, checked in by westram, 15 months ago
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.5 KB
Line 
1/*
2 *   ppuzzle.h
3 *
4 *
5 * Part of TREE-PUZZLE 5.0 (June 2000)
6 *
7 * (c) 1999-2000 by Heiko A. Schmidt, Korbinian Strimmer,
8 *                  M. Vingron, and Arndt von Haeseler
9 * (c) 1995-1999 by Korbinian Strimmer and Arndt von Haeseler
10 *
11 * All parts of the source except where indicated are distributed under
12 * the GNU public licence.  See http://www.opensource.org for details.
13 */
14
15
16#ifndef _PPUZZLE_
17#define _PPUZZLE_
18
19#include "puzzle.h"
20#include "util.h"
21#include "ml.h"
22#include "sched.h"
23
24extern int PP_IamSlave;
25extern int PP_IamMaster;
26
27#ifdef PARALLEL
28#    ifdef SEQUENTIAL
29#        undef SEQUENTIAL
30#    endif
31#    define SEQUENTIAL 0
32#    undef  PARALLEL
33#    define PARALLEL 1
34#    include "mpi.h"
35#else
36#    ifdef SEQUENTIAL
37#        undef SEQUENTIAL
38#    endif
39#    define SEQUENTIAL 1
40#    define PARALLEL   0
41#    undef PVERBOSE
42#    undef PVERBOSE1
43#    undef PVERBOSE2
44#    undef PVERBOSE3
45#endif
46
47/* PVERBOSE3 includes PVERBOSE2 includes PVERBOSE1 */
48/* PVERBOSE1 is default (PVERBOSE)                 */
49
50#ifdef PVERBOSE
51#    undef  PVERBOSE1
52#    define PVERBOSE1
53#endif
54#ifdef PVERBOSE3
55#    undef  PVERBOSE2
56#    define PVERBOSE2
57#endif
58#ifdef PVERBOSE2
59#    undef  PVERBOSE1
60#    define PVERBOSE1
61#endif
62
63#if PARALLEL
64#  define PP_DONE             0 /* Finished            M->S */
65#  define PP_SIZES               1 /* Array sizes needed  M->S */
66#  define PP_DATA                2 /* Data Arrays         M->S */
67
68#  define PP_ALLQUARTS           3 /* All Quartets        M->S */
69
70#  define PP_DOQUART             4 /* do 4Specs           M->S */
71#  define PP_DOQUARTX2           5 /* do 4Specs + X^2     M->S */
72#  define PP_QUART               6 /* quartet back        S->M */
73#  define PP_QUARTX2             7 /* quartet + X^2 back  S->M */
74
75#  define PP_DOQUARTBLOCKSPECS   8 /* do block Specs      M->S */
76#  define PP_DOQUARTBLOCK        9 /* do block of Quarts  M->S */
77#  define PP_QUARTBLOCKSPECS    10 /* block Specs         S->M */
78#  define PP_QUARTBLOCK         11 /* block of Quarts     S->M */
79
80#  define PP_DOPUZZLE           12 /* do Puzzling step    M->S */
81#  define PP_PUZZLE             13 /* Puzzling tree back  S->M */
82#  define PP_DOPUZZLEBLOCK      14 /* do Puzzling block   M->S */
83#  define PP_DOPUZZLEBLOCKSPECS 15 /* do Puzzling block   M->S */
84#  define PP_PUZZLEBLOCK        16 /* Puzzling block      S->M */
85#  define PP_PUZZLEBLOCKSPECS   17 /* Puzzling block      S->M */
86
87#  define PP_STATS              18 /* Slave Statistics    S->M */
88
89#  define PP_WAIT               18 /* waiting for work    S->M */
90#  define PP_TEST              100 /* testing                  */
91
92#  define PERMUTQUEUESIZE 100
93#  define QUARTQUEUESIZE 100
94
95   extern int      PP_IamMaster;
96   extern int      PP_IamSlave;
97   extern int      PP_Myid;
98   extern int      PP_MyMaster;
99   extern int      PP_NumProcs;
100   extern MPI_Comm PP_Comm;
101#endif /* PARALLEL */
102
103extern int *permutsent,
104           *permutrecved,
105           *quartsent,
106           *quartrecved,
107           *doquartsent,
108           *doquartrecved,
109           *splitsent,
110           *splitrecved,
111           *permutsentn,
112           *permutrecvedn,
113           *quartsentn,
114           *quartrecvedn,
115           *doquartsentn,
116           *doquartrecvedn,
117           *splitsentn,
118           *splitrecvedn;
119extern double *walltimes,
120              *cputimes;
121extern double *fullwalltimes,
122              *fullcputimes;
123extern double *altwalltimes,
124              *altcputimes;
125
126extern int PP_permutsent,
127           PP_permutrecved,
128           PP_quartsent,
129           PP_quartrecved,
130           PP_doquartsent,
131           PP_doquartrecved,
132           PP_splitsent,
133           PP_splitrecved,
134           PP_permutsentn,
135           PP_permutrecvedn,
136           PP_quartsentn,
137           PP_quartrecvedn,
138           PP_doquartsentn,
139           PP_doquartrecvedn,
140           PP_splitsentn,
141           PP_splitrecvedn;
142
143extern double PP_starttime,
144       PP_stoptime,
145       PP_inittime,
146       PP_paramcomptime,
147       PP_paramsendtime,
148       PP_quartcomptime,
149       PP_quartsendtime,
150       PP_puzzletime,
151       PP_treetime;
152
153void num2quart(uli qnum, int *a, int *b, int *c, int *d);
154uli numquarts(int maxspc);
155uli quart2num (int a, int b, int c, int d);
156
157int  slave_main(int argc, char *argv[]);
158void PP_Init(int *argc, char **argv[]);
159void PP_Finalize();
160void PP_Printerror(FILE *of, int id, int err);
161void PP_do_puzzling(ivector trueID);
162
163void PP_RecvDoQuart(int  *a,
164                  int    *b,
165                  int    *c,
166                  int    *d,
167                  int    *approx);
168void PP_SendDoQuart(int    dest,
169                  int    a, 
170                  int    b,
171                  int    c,
172                  int    d,
173                  int    approx);
174void PP_RecvQuart(int    *a,
175                  int    *b,
176                  int    *c,
177                  int    *d,
178                  double *d1,
179                  double *d2,
180                  double *d3,
181                  int    *approx);
182void PP_SendQuart(int    a,
183                  int    b,
184                  int    c,
185                  int    d,
186                  double d1,
187                  double d2,
188                  double d3,
189                  int    approx);
190void PP_SendSizes(int    mspc, 
191                  int    msite,
192                  int    ncats,
193                  int    nptrn,
194                  int    rad,
195                  int    outgr,
196                  double frconst,
197                  int    rseed);
198void PP_RecvSizes(int    *mspc, 
199                  int    *msite,
200                  int    *ncats,
201                  int    *nptrn,
202                  int    *rad,
203                  int    *outgr,
204                  double *frconst,
205                  int    *rseed);
206void PP_RecvData(
207        cmatrix Seqpat,           /* cmatrix (Maxspc x Numptrn)             */
208        ivector Alias,            /* ivector (Maxsite)                      */
209        ivector Weight,           /* ivector (Numptrn)                      */
210        ivector constpat,
211        dvector Rates,            /* dvector (numcats)                      */
212        dvector Eval,             /* dvector (tpmradix)                     */
213        dvector Freqtpm,
214        dmatrix Evec,             /* dmatrix (tpmradix x tpmradix)          */
215        dmatrix Ievc,
216        dmatrix iexp,
217        dmatrix Distanmat,        /* dmatrix (Maxspc x Maxspc)              */
218        dcube   ltprobr);          /* dcube (numcats x tpmradix x tpmradix)  */
219void PP_SendData(
220        cmatrix Seqpat,           /* cmatrix (Maxspc x Numptrn)             */
221        ivector Alias,            /* ivector (Maxsite)                      */
222        ivector Weight,           /* ivector (Numptrn)                      */
223        ivector constpat,
224        dvector Rates,            /* dvector (numcats)                      */
225        dvector Eval,             /* dvector (tpmradix)                     */
226        dvector Freqtpm,
227        dmatrix Evec,             /* dmatrix (tpmradix x tpmradix)          */
228        dmatrix Ievc,
229        dmatrix iexp,
230        dmatrix Distanmat,        /* dmatrix (Maxspc x Maxspc)              */
231        dcube   ltprobr);          /* dcube (numcats x tpmradix x tpmradix)  */
232void PP_SendAllQuarts(unsigned long  Numquartets,
233                      unsigned char *local_quartetinfo);
234void PP_RecvAllQuarts(int            taxa,
235                      unsigned long *Numquartets,
236                      unsigned char *local_quartetinfo);
237
238void PP_SendDoQuartBlock(int dest, uli firstq, uli amount, int approx);
239void PP_RecvDoQuartBlock(uli *firstq, uli *amount, uli **bq, int *approx);
240void PP_SendQuartBlock(uli startq,
241                       uli numofq,
242                       unsigned char *local_quartetinfo,
243                       uli  numofbq,
244                       uli *bq,
245                       int approx);
246void PP_RecvQuartBlock(int slave,
247                       uli *startq,
248                       uli *numofq,
249                       unsigned char *local_quartetinfo,
250                       int *approx);
251
252void PP_SendPermut(int      dest,
253                   int      taxa, 
254                   ivector  permut);
255void PP_RecvPermut(int      taxa,
256                   ivector  permut);
257void PP_SendDoPermutBlock(uli puzzlings);
258void PP_RecvDoPermutBlock(uli *taxa);
259
260void PP_SendSplits(int      taxa, 
261                   cmatrix  biparts);
262void PP_RecvSplits(int      taxa,
263                   cmatrix  biparts);
264void PP_SendDone();
265void PP_RecvDone();
266
267int PP_emptyslave();
268void PP_putslave(int sl);
269int PP_getslave();
270
271void PP_cmpd(int rank, double a, double b);
272void PP_cmpi(int rank, int a, int b);
273
274#endif /* _PPUZZLE_ */
Note: See TracBrowser for help on using the repository browser.