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
43 double compute_io(t_inputrec *ir,int natoms,gmx_groups_t *groups,
46 int nsteps = ir->nsteps;
48 int nstx=0,nstv=0,nstf=0,nste=0,nstlog=0,nstxtc=0,nfep=0;
52 nstx = 1 + nsteps / ir->nstxout;
54 nstv = 1 + nsteps / ir->nstvout;
56 nstf = (1 + nsteps) / ir->nstfout;
57 if (ir->nstxtcout > 0) {
58 for(i=0; i<natoms; i++) {
59 if (groups->grpnr[egcXTC] == NULL || groups->grpnr[egcXTC][i] == 0)
62 nstxtc = (1 + nsteps) / ir->nstxtcout;
65 nstlog = 1 + nsteps / ir->nstlog;
66 if (ir->nstenergy > 0)
67 nste = 3 + nsteps / ir->nstenergy;
69 cio += (nstx+nstf+nstv)*sizeof(real)*(3.0*natoms);
70 cio += nstxtc*(14*4 + nxtcatoms*5.0); /* roughly 5 bytes per atom */
71 cio += nstlog*(nrener*16*2.0); /* 16 bytes per energy term plus header */
72 /* t_energy contains doubles, but real is written to edr */
73 cio += (1.0*nste)*nrener*3*sizeof(real);
75 if (ir->efep != efepNO) {
76 int ndh=ir->n_flambda;
77 if (ir->dhdl_derivatives == dhdlderivativesYES)
81 if (ir->separate_dhdl_file==sepdhdlfileYES)
83 int nchars = 8 + ndh*10; /* time data ~8 chars/line,
84 dH data ~10 chars/line */
85 cio += ((1 + nsteps)/ir->nstdhdl)*nchars;
89 /* dH output to ener.edr: */
90 if (ir->dh_hist_size <= 0)
92 /* as data blocks: 1 real per dH point */
93 cio += ((1 + nsteps)/ir->nstdhdl)*ndh*sizeof(real);
97 /* as histograms: dh_hist_size ints per histogram */
98 cio += ((1 + nsteps)/ir->nstenergy)*
99 sizeof(int)*ir->dh_hist_size*ndh;
103 if (ir->pull != NULL) {
104 if (ir->pull->nstxout > 0) {
105 cio += (1 + nsteps)/ir->pull->nstxout*20; /* roughly 20 chars per line */
107 if (ir->pull->nstfout > 0) {
108 cio += (1 + nsteps)/ir->pull->nstfout*20; /* roughly 20 chars per line */
112 return cio*nrepl/(1024*1024);