Implemented nbnxn LJ switch functions
[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_EWALD(e)  (EEL_PME(e) || (e) == eelEWALD)
116 #define EEL_FULL(e) (EEL_PME(e) || (e) == eelPOISSON || (e) == eelEWALD)
117 #define EEL_USER(e) ((e) == eelUSER || (e) == eelPMEUSER || (e) == (eelPMEUSERSWITCH))
118
119 enum {
120     evdwCUT, evdwSWITCH, evdwSHIFT, evdwUSER, evdwENCADSHIFT,
121     evdwPME, evdwNR
122 };
123
124 enum {
125     eljpmeGEOM, eljpmeLB, eljpmeNR
126 };
127
128 #define EVDW_PME(e) ((e) == evdwPME)
129
130 enum {
131     ensGRID, ensSIMPLE, ensNR
132 };
133
134 /* 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
135    energy for temperature control */
136
137 enum {
138     eiMD, eiSteep, eiCG, eiBD, eiSD2, eiNM, eiLBFGS, eiTPI, eiTPIC, eiSD1, eiVV, eiVVAK, eiNR
139 };
140 #define EI_VV(e) ((e) == eiVV || (e) == eiVVAK)
141 #define EI_MD(e) ((e) == eiMD || EI_VV(e))
142 #define EI_SD(e) ((e) == eiSD1 || (e) == eiSD2)
143 #define EI_RANDOM(e) (EI_SD(e) || (e) == eiBD)
144 /*above integrators may not conserve momenta*/
145 #define EI_DYNAMICS(e) (EI_MD(e) || EI_SD(e) || (e) == eiBD)
146 #define EI_ENERGY_MINIMIZATION(e) ((e) == eiSteep || (e) == eiCG || (e) == eiLBFGS)
147 #define EI_TPI(e) ((e) == eiTPI || (e) == eiTPIC)
148
149 #define EI_STATE_VELOCITY(e) (EI_MD(e) || EI_SD(e))
150
151 enum {
152     econtLINCS, econtSHAKE, econtNR
153 };
154
155 enum {
156     edrNone, edrSimple, edrEnsemble, edrNR
157 };
158
159 enum {
160     edrwConservative, edrwEqual, edrwNR
161 };
162
163 /* Combination rule things */
164 enum {
165     eCOMB_NONE, eCOMB_GEOMETRIC, eCOMB_ARITHMETIC, eCOMB_GEOM_SIG_EPS, eCOMB_NR
166 };
167
168 /* NBF selection */
169 enum {
170     eNBF_NONE, eNBF_LJ, eNBF_BHAM, eNBF_NR
171 };
172
173 /* simulated tempering methods */
174 enum {
175     esimtempGEOMETRIC, esimtempEXPONENTIAL, esimtempLINEAR, esimtempNR
176 };
177 /* FEP selection */
178 enum {
179     efepNO, efepYES, efepSTATIC, efepSLOWGROWTH, efepEXPANDED, efepNR
180 };
181 /* if efepNO, there are no evaluations at other states.
182    if efepYES, treated equivalently to efepSTATIC.
183    if efepSTATIC, then lambdas do not change during the simulation.
184    if efepSLOWGROWTH, then the states change monotonically throughout the simulation.
185    if efepEXPANDED, then expanded ensemble simulations are occuring.
186  */
187
188 /* FEP coupling types */
189 enum {
190     efptFEP, efptMASS, efptCOUL, efptVDW, efptBONDED, efptRESTRAINT, efptTEMPERATURE, efptNR
191 };
192
193 /* How the lambda weights are calculated:
194    elamstatsMETROPOLIS = using the metropolis criteria
195    elamstatsBARKER = using the Barker critera for transition weights - also called unoptimized Bennett
196    elamstatsMINVAR = using Barker + minimum variance for weights
197    elamstatsWL = Wang-Landu (using visitation counts)
198    elamstatsWWL = Weighted Wang-Landau (using optimized gibbs weighted visitation counts)
199  */
200 enum {
201     elamstatsNO, elamstatsMETROPOLIS, elamstatsBARKER, elamstatsMINVAR, elamstatsWL, elamstatsWWL, elamstatsNR
202 };
203
204 #define ELAMSTATS_EXPANDED(e) ((e) > elamstatsNO)
205
206 #define EWL(e) ((e) == elamstatsWL || (e) == elamstatsWWL)
207
208 /* How moves in lambda are calculated:
209    elmovemcMETROPOLIS - using the Metropolis criteria, and 50% up and down
210    elmovemcBARKER - using the Barker criteria, and 50% up and down
211    elmovemcGIBBS - computing the transition using the marginalized probabilities of the lambdas
212    elmovemcMETGIBBS - computing the transition using the metropolized version of Gibbs (Monte Carlo Strategies in Scientific computing, Liu, p. 134)
213  */
214 enum {
215     elmcmoveNO, elmcmoveMETROPOLIS, elmcmoveBARKER, elmcmoveGIBBS, elmcmoveMETGIBBS, elmcmoveNR
216 };
217
218 /* how we decide whether weights have reached equilibrium
219    elmceqNO - never stop, weights keep going
220    elmceqYES - fix the weights from the beginning; no movement
221    elmceqWLDELTA - stop when the WL-delta falls below a certain level
222    elmceqNUMATLAM - stop when we have a certain number of samples at every step
223    elmceqSTEPS - stop when we've run a certain total number of steps
224    elmceqSAMPLES - stop when we've run a certain total number of samples
225    elmceqRATIO - stop when the ratio of samples (lowest to highest) is sufficiently large
226  */
227 enum {
228     elmceqNO, elmceqYES, elmceqWLDELTA, elmceqNUMATLAM, elmceqSTEPS, elmceqSAMPLES, elmceqRATIO, elmceqNR
229 };
230
231 /* separate_dhdl_file selection */
232 enum
233 {
234     /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
235     esepdhdlfileYES, esepdhdlfileNO, esepdhdlfileNR
236 };
237
238 /* dhdl_derivatives selection */
239 enum
240 {
241     /* NOTE: YES is the first one. Do NOT interpret this one as a gmx_bool */
242     edhdlderivativesYES, edhdlderivativesNO, edhdlderivativesNR
243 };
244
245 /* Solvent model */
246 enum {
247     esolNO, esolSPC, esolTIP4P, esolNR
248 };
249
250 /* Dispersion correction */
251 enum {
252     edispcNO, edispcEnerPres, edispcEner, edispcAllEnerPres, edispcAllEner, edispcNR
253 };
254
255 /* Center of mass motion selection */
256 enum {
257     ecmLINEAR, ecmANGULAR, ecmNO, ecmNR
258 };
259
260 /* New version of simulated annealing */
261 enum {
262     eannNO, eannSINGLE, eannPERIODIC, eannNR
263 };
264
265 /* Implicit solvent algorithms */
266 enum {
267     eisNO, eisGBSA, eisNR
268 };
269
270 /* Algorithms for calculating GB radii */
271 enum {
272     egbSTILL, egbHCT, egbOBC, egbNR
273 };
274
275 enum {
276     esaAPPROX, esaNO, esaSTILL, esaNR
277 };
278
279 /* Wall types */
280 enum {
281     ewt93, ewt104, ewtTABLE, ewt126, ewtNR
282 };
283
284 /* Pull stuff */
285 enum {
286     epullNO, epullUMBRELLA, epullCONSTRAINT, epullCONST_F, epullNR
287 };
288
289 enum {
290     epullgDIST, epullgDIR, epullgCYL, epullgDIRPBC, epullgNR
291 };
292
293 #define PULL_CYL(pull) ((pull)->eGeom == epullgCYL)
294
295 /* Enforced rotation groups */
296 enum {
297     erotgISO, erotgISOPF,
298     erotgPM, erotgPMPF,
299     erotgRM, erotgRMPF,
300     erotgRM2, erotgRM2PF,
301     erotgFLEX, erotgFLEXT,
302     erotgFLEX2, erotgFLEX2T,
303     erotgNR
304 };
305
306 enum {
307     erotgFitRMSD, erotgFitNORM, erotgFitPOT, erotgFitNR
308 };
309
310 /* Direction along which ion/water swaps happen in "Computational
311  * Electrophysiology" (CompEL) setups */
312 enum eSwaptype {
313     eswapNO, eswapX, eswapY, eswapZ, eSwapTypesNR
314 };
315 /* The following three enums are mainly used for indexing arrays and when
316  * looping over the available ions, channels, or compartments. This hopefully
317  * adds to the code's readability because it makes clear which object is dealt
318  * with in a block of code.
319  *
320  * The two compartments for CompEL setups */
321 enum eCompartment {
322     eCompA, eCompB, eCompNR
323 };
324 /* The positive and negative ions CompEL setups, future versions of the
325  * protocol might consider more than two types of ions */
326 enum eIontype {
327     eIonNEG, eIonPOS, eIonNR
328 };
329 /* The chanels that define with their COM the compartment boundaries in
330  * CompEL setups. In principle one could also use modified setups with
331  * more than two channels. */
332 enum eChannel {
333     eChan0, eChan1, eChanNR
334 };
335
336 /* QMMM */
337 enum {
338     eQMmethodAM1, eQMmethodPM3, eQMmethodRHF,
339     eQMmethodUHF, eQMmethodDFT, eQMmethodB3LYP, eQMmethodMP2, eQMmethodCASSCF, eQMmethodB3LYPLAN,
340     eQMmethodDIRECT, eQMmethodNR
341 };
342
343 enum {
344     eQMbasisSTO3G, eQMbasisSTO3G2, eQMbasis321G,
345     eQMbasis321Gp, eQMbasis321dGp, eQMbasis621G,
346     eQMbasis631G, eQMbasis631Gp, eQMbasis631dGp,
347     eQMbasis6311G, eQMbasisNR
348 };
349
350 enum {
351     eQMMMschemenormal, eQMMMschemeoniom, eQMMMschemeNR
352 };
353
354 enum {
355     eMultentOptName, eMultentOptNo, eMultentOptLast, eMultentOptNR
356 };
357
358 /* flat-bottom posres geometries */
359 enum {
360     efbposresZERO, efbposresSPHERE, efbposresCYLINDER, efbposresX, efbposresY, efbposresZ,
361     efbposresNR
362 };
363
364 enum {
365     eAdressOff, eAdressConst, eAdressXSplit, eAdressSphere, eAdressNR
366 };
367
368 enum {
369     eAdressICOff, eAdressICThermoForce, eAdressICNR
370 };
371
372 enum {
373     eAdressSITEcom, eAdressSITEcog, eAdressSITEatom, eAdressSITEatomatom, eAdressSITENR
374 };
375
376
377 /* The interactions contained in a (possibly merged) table
378  * for computing electrostatic, VDW repulsion and/or VDW dispersion
379  * contributions.
380  */
381 enum gmx_table_interaction
382 {
383     GMX_TABLE_INTERACTION_ELEC,
384     GMX_TABLE_INTERACTION_VDWREP_VDWDISP,
385     GMX_TABLE_INTERACTION_VDWEXPREP_VDWDISP,
386     GMX_TABLE_INTERACTION_VDWDISP,
387     GMX_TABLE_INTERACTION_ELEC_VDWREP_VDWDISP,
388     GMX_TABLE_INTERACTION_ELEC_VDWEXPREP_VDWDISP,
389     GMX_TABLE_INTERACTION_ELEC_VDWDISP,
390     GMX_TABLE_INTERACTION_NR
391 };
392
393 /* Different formats for table data. Cubic spline tables are typically stored
394  * with the four Y,F,G,H intermediate values (check tables.c for format), which
395  * makes it easy to load with a single 4-way SIMD instruction too.
396  * Linear tables only need one value per table point, or two if both V and F
397  * are calculated. However, with SIMD instructions this makes the loads unaligned,
398  * and in that case we store the data as F, D=F(i+1)-F(i), V, and then a blank value,
399  * which again makes it possible to load as a single instruction.
400  */
401 enum gmx_table_format
402 {
403     GMX_TABLE_FORMAT_CUBICSPLINE_YFGH,
404     GMX_TABLE_FORMAT_LINEAR_VF,
405     GMX_TABLE_FORMAT_LINEAR_V,
406     GMX_TABLE_FORMAT_LINEAR_F,
407     GMX_TABLE_FORMAT_LINEAR_FDV0,
408     GMX_TABLE_FORMAT_NR
409 };
410
411 /* Neighborlist geometry type.
412  * Kernels will compute interactions between two particles,
413  * 3-center water, 4-center water or coarse-grained beads.
414  */
415 enum gmx_nblist_kernel_geometry
416 {
417     GMX_NBLIST_GEOMETRY_PARTICLE_PARTICLE,
418     GMX_NBLIST_GEOMETRY_WATER3_PARTICLE,
419     GMX_NBLIST_GEOMETRY_WATER3_WATER3,
420     GMX_NBLIST_GEOMETRY_WATER4_PARTICLE,
421     GMX_NBLIST_GEOMETRY_WATER4_WATER4,
422     GMX_NBLIST_GEOMETRY_CG_CG,
423     GMX_NBLIST_GEOMETRY_NR
424 };
425
426 /* Types of electrostatics calculations available inside nonbonded kernels.
427  * Note that these do NOT necessarily correspond to the user selections in the MDP file;
428  * many interactions for instance map to tabulated kernels.
429  */
430 enum gmx_nbkernel_elec
431 {
432     GMX_NBKERNEL_ELEC_NONE,
433     GMX_NBKERNEL_ELEC_COULOMB,
434     GMX_NBKERNEL_ELEC_REACTIONFIELD,
435     GMX_NBKERNEL_ELEC_CUBICSPLINETABLE,
436     GMX_NBKERNEL_ELEC_GENERALIZEDBORN,
437     GMX_NBKERNEL_ELEC_EWALD,
438     GMX_NBKERNEL_ELEC_NR
439 };
440
441 /* Types of vdw calculations available inside nonbonded kernels.
442  * Note that these do NOT necessarily correspond to the user selections in the MDP file;
443  * many interactions for instance map to tabulated kernels.
444  */
445 enum gmx_nbkernel_vdw
446 {
447     GMX_NBKERNEL_VDW_NONE,
448     GMX_NBKERNEL_VDW_LENNARDJONES,
449     GMX_NBKERNEL_VDW_BUCKINGHAM,
450     GMX_NBKERNEL_VDW_CUBICSPLINETABLE,
451     GMX_NBKERNEL_VDW_NR
452 };
453 /* Types of interactions inside the neighborlist
454  */
455 enum gmx_nblist_interaction_type
456 {
457     GMX_NBLIST_INTERACTION_STANDARD,
458     GMX_NBLIST_INTERACTION_FREE_ENERGY,
459     GMX_NBLIST_INTERACTION_ADRESS,
460     GMX_NBLIST_INTERACTION_NR
461 };
462
463 #ifdef __cplusplus
464 }
465 #endif
466
467 #endif /* ENUMS_H_ */