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]);