Merge release-4-6 into master
[alexxy/gromacs.git] / src / gromacs / legacyheaders / mdebin.h
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.
14
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.
19  *
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.
26  *
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.
29  *
30  * For more info, check our website at http://www.gromacs.org
31  *
32  * And Hey:
33  * Gromacs Runs On Most of All Computer Systems
34  */
35
36 #ifndef _mdebin_h
37 #define _mdebin_h
38
39 #include "typedefs.h"
40 #include "sysstuff.h"
41 #include "ebin.h"
42 #include "enxio.h"
43 #include "types/state.h"
44
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48
49 /* The functions & data structures here determine the content for outputting
50    the .edr file; the file format and actual writing is done with functions
51    defined in enxio.h */
52
53 /* forward declaration */
54 typedef struct t_mde_delta_h_coll t_mde_delta_h_coll;
55
56
57 /* This is the collection of energy averages collected during mdrun, and to
58    be written out to the .edr file. */
59 typedef struct {
60     double              delta_t;
61     t_ebin             *ebin;
62     int                 ie, iconrmsd, ib, ivol, idens, ipv, ienthalpy;
63     int                 isvir, ifvir, ipres, ivir, isurft, ipc, itemp, itc, itcb, iu, imu;
64     int                 ivcos, ivisc;
65     int                 nE, nEg, nEc, nTC, nTCP, nU, nNHC;
66     int                *igrp;
67     char              **grpnms;
68     int                 mde_n, mdeb_n;
69     real               *tmp_r;
70     rvec               *tmp_v;
71     gmx_bool            bConstr;
72     gmx_bool            bConstrVir;
73     gmx_bool            bTricl;
74     gmx_bool            bDynBox;
75     gmx_bool            bNHC_trotter;
76     gmx_bool            bPrintNHChains;
77     gmx_bool            bMTTK;
78     gmx_bool            bMu; /* true if dipole is calculated */
79     gmx_bool            bDiagPres;
80     gmx_bool            bVir;
81     gmx_bool            bPress;
82     gmx_bool            bSurft;
83     int                 f_nre;
84     int                 epc;
85     real                ref_p;
86     int                 etc;
87     int                 nCrmsd;
88     gmx_bool            bEner[F_NRE];
89     gmx_bool            bEInd[egNR];
90     char              **print_grpnms;
91
92     FILE               *fp_dhdl; /* the dhdl.xvg output file */
93     double             *dE;      /* energy components for dhdl.xvg output */
94     t_mde_delta_h_coll *dhc;     /* the delta U components (raw data + histogram) */
95     real               *temperatures;
96 } t_mdebin;
97
98
99 /* delta_h block type enum: the kinds of energies written out. */
100 enum
101 {
102     dhbtDH   = 0, /* delta H BAR energy difference*/
103     dhbtDHDL = 1, /* dH/dlambda derivative */
104     dhbtEN,       /* System energy */
105     dhbtPV,       /* pV term */
106     dhbtEXPANDED, /* expanded ensemble statistics */
107     dhbtNR
108 };
109
110
111
112 t_mdebin *init_mdebin(ener_file_t       fp_ene,
113                       const gmx_mtop_t *mtop,
114                       const t_inputrec *ir,
115                       FILE             *fp_dhdl);
116 /* Initiate MD energy bin and write header to energy file. */
117
118 FILE *open_dhdl(const char *filename, const t_inputrec *ir,
119                 const output_env_t oenv);
120 /* Open the dhdl file for output */
121
122 /* update the averaging structures. Called every time
123    the energies are evaluated. */
124 void upd_mdebin(t_mdebin       *md,
125                 gmx_bool        bDoDHDL,
126                 gmx_bool        bSum,
127                 double          time,
128                 real            tmass,
129                 gmx_enerdata_t *enerd,
130                 t_state        *state,
131                 t_lambda       *fep,
132                 t_expanded     *expand,
133                 matrix          lastbox,
134                 tensor          svir,
135                 tensor          fvir,
136                 tensor          vir,
137                 tensor          pres,
138                 gmx_ekindata_t *ekind,
139                 rvec            mu_tot,
140                 gmx_constr_t    constr);
141
142 void upd_mdebin_step(t_mdebin *md);
143 /* Updates only the step count in md */
144
145 void print_ebin_header(FILE *log, gmx_large_int_t steps, double time, real lamb);
146
147 void print_ebin(ener_file_t fp_ene, gmx_bool bEne, gmx_bool bDR, gmx_bool bOR,
148                 FILE *log,
149                 gmx_large_int_t step, double time,
150                 int mode, gmx_bool bCompact,
151                 t_mdebin *md, t_fcdata *fcd,
152                 gmx_groups_t *groups, t_grpopts *opts);
153
154
155
156 /* Between .edr writes, the averages are history dependent,
157    and that history needs to be retained in checkpoints.
158    These functions set/read the energyhistory_t structure
159    that is written to checkpoints in checkpoint.c */
160
161 /* Set the energyhistory_t data structure from a mdebin structure */
162 void update_energyhistory(energyhistory_t * enerhist, t_mdebin * mdebin);
163
164 /* Read the energyhistory_t data structure to a mdebin structure*/
165 void restore_energyhistory_from_state(t_mdebin        * mdebin,
166                                       energyhistory_t * enerhist);
167
168 #ifdef __cplusplus
169 }
170 #endif
171
172 #endif  /* _mdebin_h */