3 * This source code is part of
7 * GROningen MAchine for Chemical Simulations
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.
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.
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.
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.
30 * For more info, check our website at http://www.gromacs.org
33 * Gallium Rubidium Oxygen Manganese Argon Carbon Silicon
44 /*****************************************************************************
46 * Block sorting on coordinates *
48 *****************************************************************************/
50 static rvec
*make_xblock(t_block
*block
,rvec x
[])
59 for (j
=0; j
<DIM
; j
++) xblock
[i
][j
]=0.0;
60 for (j
=block
->index
[i
]; j
<(int)(block
->index
[i
+1]); j
++)
61 for (k
=0; k
<DIM
; k
++) xblock
[i
][k
]+=x
[j
][k
];
62 n
=block
->index
[i
+1]-block
->index
[i
];
63 for (k
=0; k
<DIM
; k
++) xblock
[i
][k
]/=n
;
68 static rvec
*xblock
; /* just global to bcomp1, used in qsort */
70 static int bomp1(const void *p1
,const void *p2
)
77 if (xblock
[i1
][i
]<xblock
[i2
][i
]) return -1;
78 else if (xblock
[i1
][i
]>xblock
[i2
][i
]) return 1;
82 void sort_xblock(t_block
*block
,rvec x
[],int renum
[])
88 xblock
=make_xblock(block
,x
);
89 for (i
=0; i
<nr
; i
++) invnum
[i
]=i
;
90 qsort((void *)invnum
,nr
,(size_t)sizeof(invnum
[0]),bomp1
);
91 for (i
=0; i
<nr
; i
++) renum
[invnum
[i
]]=i
;
96 /*****************************************************************************
100 *****************************************************************************/
102 static int bcomp2(const void *p1
,const void *p2
)
106 if ((((atom_id
*)p1
)[0])!=(((atom_id
*)p2
)[0]))
107 done
=((((atom_id
*)p1
)[0])-(((atom_id
*)p2
)[0]));
109 done
=((((atom_id
*)p1
)[1])-(((atom_id
*)p2
)[1]));
111 printf("bcomp2: [%d,%d] with [%d,%d] result %d\n",
112 ((atom_id
*)p1
)[0],((atom_id
*)p1
)[1],
113 ((atom_id
*)p2
)[0],((atom_id
*)p2
)[1],done
);
118 void sort_bond_list(t_bond bonds
[],int nr
)
120 qsort((void *)bonds
,nr
,(size_t)sizeof(bonds
[0]),bcomp2
);