Parallel vs. sequentiual code: I get binary identical result (apart from comment...
[gromacs/qmmm-gamess-us.git] / src / tools / recomb.c
blobe942f3637457dd3bda3e49462de9d734bb8c091a
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.
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
32 * And Hey:
33 * Green Red Orange Magenta Azure Cyan Skyblue
35 #ifdef HAVE_CONFIG_H
36 #include <config.h>
37 #endif
39 #include "recomb.h"
40 #include "futil.h"
41 #include "wgms.h"
42 #include "smalloc.h"
44 real *read_gammaf(char *fn,int nframes)
46 FILE *in;
47 real *gf;
48 double y;
49 int i;
51 snew(gf,nframes);
52 in=ffopen(fn,"r");
53 for(i=0; (i<nframes); i++) {
54 fscanf(in,"%lf",&y);
55 gf[i]=y;
57 ffclose(in);
58 fprintf(stderr,"Succesfully read gamma\n");
59 return gf;
62 void recombine(char *base,char *gammaf,int nskip,
63 int nframes,int nev,int natoms,
64 rvec *ev[],real *evprj[],
65 rvec yav[],atom_id all_index[])
67 static char *format=
68 "Recombined projection of Gamma trj (EV %d) in Cartesian Space\n";
69 FILE *out;
70 rvec *xxx,*evptr;
71 real *gamma;
72 real prj;
73 char buf[256];
74 int i,j,n;
75 real gt;
77 gamma=read_gammaf(gammaf,nframes);
78 snew(xxx,natoms);
79 for(n=0; (n<nev); n++) {
80 sprintf(buf,"%s%d",base,n+1);
81 out=ffopen(buf,"w");
82 fprintf(out,format,n+1);
83 fprintf(stderr,format,n+1);
84 evptr=ev[n];
86 for(j=0; (j<nframes); j++) {
87 if ((j % 50) == 0)
88 fprintf(stderr,"\r frame %d",j);
89 if ((nskip == 0) || ((j % nskip) == 0)) {
90 gt=1.0/gamma[j];
91 prj=evprj[n][j];
92 for(i=0; (i<natoms); i++) {
93 xxx[i][XX]=(yav[i][XX]+prj*evptr[i][XX])*gt;
94 xxx[i][YY]=(yav[i][YY]+prj*evptr[i][YY])*gt;
95 xxx[i][ZZ]=(yav[i][ZZ]+prj*evptr[i][ZZ])*gt;
97 write_gms_ndx(out,natoms,all_index,xxx,NULL);
100 ffclose(out);
101 fprintf(stderr,"\r");
103 fprintf(stderr,"\n");
104 sfree(xxx);
105 sfree(gamma);