Merge release-4-6 into master
[alexxy/gromacs.git] / src / gromacs / legacyheaders / types / enums.h
1 /*
2  * This file is part of the GROMACS molecular simulation package.
3  *
4  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5  * Copyright (c) 2001-2004, The GROMACS development team.
6  * Copyright (c) 2013,2014, by the GROMACS development team, led by
7  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
8  * and including many others, as listed in the AUTHORS file in the
9  * top-level source directory and at http://www.gromacs.org.
10  *
11  * GROMACS is free software; you can redistribute it and/or
12  * modify it under the terms of the GNU Lesser General Public License
13  * as published by the Free Software Foundation; either version 2.1
14  * of the License, or (at your option) any later version.
15  *
16  * GROMACS is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19  * Lesser General Public License for more details.
20  *
21  * You should have received a copy of the GNU Lesser General Public
22  * License along with GROMACS; if not, see
23  * http://www.gnu.org/licenses, or write to the Free Software Foundation,
24  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA.
25  *
26  * If you want to redistribute modifications to GROMACS, please
27  * consider that scientific software is very special. Version
28  * control is crucial - bugs must be traceable. We will be happy to
29  * consider code for inclusion in the official distribution, but
30  * derived work must not be called official GROMACS. Details are found
31  * in the README & COPYING files - if they are missing, get the
32  * official version at http://www.gromacs.org.
33  *
34  * To help us fund GROMACS development, we humbly ask that you cite
35  * the research papers on the package. Check out http://www.gromacs.org.
36  */
37
38 #ifndef ENUMS_H_
39 #define ENUMS_H_
40
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 #if 0
45 } /* fixes auto-indentation problems */
46 #endif
47
48 /* note: these enums should correspond to the names in gmxlib/names.c */
49
50 enum {
51     epbcXYZ, epbcNONE, epbcXY, epbcSCREW, epbcNR
52 };
53
54 enum {
55     etcNO, etcBERENDSEN, etcNOSEHOOVER, etcYES, etcANDERSEN, etcANDERSENMASSIVE, etcVRESCALE, etcNR
56 }; /* yes is an alias for berendsen */
57
58 #define ETC_ANDERSEN(e) (((e) == etcANDERSENMASSIVE) || ((e) == etcANDERSEN))
59
60 enum {
61     epcNO, epcBERENDSEN, epcPARRINELLORAHMAN, epcISOTROPIC, epcMTTK, epcNR
62 }; /* isotropic is an alias for berendsen */
63
64 /* trotter decomposition extended variable parts */
65 enum {
66     etrtNONE, etrtNHC, etrtBAROV, etrtBARONHC, etrtNHC2, etrtBAROV2, etrtBARONHC2,
67     etrtVELOCITY1, etrtVELOCITY2, etrtPOSITION, etrtSKIPALL, etrtNR
68 };
69
70 /* sequenced parts of the trotter decomposition */
71 enum {
72     ettTSEQ0,  ettTSEQ1,  ettTSEQ2,  ettTSEQ3,  ettTSEQ4, ettTSEQMAX
73 };
74
75 enum {
76     epctISOTROPIC, epctSEMIISOTROPIC, epctANISOTROPIC,
77     epctSURFACETENSION, epctNR
78 };
79
80 enum {
81     erscNO, erscALL, erscCOM, erscNR
82 };
83
84 enum {
85     ecutsVERLET, ecutsGROUP, ecutsNR
86 };
87
88 /* Coulomb / VdW interaction modifiers.
89  * grompp replaces eintmodPOTSHIFT_VERLET by eintmodPOTSHIFT or eintmodNONE.
90  * Exactcutoff is only used by Reaction-field-zero, and is not user-selectable.
91  */
92 enum eintmod {
93     eintmodPOTSHIFT_VERLET, eintmodPOTSHIFT, eintmodNONE, eintmodPOTSWITCH, eintmodEXACTCUTOFF, eintmodFORCESWITCH, eintmodNR
94 };
95
96 /*
97  * eelNOTUSED1 used to be GB, but to enable generalized born with different
98  * forms of electrostatics (RF, switch, etc.) in the future it is now selected
99  * separately (through the implicit_solvent option).
100  */
101 enum {
102     eelCUT,     eelRF,     eelGRF,   eelPME,  eelEWALD,  eelP3M_AD,
103     eelPOISSON, eelSWITCH, eelSHIFT, eelUSER, eelGB_NOTUSED, eelRF_NEC, eelENCADSHIFT,
104     eelPMEUSER, eelPMESWITCH, eelPMEUSERSWITCH, eelRF_ZERO, eelNR
105 };
106
107 /* Ewald geometry */
108 enum {
109     eewg3D, eewg3DC, eewgNR
110 };
111
112 #define EEL_RF(e) ((e) == eelRF || (e) == eelGRF || (e) == eelRF_NEC || (e) == eelRF_ZERO )
113
114 #define EEL_PME(e)  ((e) == eelPME || (e) == eelPMESWITCH || (e) == eelPMEUSER || (e) == eelPMEUSERSWITCH || (e) == eelP3M_AD)
115 #define EEL_PME_EWALD(e) (EEL_PME(e) || (e) == eelEWALD)
116 #define EEL_FULL(e) (EEL_PME_EWALD(e) || (e) == eelPOISSON)
117
118 #define EEL_USER(e) ((e) == eelUSER || (e) == eelPMEUSER || (e) == (eelPMEUSERSWITCH))
119
120 enum {
121     evdwCUT, evdwSWITCH, evdwSHIFT, evdwUSER, evdwENCADSHIFT,
122     evdwPME, evdwNR
123 };
124
125 enum {
126     eljpmeGEOM, eljpmeLB, eljpmeNR
127 };
128
129 #define EVDW_PME(e) ((e) == evdwPME)
130
131 enum {
132     ensGRID, ensSIMPLE, ensNR
133 };
134
135 /* 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
136    energy for temperature control */
137
138 enum {
139     eiMD, eiSteep, eiCG, eiBD, eiSD2, eiNM, eiLBFGS, eiTPI, eiTPIC, eiSD1, eiVV, eiVVAK, eiNR
140 };
141 #define EI_VV(e) ((e) == eiVV || (e) == eiVVAK)
142 #define EI_MD(e) ((e) == eiMD || EI_VV(e))
143 #define EI_SD(e) ((e) == eiSD1 || (e) == eiSD2)
144 #define EI_RANDOM(e) (EI_SD(e) || (e) == eiBD)
145 /*above integrators may not conserve momenta*/
146 #define EI_DYNAMICS(e) (EI_MD(e) || EI_SD(e) || (e) == eiBD)
147 #define EI_ENERGY_MINIMIZATION(e) ((e) == eiSteep || (e) == eiCG || (e) == eiLBFGS)
148 #define EI_TPI(e) ((e) == eiTPI || (e) == eiTPIC)
149
150 #define EI_STATE_VELOCITY(e) (EI_MD(e) || EI_SD(e))
151
152 enum {
153     econtLINCS, econtSHAKE, econtNR
154 };
155
156 enum {
157     edrNone, edrSimple, edrEnsemble, edrNR
158 };
159
160 enum {
161     edrwConservative, edrwEqual, edrwNR
162 };
163
164 /* Combination rule things */
165 enum {
166     eCOMB_NONE, eCOMB_GEOMETRIC, eCOMB_ARITHMETIC, eCOMB_GEOM_SIG_EPS, eCOMB_NR
167 };
168
169 /* NBF selection */
170 enum {
171     eNBF_NONE, eNBF_LJ, eNBF_BHAM, eNBF_NR
172 };
173
174 /* simulated tempering methods */
175 enum {
176     esimtempGEOMETRIC, esimtempEXPONENTIAL, esimtempLINEAR, esimtempNR
177 };
178 /* FEP selection */
179 enum {
180     efepNO, efepYES, efepSTATIC, efepSLOWGROWTH, efepEXPANDED, efepNR
181 };
182 /* if efepNO, there are no evaluations at other states.
183    if efepYES, treated equivalently to efepSTATIC.
184    if efepSTATIC, then lambdas do not change during the simulation.
185    if efepSLOWGROWTH, then the states change monotonically throughout the simulation.
186    if efepEXPANDED, then expanded ensemble simulations are occuring.
187  */
188
189 /* FEP coupling types */
190 enum {
191     efptFEP, efptMASS, efptCOUL, efptVDW, efptBONDED, efptRESTRAINT, efptTEMPERATURE, efptNR
192 };
193
194 /* How the lambda weights are calculated:
195    elamstatsMETROPOLIS = using the metropolis criteria
196    elamstatsBARKER = using the Barker critera for transition weights - also called unoptimized Bennett
197    elamstatsMINVAR = using Barker + minimum variance for weights
198    elamstatsWL = Wang-Landu (using visitation counts)
199    elamstatsWWL = Weighted Wang-Landau (using optimized gibbs weighted visitation counts)
200  */
201 enum {
202     elamstatsNO, elamstatsMETROPOLIS, elamstatsBARKER, elamstatsMINVAR, elamstatsWL, elamstatsWWL, elamstatsNR
203 };
204
205 #define ELAMSTATS_EXPANDED(e) ((e) > elamstatsNO)
206
207 #define EWL(e) ((e) == elamstatsWL || (e) == elamstatsWWL)
208
209 /* How moves in lambda are calculated:
210    elmovemcMETROPOLIS - using the Metropolis criteria, and 50% up and down
211    elmovemcBARKER - using the Barker criteria, and 50% up and down
212    elmovemcGIBBS - computing the transition using the marginalized probabilities of the lambdas
213    elmovemcMETGIBBS - computing the transition using the metropolized version of Gibbs (Monte Carlo Strategies in Scientific computing, Liu, p. 134)
214  */
215 enum {
216     elmcmoveNO, elmcmoveMETROPOLIS, elmcmoveBARKER, elmcmoveGIBBS, elmcmoveMETGIBBS, elmcmoveNR
217 };
218
219 /* how we decide whether weights have reached equilibrium
220    elmceqNO - never stop, weights keep going
221    elmceqYES - fix the weights from the beginning; no movement
222    elmceqWLDELTA - stop when the WL-delta falls below a certain level
223    elmceqNUMATLAM - stop when we have a certain number of samples at every step
224    elmceqSTEPS - stop when we've run a certain total number of steps
225    elmceqSAMPLES - stop when we've run a certain total number of samples
226    elmceqRATIO - stop when the ratio of samples (lowest to highest) is sufficiently large
227  */
228 enum {
229     elmceqNO, elmceqYES, elmceqWLDELTA, elmceqNUMATLAM, elmceqSTEPS, elmceqSAMPLES, elmceqRATIO, elmceqNR
230 };
231
232 /* separate_dhdl_file selection */
233 enum
234 {
235     /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
236     esepdhdlfileYES, esepdhdlfileNO, esepdhdlfileNR
237 };
238
239 /* dhdl_derivatives selection */
240 enum
241 {
242     /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
243     edhdlderivativesYES, edhdlderivativesNO, edhdlderivativesNR
244 };
245
246 /* Solvent model */
247 enum {
248     esolNO, esolSPC, esolTIP4P, esolNR
249 };
250
251 /* Dispersion correction */
252 enum {
253     edispcNO, edispcEnerPres, edispcEner, edispcAllEnerPres, edispcAllEner, edispcNR
254 };
255
256 /* Center of mass motion selection */
257 enum {
258     ecmLINEAR, ecmANGULAR, ecmNO, ecmNR
259 };
260
261 /* New version of simulated annealing */
262 enum {
263     eannNO, eannSINGLE, eannPERIODIC, eannNR
264 };
265
266 /* Implicit solvent algorithms */
267 enum {
268     eisNO, eisGBSA, eisNR
269 };
270
271 /* Algorithms for calculating GB radii */
272 enum {
273     egbSTILL, egbHCT, egbOBC, egbNR
274 };
275
276 enum {
277     esaAPPROX, esaNO, esaSTILL, esaNR
278 };
279
280 /* Wall types */
281 enum {
282     ewt93, ewt104, ewtTABLE, ewt126, ewtNR
283 };
284
285 /* Pull stuff */
286 enum {
287     epullNO, epullUMBRELLA, epullCONSTRAINT, epullCONST_F, epullNR
288 };
289
290 enum {
291     epullgDIST, epullgDIR, epullgCYL, epullgDIRPBC, epullgNR
292 };
293
294 #define PULL_CYL(pull) ((pull)->eGeom == epullgCYL)
295
296 /* Enforced rotation groups */
297 enum {
298     erotgISO, erotgISOPF,
299     erotgPM, erotgPMPF,
300     erotgRM, erotgRMPF,
301     erotgRM2, erotgRM2PF,
302     erotgFLEX, erotgFLEXT,
303     erotgFLEX2, erotgFLEX2T,
304     erotgNR
305 };
306
307 enum {
308     erotgFitRMSD, erotgFitNORM, erotgFitPOT, erotgFitNR
309 };
310
311 /* Direction along which ion/water swaps happen in "Computational
312  * Electrophysiology" (CompEL) setups */
313 enum eSwaptype {
314     eswapNO, eswapX, eswapY, eswapZ, eSwapTypesNR
315 };
316 /* The following three enums are mainly used for indexing arrays and when
317  * looping over the available ions, channels, or compartments. This hopefully
318  * adds to the code's readability because it makes clear which object is dealt
319  * with in a block of code.
320  *
321  * The two compartments for CompEL setups */
322 enum eCompartment {
323     eCompA, eCompB, eCompNR
324 };
325 /* The positive and negative ions CompEL setups, future versions of the
326  * protocol might consider more than two types of ions */
327 enum eIontype {
328     eIonNEG, eIonPOS, eIonNR
329 };
330 /* The chanels that define with their COM the compartment boundaries in
331  * CompEL setups. In principle one could also use modified setups with
332  * more than two channels. */
333 enum eChannel {
334     eChan0, eChan1, eChanNR
335 };
336
337 /* QMMM */
338 enum {
339     eQMmethodAM1, eQMmethodPM3, eQMmethodRHF,
340     eQMmethodUHF, eQMmethodDFT, eQMmethodB3LYP, eQMmethodMP2, eQMmethodCASSCF, eQMmethodB3LYPLAN,
341     eQMmethodDIRECT, eQMmethodNR
342 };
343
344 enum {
345     eQMbasisSTO3G, eQMbasisSTO3G2, eQMbasis321G,
346     eQMbasis321Gp, eQMbasis321dGp, eQMbasis621G,
347     eQMbasis631G, eQMbasis631Gp, eQMbasis631dGp,
348     eQMbasis6311G, eQMbasisNR
349 };
350
351 enum {
352     eQMMMschemenormal, eQMMMschemeoniom, eQMMMschemeNR
353 };
354
355 enum {
356     eMultentOptName, eMultentOptNo, eMultentOptLast, eMultentOptNR
357 };
358
359 /* flat-bottom posres geometries */
360 enum {
361     efbposresZERO, efbposresSPHERE, efbposresCYLINDER, efbposresX, efbposresY, efbposresZ,
362     efbposresNR
363 };
364
365 enum {
366     eAdressOff, eAdressConst, eAdressXSplit, eAdressSphere, eAdressNR
367 };
368
369 enum {
370     eAdressICOff, eAdressICThermoForce, eAdressICNR
371 };
372
373 enum {
374     eAdressSITEcom, eAdressSITEcog, eAdressSITEatom, eAdressSITEatomatom, eAdressSITENR
375 };
376
377
378 /* The interactions contained in a (possibly merged) table
379  * for computing electrostatic, VDW repulsion and/or VDW dispersion
380  * contributions.
381  */
382 enum gmx_table_interaction
383 {
384     GMX_TABLE_INTERACTION_ELEC,
385     GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
386     GMX_TABLE_INTERACTION_VDWEXPREP_VDWDISP,
387     GMX_TABLE_INTERACTION_VDWDISP,
388     GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
389     GMX_TABLE_INTERACTION_ELEC_VDWEXPREP_VDWDISP,
390     GMX_TABLE_INTERACTION_ELEC_VDWDISP,
391     GMX_TABLE_INTERACTION_NR
392 };
393
394 /* Different formats for table data. Cubic spline tables are typically stored
395  * with the four Y,F,G,H intermediate values (check tables.c for format), which
396  * makes it easy to load with a single 4-way SIMD instruction too.
397  * Linear tables only need one value per table point, or two if both V and F
398  * are calculated. However, with SIMD instructions this makes the loads unaligned,
399  * and in that case we store the data as F, D=F(i+1)-F(i), V, and then a blank value,
400  * which again makes it possible to load as a single instruction.
401  */
402 enum gmx_table_format
403 {
404     GMX_TABLE_FORMAT_CUBICSPLINE_YFGH,
405     GMX_TABLE_FORMAT_LINEAR_VF,
406     GMX_TABLE_FORMAT_LINEAR_V,
407     GMX_TABLE_FORMAT_LINEAR_F,
408     GMX_TABLE_FORMAT_LINEAR_FDV0,
409     GMX_TABLE_FORMAT_NR
410 };
411
412 /* Neighborlist geometry type.
413  * Kernels will compute interactions between two particles,
414  * 3-center water, 4-center water or coarse-grained beads.
415  */
416 enum gmx_nblist_kernel_geometry
417 {
418     GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE,
419     GMX_NBLIST_GEOMETRY_WATER3_PARTICLE,
420     GMX_NBLIST_GEOMETRY_WATER3_WATER3,
421     GMX_NBLIST_GEOMETRY_WATER4_PARTICLE,
422     GMX_NBLIST_GEOMETRY_WATER4_WATER4,
423     GMX_NBLIST_GEOMETRY_CG_CG,
424     GMX_NBLIST_GEOMETRY_NR
425 };
426
427 /* Types of electrostatics calculations available inside nonbonded kernels.
428  * Note that these do NOT necessarily correspond to the user selections in the MDP file;
429  * many interactions for instance map to tabulated kernels.
430  */
431 enum gmx_nbkernel_elec
432 {
433     GMX_NBKERNEL_ELEC_NONE,
434     GMX_NBKERNEL_ELEC_COULOMB,
435     GMX_NBKERNEL_ELEC_REACTIONFIELD,
436     GMX_NBKERNEL_ELEC_CUBICSPLINETABLE,
437     GMX_NBKERNEL_ELEC_GENERALIZEDBORN,
438     GMX_NBKERNEL_ELEC_EWALD,
439     GMX_NBKERNEL_ELEC_NR
440 };
441
442 /* Types of vdw calculations available inside nonbonded kernels.
443  * Note that these do NOT necessarily correspond to the user selections in the MDP file;
444  * many interactions for instance map to tabulated kernels.
445  */
446 enum gmx_nbkernel_vdw
447 {
448     GMX_NBKERNEL_VDW_NONE,
449     GMX_NBKERNEL_VDW_LENNARDJONES,
450     GMX_NBKERNEL_VDW_BUCKINGHAM,
451     GMX_NBKERNEL_VDW_CUBICSPLINETABLE,
452     GMX_NBKERNEL_VDW_NR
453 };
454 /* Types of interactions inside the neighborlist
455  */
456 enum gmx_nblist_interaction_type
457 {
458     GMX_NBLIST_INTERACTION_STANDARD,
459     GMX_NBLIST_INTERACTION_FREE_ENERGY,
460     GMX_NBLIST_INTERACTION_ADRESS,
461     GMX_NBLIST_INTERACTION_NR
462 };
463
464 #ifdef __cplusplus
465 }
466 #endif
467
468 #endif /* ENUMS_H_ */