Merge branch 'release-4-6'
[alexxy/gromacs.git] / src / gromacs / legacyheaders / types / enums.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  * GRoups of Organic Molecules in ACtion for Science
34  */
35
36 #ifndef ENUMS_H_
37 #define ENUMS_H_
38
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42
43 /* note: these enums should correspond to the names in gmxlib/names.c */
44
45 enum {
46   epbcXYZ, epbcNONE, epbcXY, epbcSCREW, epbcNR
47 };
48
49 enum {
50   etcNO, etcBERENDSEN, etcNOSEHOOVER, etcYES, etcANDERSEN, etcANDERSENMASSIVE, etcVRESCALE, etcNR
51 }; /* yes is an alias for berendsen */
52
53 #define ETC_ANDERSEN(e) (((e) == etcANDERSENMASSIVE) || ((e) == etcANDERSEN))
54
55 enum {
56   epcNO, epcBERENDSEN, epcPARRINELLORAHMAN, epcISOTROPIC, epcMTTK, epcNR
57 }; /* isotropic is an alias for berendsen */
58
59 /* trotter decomposition extended variable parts */
60 enum {
61   etrtNONE, etrtNHC, etrtBAROV, etrtBARONHC, etrtNHC2, etrtBAROV2, etrtBARONHC2, 
62   etrtVELOCITY1, etrtVELOCITY2, etrtPOSITION, etrtSKIPALL, etrtNR
63 };
64
65 /* sequenced parts of the trotter decomposition */
66 enum {
67   ettTSEQ0,  ettTSEQ1,  ettTSEQ2,  ettTSEQ3,  ettTSEQ4, ettTSEQMAX
68 };
69
70 enum {
71   epctISOTROPIC, epctSEMIISOTROPIC, epctANISOTROPIC,
72   epctSURFACETENSION, epctNR
73 };
74
75 enum {
76   erscNO, erscALL, erscCOM, erscNR
77 };
78
79 enum { 
80   ecutsGROUP, ecutsVERLET, ecutsNR
81 };
82
83 /* Coulomb / VdW interaction modifiers.
84  * grompp replaces eintmodPOTSHIFT_VERLET by eintmodPOTSHIFT or eintmodNONE.
85  */
86 enum {
87     eintmodPOTSHIFT_VERLET, eintmodPOTSHIFT, eintmodNONE, eintmodNR
88 };
89
90 /*
91  * eelNOTUSED1 used to be GB, but to enable generalized born with different
92  * forms of electrostatics (RF, switch, etc.) in the future it is now selected
93  * separately (through the implicit_solvent option).
94  */
95 enum {
96   eelCUT,     eelRF,     eelGRF,   eelPME,  eelEWALD,  eelP3M_AD, 
97   eelPOISSON, eelSWITCH, eelSHIFT, eelUSER, eelGB_NOTUSED, eelRF_NEC, eelENCADSHIFT, 
98   eelPMEUSER, eelPMESWITCH, eelPMEUSERSWITCH, eelRF_ZERO, eelNR
99 };
100
101 /* Ewald geometry */
102 enum { 
103   eewg3D, eewg3DC, eewgNR
104 };
105
106 #define EEL_RF(e) ((e) == eelRF || (e) == eelGRF || (e) == eelRF_NEC || (e) == eelRF_ZERO )
107
108 #define EEL_PME(e)  ((e) == eelPME || (e) == eelPMESWITCH || (e) == eelPMEUSER || (e) == eelPMEUSERSWITCH || (e) == eelP3M_AD)
109 #define EEL_FULL(e) (EEL_PME(e) || (e) == eelPOISSON || (e) == eelEWALD)
110
111 #define EEL_SWITCHED(e) ((e) == eelSWITCH || (e) == eelSHIFT || (e) == eelENCADSHIFT || (e) == eelPMESWITCH || (e) == eelPMEUSERSWITCH)
112
113 #define EEL_USER(e) ((e) == eelUSER || (e) == eelPMEUSER || (e) == (eelPMESWITCH))
114
115 #define EEL_IS_ZERO_AT_CUTOFF(e) (EEL_SWITCHED(e) || (e) == eelRF_ZERO)
116
117 #define EEL_MIGHT_BE_ZERO_AT_CUTOFF(e) (EEL_IS_ZERO_AT_CUTOFF(e) || (e) == eelUSER || (e) == eelPMEUSER)
118
119 enum {
120   evdwCUT, evdwSWITCH, evdwSHIFT, evdwUSER, evdwENCADSHIFT, evdwNR
121 };
122
123 #define EVDW_SWITCHED(e) ((e) == evdwSWITCH || (e) == evdwSHIFT || (e) == evdwENCADSHIFT)
124
125 #define EVDW_IS_ZERO_AT_CUTOFF(e) EVDW_SWITCHED(e)
126
127 #define EVDW_MIGHT_BE_ZERO_AT_CUTOFF(e) (EVDW_IS_ZERO_AT_CUTOFF(e) || (e) == evdwUSER)
128
129 enum { 
130   ensGRID, ensSIMPLE, ensNR
131 };
132
133 /* eiVV is normal velocity verlet -- eiVVAK uses 1/2*(KE(t-dt/2)+KE(t+dt/2)) as the kinetic energy, and the half step kinetic
134    energy for temperature control */
135
136 enum {
137   eiMD, eiSteep, eiCG, eiBD, eiSD2, eiNM, eiLBFGS, eiTPI, eiTPIC, eiSD1, eiVV, eiVVAK, eiNR
138 };
139 #define EI_VV(e) ((e) == eiVV || (e) == eiVVAK)
140 #define EI_MD(e) ((e) == eiMD || EI_VV(e))
141 #define EI_SD(e) ((e) == eiSD1 || (e) == eiSD2)
142 #define EI_RANDOM(e) (EI_SD(e) || (e) == eiBD)
143 /*above integrators may not conserve momenta*/
144 #define EI_DYNAMICS(e) (EI_MD(e) || EI_SD(e) || (e) == eiBD)
145 #define EI_ENERGY_MINIMIZATION(e) ((e) == eiSteep || (e) == eiCG || (e) == eiLBFGS)
146 #define EI_TPI(e) ((e) == eiTPI || (e) == eiTPIC)
147
148 #define EI_STATE_VELOCITY(e) (EI_MD(e) || EI_SD(e))
149
150 enum {
151   econtLINCS, econtSHAKE, econtNR
152 };
153
154 enum {
155   edrNone, edrSimple, edrEnsemble, edrNR
156 };
157
158 enum {
159   edrwConservative, edrwEqual, edrwNR
160 };
161
162 /* Combination rule things */
163 enum { 
164   eCOMB_NONE, eCOMB_GEOMETRIC, eCOMB_ARITHMETIC, eCOMB_GEOM_SIG_EPS, eCOMB_NR 
165 };
166
167 /* NBF selection */
168 enum { 
169   eNBF_NONE, eNBF_LJ, eNBF_BHAM, eNBF_NR 
170 };
171
172 /* simulated tempering methods */
173 enum {
174   esimtempGEOMETRIC, esimtempEXPONENTIAL, esimtempLINEAR, esimtempNR
175 };
176 /* FEP selection */
177 enum {
178   efepNO, efepYES, efepSTATIC, efepSLOWGROWTH, efepEXPANDED, efepNR
179 };
180   /* if efepNO, there are no evaluations at other states.
181      if efepYES, treated equivalently to efepSTATIC.
182      if efepSTATIC, then lambdas do not change during the simulation.
183      if efepSLOWGROWTH, then the states change monotonically throughout the simulation.
184      if efepEXPANDED, then expanded ensemble simulations are occuring.
185   */
186
187 /* FEP coupling types */
188 enum {
189   efptFEP,efptMASS,efptCOUL,efptVDW,efptBONDED,efptRESTRAINT,efptTEMPERATURE,efptNR
190 };
191
192 /* How the lambda weights are calculated:
193    elamstatsMETROPOLIS = using the metropolis criteria
194    elamstatsBARKER = using the Barker critera for transition weights - also called unoptimized Bennett
195    elamstatsMINVAR = using Barker + minimum variance for weights
196    elamstatsWL = Wang-Landu (using visitation counts)
197    elamstatsWWL = Weighted Wang-Landau (using optimized gibbs weighted visitation counts)
198 */
199 enum {
200   elamstatsNO, elamstatsMETROPOLIS, elamstatsBARKER, elamstatsMINVAR, elamstatsWL, elamstatsWWL, elamstatsNR
201 };
202
203 #define ELAMSTATS_EXPANDED(e) ((e) > elamstatsNO)
204
205 #define EWL(e) ((e) == elamstatsWL || (e) == elamstatsWWL)
206
207 /* How moves in lambda are calculated:
208    elmovemcMETROPOLIS - using the Metropolis criteria, and 50% up and down
209    elmovemcBARKER - using the Barker criteria, and 50% up and down
210    elmovemcGIBBS - computing the transition using the marginalized probabilities of the lambdas
211    elmovemcMETGIBBS - computing the transition using the metropolized version of Gibbs (Monte Carlo Strategies in Scientific computing, Liu, p. 134)
212 */
213 enum {
214   elmcmoveNO,elmcmoveMETROPOLIS, elmcmoveBARKER, elmcmoveGIBBS, elmcmoveMETGIBBS, elmcmoveNR
215 };
216
217 /* how we decide whether weights have reached equilibrium
218    elmceqNO - never stop, weights keep going
219    elmceqYES - fix the weights from the beginning; no movement
220    elmceqWLDELTA - stop when the WL-delta falls below a certain level
221    elmceqNUMATLAM - stop when we have a certain number of samples at every step
222    elmceqSTEPS - stop when we've run a certain total number of steps
223    elmceqSAMPLES - stop when we've run a certain total number of samples
224    elmceqRATIO - stop when the ratio of samples (lowest to highest) is sufficiently large
225 */
226 enum {
227   elmceqNO,elmceqYES,elmceqWLDELTA,elmceqNUMATLAM,elmceqSTEPS,elmceqSAMPLES,elmceqRATIO,elmceqNR
228 };
229
230 /* separate_dhdl_file selection */
231 enum
232 {
233   /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
234   esepdhdlfileYES, esepdhdlfileNO, esepdhdlfileNR
235 };
236
237 /* dhdl_derivatives selection */
238 enum
239 {
240   /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
241   edhdlderivativesYES, edhdlderivativesNO, edhdlderivativesNR
242 };
243
244 /* Solvent model */
245 enum {
246   esolNO, esolSPC, esolTIP4P, esolNR
247 };
248
249 /* Dispersion correction */
250 enum {
251   edispcNO, edispcEnerPres, edispcEner, edispcAllEnerPres, edispcAllEner, edispcNR
252 }; 
253
254 /* Shell types, for completion stuff */
255 enum {
256   eshellCSH, eshellBASH, eshellZSH, eshellNR
257 }; 
258
259 /* Center of mass motion selection */
260 enum { 
261   ecmLINEAR, ecmANGULAR, ecmNO, ecmNR 
262 };
263
264 /* New version of simulated annealing */
265 enum { 
266   eannNO, eannSINGLE, eannPERIODIC, eannNR 
267 };
268
269 /* Implicit solvent algorithms */
270 enum { 
271   eisNO, eisGBSA, eisNR
272 };
273
274 /* Algorithms for calculating GB radii */
275 enum { 
276   egbSTILL, egbHCT, egbOBC, egbNR 
277 };
278
279 enum {
280   esaAPPROX, esaNO, esaSTILL, esaNR
281 };
282
283 /* Wall types */
284 enum {
285   ewt93, ewt104, ewtTABLE, ewt126, ewtNR
286 };
287
288 /* Pull stuff */
289 enum {
290   epullNO, epullUMBRELLA, epullCONSTRAINT, epullCONST_F, epullNR
291 };
292
293 enum {
294   epullgDIST, epullgDIR, epullgCYL, epullgPOS, epullgDIRPBC, epullgNR
295 };
296
297 #define PULL_CYL(pull) ((pull)->eGeom == epullgCYL)
298
299 /* Enforced rotation groups */
300 enum {
301   erotgISO  , erotgISOPF ,
302   erotgPM   , erotgPMPF  ,
303   erotgRM   , erotgRMPF  ,
304   erotgRM2  , erotgRM2PF ,
305   erotgFLEX , erotgFLEXT ,
306   erotgFLEX2, erotgFLEX2T,
307   erotgNR
308 };
309
310 enum {
311     erotgFitRMSD, erotgFitNORM, erotgFitPOT, erotgFitNR
312 };
313
314 /* QMMM */
315 enum {
316   eQMmethodAM1, eQMmethodPM3, eQMmethodRHF, 
317   eQMmethodUHF, eQMmethodDFT, eQMmethodB3LYP, eQMmethodMP2, eQMmethodCASSCF, eQMmethodB3LYPLAN,
318   eQMmethodDIRECT, eQMmethodNR
319 };
320
321 enum {
322   eQMbasisSTO3G, eQMbasisSTO3G2, eQMbasis321G, 
323   eQMbasis321Gp, eQMbasis321dGp, eQMbasis621G,
324   eQMbasis631G, eQMbasis631Gp, eQMbasis631dGp, 
325   eQMbasis6311G, eQMbasisNR
326 };
327
328 enum {
329   eQMMMschemenormal,eQMMMschemeoniom,eQMMMschemeNR
330 };
331
332 enum {
333   eMultentOptName, eMultentOptNo, eMultentOptLast, eMultentOptNR
334 };
335
336 /* flat-bottom posres geometries */
337 enum {
338   efbposresZERO, efbposresSPHERE, efbposresCYLINDER, efbposresX, efbposresY, efbposresZ,
339   efbposresNR
340 };
341
342 enum {
343   eAdressOff,eAdressConst, eAdressXSplit, eAdressSphere, eAdressNR
344 };
345
346 enum {
347   eAdressICOff, eAdressICThermoForce, eAdressICNR
348 };
349
350 enum {
351   eAdressSITEcom,eAdressSITEcog, eAdressSITEatom, eAdressSITEatomatom, eAdressSITENR
352 };
353
354 #ifdef __cplusplus
355 }
356 #endif
357
358 #endif /* ENUMS_H_ */