159f50497fd73c294e39672134bd18ad03d73adf
[alexxy/gromacs.git] / src / kernel / sorting.h
1 /*
2  * 
3  *                This source code is part of
4  * 
5  *                 G   R   O   M   A   C   S
6  * 
7  *          GROningen MAchine for Chemical Simulations
8  * 
9  *                        VERSION 3.2.0
10  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12  * Copyright (c) 2001-2004, The GROMACS development team,
13  * check out http://www.gromacs.org for more information.
14
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License
17  * as published by the Free Software Foundation; either version 2
18  * of the License, or (at your option) any later version.
19  * 
20  * If you want to redistribute modifications, please consider that
21  * scientific software is very special. Version control is crucial -
22  * bugs must be traceable. We will be happy to consider code for
23  * inclusion in the official distribution, but derived work must not
24  * be called official GROMACS. Details are found in the README & COPYING
25  * files - if they are missing, get the official version at www.gromacs.org.
26  * 
27  * To help us fund GROMACS development, we humbly ask that you cite
28  * the papers on the package - you can find them in the top README file.
29  * 
30  * For more info, check our website at http://www.gromacs.org
31  * 
32  * And Hey:
33  * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
34  */
35
36 #ifndef _sorting_h
37 #define _sorting_h
38
39 #include "typedefs.h"
40 typedef atom_id t_bond[2];
41
42 extern void sort_bonds(t_topology *top);
43 /*
44  * Sort_bonds sorts all bonded force parameters in order of ascending
45  * atom id of the maximum atom id specified in a bond per type bond.
46  *
47  * If, for example, for a specific bond type the following bonds are specified:
48  *    bond1 between atoms 15, 16, 12, 18 and 20
49  *    bond2 between atoms 14, 13, 12, 18 and 19
50  *    bond3 between atoms 17, 11, 19, 21 and 15
51  * then the maximum atom id for each bond would be:
52  *    bond1: 20
53  *    bond2: 19
54  *    bond3: 21
55  * so order in which the bonds will be sorted is bond2, bond1, bond3
56  *
57  * This routine is used to determine to which node a bonds should be
58  * allocated. For the distribution of bonds it is necessary to keep all
59  * the needed atoms when calculating a bonded force on one node. In
60  * this way we prevent communication overhead in bonded force calculations.
61  *
62  */
63
64 extern void sort_xblock(t_block *block,rvec x[],int renum[]);
65 /*
66  * Sort_xblock returns a renumber table which can be used to sort the 
67  * blocks specified in block in an order dependent of the coordinates.
68  */
69
70 extern void sort_bond_list(t_bond bonds[],int nr);
71 /*
72  * Sort_bond_list sort the list of bonds, specified by bonds in order
73  * of ascending atom id. The bonds are specified as pairs of atom ids.
74  * Where nr specifies the number of bonds (the length of the array).
75  */
76                   
77 #endif  /* _sorting_h */