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 * GROningen Mixture of Alchemy and Childrens' Stories
35 /* This file is completely threadsafe - keep it that way! */
55 void destroy_bin(t_bin
*b
)
64 void reset_bin(t_bin
*b
)
69 int add_binr(t_bin
*b
,int nr
,real r
[])
75 if (b
->nreal
+nr
> b
->maxreal
) {
76 b
->maxreal
=b
->nreal
+nr
;
77 rest
=b
->maxreal
% MULT
;
79 b
->maxreal
+=MULT
-rest
;
80 srenew(b
->rbuf
,b
->maxreal
);
83 rbuf
=b
->rbuf
+b
->nreal
;
93 int add_bind(t_bin
*b
,int nr
,double r
[])
99 if (b
->nreal
+nr
> b
->maxreal
) {
100 b
->maxreal
=b
->nreal
+nr
;
101 rest
=b
->maxreal
% MULT
;
103 b
->maxreal
+=MULT
-rest
;
104 srenew(b
->rbuf
,b
->maxreal
);
107 rbuf
=b
->rbuf
+b
->nreal
;
108 for(i
=0; (i
<nr
); i
++)
117 void sum_bin(t_bin
*b
,t_commrec
*cr
)
121 for(i
=b
->nreal
; (i
<b
->maxreal
); i
++)
123 gmx_sumd(b
->maxreal
,b
->rbuf
,cr
);
126 void extract_binr(t_bin
*b
,int index
,int nr
,real r
[])
131 rbuf
= b
->rbuf
+index
;
132 for(i
=0; (i
<nr
); i
++)
136 void extract_bind(t_bin
*b
,int index
,int nr
,double r
[])
141 rbuf
= b
->rbuf
+index
;
142 for(i
=0; (i
<nr
); i
++)
147 int main(int argc
,char *argv
[])
155 cr
=init_par(&argc
,argv
);
156 n
=strtol(argv
[1],NULL
,10);
157 m
=strtol(argv
[2],NULL
,10);
158 fprintf(stdlog
,"n=%d\n",n
);
163 for(k
=0; (k
< 3); k
++) {
164 fprintf(stdlog
,"\nk=%d\n",k
);
169 for(i
=0; (i
<m
); i
++) {
175 ni
=add_bind(stdlog
,rb
,n
,r
);
176 mi
=add_binr(stdlog
,rb
,DIM
*m
,v
[0]);
180 extract_bind(rb
,ni
,n
,r
);
181 extract_binr(rb
,mi
,DIM
*m
,v
[0]);
184 fprintf(stdlog
,"r[%d] = %e\n",i
,r
[i
]);
186 fprintf(stdlog
,"v[%d] = (%e,%e,%e)\n",i
,v
[i
][XX
],v
[i
][YY
],v
[i
][ZZ
]);