added Verlet scheme and NxN non-bonded functionality
[alexxy/gromacs.git] / include / 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 /*
84  * eelNOTUSED1 used to be GB, but to enable generalized born with different
85  * forms of electrostatics (RF, switch, etc.) in the future it is now selected
86  * separately (through the implicit_solvent option).
87  */
88 enum {
89   eelCUT,     eelRF,     eelGRF,   eelPME,  eelEWALD,  eelP3M_AD, 
90   eelPOISSON, eelSWITCH, eelSHIFT, eelUSER, eelGB_NOTUSED, eelRF_NEC, eelENCADSHIFT, 
91   eelPMEUSER, eelPMESWITCH, eelPMEUSERSWITCH, eelRF_ZERO, eelNR
92 };
93
94 /* Ewald geometry */
95 enum { 
96   eewg3D, eewg3DC, eewgNR
97 };
98
99 #define EEL_RF(e) ((e) == eelRF || (e) == eelGRF || (e) == eelRF_NEC || (e) == eelRF_ZERO )
100
101 #define EEL_PME(e)  ((e) == eelPME || (e) == eelPMESWITCH || (e) == eelPMEUSER || (e) == eelPMEUSERSWITCH || (e) == eelP3M_AD)
102 #define EEL_FULL(e) (EEL_PME(e) || (e) == eelPOISSON || (e) == eelEWALD)
103
104 #define EEL_SWITCHED(e) ((e) == eelSWITCH || (e) == eelSHIFT || (e) == eelENCADSHIFT || (e) == eelPMESWITCH || (e) == eelPMEUSERSWITCH)
105
106 #define EEL_USER(e) ((e) == eelUSER || (e) == eelPMEUSER || (e) == (eelPMESWITCH))
107
108 #define EEL_IS_ZERO_AT_CUTOFF(e) (EEL_SWITCHED(e) || (e) == eelRF_ZERO)
109
110 #define EEL_MIGHT_BE_ZERO_AT_CUTOFF(e) (EEL_IS_ZERO_AT_CUTOFF(e) || (e) == eelUSER || (e) == eelPMEUSER)
111
112 enum {
113   evdwCUT, evdwSWITCH, evdwSHIFT, evdwUSER, evdwENCADSHIFT, evdwNR
114 };
115
116 #define EVDW_SWITCHED(e) ((e) == evdwSWITCH || (e) == evdwSHIFT || (e) == evdwENCADSHIFT)
117
118 #define EVDW_IS_ZERO_AT_CUTOFF(e) EVDW_SWITCHED(e)
119
120 #define EVDW_MIGHT_BE_ZERO_AT_CUTOFF(e) (EVDW_IS_ZERO_AT_CUTOFF(e) || (e) == evdwUSER)
121
122 enum { 
123   ensGRID, ensSIMPLE, ensNR
124 };
125
126 /* 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
127    energy for temperature control */
128
129 enum {
130   eiMD, eiSteep, eiCG, eiBD, eiSD2, eiNM, eiLBFGS, eiTPI, eiTPIC, eiSD1, eiVV, eiVVAK, eiNR
131 };
132 #define EI_VV(e) ((e) == eiVV || (e) == eiVVAK)
133 #define EI_MD(e) ((e) == eiMD || EI_VV(e))
134 #define EI_SD(e) ((e) == eiSD1 || (e) == eiSD2)
135 #define EI_RANDOM(e) (EI_SD(e) || (e) == eiBD)
136 /*above integrators may not conserve momenta*/
137 #define EI_DYNAMICS(e) (EI_MD(e) || EI_SD(e) || (e) == eiBD)
138 #define EI_ENERGY_MINIMIZATION(e) ((e) == eiSteep || (e) == eiCG || (e) == eiLBFGS)
139 #define EI_TPI(e) ((e) == eiTPI || (e) == eiTPIC)
140
141 #define EI_STATE_VELOCITY(e) (EI_MD(e) || EI_SD(e))
142
143 enum {
144   econtLINCS, econtSHAKE, econtNR
145 };
146
147 enum {
148   edrNone, edrSimple, edrEnsemble, edrNR
149 };
150
151 enum {
152   edrwConservative, edrwEqual, edrwNR
153 };
154
155 /* Combination rule things */
156 enum { 
157   eCOMB_NONE, eCOMB_GEOMETRIC, eCOMB_ARITHMETIC, eCOMB_GEOM_SIG_EPS, eCOMB_NR 
158 };
159
160 /* NBF selection */
161 enum { 
162   eNBF_NONE, eNBF_LJ, eNBF_BHAM, eNBF_NR 
163 };
164
165 /* simulated tempering methods */
166 enum {
167   esimtempGEOMETRIC, esimtempEXPONENTIAL, esimtempLINEAR, esimtempNR
168 };
169 /* FEP selection */
170 enum {
171   efepNO, efepYES, efepSTATIC, efepSLOWGROWTH, efepEXPANDED, efepNR
172 };
173   /* if efepNO, there are no evaluations at other states.
174      if efepYES, treated equivalently to efepSTATIC.
175      if efepSTATIC, then lambdas do not change during the simulation.
176      if efepSLOWGROWTH, then the states change monotonically throughout the simulation.
177      if efepEXPANDED, then expanded ensemble simulations are occuring.
178   */
179
180 /* FEP coupling types */
181 enum {
182   efptFEP,efptMASS,efptCOUL,efptVDW,efptBONDED,efptRESTRAINT,efptTEMPERATURE,efptNR
183 };
184
185 /* How the lambda weights are calculated:
186    elamstatsMETROPOLIS = using the metropolis criteria
187    elamstatsBARKER = using the Barker critera for transition weights - also called unoptimized Bennett
188    elamstatsMINVAR = using Barker + minimum variance for weights
189    elamstatsWL = Wang-Landu (using visitation counts)
190    elamstatsWWL = Weighted Wang-Landau (using optimized gibbs weighted visitation counts)
191 */
192 enum {
193   elamstatsNO, elamstatsMETROPOLIS, elamstatsBARKER, elamstatsMINVAR, elamstatsWL, elamstatsWWL, elamstatsNR
194 };
195
196 #define ELAMSTATS_EXPANDED(e) ((e) > elamstatsNO)
197
198 #define EWL(e) ((e) == elamstatsWL || (e) == elamstatsWWL)
199
200 /* How moves in lambda are calculated:
201    elmovemcMETROPOLIS - using the Metropolis criteria, and 50% up and down
202    elmovemcBARKER - using the Barker criteria, and 50% up and down
203    elmovemcGIBBS - computing the transition using the marginalized probabilities of the lambdas
204    elmovemcMETGIBBS - computing the transition using the metropolized version of Gibbs (Monte Carlo Strategies in Scientific computing, Liu, p. 134)
205 */
206 enum {
207   elmcmoveNO,elmcmoveMETROPOLIS, elmcmoveBARKER, elmcmoveGIBBS, elmcmoveMETGIBBS, elmcmoveNR
208 };
209
210 /* how we decide whether weights have reached equilibrium
211    elmceqNO - never stop, weights keep going
212    elmceqYES - fix the weights from the beginning; no movement
213    elmceqWLDELTA - stop when the WL-delta falls below a certain level
214    elmceqNUMATLAM - stop when we have a certain number of samples at every step
215    elmceqSTEPS - stop when we've run a certain total number of steps
216    elmceqSAMPLES - stop when we've run a certain total number of samples
217    elmceqRATIO - stop when the ratio of samples (lowest to highest) is sufficiently large
218 */
219 enum {
220   elmceqNO,elmceqYES,elmceqWLDELTA,elmceqNUMATLAM,elmceqSTEPS,elmceqSAMPLES,elmceqRATIO,elmceqNR
221 };
222
223 /* separate_dhdl_file selection */
224 enum
225 {
226   /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
227   esepdhdlfileYES, esepdhdlfileNO, esepdhdlfileNR
228 };
229
230 /* dhdl_derivatives selection */
231 enum
232 {
233   /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
234   edhdlderivativesYES, edhdlderivativesNO, edhdlderivativesNR
235 };
236
237 /* Solvent model */
238 enum {
239   esolNO, esolSPC, esolTIP4P, esolNR
240 };
241
242 /* Dispersion correction */
243 enum {
244   edispcNO, edispcEnerPres, edispcEner, edispcAllEnerPres, edispcAllEner, edispcNR
245 }; 
246
247 /* Shell types, for completion stuff */
248 enum {
249   eshellCSH, eshellBASH, eshellZSH, eshellNR
250 }; 
251
252 /* Center of mass motion selection */
253 enum { 
254   ecmLINEAR, ecmANGULAR, ecmNO, ecmNR 
255 };
256
257 /* New version of simulated annealing */
258 enum { 
259   eannNO, eannSINGLE, eannPERIODIC, eannNR 
260 };
261
262 /* Implicit solvent algorithms */
263 enum { 
264   eisNO, eisGBSA, eisNR
265 };
266
267 /* Algorithms for calculating GB radii */
268 enum { 
269   egbSTILL, egbHCT, egbOBC, egbNR 
270 };
271
272 enum {
273   esaAPPROX, esaNO, esaSTILL, esaNR
274 };
275
276 /* Wall types */
277 enum {
278   ewt93, ewt104, ewtTABLE, ewt126, ewtNR
279 };
280
281 /* Pull stuff */
282 enum {
283   epullNO, epullUMBRELLA, epullCONSTRAINT, epullCONST_F, epullNR
284 };
285
286 enum {
287   epullgDIST, epullgDIR, epullgCYL, epullgPOS, epullgDIRPBC, epullgNR
288 };
289
290 #define PULL_CYL(pull) ((pull)->eGeom == epullgCYL)
291
292 /* Enforced rotation groups */
293 enum {
294   erotgISO  , erotgISOPF ,
295   erotgPM   , erotgPMPF  ,
296   erotgRM   , erotgRMPF  ,
297   erotgRM2  , erotgRM2PF ,
298   erotgFLEX , erotgFLEXT ,
299   erotgFLEX2, erotgFLEX2T,
300   erotgNR
301 };
302
303 enum {
304     erotgFitRMSD, erotgFitNORM, erotgFitPOT, erotgFitNR
305 };
306
307 /* QMMM */
308 enum {
309   eQMmethodAM1, eQMmethodPM3, eQMmethodRHF, 
310   eQMmethodUHF, eQMmethodDFT, eQMmethodB3LYP, eQMmethodMP2, eQMmethodCASSCF, eQMmethodB3LYPLAN,
311   eQMmethodDIRECT, eQMmethodNR
312 };
313
314 enum {
315   eQMbasisSTO3G, eQMbasisSTO3G2, eQMbasis321G, 
316   eQMbasis321Gp, eQMbasis321dGp, eQMbasis621G,
317   eQMbasis631G, eQMbasis631Gp, eQMbasis631dGp, 
318   eQMbasis6311G, eQMbasisNR
319 };
320
321 enum {
322   eQMMMschemenormal,eQMMMschemeoniom,eQMMMschemeNR
323 };
324
325 enum {
326   eMultentOptName, eMultentOptNo, eMultentOptLast, eMultentOptNR
327 };
328
329 enum {
330   eAdressOff,eAdressConst, eAdressXSplit, eAdressSphere, eAdressNR
331 };
332
333 enum {
334   eAdressICOff, eAdressICThermoForce, eAdressICNR
335 };
336
337 enum {
338   eAdressSITEcom,eAdressSITEcog, eAdressSITEatom, eAdressSITEatomatom, eAdressSITENR
339 };
340
341 #ifdef __cplusplus
342 }
343 #endif
344
345 #endif /* ENUMS_H_ */